diff --git a/Makefile b/Makefile index 0e6e2c63..49ef29b8 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,10 @@ all: clone-injective-indexer: - git clone https://github.com/InjectiveLabs/injective-indexer.git -b v1.17.16 --depth 1 --single-branch + git clone https://github.com/InjectiveLabs/injective-indexer.git -b v1.18.3 --depth 1 --single-branch clone-injective-core: - git clone https://github.com/InjectiveLabs/injective-core.git -b v1.17.0 --depth 1 --single-branch + git clone https://github.com/InjectiveLabs/injective-core.git -b v1.18.0 --depth 1 --single-branch copy-exchange-client: clone-injective-indexer rm -rf exchange/* @@ -104,11 +104,11 @@ copy-chain-types: clone-injective-core cp injective-core/injective-chain/modules/oracle/types/oracle.go chain/oracle/types && \ cp injective-core/injective-chain/modules/oracle/types/params.go chain/oracle/types && \ cp injective-core/injective-chain/modules/oracle/types/proposal.go chain/oracle/types && \ - cp injective-core/injective-chain/modules/oracle/types/stork_oracle.go chain/oracle/types && \ - cp -r injective-core/injective-chain/modules/oracle/bandchain chain/oracle + cp injective-core/injective-chain/modules/oracle/types/stork_oracle.go chain/oracle/types mkdir -p chain/peggy/types && \ cp injective-core/injective-chain/modules/peggy/types/*.pb.go chain/peggy/types && \ cp injective-core/injective-chain/modules/peggy/types/abi_json.go chain/peggy/types && \ + cp injective-core/injective-chain/modules/peggy/types/batch.go chain/peggy/types && \ cp injective-core/injective-chain/modules/peggy/types/codec.go chain/peggy/types && \ cp injective-core/injective-chain/modules/peggy/types/ethereum.go chain/peggy/types && \ cp injective-core/injective-chain/modules/peggy/types/ethereum_signer.go chain/peggy/types && \ @@ -206,9 +206,9 @@ extract-message-names: # done tests: - go test -race ./client/... ./ethereum/... + go clean -testcache && go test -race ./client/... ./ethereum/... coverage: - go test -race -coverprofile=coverage.out -covermode=atomic ./client/... ./ethereum/... + go clean -testcache && go test -race -coverprofile=coverage.out -covermode=atomic ./client/... ./ethereum/... lint: export GOPROXY=direct lint: diff --git a/NOTICE.md b/NOTICE.md index 9e73b26c..6c764188 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -1,4 +1,4 @@ -Copyright © 2020 - 2022 Injective Labs Inc. (https://injectivelabs.org/) +Copyright © 2020 - 2026 Injective Labs Inc. (https://injectivelabs.org/) diff --git a/README.md b/README.md index c07d3721..10fa8aa5 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,7 @@ Reach out to us at one of the following places! ## License -Copyright © 2020 - 2025 Injective Labs Inc. (https://injectivelabs.org/) +Copyright © 2020 - 2026 Injective Labs Inc. (https://injectivelabs.org/) diff --git a/chain/evm/precompiles/bank/fixed_supply_bank_erc20.abigen.go b/chain/evm/precompiles/bank/fixed_supply_bank_erc20.abigen.go index 9cc00e26..950ebe09 100644 --- a/chain/evm/precompiles/bank/fixed_supply_bank_erc20.abigen.go +++ b/chain/evm/precompiles/bank/fixed_supply_bank_erc20.abigen.go @@ -31,8 +31,8 @@ var ( // FixedSupplyBankERC20MetaData contains all meta data concerning the FixedSupplyBankERC20 contract. var FixedSupplyBankERC20MetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"initial_supply_\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052606460055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405162001f3f38038062001f3f83398181016040528101906200006a9190620006ca565b83838360405180602001604052805f81525060405180602001604052805f81525081600390816200009c9190620009a5565b508060049081620000ae9190620009a5565b50505060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337d2c2f48484846040518463ffffffff1660e01b8152600401620001119392919062000aea565b6020604051808303815f875af11580156200012e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000154919062000b6d565b505050505f81111562000174576200017333826200017e60201b60201c565b5b5050505062000c8d565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620001f1575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620001e8919062000be0565b60405180910390fd5b620002045f83836200020860201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620002e45760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b81526004016200029a92919062000c0c565b6020604051808303815f875af1158015620002b7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002dd919062000b6d565b5062000466565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620003c05760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac84836040518363ffffffff1660e01b81526004016200037692919062000c0c565b6020604051808303815f875af115801562000393573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003b9919062000b6d565b5062000465565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88484846040518463ffffffff1660e01b8152600401620004209392919062000c37565b6020604051808303815f875af11580156200043d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000463919062000b6d565b505b5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004c5919062000c72565b60405180910390a3505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200053382620004eb565b810181811067ffffffffffffffff82111715620005555762000554620004fb565b5b80604052505050565b5f62000569620004d2565b905062000577828262000528565b919050565b5f67ffffffffffffffff821115620005995762000598620004fb565b5b620005a482620004eb565b9050602081019050919050565b5f5b83811015620005d0578082015181840152602081019050620005b3565b5f8484015250505050565b5f620005f1620005eb846200057c565b6200055e565b90508281526020810184848401111562000610576200060f620004e7565b5b6200061d848285620005b1565b509392505050565b5f82601f8301126200063c576200063b620004e3565b5b81516200064e848260208601620005db565b91505092915050565b5f60ff82169050919050565b6200066e8162000657565b811462000679575f80fd5b50565b5f815190506200068c8162000663565b92915050565b5f819050919050565b620006a68162000692565b8114620006b1575f80fd5b50565b5f81519050620006c4816200069b565b92915050565b5f805f8060808587031215620006e557620006e4620004db565b5b5f85015167ffffffffffffffff811115620007055762000704620004df565b5b620007138782880162000625565b945050602085015167ffffffffffffffff811115620007375762000736620004df565b5b620007458782880162000625565b935050604062000758878288016200067c565b92505060606200076b87828801620006b4565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620007c657607f821691505b602082108103620007dc57620007db62000781565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620008407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000803565b6200084c868362000803565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6200088d62000887620008818462000692565b62000864565b62000692565b9050919050565b5f819050919050565b620008a8836200086d565b620008c0620008b78262000894565b8484546200080f565b825550505050565b5f90565b620008d6620008c8565b620008e38184846200089d565b505050565b5b818110156200090a57620008fe5f82620008cc565b600181019050620008e9565b5050565b601f82111562000959576200092381620007e2565b6200092e84620007f4565b810160208510156200093e578190505b620009566200094d85620007f4565b830182620008e8565b50505b505050565b5f82821c905092915050565b5f6200097b5f19846008026200095e565b1980831691505092915050565b5f6200099583836200096a565b9150826002028217905092915050565b620009b08262000777565b67ffffffffffffffff811115620009cc57620009cb620004fb565b5b620009d88254620007ae565b620009e58282856200090e565b5f60209050601f83116001811462000a1b575f841562000a06578287015190505b62000a12858262000988565b86555062000a81565b601f19841662000a2b86620007e2565b5f5b8281101562000a545784890151825560018201915060208501945060208101905062000a2d565b8683101562000a74578489015162000a70601f8916826200096a565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b5f62000aa58262000777565b62000ab1818562000a89565b935062000ac3818560208601620005b1565b62000ace81620004eb565b840191505092915050565b62000ae48162000657565b82525050565b5f6060820190508181035f83015262000b04818662000a99565b9050818103602083015262000b1a818562000a99565b905062000b2b604083018462000ad9565b949350505050565b5f8115159050919050565b62000b498162000b33565b811462000b54575f80fd5b50565b5f8151905062000b678162000b3e565b92915050565b5f6020828403121562000b855762000b84620004db565b5b5f62000b948482850162000b57565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000bc88262000b9d565b9050919050565b62000bda8162000bbc565b82525050565b5f60208201905062000bf55f83018462000bcf565b92915050565b62000c068162000692565b82525050565b5f60408201905062000c215f83018562000bcf565b62000c30602083018462000bfb565b9392505050565b5f60608201905062000c4c5f83018662000bcf565b62000c5b602083018562000bcf565b62000c6a604083018462000bfb565b949350505050565b5f60208201905062000c875f83018462000bfb565b92915050565b6112a48062000c9b5f395ff3fe608060405234801561000f575f80fd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f80fd5b61009d6101fd565b6040516100aa9190610ce6565b60405180910390f35b6100cd60048036038101906100c89190610da4565b6102aa565b6040516100da9190610dfc565b60405180910390f35b6100eb6102cc565b6040516100f89190610e24565b60405180910390f35b61011b60048036038101906101169190610e3d565b61036b565b6040516101289190610dfc565b60405180910390f35b610139610399565b6040516101469190610ea8565b60405180910390f35b61016960048036038101906101649190610ec1565b610447565b6040516101769190610e24565b60405180910390f35b6101876104ea565b6040516101949190610ce6565b60405180910390f35b6101b760048036038101906101b29190610da4565b610598565b6040516101c49190610dfc565b60405180910390f35b6101e760048036038101906101e29190610eec565b6105ba565b6040516101f49190610e24565b60405180910390f35b60608060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ba21572306040518263ffffffff1660e01b815260040161025a9190610f39565b5f60405180830381865afa158015610274573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061029c919061109a565b905050809150508091505090565b5f806102b461063c565b90506102c1818585610643565b600191505092915050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4dc2aa4306040518263ffffffff1660e01b81526004016103279190610f39565b602060405180830381865afa158015610342573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103669190611136565b905090565b5f8061037561063c565b9050610382858285610655565b61038d8585856106e8565b60019150509392505050565b5f8060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ba21572306040518263ffffffff1660e01b81526004016103f59190610f39565b5f60405180830381865afa15801561040f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610437919061109a565b9091509050809150508091505090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7888aec30846040518363ffffffff1660e01b81526004016104a4929190611161565b602060405180830381865afa1580156104bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190611136565b9050919050565b60608060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ba21572306040518263ffffffff1660e01b81526004016105479190610f39565b5f60405180830381865afa158015610561573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610589919061109a565b90915050809150508091505090565b5f806105a261063c565b90506105af8185856106e8565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b61065083838360016107d8565b505050565b5f61066084846105ba565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156106e257818110156106d3578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016106ca93929190611188565b60405180910390fd5b6106e184848484035f6107d8565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610758575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161074f9190610f39565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107c8575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107bf9190610f39565b60405180910390fd5b6107d38383836109a7565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610848575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161083f9190610f39565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108b8575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016108af9190610f39565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156109a1578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109989190610e24565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a7c5760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401610a369291906111bd565b6020604051808303815f875af1158015610a52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a76919061120e565b50610bf2565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b515760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac84836040518363ffffffff1660e01b8152600401610b0b9291906111bd565b6020604051808303815f875af1158015610b27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4b919061120e565b50610bf1565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88484846040518463ffffffff1660e01b8152600401610baf93929190611239565b6020604051808303815f875af1158015610bcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bef919061120e565b505b5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c4f9190610e24565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610c93578082015181840152602081019050610c78565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610cb882610c5c565b610cc28185610c66565b9350610cd2818560208601610c76565b610cdb81610c9e565b840191505092915050565b5f6020820190508181035f830152610cfe8184610cae565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610d4082610d17565b9050919050565b610d5081610d36565b8114610d5a575f80fd5b50565b5f81359050610d6b81610d47565b92915050565b5f819050919050565b610d8381610d71565b8114610d8d575f80fd5b50565b5f81359050610d9e81610d7a565b92915050565b5f8060408385031215610dba57610db9610d0f565b5b5f610dc785828601610d5d565b9250506020610dd885828601610d90565b9150509250929050565b5f8115159050919050565b610df681610de2565b82525050565b5f602082019050610e0f5f830184610ded565b92915050565b610e1e81610d71565b82525050565b5f602082019050610e375f830184610e15565b92915050565b5f805f60608486031215610e5457610e53610d0f565b5b5f610e6186828701610d5d565b9350506020610e7286828701610d5d565b9250506040610e8386828701610d90565b9150509250925092565b5f60ff82169050919050565b610ea281610e8d565b82525050565b5f602082019050610ebb5f830184610e99565b92915050565b5f60208284031215610ed657610ed5610d0f565b5b5f610ee384828501610d5d565b91505092915050565b5f8060408385031215610f0257610f01610d0f565b5b5f610f0f85828601610d5d565b9250506020610f2085828601610d5d565b9150509250929050565b610f3381610d36565b82525050565b5f602082019050610f4c5f830184610f2a565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610f9082610c9e565b810181811067ffffffffffffffff82111715610faf57610fae610f5a565b5b80604052505050565b5f610fc1610d06565b9050610fcd8282610f87565b919050565b5f67ffffffffffffffff821115610fec57610feb610f5a565b5b610ff582610c9e565b9050602081019050919050565b5f61101461100f84610fd2565b610fb8565b9050828152602081018484840111156110305761102f610f56565b5b61103b848285610c76565b509392505050565b5f82601f83011261105757611056610f52565b5b8151611067848260208601611002565b91505092915050565b61107981610e8d565b8114611083575f80fd5b50565b5f8151905061109481611070565b92915050565b5f805f606084860312156110b1576110b0610d0f565b5b5f84015167ffffffffffffffff8111156110ce576110cd610d13565b5b6110da86828701611043565b935050602084015167ffffffffffffffff8111156110fb576110fa610d13565b5b61110786828701611043565b925050604061111886828701611086565b9150509250925092565b5f8151905061113081610d7a565b92915050565b5f6020828403121561114b5761114a610d0f565b5b5f61115884828501611122565b91505092915050565b5f6040820190506111745f830185610f2a565b6111816020830184610f2a565b9392505050565b5f60608201905061119b5f830186610f2a565b6111a86020830185610e15565b6111b56040830184610e15565b949350505050565b5f6040820190506111d05f830185610f2a565b6111dd6020830184610e15565b9392505050565b6111ed81610de2565b81146111f7575f80fd5b50565b5f81519050611208816111e4565b92915050565b5f6020828403121561122357611222610d0f565b5b5f611230848285016111fa565b91505092915050565b5f60608201905061124c5f830186610f2a565b6112596020830185610f2a565b6112666040830184610e15565b94935050505056fea2646970667358221220f46d089a4318bb946632ecd6859aaafd21c001203190b421f595ecd0e45f0f8b64736f6c63430008180033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"initial_supply_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"allowance\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approve\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"name\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"symbol\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferFrom\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Approval\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Failure\",\"inputs\":[{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Transfer\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ERC20InsufficientAllowance\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allowance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"needed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"ERC20InsufficientBalance\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"balance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"needed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidApprover\",\"inputs\":[{\"name\":\"approver\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidSender\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidSpender\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"}]}]", + Bin: "0x60806040819052600580546001600160a01b031916606417905561143d38819003908190833981016040819052610035916104ac565b83838360405180602001604052805f81525060405180602001604052805f815250816003908161006591906105b3565b50600461007282826105b3565b5050505f8351118061008457505f8251115b8061009157505f8160ff16115b1561010c57600554604051630df4b0bd60e21b81526001600160a01b03909116906337d2c2f4906100ca90869086908690600401610698565b6020604051808303815f875af11580156100e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061010a91906106d0565b505b505081159050610120576101203382610129565b5050505061081e565b6001600160a01b0382166101575760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b6101625f8383610166565b5050565b6001600160a01b03831661028c576005546040516340c10f1960e01b81526001600160a01b03848116600483015260248201849052909116906340c10f19906044016020604051808303815f875af19250505080156101e2575060408051601f3d908101601f191682019092526101df918101906106d0565b60015b610286576101ee6106f6565b806308c379a003610244575061020261070f565b8061020d5750610246565b8060405160200161021e9190610791565b60408051601f198184030181529082905262461bcd60e51b825261014e916004016107c8565b505b3d80801561026f576040519150601f19603f3d011682016040523d82523d5f602084013e610274565b606091505b508060405160200161021e91906107da565b5061038c565b6001600160a01b03821661030e57600554604051632770a7eb60e21b81526001600160a01b0385811660048301526024820184905290911690639dc29fac906044016020604051808303815f875af11580156102ea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028691906106d0565b6005546040516317d5759960e31b81526001600160a01b0385811660048301528481166024830152604482018490529091169063beabacc8906064016020604051808303815f875af1158015610366573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061038a91906106d0565b505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516103d191815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b0381118282101715610417576104176103de565b6040525050565b5f5b83811015610438578181015183820152602001610420565b50505f910152565b5f82601f83011261044f575f5ffd5b81516001600160401b03811115610468576104686103de565b60405161047f601f8301601f1916602001826103f2565b818152846020838601011115610493575f5ffd5b6104a482602083016020870161041e565b949350505050565b5f5f5f5f608085870312156104bf575f5ffd5b84516001600160401b038111156104d4575f5ffd5b6104e087828801610440565b602087015190955090506001600160401b038111156104fd575f5ffd5b61050987828801610440565b935050604085015160ff8116811461051f575f5ffd5b6060959095015193969295505050565b600181811c9082168061054357607f821691505b60208210810361056157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156105ae57805f5260205f20601f840160051c8101602085101561058c5750805b601f840160051c820191505b818110156105ab575f8155600101610598565b50505b505050565b81516001600160401b038111156105cc576105cc6103de565b6105e0816105da845461052f565b84610567565b6020601f821160018114610612575f83156105fb5750848201515b5f19600385901b1c1916600184901b1784556105ab565b5f84815260208120601f198516915b828110156106415787850151825560209485019460019092019101610621565b508482101561065e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f815180845261068481602086016020860161041e565b601f01601f19169290920160200192915050565b606081525f6106aa606083018661066d565b82810360208401526106bc818661066d565b91505060ff83166040830152949350505050565b5f602082840312156106e0575f5ffd5b815180151581146106ef575f5ffd5b9392505050565b5f60033d111561070c5760045f5f3e505f5160e01c5b90565b5f60443d101561071c5790565b6040513d600319016004823e80516001600160401b0381113d6024830111171561074557505090565b81810180516001600160401b03811115610760575050505090565b3d840160031901828201602001111561077a575050505090565b610789602082850101856103f2565b509392505050565b6f03330b4b632b2103a379036b4b73a1d160851b81525f82516107bb81601085016020870161041e565b9190910160100192915050565b602081525f6106ef602083018461066d565b7f6661696c656420746f206d696e743a20756e6b6e6f776e206572726f723a200081525f825161081181601f85016020870161041e565b91909101601f0192915050565b610c128061082b5f395ff3fe608060405234801561000f575f5ffd5b5060043610610090575f3560e01c8063313ce56711610063578063313ce567146100fe57806370a082311461011857806395d89b411461012b578063a9059cbb14610133578063dd62ed3e14610146575f5ffd5b806306fdde0314610094578063095ea7b3146100b257806318160ddd146100d557806323b872dd146100eb575b5f5ffd5b61009c61017e565b6040516100a99190610873565b60405180910390f35b6100c56100c03660046108c0565b6101f8565b60405190151581526020016100a9565b6100dd61020f565b6040519081526020016100a9565b6100c56100f93660046108e8565b61027e565b6101066102a1565b60405160ff90911681526020016100a9565b6100dd610126366004610922565b610319565b61009c610391565b6100c56101413660046108c0565b61040a565b6100dd610154366004610942565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6005546040516315d10ab960e11b815230600482015260609182916001600160a01b0390911690632ba21572906024015f60405180830381865afa1580156101c8573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101ef9190810190610a19565b50909392505050565b5f33610205818585610417565b5060019392505050565b6005546040516339370aa960e21b81523060048201525f916001600160a01b03169063e4dc2aa490602401602060405180830381865afa158015610255573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102799190610a96565b905090565b5f3361028b858285610429565b6102968585856104aa565b506001949350505050565b6005546040516315d10ab960e11b81523060048201525f9182916001600160a01b0390911690632ba21572906024015f60405180830381865afa1580156102ea573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526103119190810190610a19565b949350505050565b600554604051633de222bb60e21b81523060048201526001600160a01b0383811660248301525f92169063f7888aec90604401602060405180830381865afa158015610367573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061038b9190610a96565b92915050565b6005546040516315d10ab960e11b815230600482015260609182916001600160a01b0390911690632ba21572906024015f60405180830381865afa1580156103db573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526104029190810190610a19565b509392505050565b5f336102058185856104aa565b6104248383836001610507565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198110156104a4578181101561049657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b6104a484848484035f610507565b50505050565b6001600160a01b0383166104d357604051634b637e8f60e11b81525f600482015260240161048d565b6001600160a01b0382166104fc5760405163ec442f0560e01b81525f600482015260240161048d565b6104248383836105d9565b6001600160a01b0384166105305760405163e602df0560e01b81525f600482015260240161048d565b6001600160a01b03831661055957604051634a1406b160e11b81525f600482015260240161048d565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156104a457826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105cb91815260200190565b60405180910390a350505050565b6001600160a01b0383166106ff576005546040516340c10f1960e01b81526001600160a01b03848116600483015260248201849052909116906340c10f19906044016020604051808303815f875af1925050508015610655575060408051601f3d908101601f1916820190925261065291810190610aad565b60015b6106f957610661610acc565b806308c379a0036106b75750610675610ae5565b8061068057506106b9565b806040516020016106919190610b61565b60408051601f198184030181529082905262461bcd60e51b825261048d91600401610873565b505b3d8080156106e2576040519150601f19603f3d011682016040523d82523d5f602084013e6106e7565b606091505b50806040516020016106919190610b98565b506107ff565b6001600160a01b03821661078157600554604051632770a7eb60e21b81526001600160a01b0385811660048301526024820184905290911690639dc29fac906044016020604051808303815f875af115801561075d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f99190610aad565b6005546040516317d5759960e31b81526001600160a01b0385811660048301528481166024830152604482018490529091169063beabacc8906064016020604051808303815f875af11580156107d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107fd9190610aad565b505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161084491815260200190565b60405180910390a3505050565b5f5b8381101561086b578181015183820152602001610853565b50505f910152565b602081525f8251806020840152610891816040850160208701610851565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146108bb575f5ffd5b919050565b5f5f604083850312156108d1575f5ffd5b6108da836108a5565b946020939093013593505050565b5f5f5f606084860312156108fa575f5ffd5b610903846108a5565b9250610911602085016108a5565b929592945050506040919091013590565b5f60208284031215610932575f5ffd5b61093b826108a5565b9392505050565b5f5f60408385031215610953575f5ffd5b61095c836108a5565b915061096a602084016108a5565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f1916810167ffffffffffffffff811182821017156109ad576109ad610973565b6040525050565b5f82601f8301126109c3575f5ffd5b815167ffffffffffffffff8111156109dd576109dd610973565b6040516109f4601f8301601f191660200182610987565b818152846020838601011115610a08575f5ffd5b610311826020830160208701610851565b5f5f5f60608486031215610a2b575f5ffd5b835167ffffffffffffffff811115610a41575f5ffd5b610a4d868287016109b4565b935050602084015167ffffffffffffffff811115610a69575f5ffd5b610a75868287016109b4565b925050604084015160ff81168114610a8b575f5ffd5b809150509250925092565b5f60208284031215610aa6575f5ffd5b5051919050565b5f60208284031215610abd575f5ffd5b8151801515811461093b575f5ffd5b5f60033d1115610ae25760045f5f3e505f5160e01c5b90565b5f60443d1015610af25790565b6040513d600319016004823e80513d602482011167ffffffffffffffff82111715610b1c57505090565b808201805167ffffffffffffffff811115610b38575050505090565b3d8401600319018282016020011115610b52575050505090565b61040260208285010185610987565b6f03330b4b632b2103a379036b4b73a1d160851b81525f8251610b8b816010850160208701610851565b9190910160100192915050565b7f6661696c656420746f206d696e743a20756e6b6e6f776e206572726f723a200081525f8251610bcf81601f850160208701610851565b91909101601f019291505056fea2646970667358221220700a7c6e315d053531301f75f3f482db54f371f66e2d6d558a3b367b17af6b8164736f6c634300081e0033", } // FixedSupplyBankERC20ABI is the input ABI used to generate the binding from. @@ -605,6 +605,141 @@ func (_FixedSupplyBankERC20 *FixedSupplyBankERC20Filterer) ParseApproval(log typ return event, nil } +// FixedSupplyBankERC20FailureIterator is returned from FilterFailure and is used to iterate over the raw logs and unpacked data for Failure events raised by the FixedSupplyBankERC20 contract. +type FixedSupplyBankERC20FailureIterator struct { + Event *FixedSupplyBankERC20Failure // 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 *FixedSupplyBankERC20FailureIterator) 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(FixedSupplyBankERC20Failure) + 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(FixedSupplyBankERC20Failure) + 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 *FixedSupplyBankERC20FailureIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *FixedSupplyBankERC20FailureIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// FixedSupplyBankERC20Failure represents a Failure event raised by the FixedSupplyBankERC20 contract. +type FixedSupplyBankERC20Failure struct { + Message string + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFailure is a free log retrieval operation binding the contract event 0x66c9257b5635d9c11609ab746e0972276ff2412ab2085de9630ecb2300a019a6. +// +// Solidity: event Failure(string message, bytes data) +func (_FixedSupplyBankERC20 *FixedSupplyBankERC20Filterer) FilterFailure(opts *bind.FilterOpts) (*FixedSupplyBankERC20FailureIterator, error) { + + logs, sub, err := _FixedSupplyBankERC20.contract.FilterLogs(opts, "Failure") + if err != nil { + return nil, err + } + return &FixedSupplyBankERC20FailureIterator{contract: _FixedSupplyBankERC20.contract, event: "Failure", logs: logs, sub: sub}, nil +} + +// WatchFailure is a free log subscription operation binding the contract event 0x66c9257b5635d9c11609ab746e0972276ff2412ab2085de9630ecb2300a019a6. +// +// Solidity: event Failure(string message, bytes data) +func (_FixedSupplyBankERC20 *FixedSupplyBankERC20Filterer) WatchFailure(opts *bind.WatchOpts, sink chan<- *FixedSupplyBankERC20Failure) (event.Subscription, error) { + + logs, sub, err := _FixedSupplyBankERC20.contract.WatchLogs(opts, "Failure") + 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(FixedSupplyBankERC20Failure) + if err := _FixedSupplyBankERC20.contract.UnpackLog(event, "Failure", 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 +} + +// ParseFailure is a log parse operation binding the contract event 0x66c9257b5635d9c11609ab746e0972276ff2412ab2085de9630ecb2300a019a6. +// +// Solidity: event Failure(string message, bytes data) +func (_FixedSupplyBankERC20 *FixedSupplyBankERC20Filterer) ParseFailure(log types.Log) (*FixedSupplyBankERC20Failure, error) { + event := new(FixedSupplyBankERC20Failure) + if err := _FixedSupplyBankERC20.contract.UnpackLog(event, "Failure", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // FixedSupplyBankERC20TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the FixedSupplyBankERC20 contract. type FixedSupplyBankERC20TransferIterator struct { Event *FixedSupplyBankERC20Transfer // Event containing the contract specifics and raw log diff --git a/chain/evm/precompiles/bank/i_bank_module.abigen.go b/chain/evm/precompiles/bank/i_bank_module.abigen.go index 756f9ecc..c6ba88d6 100644 --- a/chain/evm/precompiles/bank/i_bank_module.abigen.go +++ b/chain/evm/precompiles/bank/i_bank_module.abigen.go @@ -31,7 +31,7 @@ var ( // BankModuleMetaData contains all meta data concerning the BankModule contract. var BankModuleMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"metadata\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"setMetadata\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burn\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"metadata\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"mint\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"setMetadata\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"totalSupply\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"payable\"}]", } // BankModuleABI is the input ABI used to generate the binding from. diff --git a/chain/evm/precompiles/bank/mint_burn_bank_erc20.abigen.go b/chain/evm/precompiles/bank/mint_burn_bank_erc20.abigen.go index e20f4b5f..4cea7dca 100644 --- a/chain/evm/precompiles/bank/mint_burn_bank_erc20.abigen.go +++ b/chain/evm/precompiles/bank/mint_burn_bank_erc20.abigen.go @@ -31,8 +31,8 @@ var ( // MintBurnBankERC20MetaData contains all meta data concerning the MintBurnBankERC20 contract. var MintBurnBankERC20MetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052606460065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620021933803806200219383398181016040528101906200006a9190620004ca565b82828260405180602001604052805f81525060405180602001604052805f815250885f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000ff575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000f6919062000588565b60405180910390fd5b6200011081620001e860201b60201c565b508160049081620001229190620007da565b508060059081620001349190620007da565b50505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337d2c2f48484846040518463ffffffff1660e01b815260040162000197939291906200091f565b6020604051808303815f875af1158015620001b4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001da9190620009a2565b5050505050505050620009d2565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620002e582620002ba565b9050919050565b620002f781620002d9565b811462000302575f80fd5b50565b5f815190506200031581620002ec565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200036b8262000323565b810181811067ffffffffffffffff821117156200038d576200038c62000333565b5b80604052505050565b5f620003a1620002a9565b9050620003af828262000360565b919050565b5f67ffffffffffffffff821115620003d157620003d062000333565b5b620003dc8262000323565b9050602081019050919050565b5f5b8381101562000408578082015181840152602081019050620003eb565b5f8484015250505050565b5f620004296200042384620003b4565b62000396565b9050828152602081018484840111156200044857620004476200031f565b5b62000455848285620003e9565b509392505050565b5f82601f8301126200047457620004736200031b565b5b81516200048684826020860162000413565b91505092915050565b5f60ff82169050919050565b620004a6816200048f565b8114620004b1575f80fd5b50565b5f81519050620004c4816200049b565b92915050565b5f805f8060808587031215620004e557620004e4620002b2565b5b5f620004f48782880162000305565b945050602085015167ffffffffffffffff811115620005185762000517620002b6565b5b62000526878288016200045d565b935050604085015167ffffffffffffffff8111156200054a5762000549620002b6565b5b62000558878288016200045d565b92505060606200056b87828801620004b4565b91505092959194509250565b6200058281620002d9565b82525050565b5f6020820190506200059d5f83018462000577565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620005f257607f821691505b602082108103620006085762000607620005ad565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200066c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200062f565b6200067886836200062f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620006c2620006bc620006b68462000690565b62000699565b62000690565b9050919050565b5f819050919050565b620006dd83620006a2565b620006f5620006ec82620006c9565b8484546200063b565b825550505050565b5f90565b6200070b620006fd565b62000718818484620006d2565b505050565b5b818110156200073f57620007335f8262000701565b6001810190506200071e565b5050565b601f8211156200078e5762000758816200060e565b620007638462000620565b8101602085101562000773578190505b6200078b620007828562000620565b8301826200071d565b50505b505050565b5f82821c905092915050565b5f620007b05f198460080262000793565b1980831691505092915050565b5f620007ca83836200079f565b9150826002028217905092915050565b620007e582620005a3565b67ffffffffffffffff81111562000801576200080062000333565b5b6200080d8254620005da565b6200081a82828562000743565b5f60209050601f83116001811462000850575f84156200083b578287015190505b620008478582620007bd565b865550620008b6565b601f19841662000860866200060e565b5f5b82811015620008895784890151825560018201915060208501945060208101905062000862565b86831015620008a95784890151620008a5601f8916826200079f565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b5f620008da82620005a3565b620008e68185620008be565b9350620008f8818560208601620003e9565b620009038162000323565b840191505092915050565b62000919816200048f565b82525050565b5f6060820190508181035f830152620009398186620008ce565b905081810360208301526200094f8185620008ce565b90506200096060408301846200090e565b949350505050565b5f8115159050919050565b6200097e8162000968565b811462000989575f80fd5b50565b5f815190506200099c8162000973565b92915050565b5f60208284031215620009ba57620009b9620002b2565b5b5f620009c9848285016200098c565b91505092915050565b6117b380620009e05f395ff3fe6080604052600436106100e7575f3560e01c806370a082311161008957806395d89b411161005857806395d89b41146102c9578063a9059cbb146102f3578063dd62ed3e1461032f578063f2fde38b1461036b576100e7565b806370a0823114610225578063715018a61461026157806379cc6790146102775780638da5cb5b1461029f576100e7565b806323b872dd116100c557806323b872dd1461017b578063313ce567146101b757806340c10f19146101e157806342966c68146101fd576100e7565b806306fdde03146100eb578063095ea7b31461011557806318160ddd14610151575b5f80fd5b3480156100f6575f80fd5b506100ff610393565b60405161010c91906111ca565b60405180910390f35b348015610120575f80fd5b5061013b60048036038101906101369190611288565b610440565b60405161014891906112e0565b60405180910390f35b34801561015c575f80fd5b50610165610462565b6040516101729190611308565b60405180910390f35b348015610186575f80fd5b506101a1600480360381019061019c9190611321565b610501565b6040516101ae91906112e0565b60405180910390f35b3480156101c2575f80fd5b506101cb61052f565b6040516101d8919061138c565b60405180910390f35b6101fb60048036038101906101f69190611288565b6105dd565b005b348015610208575f80fd5b50610223600480360381019061021e91906113a5565b6105f3565b005b348015610230575f80fd5b5061024b600480360381019061024691906113d0565b610607565b6040516102589190611308565b60405180910390f35b34801561026c575f80fd5b506102756106aa565b005b348015610282575f80fd5b5061029d60048036038101906102989190611288565b6106bd565b005b3480156102aa575f80fd5b506102b36106dd565b6040516102c0919061140a565b60405180910390f35b3480156102d4575f80fd5b506102dd610704565b6040516102ea91906111ca565b60405180910390f35b3480156102fe575f80fd5b5061031960048036038101906103149190611288565b6107b2565b60405161032691906112e0565b60405180910390f35b34801561033a575f80fd5b5061035560048036038101906103509190611423565b6107d4565b6040516103629190611308565b60405180910390f35b348015610376575f80fd5b50610391600480360381019061038c91906113d0565b610856565b005b60608060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ba21572306040518263ffffffff1660e01b81526004016103f0919061140a565b5f60405180830381865afa15801561040a573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061043291906115a9565b905050809150508091505090565b5f8061044a6108da565b90506104578185856108e1565b600191505092915050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4dc2aa4306040518263ffffffff1660e01b81526004016104bd919061140a565b602060405180830381865afa1580156104d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fc9190611645565b905090565b5f8061050b6108da565b90506105188582856108f3565b610523858585610986565b60019150509392505050565b5f8060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ba21572306040518263ffffffff1660e01b815260040161058b919061140a565b5f60405180830381865afa1580156105a5573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906105cd91906115a9565b9091509050809150508091505090565b6105e5610a76565b6105ef8282610afd565b5050565b6106046105fe6108da565b82610b7c565b50565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7888aec30846040518363ffffffff1660e01b8152600401610664929190611670565b602060405180830381865afa15801561067f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a39190611645565b9050919050565b6106b2610a76565b6106bb5f610bfb565b565b6106cf826106c96108da565b836108f3565b6106d98282610b7c565b5050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60608060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ba21572306040518263ffffffff1660e01b8152600401610761919061140a565b5f60405180830381865afa15801561077b573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906107a391906115a9565b90915050809150508091505090565b5f806107bc6108da565b90506107c9818585610986565b600191505092915050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61085e610a76565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108ce575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016108c5919061140a565b60405180910390fd5b6108d781610bfb565b50565b5f33905090565b6108ee8383836001610cbc565b505050565b5f6108fe84846107d4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156109805781811015610971578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161096893929190611697565b60405180910390fd5b61097f84848484035f610cbc565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109f6575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016109ed919061140a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a66575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a5d919061140a565b60405180910390fd5b610a71838383610e8b565b505050565b610a7e6108da565b73ffffffffffffffffffffffffffffffffffffffff16610a9c6106dd565b73ffffffffffffffffffffffffffffffffffffffff1614610afb57610abf6108da565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610af2919061140a565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b6d575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610b64919061140a565b60405180910390fd5b610b785f8383610e8b565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bec575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610be3919061140a565b60405180910390fd5b610bf7825f83610e8b565b5050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d2c575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610d23919061140a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d9c575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610d93919061140a565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610e85578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e7c9190611308565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f605760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401610f1a9291906116cc565b6020604051808303815f875af1158015610f36573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5a919061171d565b506110d6565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110355760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac84836040518363ffffffff1660e01b8152600401610fef9291906116cc565b6020604051808303815f875af115801561100b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102f919061171d565b506110d5565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88484846040518463ffffffff1660e01b815260040161109393929190611748565b6020604051808303815f875af11580156110af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d3919061171d565b505b5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111339190611308565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561117757808201518184015260208101905061115c565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61119c82611140565b6111a6818561114a565b93506111b681856020860161115a565b6111bf81611182565b840191505092915050565b5f6020820190508181035f8301526111e28184611192565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611224826111fb565b9050919050565b6112348161121a565b811461123e575f80fd5b50565b5f8135905061124f8161122b565b92915050565b5f819050919050565b61126781611255565b8114611271575f80fd5b50565b5f813590506112828161125e565b92915050565b5f806040838503121561129e5761129d6111f3565b5b5f6112ab85828601611241565b92505060206112bc85828601611274565b9150509250929050565b5f8115159050919050565b6112da816112c6565b82525050565b5f6020820190506112f35f8301846112d1565b92915050565b61130281611255565b82525050565b5f60208201905061131b5f8301846112f9565b92915050565b5f805f60608486031215611338576113376111f3565b5b5f61134586828701611241565b935050602061135686828701611241565b925050604061136786828701611274565b9150509250925092565b5f60ff82169050919050565b61138681611371565b82525050565b5f60208201905061139f5f83018461137d565b92915050565b5f602082840312156113ba576113b96111f3565b5b5f6113c784828501611274565b91505092915050565b5f602082840312156113e5576113e46111f3565b5b5f6113f284828501611241565b91505092915050565b6114048161121a565b82525050565b5f60208201905061141d5f8301846113fb565b92915050565b5f8060408385031215611439576114386111f3565b5b5f61144685828601611241565b925050602061145785828601611241565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61149f82611182565b810181811067ffffffffffffffff821117156114be576114bd611469565b5b80604052505050565b5f6114d06111ea565b90506114dc8282611496565b919050565b5f67ffffffffffffffff8211156114fb576114fa611469565b5b61150482611182565b9050602081019050919050565b5f61152361151e846114e1565b6114c7565b90508281526020810184848401111561153f5761153e611465565b5b61154a84828561115a565b509392505050565b5f82601f83011261156657611565611461565b5b8151611576848260208601611511565b91505092915050565b61158881611371565b8114611592575f80fd5b50565b5f815190506115a38161157f565b92915050565b5f805f606084860312156115c0576115bf6111f3565b5b5f84015167ffffffffffffffff8111156115dd576115dc6111f7565b5b6115e986828701611552565b935050602084015167ffffffffffffffff81111561160a576116096111f7565b5b61161686828701611552565b925050604061162786828701611595565b9150509250925092565b5f8151905061163f8161125e565b92915050565b5f6020828403121561165a576116596111f3565b5b5f61166784828501611631565b91505092915050565b5f6040820190506116835f8301856113fb565b61169060208301846113fb565b9392505050565b5f6060820190506116aa5f8301866113fb565b6116b760208301856112f9565b6116c460408301846112f9565b949350505050565b5f6040820190506116df5f8301856113fb565b6116ec60208301846112f9565b9392505050565b6116fc816112c6565b8114611706575f80fd5b50565b5f81519050611717816116f3565b92915050565b5f60208284031215611732576117316111f3565b5b5f61173f84828501611709565b91505092915050565b5f60608201905061175b5f8301866113fb565b61176860208301856113fb565b61177560408301846112f9565b94935050505056fea264697066735822122019ec31921e777a6c5f5d27b3afb27acc7727f7637b7555591c0b50efc95e6bc964736f6c63430008180033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"allowance\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approve\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burn\",\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"burnFrom\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"mint\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"name\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"symbol\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferFrom\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Approval\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Failure\",\"inputs\":[{\"name\":\"message\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Transfer\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ERC20InsufficientAllowance\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allowance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"needed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"ERC20InsufficientBalance\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"balance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"needed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidApprover\",\"inputs\":[{\"name\":\"approver\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidSender\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidSpender\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]}]", + Bin: "0x60806040819052600680546001600160a01b03191660641790556113c23881900390819083398101604081905261003591610257565b60408051602080820183525f8083528351918201909352918252849184918491886001600160a01b03811661008357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61008c8161014c565b5060046100998382610375565b5060056100a68282610375565b5050505f835111806100b857505f8251115b806100c557505f8160ff16115b1561014057600654604051630df4b0bd60e21b81526001600160a01b03909116906337d2c2f4906100fe9086908690869060040161045a565b6020604051808303815f875af115801561011a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013e9190610492565b505b505050505050506104b8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156101c95781810151838201526020016101b1565b50505f910152565b5f82601f8301126101e0575f5ffd5b81516001600160401b038111156101f9576101f961019b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102275761022761019b565b60405281815283820160200185101561023e575f5ffd5b61024f8260208301602087016101af565b949350505050565b5f5f5f5f6080858703121561026a575f5ffd5b84516001600160a01b0381168114610280575f5ffd5b60208601519094506001600160401b0381111561029b575f5ffd5b6102a7878288016101d1565b604087015190945090506001600160401b038111156102c4575f5ffd5b6102d0878288016101d1565b925050606085015160ff811681146102e6575f5ffd5b939692955090935050565b600181811c9082168061030557607f821691505b60208210810361032357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561037057805f5260205f20601f840160051c8101602085101561034e5750805b601f840160051c820191505b8181101561036d575f815560010161035a565b50505b505050565b81516001600160401b0381111561038e5761038e61019b565b6103a28161039c84546102f1565b84610329565b6020601f8211600181146103d4575f83156103bd5750848201515b5f19600385901b1c1916600184901b17845561036d565b5f84815260208120601f198516915b8281101561040357878501518255602094850194600190920191016103e3565b508482101561042057868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f81518084526104468160208601602086016101af565b601f01601f19169290920160200192915050565b606081525f61046c606083018661042f565b828103602084015261047e818661042f565b91505060ff83166040830152949350505050565b5f602082840312156104a2575f5ffd5b815180151581146104b1575f5ffd5b9392505050565b610efd806104c55f395ff3fe6080604052600436106100e4575f3560e01c806370a082311161008757806395d89b411161005757806395d89b4114610254578063a9059cbb14610268578063dd62ed3e14610287578063f2fde38b146102cb575f5ffd5b806370a08231146101dc578063715018a6146101fb57806379cc67901461020f5780638da5cb5b1461022e575f5ffd5b806323b872dd116100c257806323b872dd14610163578063313ce5671461018257806340c10f19146101a857806342966c68146101bd575f5ffd5b806306fdde03146100e8578063095ea7b31461011257806318160ddd14610141575b5f5ffd5b3480156100f3575f5ffd5b506100fc6102ea565b6040516101099190610b47565b60405180910390f35b34801561011d575f5ffd5b5061013161012c366004610b94565b610364565b6040519015158152602001610109565b34801561014c575f5ffd5b5061015561037b565b604051908152602001610109565b34801561016e575f5ffd5b5061013161017d366004610bbc565b6103ea565b34801561018d575f5ffd5b5061019661040d565b60405160ff9091168152602001610109565b6101bb6101b6366004610b94565b610485565b005b3480156101c8575f5ffd5b506101bb6101d7366004610bf6565b61049b565b3480156101e7575f5ffd5b506101556101f6366004610c0d565b6104a8565b348015610206575f5ffd5b506101bb610520565b34801561021a575f5ffd5b506101bb610229366004610b94565b610533565b348015610239575f5ffd5b505f546040516001600160a01b039091168152602001610109565b34801561025f575f5ffd5b506100fc610548565b348015610273575f5ffd5b50610131610282366004610b94565b6105c1565b348015610292575f5ffd5b506101556102a1366004610c2d565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b3480156102d6575f5ffd5b506101bb6102e5366004610c0d565b6105ce565b6006546040516315d10ab960e11b815230600482015260609182916001600160a01b0390911690632ba21572906024015f60405180830381865afa158015610334573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261035b9190810190610d04565b50909392505050565b5f3361037181858561060d565b5060019392505050565b6006546040516339370aa960e21b81523060048201525f916001600160a01b03169063e4dc2aa490602401602060405180830381865afa1580156103c1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103e59190610d81565b905090565b5f336103f785828561061f565b61040285858561069b565b506001949350505050565b6006546040516315d10ab960e11b81523060048201525f9182916001600160a01b0390911690632ba21572906024015f60405180830381865afa158015610456573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261047d9190810190610d04565b949350505050565b61048d6106f8565b6104978282610724565b5050565b6104a53382610758565b50565b600654604051633de222bb60e21b81523060048201526001600160a01b0383811660248301525f92169063f7888aec90604401602060405180830381865afa1580156104f6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061051a9190610d81565b92915050565b6105286106f8565b6105315f61078c565b565b61053e82338361061f565b6104978282610758565b6006546040516315d10ab960e11b815230600482015260609182916001600160a01b0390911690632ba21572906024015f60405180830381865afa158015610592573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105b99190810190610d04565b509392505050565b5f3361037181858561069b565b6105d66106f8565b6001600160a01b03811661060457604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6104a58161078c565b61061a83838360016107db565b505050565b6001600160a01b038381165f908152600260209081526040808320938616835292905220545f19811015610695578181101561068757604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105fb565b61069584848484035f6107db565b50505050565b6001600160a01b0383166106c457604051634b637e8f60e11b81525f60048201526024016105fb565b6001600160a01b0382166106ed5760405163ec442f0560e01b81525f60048201526024016105fb565b61061a8383836108ad565b5f546001600160a01b031633146105315760405163118cdaa760e01b81523360048201526024016105fb565b6001600160a01b03821661074d5760405163ec442f0560e01b81525f60048201526024016105fb565b6104975f83836108ad565b6001600160a01b03821661078157604051634b637e8f60e11b81525f60048201526024016105fb565b610497825f836108ad565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0384166108045760405163e602df0560e01b81525f60048201526024016105fb565b6001600160a01b03831661082d57604051634a1406b160e11b81525f60048201526024016105fb565b6001600160a01b038085165f908152600260209081526040808320938716835292905220829055801561069557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161089f91815260200190565b60405180910390a350505050565b6001600160a01b0383166109d3576006546040516340c10f1960e01b81526001600160a01b03848116600483015260248201849052909116906340c10f19906044016020604051808303815f875af1925050508015610929575060408051601f3d908101601f1916820190925261092691810190610d98565b60015b6109cd57610935610db7565b806308c379a00361098b5750610949610dd0565b80610954575061098d565b806040516020016109659190610e4c565b60408051601f198184030181529082905262461bcd60e51b82526105fb91600401610b47565b505b3d8080156109b6576040519150601f19603f3d011682016040523d82523d5f602084013e6109bb565b606091505b50806040516020016109659190610e83565b50610ad3565b6001600160a01b038216610a5557600654604051632770a7eb60e21b81526001600160a01b0385811660048301526024820184905290911690639dc29fac906044016020604051808303815f875af1158015610a31573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109cd9190610d98565b6006546040516317d5759960e31b81526001600160a01b0385811660048301528481166024830152604482018490529091169063beabacc8906064016020604051808303815f875af1158015610aad573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad19190610d98565b505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b1891815260200190565b60405180910390a3505050565b5f5b83811015610b3f578181015183820152602001610b27565b50505f910152565b602081525f8251806020840152610b65816040850160208701610b25565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114610b8f575f5ffd5b919050565b5f5f60408385031215610ba5575f5ffd5b610bae83610b79565b946020939093013593505050565b5f5f5f60608486031215610bce575f5ffd5b610bd784610b79565b9250610be560208501610b79565b929592945050506040919091013590565b5f60208284031215610c06575f5ffd5b5035919050565b5f60208284031215610c1d575f5ffd5b610c2682610b79565b9392505050565b5f5f60408385031215610c3e575f5ffd5b610c4783610b79565b9150610c5560208401610b79565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f1916810167ffffffffffffffff81118282101715610c9857610c98610c5e565b6040525050565b5f82601f830112610cae575f5ffd5b815167ffffffffffffffff811115610cc857610cc8610c5e565b604051610cdf601f8301601f191660200182610c72565b818152846020838601011115610cf3575f5ffd5b61047d826020830160208701610b25565b5f5f5f60608486031215610d16575f5ffd5b835167ffffffffffffffff811115610d2c575f5ffd5b610d3886828701610c9f565b935050602084015167ffffffffffffffff811115610d54575f5ffd5b610d6086828701610c9f565b925050604084015160ff81168114610d76575f5ffd5b809150509250925092565b5f60208284031215610d91575f5ffd5b5051919050565b5f60208284031215610da8575f5ffd5b81518015158114610c26575f5ffd5b5f60033d1115610dcd5760045f5f3e505f5160e01c5b90565b5f60443d1015610ddd5790565b6040513d600319016004823e80513d602482011167ffffffffffffffff82111715610e0757505090565b808201805167ffffffffffffffff811115610e23575050505090565b3d8401600319018282016020011115610e3d575050505090565b6105b960208285010185610c72565b6f03330b4b632b2103a379036b4b73a1d160851b81525f8251610e76816010850160208701610b25565b9190910160100192915050565b7f6661696c656420746f206d696e743a20756e6b6e6f776e206572726f723a200081525f8251610eba81601f850160208701610b25565b91909101601f019291505056fea26469706673582212208bc73576e871a975e4d1b36ec8d562772efff0e5efcd79595bd22762d64b42c864736f6c634300081e0033", } // MintBurnBankERC20ABI is the input ABI used to generate the binding from. @@ -741,6 +741,141 @@ func (_MintBurnBankERC20 *MintBurnBankERC20Filterer) ParseApproval(log types.Log return event, nil } +// MintBurnBankERC20FailureIterator is returned from FilterFailure and is used to iterate over the raw logs and unpacked data for Failure events raised by the MintBurnBankERC20 contract. +type MintBurnBankERC20FailureIterator struct { + Event *MintBurnBankERC20Failure // 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 *MintBurnBankERC20FailureIterator) 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(MintBurnBankERC20Failure) + 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(MintBurnBankERC20Failure) + 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 *MintBurnBankERC20FailureIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *MintBurnBankERC20FailureIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// MintBurnBankERC20Failure represents a Failure event raised by the MintBurnBankERC20 contract. +type MintBurnBankERC20Failure struct { + Message string + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFailure is a free log retrieval operation binding the contract event 0x66c9257b5635d9c11609ab746e0972276ff2412ab2085de9630ecb2300a019a6. +// +// Solidity: event Failure(string message, bytes data) +func (_MintBurnBankERC20 *MintBurnBankERC20Filterer) FilterFailure(opts *bind.FilterOpts) (*MintBurnBankERC20FailureIterator, error) { + + logs, sub, err := _MintBurnBankERC20.contract.FilterLogs(opts, "Failure") + if err != nil { + return nil, err + } + return &MintBurnBankERC20FailureIterator{contract: _MintBurnBankERC20.contract, event: "Failure", logs: logs, sub: sub}, nil +} + +// WatchFailure is a free log subscription operation binding the contract event 0x66c9257b5635d9c11609ab746e0972276ff2412ab2085de9630ecb2300a019a6. +// +// Solidity: event Failure(string message, bytes data) +func (_MintBurnBankERC20 *MintBurnBankERC20Filterer) WatchFailure(opts *bind.WatchOpts, sink chan<- *MintBurnBankERC20Failure) (event.Subscription, error) { + + logs, sub, err := _MintBurnBankERC20.contract.WatchLogs(opts, "Failure") + 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(MintBurnBankERC20Failure) + if err := _MintBurnBankERC20.contract.UnpackLog(event, "Failure", 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 +} + +// ParseFailure is a log parse operation binding the contract event 0x66c9257b5635d9c11609ab746e0972276ff2412ab2085de9630ecb2300a019a6. +// +// Solidity: event Failure(string message, bytes data) +func (_MintBurnBankERC20 *MintBurnBankERC20Filterer) ParseFailure(log types.Log) (*MintBurnBankERC20Failure, error) { + event := new(MintBurnBankERC20Failure) + if err := _MintBurnBankERC20.contract.UnpackLog(event, "Failure", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // MintBurnBankERC20OwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the MintBurnBankERC20 contract. type MintBurnBankERC20OwnershipTransferredIterator struct { Event *MintBurnBankERC20OwnershipTransferred // Event containing the contract specifics and raw log diff --git a/chain/evm/precompiles/exchange/i_exchange_module.abigen.go b/chain/evm/precompiles/exchange/i_exchange_module.abigen.go index 53d7c6d9..1532408c 100644 --- a/chain/evm/precompiles/exchange/i_exchange_module.abigen.go +++ b/chain/evm/precompiles/exchange/i_exchange_module.abigen.go @@ -203,7 +203,7 @@ type IExchangeModuleTrimmedSpotLimitOrder struct { // ExchangeModuleMetaData contains all meta data concerning the ExchangeModule contract. var ExchangeModuleMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"grantee\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"granter\",\"type\":\"address\"},{\"internalType\":\"ExchangeTypes.MsgType\",\"name\":\"method\",\"type\":\"uint8\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"grantee\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"ExchangeTypes.MsgType\",\"name\":\"method\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"}],\"internalType\":\"structCosmos.Coin[]\",\"name\":\"spendLimit\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"internalType\":\"structIExchangeModule.Authorization[]\",\"name\":\"authorizations\",\"type\":\"tuple[]\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"orderHash\",\"type\":\"string\"},{\"internalType\":\"int32\",\"name\":\"orderMask\",\"type\":\"int32\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"}],\"internalType\":\"structIExchangeModule.OrderData[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"name\":\"batchCancelDerivativeOrders\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"success\",\"type\":\"bool[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"orderHash\",\"type\":\"string\"},{\"internalType\":\"int32\",\"name\":\"orderMask\",\"type\":\"int32\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"}],\"internalType\":\"structIExchangeModule.OrderData[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"name\":\"batchCancelSpotOrders\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"success\",\"type\":\"bool[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"feeRecipient\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"orderType\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"margin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"triggerPrice\",\"type\":\"uint256\"}],\"internalType\":\"structIExchangeModule.DerivativeOrder[]\",\"name\":\"orders\",\"type\":\"tuple[]\"}],\"name\":\"batchCreateDerivativeLimitOrders\",\"outputs\":[{\"components\":[{\"internalType\":\"string[]\",\"name\":\"orderHashes\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"createdOrdersCids\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"failedOrdersCids\",\"type\":\"string[]\"}],\"internalType\":\"structIExchangeModule.BatchCreateDerivativeLimitOrdersResponse\",\"name\":\"response\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"feeRecipient\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"orderType\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"triggerPrice\",\"type\":\"uint256\"}],\"internalType\":\"structIExchangeModule.SpotOrder[]\",\"name\":\"orders\",\"type\":\"tuple[]\"}],\"name\":\"batchCreateSpotLimitOrders\",\"outputs\":[{\"components\":[{\"internalType\":\"string[]\",\"name\":\"orderHashes\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"createdOrdersCids\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"failedOrdersCids\",\"type\":\"string[]\"}],\"internalType\":\"structIExchangeModule.BatchCreateSpotLimitOrdersResponse\",\"name\":\"response\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"spotMarketIDsToCancelAll\",\"type\":\"string[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"orderHash\",\"type\":\"string\"},{\"internalType\":\"int32\",\"name\":\"orderMask\",\"type\":\"int32\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"}],\"internalType\":\"structIExchangeModule.OrderData[]\",\"name\":\"spotOrdersToCancel\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"feeRecipient\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"orderType\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"triggerPrice\",\"type\":\"uint256\"}],\"internalType\":\"structIExchangeModule.SpotOrder[]\",\"name\":\"spotOrdersToCreate\",\"type\":\"tuple[]\"},{\"internalType\":\"string[]\",\"name\":\"derivativeMarketIDsToCancelAll\",\"type\":\"string[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"orderHash\",\"type\":\"string\"},{\"internalType\":\"int32\",\"name\":\"orderMask\",\"type\":\"int32\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"}],\"internalType\":\"structIExchangeModule.OrderData[]\",\"name\":\"derivativeOrdersToCancel\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"feeRecipient\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"orderType\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"margin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"triggerPrice\",\"type\":\"uint256\"}],\"internalType\":\"structIExchangeModule.DerivativeOrder[]\",\"name\":\"derivativeOrdersToCreate\",\"type\":\"tuple[]\"}],\"internalType\":\"structIExchangeModule.BatchUpdateOrdersRequest\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"batchUpdateOrders\",\"outputs\":[{\"components\":[{\"internalType\":\"bool[]\",\"name\":\"spotCancelSuccess\",\"type\":\"bool[]\"},{\"internalType\":\"string[]\",\"name\":\"spotOrderHashes\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"createdSpotOrdersCids\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"failedSpotOrdersCids\",\"type\":\"string[]\"},{\"internalType\":\"bool[]\",\"name\":\"derivativeCancelSuccess\",\"type\":\"bool[]\"},{\"internalType\":\"string[]\",\"name\":\"derivativeOrderHashes\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"createdDerivativeOrdersCids\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"failedDerivativeOrdersCids\",\"type\":\"string[]\"}],\"internalType\":\"structIExchangeModule.BatchUpdateOrdersResponse\",\"name\":\"response\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"orderHash\",\"type\":\"string\"},{\"internalType\":\"int32\",\"name\":\"orderMask\",\"type\":\"int32\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"}],\"name\":\"cancelDerivativeOrder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"orderHash\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"}],\"name\":\"cancelSpotOrder\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"feeRecipient\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"orderType\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"margin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"triggerPrice\",\"type\":\"uint256\"}],\"internalType\":\"structIExchangeModule.DerivativeOrder\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"createDerivativeLimitOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"orderHash\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"}],\"internalType\":\"structIExchangeModule.CreateDerivativeLimitOrderResponse\",\"name\":\"response\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"feeRecipient\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"orderType\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"margin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"triggerPrice\",\"type\":\"uint256\"}],\"internalType\":\"structIExchangeModule.DerivativeOrder\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"createDerivativeMarketOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"orderHash\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"payout\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deltaExecutionQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deltaExecutionMargin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deltaExecutionPrice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"deltaIsLong\",\"type\":\"bool\"}],\"internalType\":\"structIExchangeModule.CreateDerivativeMarketOrderResponse\",\"name\":\"response\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"feeRecipient\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"orderType\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"triggerPrice\",\"type\":\"uint256\"}],\"internalType\":\"structIExchangeModule.SpotOrder\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"createSpotLimitOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"orderHash\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"}],\"internalType\":\"structIExchangeModule.CreateSpotLimitOrderResponse\",\"name\":\"response\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"feeRecipient\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"orderType\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"triggerPrice\",\"type\":\"uint256\"}],\"internalType\":\"structIExchangeModule.SpotOrder\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"createSpotMarketOrder\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"orderHash\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"internalType\":\"structIExchangeModule.CreateSpotMarketOrderResponse\",\"name\":\"response\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"sourceSubaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationSubaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"decreasePositionMargin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"orderHashes\",\"type\":\"string[]\"}],\"internalType\":\"structIExchangeModule.DerivativeOrdersRequest\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"derivativeOrdersByHashes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"margin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fillable\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isBuy\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"orderHash\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"}],\"internalType\":\"structIExchangeModule.TrimmedDerivativeLimitOrder[]\",\"name\":\"orders\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"sourceSubaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationSubaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"externalTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"sourceSubaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationSubaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"increasePositionMargin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"grantee\",\"type\":\"address\"},{\"internalType\":\"ExchangeTypes.MsgType[]\",\"name\":\"methods\",\"type\":\"uint8[]\"}],\"name\":\"revoke\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"revoked\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"orderHashes\",\"type\":\"string[]\"}],\"internalType\":\"structIExchangeModule.SpotOrdersRequest\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"spotOrdersByHashes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fillable\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isBuy\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"orderHash\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"cid\",\"type\":\"string\"}],\"internalType\":\"structIExchangeModule.TrimmedSpotLimitOrder[]\",\"name\":\"orders\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"}],\"name\":\"subaccountDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"availableBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"trader\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"subaccountNonce\",\"type\":\"uint32\"}],\"name\":\"subaccountDeposits\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"availableBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBalance\",\"type\":\"uint256\"}],\"internalType\":\"structIExchangeModule.SubaccountDepositData[]\",\"name\":\"deposits\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"}],\"name\":\"subaccountPositions\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"marketID\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"isLong\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"entryPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"margin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cumulativeFundingEntry\",\"type\":\"uint256\"}],\"internalType\":\"structIExchangeModule.DerivativePosition[]\",\"name\":\"positions\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"sourceSubaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"destinationSubaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"subaccountTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"subaccountID\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"allowance\",\"inputs\":[{\"name\":\"grantee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"granter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"method\",\"type\":\"uint8\",\"internalType\":\"ExchangeTypes.MsgType\"}],\"outputs\":[{\"name\":\"allowed\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approve\",\"inputs\":[{\"name\":\"grantee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"authorizations\",\"type\":\"tuple[]\",\"internalType\":\"structIExchangeModule.Authorization[]\",\"components\":[{\"name\":\"method\",\"type\":\"uint8\",\"internalType\":\"ExchangeTypes.MsgType\"},{\"name\":\"spendLimit\",\"type\":\"tuple[]\",\"internalType\":\"structCosmos.Coin[]\",\"components\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"denom\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"duration\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"approved\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"batchCancelDerivativeOrders\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"tuple[]\",\"internalType\":\"structIExchangeModule.OrderData[]\",\"components\":[{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderHash\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderMask\",\"type\":\"int32\",\"internalType\":\"int32\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"batchCancelSpotOrders\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"tuple[]\",\"internalType\":\"structIExchangeModule.OrderData[]\",\"components\":[{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderHash\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderMask\",\"type\":\"int32\",\"internalType\":\"int32\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"batchCreateDerivativeLimitOrders\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"orders\",\"type\":\"tuple[]\",\"internalType\":\"structIExchangeModule.DerivativeOrder[]\",\"components\":[{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"feeRecipient\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"quantity\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderType\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"margin\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"triggerPrice\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"}]}],\"outputs\":[{\"name\":\"response\",\"type\":\"tuple\",\"internalType\":\"structIExchangeModule.BatchCreateDerivativeLimitOrdersResponse\",\"components\":[{\"name\":\"orderHashes\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"createdOrdersCids\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"failedOrdersCids\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"batchCreateSpotLimitOrders\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"orders\",\"type\":\"tuple[]\",\"internalType\":\"structIExchangeModule.SpotOrder[]\",\"components\":[{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"feeRecipient\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"quantity\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderType\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"triggerPrice\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"}]}],\"outputs\":[{\"name\":\"response\",\"type\":\"tuple\",\"internalType\":\"structIExchangeModule.BatchCreateSpotLimitOrdersResponse\",\"components\":[{\"name\":\"orderHashes\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"createdOrdersCids\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"failedOrdersCids\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"batchUpdateOrders\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"request\",\"type\":\"tuple\",\"internalType\":\"structIExchangeModule.BatchUpdateOrdersRequest\",\"components\":[{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"spotMarketIDsToCancelAll\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"spotOrdersToCancel\",\"type\":\"tuple[]\",\"internalType\":\"structIExchangeModule.OrderData[]\",\"components\":[{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderHash\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderMask\",\"type\":\"int32\",\"internalType\":\"int32\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"spotOrdersToCreate\",\"type\":\"tuple[]\",\"internalType\":\"structIExchangeModule.SpotOrder[]\",\"components\":[{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"feeRecipient\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"quantity\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderType\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"triggerPrice\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"}]},{\"name\":\"derivativeMarketIDsToCancelAll\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"derivativeOrdersToCancel\",\"type\":\"tuple[]\",\"internalType\":\"structIExchangeModule.OrderData[]\",\"components\":[{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderHash\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderMask\",\"type\":\"int32\",\"internalType\":\"int32\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"derivativeOrdersToCreate\",\"type\":\"tuple[]\",\"internalType\":\"structIExchangeModule.DerivativeOrder[]\",\"components\":[{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"feeRecipient\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"quantity\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderType\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"margin\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"triggerPrice\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"}]}]}],\"outputs\":[{\"name\":\"response\",\"type\":\"tuple\",\"internalType\":\"structIExchangeModule.BatchUpdateOrdersResponse\",\"components\":[{\"name\":\"spotCancelSuccess\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"},{\"name\":\"spotOrderHashes\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"createdSpotOrdersCids\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"failedSpotOrdersCids\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"derivativeCancelSuccess\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"},{\"name\":\"derivativeOrderHashes\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"createdDerivativeOrdersCids\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"failedDerivativeOrdersCids\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cancelDerivativeOrder\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderHash\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderMask\",\"type\":\"int32\",\"internalType\":\"int32\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cancelSpotOrder\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderHash\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createDerivativeLimitOrder\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"order\",\"type\":\"tuple\",\"internalType\":\"structIExchangeModule.DerivativeOrder\",\"components\":[{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"feeRecipient\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"quantity\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderType\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"margin\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"triggerPrice\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"}]}],\"outputs\":[{\"name\":\"response\",\"type\":\"tuple\",\"internalType\":\"structIExchangeModule.CreateDerivativeLimitOrderResponse\",\"components\":[{\"name\":\"orderHash\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createDerivativeMarketOrder\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"order\",\"type\":\"tuple\",\"internalType\":\"structIExchangeModule.DerivativeOrder\",\"components\":[{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"feeRecipient\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"quantity\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderType\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"margin\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"triggerPrice\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"}]}],\"outputs\":[{\"name\":\"response\",\"type\":\"tuple\",\"internalType\":\"structIExchangeModule.CreateDerivativeMarketOrderResponse\",\"components\":[{\"name\":\"orderHash\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"quantity\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"fee\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"payout\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"deltaExecutionQuantity\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"deltaExecutionMargin\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"deltaExecutionPrice\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"deltaIsLong\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createSpotLimitOrder\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"order\",\"type\":\"tuple\",\"internalType\":\"structIExchangeModule.SpotOrder\",\"components\":[{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"feeRecipient\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"quantity\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderType\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"triggerPrice\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"}]}],\"outputs\":[{\"name\":\"response\",\"type\":\"tuple\",\"internalType\":\"structIExchangeModule.CreateSpotLimitOrderResponse\",\"components\":[{\"name\":\"orderHash\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createSpotMarketOrder\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"order\",\"type\":\"tuple\",\"internalType\":\"structIExchangeModule.SpotOrder\",\"components\":[{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"feeRecipient\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"quantity\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderType\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"triggerPrice\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"}]}],\"outputs\":[{\"name\":\"response\",\"type\":\"tuple\",\"internalType\":\"structIExchangeModule.CreateSpotMarketOrderResponse\",\"components\":[{\"name\":\"orderHash\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"quantity\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"fee\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"decreasePositionMargin\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceSubaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"destinationSubaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"denom\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"derivativeOrdersByHashes\",\"inputs\":[{\"name\":\"request\",\"type\":\"tuple\",\"internalType\":\"structIExchangeModule.DerivativeOrdersRequest\",\"components\":[{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderHashes\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"outputs\":[{\"name\":\"orders\",\"type\":\"tuple[]\",\"internalType\":\"structIExchangeModule.TrimmedDerivativeLimitOrder[]\",\"components\":[{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"quantity\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"margin\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"fillable\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"isBuy\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"orderHash\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"externalTransfer\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceSubaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"destinationSubaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"denom\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"increasePositionMargin\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceSubaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"destinationSubaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revoke\",\"inputs\":[{\"name\":\"grantee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"methods\",\"type\":\"uint8[]\",\"internalType\":\"ExchangeTypes.MsgType[]\"}],\"outputs\":[{\"name\":\"revoked\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"spotOrdersByHashes\",\"inputs\":[{\"name\":\"request\",\"type\":\"tuple\",\"internalType\":\"structIExchangeModule.SpotOrdersRequest\",\"components\":[{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"orderHashes\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"outputs\":[{\"name\":\"orders\",\"type\":\"tuple[]\",\"internalType\":\"structIExchangeModule.TrimmedSpotLimitOrder[]\",\"components\":[{\"name\":\"price\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"quantity\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"fillable\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"isBuy\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"orderHash\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"cid\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"subaccountDeposit\",\"inputs\":[{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"denom\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"availableBalance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"totalBalance\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"subaccountDeposits\",\"inputs\":[{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"trader\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"subaccountNonce\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"deposits\",\"type\":\"tuple[]\",\"internalType\":\"structIExchangeModule.SubaccountDepositData[]\",\"components\":[{\"name\":\"denom\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"availableBalance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"totalBalance\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"subaccountPositions\",\"inputs\":[{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"positions\",\"type\":\"tuple[]\",\"internalType\":\"structIExchangeModule.DerivativePosition[]\",\"components\":[{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"marketID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"isLong\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"quantity\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"entryPrice\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"margin\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"},{\"name\":\"cumulativeFundingEntry\",\"type\":\"uint256\",\"internalType\":\"ExchangeTypes.UFixed256x18\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"subaccountTransfer\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sourceSubaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"destinationSubaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"denom\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"subaccountID\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"denom\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"}]", } // ExchangeModuleABI is the input ABI used to generate the binding from. diff --git a/chain/evm/precompiles/staking/i_staking_module.abigen.go b/chain/evm/precompiles/staking/i_staking_module.abigen.go index 5d9a4301..498c4a3d 100644 --- a/chain/evm/precompiles/staking/i_staking_module.abigen.go +++ b/chain/evm/precompiles/staking/i_staking_module.abigen.go @@ -37,7 +37,7 @@ type CosmosCoin struct { // StakingModuleMetaData contains all meta data concerning the StakingModule contract. var StakingModuleMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"validatorAddress\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"validatorAddress\",\"type\":\"string\"}],\"name\":\"delegation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"}],\"internalType\":\"structCosmos.Coin\",\"name\":\"balance\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"validatorSrcAddress\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"validatorDstAddress\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"redelegate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"validatorAddress\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"undelegate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"validatorAddress\",\"type\":\"string\"}],\"name\":\"withdrawDelegatorRewards\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"}],\"internalType\":\"structCosmos.Coin[]\",\"name\":\"amount\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"type\":\"function\",\"name\":\"delegate\",\"inputs\":[{\"name\":\"validatorAddress\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[{\"name\":\"delegatorAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"validatorAddress\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"balance\",\"type\":\"tuple\",\"internalType\":\"structCosmos.Coin\",\"components\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"denom\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"redelegate\",\"inputs\":[{\"name\":\"validatorSrcAddress\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"validatorDstAddress\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"validatorAddress\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawDelegatorRewards\",\"inputs\":[{\"name\":\"validatorAddress\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"amount\",\"type\":\"tuple[]\",\"internalType\":\"structCosmos.Coin[]\",\"components\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"denom\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"stateMutability\":\"nonpayable\"}]", } // StakingModuleABI is the input ABI used to generate the binding from. diff --git a/chain/evm/types/events.go b/chain/evm/types/events.go index d9e85928..55a8527f 100644 --- a/chain/evm/types/events.go +++ b/chain/evm/types/events.go @@ -4,7 +4,6 @@ package types const ( EventTypeEthereumTx = TypeMsgEthereumTx EventTypeBlockBloom = "block_bloom" - EventTypeTxLog = "tx_log" AttributeKeyContractAddress = "contract" AttributeKeyRecipient = "recipient" @@ -13,7 +12,7 @@ const ( AttributeKeyTxIndex = "txIndex" AttributeKeyTxGasUsed = "txGasUsed" AttributeKeyTxType = "txType" - AttributeKeyTxLog = "txLog" + // tx failed in eth vm execution AttributeKeyEthereumTxFailed = "ethereumTxFailed" AttributeValueCategory = ModuleName diff --git a/chain/evm/types/tx.pb.go b/chain/evm/types/tx.pb.go index 741b1087..b015872d 100644 --- a/chain/evm/types/tx.pb.go +++ b/chain/evm/types/tx.pb.go @@ -316,6 +316,9 @@ type MsgEthereumTxResponse struct { GasUsed uint64 `protobuf:"varint,5,opt,name=gas_used,json=gasUsed,proto3" json:"gas_used,omitempty"` // include the block hash for json-rpc to use BlockHash []byte `protobuf:"bytes,6,opt,name=block_hash,json=blockHash,proto3" json:"block_hash,omitempty"` + // execution_gas_used specifies the actual gas consumed during EVM execution. + // This is used for accurate gas estimation. + ExecutionGasUsed uint64 `protobuf:"varint,7,opt,name=execution_gas_used,json=executionGasUsed,proto3" json:"execution_gas_used,omitempty"` } func (m *MsgEthereumTxResponse) Reset() { *m = MsgEthereumTxResponse{} } @@ -459,75 +462,77 @@ func init() { func init() { proto.RegisterFile("injective/evm/v1/tx.proto", fileDescriptor_7f62438576d4fe29) } var fileDescriptor_7f62438576d4fe29 = []byte{ - // 1083 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0xcf, 0x6f, 0x1b, 0xc5, - 0x17, 0xcf, 0xda, 0xeb, 0x5f, 0x63, 0x37, 0xad, 0x46, 0x89, 0xba, 0xb6, 0xbe, 0xf1, 0xfa, 0xbb, - 0x05, 0xe1, 0x16, 0x65, 0x57, 0x0d, 0xa8, 0x52, 0x73, 0xcb, 0x36, 0x09, 0x04, 0x25, 0xa2, 0x5a, - 0xdc, 0x0b, 0x20, 0x59, 0x93, 0xdd, 0xc9, 0x7a, 0xa9, 0x77, 0x67, 0xb5, 0x33, 0x5e, 0x6c, 0x24, - 0xa4, 0xaa, 0x27, 0x8e, 0x54, 0xfc, 0x03, 0x9c, 0x39, 0xf5, 0xd0, 0x33, 0x17, 0x2e, 0x15, 0xa7, - 0x0a, 0x2e, 0xa8, 0x07, 0x83, 0x12, 0xa4, 0x8a, 0x1c, 0x39, 0x73, 0x40, 0x33, 0xb3, 0x8e, 0xe3, - 0x9a, 0x24, 0x50, 0x09, 0x6e, 0xf3, 0xe6, 0x7d, 0xde, 0xcc, 0x7b, 0x9f, 0xcf, 0xec, 0x7b, 0x0b, - 0xea, 0x41, 0xf4, 0x09, 0x76, 0x59, 0x90, 0x62, 0x0b, 0xa7, 0xa1, 0x95, 0xde, 0xb4, 0xd8, 0xd0, - 0x8c, 0x13, 0xc2, 0x08, 0xbc, 0x72, 0xe2, 0x32, 0x71, 0x1a, 0x9a, 0xe9, 0xcd, 0xc6, 0x55, 0x97, - 0xd0, 0x90, 0x50, 0x2b, 0xa4, 0x3e, 0x47, 0x86, 0xd4, 0x97, 0xd0, 0x46, 0x5d, 0x3a, 0xba, 0xc2, - 0xb2, 0xa4, 0x91, 0xb9, 0x96, 0x7c, 0xe2, 0x13, 0xb9, 0xcf, 0x57, 0xd9, 0xee, 0xff, 0x7c, 0x42, - 0xfc, 0x3e, 0xb6, 0x50, 0x1c, 0x58, 0x28, 0x8a, 0x08, 0x43, 0x2c, 0x20, 0xd1, 0x24, 0xa6, 0x9e, - 0x79, 0x85, 0xb5, 0x3f, 0x38, 0xb0, 0x50, 0x34, 0xca, 0x5c, 0xd7, 0xe6, 0xf2, 0x45, 0xae, 0x8b, - 0x29, 0xed, 0xb2, 0x41, 0xdc, 0xc7, 0x19, 0xa8, 0x31, 0x07, 0xea, 0x93, 0x49, 0xaa, 0x2b, 0x73, - 0xbe, 0x18, 0x25, 0x28, 0xcc, 0xae, 0x36, 0x1e, 0xe4, 0xc0, 0xa5, 0x3d, 0xea, 0x6f, 0xb1, 0x1e, - 0x4e, 0xf0, 0x20, 0xec, 0x0c, 0x61, 0x1b, 0xa8, 0x1e, 0x62, 0x48, 0x53, 0x5a, 0x4a, 0xbb, 0xba, - 0xb6, 0x64, 0xca, 0xdc, 0xcc, 0x49, 0x6e, 0xe6, 0x46, 0x34, 0x72, 0x04, 0x02, 0xd6, 0x81, 0x4a, - 0x83, 0xcf, 0xb0, 0x96, 0x6b, 0x29, 0x6d, 0xc5, 0x2e, 0x1c, 0x8f, 0x75, 0x65, 0xd5, 0x11, 0x5b, - 0xf0, 0x6d, 0x70, 0xd9, 0xc3, 0x71, 0x82, 0x5d, 0xc4, 0xb0, 0xd7, 0xed, 0x21, 0xda, 0xd3, 0xf2, - 0x2d, 0xa5, 0x5d, 0xb1, 0xab, 0xbf, 0x8f, 0xf5, 0x52, 0xd2, 0x8f, 0xd7, 0x8d, 0x55, 0xc3, 0x59, - 0x9c, 0x62, 0xde, 0x45, 0xb4, 0x07, 0xdf, 0x9c, 0x89, 0x3a, 0x48, 0x48, 0xa8, 0xa9, 0x22, 0x2a, - 0xa7, 0x29, 0xa7, 0xc1, 0xdb, 0x09, 0x09, 0x21, 0x04, 0xaa, 0x40, 0x14, 0x5a, 0x4a, 0xbb, 0xe6, - 0x88, 0x35, 0x7c, 0x0d, 0xe4, 0x13, 0xf4, 0xa9, 0x56, 0xe4, 0x5b, 0x36, 0x7c, 0x3a, 0xd6, 0x17, - 0x9e, 0x8f, 0x75, 0x30, 0x2d, 0xce, 0xe1, 0xee, 0xf5, 0x4b, 0x5f, 0x7c, 0xad, 0x2f, 0x3c, 0x7c, - 0xf1, 0xf8, 0x86, 0x08, 0x32, 0x1e, 0xe5, 0x40, 0x79, 0x17, 0xfb, 0xc8, 0x1d, 0x75, 0x86, 0x70, - 0x09, 0x14, 0x22, 0x12, 0xb9, 0x58, 0x94, 0xaf, 0x3a, 0xd2, 0x80, 0xb7, 0x40, 0xc5, 0x47, 0x5c, - 0xee, 0xc0, 0x95, 0xe5, 0x56, 0xec, 0xfa, 0xf3, 0xb1, 0xbe, 0x2c, 0x95, 0xa7, 0xde, 0x7d, 0x33, - 0x20, 0x56, 0x88, 0x58, 0xcf, 0xdc, 0x89, 0x98, 0x53, 0xf6, 0x11, 0xbd, 0xcb, 0xa1, 0xb0, 0x09, - 0xf2, 0x3e, 0xa2, 0xa2, 0x74, 0xd5, 0xae, 0x1d, 0x8e, 0xf5, 0xf2, 0x3b, 0x88, 0xee, 0x06, 0x61, - 0xc0, 0x1c, 0xee, 0x80, 0x8b, 0x20, 0xc7, 0x88, 0xac, 0xd1, 0xc9, 0x31, 0x02, 0x6f, 0x83, 0x42, - 0x8a, 0xfa, 0x03, 0x2c, 0x8a, 0xaa, 0xd8, 0xd7, 0xce, 0xbc, 0xe3, 0x70, 0xac, 0x17, 0x37, 0x42, - 0x32, 0x88, 0x98, 0x23, 0x23, 0x38, 0x1d, 0x42, 0xb6, 0xa2, 0xa4, 0x43, 0x08, 0x54, 0x03, 0x4a, - 0xaa, 0x95, 0xc4, 0x86, 0x92, 0x72, 0x2b, 0xd1, 0xca, 0xd2, 0x4a, 0xb8, 0x45, 0xb5, 0x8a, 0xb4, - 0xe8, 0xfa, 0x22, 0xa7, 0xe4, 0xfb, 0x27, 0xab, 0xc5, 0xce, 0x70, 0x13, 0x31, 0x64, 0x7c, 0x9b, - 0x07, 0xb5, 0x0d, 0xf1, 0xd0, 0x76, 0x03, 0xca, 0x3a, 0x43, 0xf8, 0x1e, 0x28, 0xbb, 0x3d, 0x14, - 0x44, 0xdd, 0xc0, 0x13, 0xd4, 0x54, 0x6c, 0xeb, 0xbc, 0xe4, 0x4a, 0x77, 0x38, 0x78, 0x67, 0xf3, - 0x78, 0xac, 0x97, 0x5c, 0xb9, 0x74, 0xb2, 0x85, 0x37, 0xe5, 0x38, 0x77, 0x26, 0xc7, 0xf9, 0x7f, - 0xcc, 0xb1, 0x7a, 0x3e, 0xc7, 0x85, 0x79, 0x8e, 0x8b, 0xaf, 0xcc, 0x71, 0xe9, 0x14, 0xc7, 0x1f, - 0x81, 0xb2, 0xfc, 0x22, 0x31, 0xd5, 0xca, 0xad, 0x7c, 0xbb, 0xba, 0xb6, 0x62, 0xbe, 0xdc, 0x48, - 0x4c, 0x49, 0x65, 0x87, 0x7f, 0xb2, 0x76, 0x8b, 0x3f, 0xcb, 0xe3, 0xb1, 0x0e, 0xd0, 0x09, 0xbf, - 0xdf, 0xfc, 0xac, 0x83, 0x29, 0xdb, 0xce, 0xc9, 0x81, 0x52, 0xc0, 0xca, 0x8c, 0x80, 0x60, 0x46, - 0xc0, 0xea, 0x59, 0x02, 0xfe, 0x91, 0x07, 0xb5, 0xcd, 0x51, 0x84, 0xc2, 0xc0, 0xdd, 0xc6, 0xf8, - 0x3f, 0x11, 0xf0, 0x36, 0xa8, 0x72, 0x01, 0x59, 0x10, 0x77, 0x5d, 0x14, 0x5f, 0x2c, 0x21, 0x97, - 0xbb, 0x13, 0xc4, 0x77, 0x50, 0x3c, 0x09, 0x3d, 0xc0, 0x58, 0x84, 0xaa, 0x7f, 0x27, 0x74, 0x1b, - 0x63, 0x1e, 0x9a, 0xc9, 0x5f, 0x38, 0x5f, 0xfe, 0xe2, 0xbc, 0xfc, 0xa5, 0x57, 0x96, 0xbf, 0x7c, - 0x86, 0xfc, 0x95, 0x7f, 0x45, 0x7e, 0x30, 0x23, 0x7f, 0x75, 0x46, 0xfe, 0xda, 0x59, 0xf2, 0x1b, - 0xa0, 0xb1, 0x35, 0x64, 0x38, 0xa2, 0x01, 0x89, 0xde, 0x8f, 0xc5, 0xac, 0x99, 0x76, 0xc1, 0x75, - 0x95, 0xa3, 0x8d, 0xef, 0x14, 0xb0, 0x3c, 0xd3, 0xfa, 0x1d, 0x4c, 0x63, 0x12, 0x51, 0x51, 0xa8, - 0x68, 0xd9, 0xe2, 0x9d, 0x38, 0x62, 0x0d, 0xaf, 0x03, 0xb5, 0x4f, 0x7c, 0xaa, 0xe5, 0x44, 0x91, - 0xcb, 0xf3, 0x45, 0xee, 0x12, 0xdf, 0x11, 0x10, 0x78, 0x05, 0xe4, 0x13, 0xcc, 0xc4, 0x03, 0xa8, - 0x39, 0x7c, 0x09, 0xeb, 0xa0, 0x9c, 0x86, 0x5d, 0x9c, 0x24, 0x24, 0xc9, 0xba, 0x5d, 0x29, 0x0d, - 0xb7, 0xb8, 0xc9, 0x5d, 0x5c, 0xfa, 0x01, 0xc5, 0x9e, 0x14, 0xd1, 0x29, 0xf9, 0x88, 0xde, 0xa3, - 0xd8, 0x83, 0x2b, 0x00, 0xec, 0xf7, 0x89, 0x7b, 0x5f, 0xce, 0x0f, 0xd9, 0xd8, 0x2a, 0x62, 0x87, - 0x4f, 0x8b, 0xac, 0x8a, 0x47, 0x0a, 0xb8, 0xbc, 0x47, 0xfd, 0x7b, 0xb1, 0x87, 0x18, 0xbe, 0x2b, - 0x46, 0x1b, 0x6f, 0x25, 0x68, 0xc0, 0x7a, 0x24, 0x09, 0xd8, 0x28, 0x7b, 0xec, 0xda, 0x0f, 0x4f, - 0x56, 0x97, 0xb2, 0x41, 0xbd, 0xe1, 0x79, 0x09, 0xa6, 0xf4, 0x03, 0x96, 0x04, 0x91, 0xef, 0x4c, - 0xa1, 0xf0, 0x16, 0x28, 0xca, 0xe1, 0x28, 0x1e, 0x76, 0x75, 0x4d, 0x9b, 0xaf, 0x52, 0xde, 0x60, - 0xab, 0x5c, 0x45, 0x27, 0x43, 0xaf, 0x2f, 0xf2, 0x61, 0x32, 0x3d, 0xc7, 0xa8, 0x83, 0xab, 0x2f, - 0xa5, 0x34, 0xa1, 0x76, 0xed, 0x37, 0x05, 0xe4, 0xf7, 0xa8, 0x0f, 0x3f, 0x07, 0xa7, 0xc6, 0x12, - 0xd4, 0xe7, 0x2f, 0x9a, 0x51, 0xa6, 0xf1, 0xc6, 0x05, 0x80, 0xc9, 0xf9, 0xc6, 0xeb, 0x0f, 0x7f, - 0xfc, 0xf5, 0xab, 0x9c, 0x6e, 0xac, 0x58, 0x73, 0x73, 0x1f, 0x67, 0xe8, 0x2e, 0x1b, 0xc2, 0x8f, - 0x41, 0x6d, 0x86, 0xb1, 0xff, 0xff, 0xe5, 0xf9, 0xa7, 0x21, 0x8d, 0xeb, 0x17, 0x42, 0x26, 0x49, - 0x34, 0x0a, 0x0f, 0x5e, 0x3c, 0xbe, 0xa1, 0xd8, 0xee, 0xd3, 0xc3, 0xa6, 0xf2, 0xec, 0xb0, 0xa9, - 0xfc, 0x72, 0xd8, 0x54, 0xbe, 0x3c, 0x6a, 0x2e, 0x3c, 0x3b, 0x6a, 0x2e, 0xfc, 0x74, 0xd4, 0x5c, - 0xf8, 0x70, 0xc7, 0x0f, 0x58, 0x6f, 0xb0, 0x6f, 0xba, 0x24, 0xb4, 0x76, 0x26, 0xa7, 0xee, 0xa2, - 0x7d, 0x3a, 0xcd, 0x7a, 0xd5, 0x25, 0x09, 0x3e, 0x6d, 0xf2, 0xde, 0x63, 0x85, 0xc4, 0x1b, 0xf4, - 0x31, 0x15, 0x25, 0xb1, 0x51, 0x8c, 0xe9, 0x7e, 0x51, 0xfc, 0x98, 0xbc, 0xf5, 0x67, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xd7, 0x70, 0xb1, 0xf4, 0xd9, 0x09, 0x00, 0x00, + // 1113 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x56, 0xcf, 0x6f, 0x1b, 0x45, + 0x14, 0xce, 0xda, 0xeb, 0x5f, 0x63, 0x37, 0x8d, 0x46, 0x89, 0xb2, 0x36, 0xc4, 0x6b, 0x5c, 0x10, + 0x69, 0x21, 0xbb, 0x6a, 0x40, 0x95, 0x9a, 0x5b, 0xb6, 0x49, 0x4a, 0x50, 0x22, 0xaa, 0xc5, 0xbd, + 0x00, 0x92, 0x35, 0xd9, 0x9d, 0xac, 0x97, 0x7a, 0x77, 0x56, 0x3b, 0x63, 0x63, 0x23, 0x21, 0xa1, + 0x9e, 0xb8, 0x20, 0x81, 0x38, 0x23, 0x21, 0x8e, 0x9c, 0x7a, 0xe8, 0x1f, 0x51, 0x71, 0xa1, 0x82, + 0x0b, 0xea, 0xc1, 0xa0, 0x04, 0xa9, 0x22, 0x37, 0xf8, 0x0b, 0xd0, 0xcc, 0xac, 0xe3, 0xb8, 0x4b, + 0x7e, 0x50, 0x89, 0xde, 0xe6, 0xcd, 0xfb, 0xde, 0xec, 0x7b, 0xdf, 0xfb, 0x66, 0xde, 0x82, 0xaa, + 0x1f, 0x7e, 0x8c, 0x1d, 0xe6, 0xf7, 0xb1, 0x89, 0xfb, 0x81, 0xd9, 0xbf, 0x6e, 0xb2, 0x81, 0x11, + 0xc5, 0x84, 0x11, 0x38, 0x77, 0xec, 0x32, 0x70, 0x3f, 0x30, 0xfa, 0xd7, 0x6b, 0x8b, 0x0e, 0xa1, + 0x01, 0xa1, 0x66, 0x40, 0x3d, 0x8e, 0x0c, 0xa8, 0x27, 0xa1, 0xb5, 0xaa, 0x74, 0xb4, 0x85, 0x65, + 0x4a, 0x23, 0x71, 0xcd, 0x7b, 0xc4, 0x23, 0x72, 0x9f, 0xaf, 0x92, 0xdd, 0x97, 0x3d, 0x42, 0xbc, + 0x2e, 0x36, 0x51, 0xe4, 0x9b, 0x28, 0x0c, 0x09, 0x43, 0xcc, 0x27, 0xe1, 0x38, 0xa6, 0x9a, 0x78, + 0x85, 0xb5, 0xd7, 0xdb, 0x37, 0x51, 0x38, 0x4c, 0x5c, 0x57, 0x52, 0xf9, 0x22, 0xc7, 0xc1, 0x94, + 0xb6, 0x59, 0x2f, 0xea, 0xe2, 0x04, 0x54, 0x4b, 0x81, 0xba, 0x64, 0x9c, 0xea, 0x52, 0xca, 0x17, + 0xa1, 0x18, 0x05, 0xc9, 0xa7, 0x9b, 0xdf, 0x66, 0xc0, 0xa5, 0x5d, 0xea, 0x6d, 0xb2, 0x0e, 0x8e, + 0x71, 0x2f, 0x68, 0x0d, 0xe0, 0x26, 0x50, 0x5d, 0xc4, 0x90, 0xa6, 0x34, 0x94, 0xe5, 0xf2, 0xea, + 0xbc, 0x21, 0x73, 0x33, 0xc6, 0xb9, 0x19, 0xeb, 0xe1, 0xd0, 0x7a, 0xe9, 0xc7, 0x87, 0x2b, 0x8b, + 0xcf, 0xd2, 0x65, 0xb4, 0x06, 0x1b, 0x88, 0x21, 0x5b, 0x84, 0xc3, 0x2a, 0x50, 0xa9, 0xff, 0x29, + 0xd6, 0x32, 0x0d, 0x65, 0x59, 0xb1, 0x72, 0x47, 0x23, 0x5d, 0x59, 0xb1, 0xc5, 0x16, 0x7c, 0x1b, + 0x5c, 0x76, 0x71, 0x14, 0x63, 0x07, 0x31, 0xec, 0xb6, 0x3b, 0x88, 0x76, 0xb4, 0x6c, 0x43, 0x59, + 0x2e, 0x59, 0xe5, 0xbf, 0x47, 0x7a, 0x21, 0xee, 0x46, 0x6b, 0xcd, 0x95, 0xa6, 0x3d, 0x3b, 0xc1, + 0xbc, 0x83, 0x68, 0x07, 0xbe, 0x31, 0x15, 0xb5, 0x1f, 0x93, 0x40, 0x53, 0x45, 0x54, 0x46, 0x53, + 0x4e, 0x82, 0xb7, 0x62, 0x12, 0x40, 0x08, 0x54, 0x81, 0xc8, 0x35, 0x94, 0xe5, 0x8a, 0x2d, 0xd6, + 0xf0, 0x55, 0x90, 0x8d, 0xd1, 0x27, 0x5a, 0x9e, 0x6f, 0x59, 0xf0, 0xd1, 0x48, 0x9f, 0x79, 0x32, + 0xd2, 0xc1, 0xa4, 0x72, 0x9b, 0xbb, 0xd7, 0x2e, 0x7d, 0xf1, 0x9d, 0x3e, 0x73, 0xff, 0xe9, 0x83, + 0x6b, 0x22, 0xa8, 0xf9, 0x7d, 0x06, 0x14, 0x77, 0xb0, 0x87, 0x9c, 0x61, 0x6b, 0x00, 0xe7, 0x41, + 0x2e, 0x24, 0xa1, 0x83, 0x05, 0x37, 0xaa, 0x2d, 0x0d, 0x78, 0x03, 0x94, 0x3c, 0xc4, 0xb5, 0xe0, + 0x3b, 0xb2, 0xdc, 0x92, 0x55, 0x7d, 0x32, 0xd2, 0x17, 0xa4, 0x2c, 0xa8, 0x7b, 0xcf, 0xf0, 0x89, + 0x19, 0x20, 0xd6, 0x31, 0xb6, 0x43, 0x66, 0x17, 0x3d, 0x44, 0xef, 0x70, 0x28, 0xac, 0x83, 0xac, + 0x87, 0xa8, 0x28, 0x5d, 0xb5, 0x2a, 0x07, 0x23, 0xbd, 0x78, 0x1b, 0xd1, 0x1d, 0x3f, 0xf0, 0x99, + 0xcd, 0x1d, 0x70, 0x16, 0x64, 0x18, 0x91, 0x35, 0xda, 0x19, 0x46, 0xe0, 0x4d, 0x90, 0xeb, 0xa3, + 0x6e, 0x0f, 0x8b, 0xa2, 0x4a, 0xd6, 0x95, 0x53, 0xbf, 0x71, 0x30, 0xd2, 0xf3, 0xeb, 0x01, 0xe9, + 0x85, 0xcc, 0x96, 0x11, 0x9c, 0x0e, 0xd1, 0xd3, 0xbc, 0xa4, 0x43, 0x34, 0xa8, 0x02, 0x94, 0xbe, + 0x56, 0x10, 0x1b, 0x4a, 0x9f, 0x5b, 0xb1, 0x56, 0x94, 0x56, 0xcc, 0x2d, 0xaa, 0x95, 0xa4, 0x45, + 0xd7, 0x74, 0x4e, 0xc9, 0x19, 0x1d, 0x6f, 0xfe, 0x94, 0x05, 0x95, 0x75, 0x21, 0xcb, 0x1d, 0x9f, + 0xb2, 0xd6, 0x00, 0xbe, 0x0b, 0x8a, 0x4e, 0x07, 0xf9, 0x61, 0xdb, 0x77, 0x05, 0x57, 0x25, 0xcb, + 0x3c, 0x2b, 0xdb, 0xc2, 0x2d, 0x0e, 0xde, 0xde, 0x38, 0x1a, 0xe9, 0x05, 0x47, 0x2e, 0xed, 0x64, + 0xe1, 0x4e, 0x48, 0xcf, 0x9c, 0x4a, 0x7a, 0xf6, 0x3f, 0x93, 0xae, 0x9e, 0x4d, 0x7a, 0x2e, 0x4d, + 0x7a, 0xfe, 0xb9, 0x49, 0x2f, 0x9c, 0x20, 0xfd, 0x43, 0x50, 0x94, 0xf7, 0x17, 0x53, 0xad, 0xd8, + 0xc8, 0x2e, 0x97, 0x57, 0x97, 0x8c, 0x14, 0xab, 0x92, 0xca, 0x16, 0xbf, 0xe0, 0x56, 0x83, 0xeb, + 0xf4, 0x68, 0xa4, 0x03, 0x74, 0xcc, 0xef, 0x0f, 0xbf, 0xe9, 0x60, 0xc2, 0xb6, 0x7d, 0x7c, 0xa0, + 0xec, 0x68, 0x69, 0xaa, 0xa3, 0x60, 0xaa, 0xa3, 0xe5, 0x0b, 0x77, 0xf4, 0x4b, 0x15, 0x54, 0x36, + 0x86, 0x21, 0x0a, 0x7c, 0x67, 0x0b, 0xe3, 0x17, 0xd2, 0xd1, 0x9b, 0xa0, 0xcc, 0x3b, 0xca, 0xfc, + 0xa8, 0xed, 0xa0, 0xe8, 0xfc, 0x9e, 0xf2, 0xfe, 0xb7, 0xfc, 0xe8, 0x16, 0x8a, 0xc6, 0xa1, 0xfb, + 0x18, 0x8b, 0x50, 0xf5, 0x22, 0xa1, 0x5b, 0x18, 0xf3, 0xd0, 0x44, 0x0f, 0xb9, 0xb3, 0xf5, 0x90, + 0x4f, 0xeb, 0xa1, 0xf0, 0xdc, 0x7a, 0x28, 0x9e, 0xa2, 0x87, 0xd2, 0xff, 0xa2, 0x07, 0x30, 0xa5, + 0x87, 0xf2, 0x94, 0x1e, 0x2a, 0x17, 0xd6, 0x43, 0x13, 0xd4, 0x36, 0x07, 0x0c, 0x87, 0xd4, 0x27, + 0xe1, 0x7b, 0x91, 0x98, 0x5d, 0x93, 0x87, 0x73, 0x4d, 0xe5, 0xe1, 0xcd, 0xbf, 0x14, 0xb0, 0x30, + 0x35, 0x4a, 0x6c, 0x4c, 0x23, 0x12, 0x52, 0x51, 0xb9, 0x78, 0xe5, 0x85, 0x70, 0x6c, 0xb1, 0x86, + 0x57, 0x81, 0xda, 0x25, 0x1e, 0xd5, 0x32, 0xa2, 0xea, 0x85, 0x74, 0xd5, 0x3b, 0xc4, 0xb3, 0x05, + 0x04, 0xce, 0x81, 0x6c, 0x8c, 0x99, 0x50, 0x44, 0xc5, 0xe6, 0x4b, 0x58, 0x05, 0xc5, 0x7e, 0xd0, + 0xc6, 0x71, 0x4c, 0xe2, 0xe4, 0x81, 0x2c, 0xf4, 0x83, 0x4d, 0x6e, 0x72, 0x17, 0xd7, 0x42, 0x8f, + 0x62, 0x57, 0x76, 0xd5, 0x2e, 0x78, 0x88, 0xde, 0xa5, 0xd8, 0x85, 0x4b, 0x00, 0xec, 0x75, 0x89, + 0x73, 0x4f, 0x8e, 0x1c, 0xf9, 0x16, 0x96, 0xc4, 0x8e, 0x18, 0x30, 0x6f, 0x02, 0x88, 0x07, 0xd8, + 0xe9, 0xf1, 0xea, 0xda, 0xc7, 0x67, 0x14, 0xc4, 0x19, 0x73, 0xc7, 0x9e, 0xdb, 0xf2, 0xb0, 0xa4, + 0xe6, 0xaf, 0x15, 0x70, 0x79, 0x97, 0x7a, 0x77, 0x23, 0x17, 0x31, 0x7c, 0x47, 0x0c, 0x56, 0xfe, + 0x34, 0xa1, 0x1e, 0xeb, 0x90, 0xd8, 0x67, 0xc3, 0xe4, 0xae, 0x68, 0x3f, 0x3f, 0x5c, 0x99, 0x4f, + 0x7e, 0x13, 0xd6, 0x5d, 0x37, 0xc6, 0x94, 0xbe, 0xcf, 0x62, 0x3f, 0xf4, 0xec, 0x09, 0x14, 0xde, + 0x00, 0x79, 0x39, 0x9a, 0xc5, 0xbd, 0x28, 0xaf, 0x6a, 0x69, 0x4e, 0xe4, 0x17, 0x2c, 0x95, 0x8b, + 0xc0, 0x4e, 0xd0, 0x6b, 0xb3, 0x7c, 0x5a, 0x4d, 0xce, 0x69, 0x56, 0xc1, 0xe2, 0x33, 0x29, 0x8d, + 0x1b, 0xb1, 0xfa, 0xa7, 0x02, 0xb2, 0xbb, 0xd4, 0x83, 0x9f, 0x81, 0x13, 0x73, 0x0f, 0xea, 0xe9, + 0x0f, 0x4d, 0xf5, 0xb1, 0xf6, 0xfa, 0x39, 0x80, 0xf1, 0xf9, 0xcd, 0xd7, 0xee, 0xff, 0xf2, 0xc7, + 0x37, 0x19, 0xbd, 0xb9, 0x64, 0xa6, 0xfe, 0x3a, 0x70, 0x82, 0x6e, 0xb3, 0x01, 0xfc, 0x08, 0x54, + 0xa6, 0x18, 0x7b, 0xe5, 0x5f, 0xcf, 0x3f, 0x09, 0xa9, 0x5d, 0x3d, 0x17, 0x32, 0x4e, 0xa2, 0x96, + 0xfb, 0xfc, 0xe9, 0x83, 0x6b, 0x8a, 0xe5, 0x3c, 0x3a, 0xa8, 0x2b, 0x8f, 0x0f, 0xea, 0xca, 0xef, + 0x07, 0x75, 0xe5, 0xab, 0xc3, 0xfa, 0xcc, 0xe3, 0xc3, 0xfa, 0xcc, 0xaf, 0x87, 0xf5, 0x99, 0x0f, + 0xb6, 0x3d, 0x9f, 0x75, 0x7a, 0x7b, 0x86, 0x43, 0x02, 0x73, 0x7b, 0x7c, 0xea, 0x0e, 0xda, 0xa3, + 0x93, 0xac, 0x57, 0x1c, 0x12, 0xe3, 0x93, 0x26, 0x7f, 0xba, 0xcc, 0x80, 0xb8, 0xbd, 0x2e, 0xa6, + 0xa2, 0x24, 0x36, 0x8c, 0x30, 0xdd, 0xcb, 0x8b, 0xdf, 0xa2, 0xb7, 0xfe, 0x09, 0x00, 0x00, 0xff, + 0xff, 0x58, 0xcb, 0x01, 0xd0, 0x57, 0x0a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1109,6 +1114,11 @@ func (m *MsgEthereumTxResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.ExecutionGasUsed != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.ExecutionGasUsed)) + i-- + dAtA[i] = 0x38 + } if len(m.BlockHash) > 0 { i -= len(m.BlockHash) copy(dAtA[i:], m.BlockHash) @@ -1456,6 +1466,9 @@ func (m *MsgEthereumTxResponse) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } + if m.ExecutionGasUsed != 0 { + n += 1 + sovTx(uint64(m.ExecutionGasUsed)) + } return n } @@ -3141,6 +3154,25 @@ func (m *MsgEthereumTxResponse) Unmarshal(dAtA []byte) error { m.BlockHash = []byte{} } iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExecutionGasUsed", wireType) + } + m.ExecutionGasUsed = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ExecutionGasUsed |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) diff --git a/chain/evm/types/utils.go b/chain/evm/types/utils.go index 9f250dab..3604ad3d 100644 --- a/chain/evm/types/utils.go +++ b/chain/evm/types/utils.go @@ -2,11 +2,9 @@ package types import ( "encoding/hex" - "encoding/json" "fmt" "math/big" - abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/gogoproto/proto" errorsmod "cosmossdk.io/errors" @@ -86,64 +84,20 @@ func logsFromTxResponse(dst []*ethtypes.Log, rsp *MsgEthereumTxResponse, blockNu return dst } -// DecodeMsgLogsFromEvents decodes a protobuf-encoded byte slice into ethereum logs, for a single message. -func DecodeMsgLogsFromEvents(in []byte, events []abci.Event, msgIndex int, blockNumber uint64) ([]*ethtypes.Log, error) { +// DecodeMsgLogs decodes a protobuf-encoded byte slice into ethereum logs, for a single message. +func DecodeMsgLogs(in []byte, msgIndex int, blockNumber uint64) ([]*ethtypes.Log, error) { txResponses, err := DecodeTxResponses(in) if err != nil { return nil, err } - - var logs []*ethtypes.Log - if msgIndex < len(txResponses) { - logs = logsFromTxResponse(nil, txResponses[msgIndex], blockNumber) - } - - if len(logs) == 0 { - logs, err = TxLogsFromEvents(events, msgIndex) + if msgIndex >= len(txResponses) { + return nil, fmt.Errorf("invalid message index: %d", msgIndex) } - - return logs, err + return logsFromTxResponse(nil, txResponses[msgIndex], blockNumber), nil } -// TxLogsFromEvents parses ethereum logs from cosmos events for specific msg index -func TxLogsFromEvents(events []abci.Event, msgIndex int) ([]*ethtypes.Log, error) { - for _, event := range events { - if event.Type != EventTypeTxLog { - continue - } - - if msgIndex > 0 { - // not the eth tx we want - msgIndex-- - continue - } - - return ParseTxLogsFromEvent(event) - } - - return []*ethtypes.Log{}, nil -} - -// ParseTxLogsFromEvent parse tx logs from one event -func ParseTxLogsFromEvent(event abci.Event) ([]*ethtypes.Log, error) { - logs := make([]*Log, 0, len(event.Attributes)) - for _, attr := range event.Attributes { - if attr.Key != AttributeKeyTxLog { - continue - } - - var log Log - if err := json.Unmarshal([]byte(attr.Value), &log); err != nil { - return nil, err - } - - logs = append(logs, &log) - } - return LogsToEthereum(logs), nil -} - -// DecodeTxLogsFromEvents decodes a protobuf-encoded byte slice into ethereum logs -func DecodeTxLogsFromEvents(in []byte, events []abci.Event, blockNumber uint64) ([]*ethtypes.Log, error) { +// DecodeTxLogs decodes a protobuf-encoded byte slice into ethereum logs +func DecodeTxLogs(in []byte, blockNumber uint64) ([]*ethtypes.Log, error) { txResponses, err := DecodeTxResponses(in) if err != nil { return nil, err @@ -152,18 +106,6 @@ func DecodeTxLogsFromEvents(in []byte, events []abci.Event, blockNumber uint64) for _, response := range txResponses { logs = logsFromTxResponse(logs, response, blockNumber) } - if len(logs) == 0 { - for _, event := range events { - if event.Type != EventTypeTxLog { - continue - } - txLogs, err := ParseTxLogsFromEvent(event) - if err != nil { - return nil, err - } - logs = append(logs, txLogs...) - } - } return logs, nil } diff --git a/chain/exchange/types/codec.go b/chain/exchange/types/codec.go index 6db21664..41b9fcf7 100644 --- a/chain/exchange/types/codec.go +++ b/chain/exchange/types/codec.go @@ -15,6 +15,10 @@ import ( // RegisterLegacyAminoCodec registers the necessary x/exchange interfaces and concrete types // on the provided LegacyAmino codec. These types are used for Amino JSON serialization. func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + // Register oneof interfaces + cdc.RegisterInterface((*isOpenNotionalCap_Cap)(nil), nil) + cdc.RegisterInterface((*isFullDerivativeMarket_Info)(nil), nil) + cdc.RegisterConcrete(&MsgDeposit{}, "exchange/MsgDeposit", nil) cdc.RegisterConcrete(&MsgWithdraw{}, "exchange/MsgWithdraw", nil) cdc.RegisterConcrete(&MsgInstantSpotMarketLaunch{}, "exchange/MsgInstantSpotMarketLaunch", nil) @@ -34,7 +38,11 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgSubaccountTransfer{}, "exchange/MsgSubaccountTransfer", nil) cdc.RegisterConcrete(&MsgExternalTransfer{}, "exchange/MsgExternalTransfer", nil) cdc.RegisterConcrete(&MsgIncreasePositionMargin{}, "exchange/MsgIncreasePositionMargin", nil) + cdc.RegisterConcrete(&MsgDecreasePositionMargin{}, "exchange/MsgDecreasePositionMargin", nil) cdc.RegisterConcrete(&MsgLiquidatePosition{}, "exchange/MsgLiquidatePosition", nil) + cdc.RegisterConcrete(&MsgEmergencySettleMarket{}, "exchange/MsgEmergencySettleMarket", nil) + cdc.RegisterConcrete(&MsgAuthorizeStakeGrants{}, "exchange/MsgAuthorizeStakeGrants", nil) + cdc.RegisterConcrete(&MsgActivateStakeGrant{}, "exchange/MsgActivateStakeGrant", nil) cdc.RegisterConcrete(&MsgBatchUpdateOrders{}, "exchange/MsgBatchUpdateOrders", nil) cdc.RegisterConcrete(&MsgPrivilegedExecuteContract{}, "exchange/MsgPrivilegedExecuteContract", nil) cdc.RegisterConcrete(&MsgRewardsOptOut{}, "exchange/MsgRewardsOptOut", nil) @@ -80,6 +88,14 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&BatchUpdateOrdersAuthz{}, "exchange/BatchUpdateOrdersAuthz", nil) cdc.RegisterConcrete(&Params{}, "exchange/Params", nil) + + // Register oneof implementations for OpenNotionalCap + cdc.RegisterConcrete(&OpenNotionalCap_Uncapped{}, "exchange/OpenNotionalCapUncapped", nil) + cdc.RegisterConcrete(&OpenNotionalCap_Capped{}, "exchange/OpenNotionalCapCapped", nil) + + // Register oneof implementations for FullDerivativeMarket + cdc.RegisterConcrete(&FullDerivativeMarket_PerpetualInfo{}, "exchange/FullDerivativeMarketPerpetualInfo", nil) + cdc.RegisterConcrete(&FullDerivativeMarket_FuturesInfo{}, "exchange/FullDerivativeMarketFuturesInfo", nil) } func RegisterInterfaces(registry types.InterfaceRegistry) { @@ -103,7 +119,11 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { &MsgSubaccountTransfer{}, &MsgExternalTransfer{}, &MsgIncreasePositionMargin{}, + &MsgDecreasePositionMargin{}, &MsgLiquidatePosition{}, + &MsgEmergencySettleMarket{}, + &MsgAuthorizeStakeGrants{}, + &MsgActivateStakeGrant{}, &MsgBatchUpdateOrders{}, &MsgPrivilegedExecuteContract{}, &MsgRewardsOptOut{}, diff --git a/chain/exchange/types/errors.go b/chain/exchange/types/errors.go index d2c2185e..6697044b 100644 --- a/chain/exchange/types/errors.go +++ b/chain/exchange/types/errors.go @@ -117,4 +117,6 @@ var ( ErrPositionNotOffsettable = errors.Register(ModuleName, 109, "position not offsettable") ErrOffsettingSubaccountIDsEmpty = errors.Register(ModuleName, 110, "offsetting subaccount IDs cannot be empty") ErrInvalidOpenNotionalCap = errors.Register(ModuleName, 111, "invalid open notional cap") + ErrOpenNotionalCapBreached = errors.Register(ModuleName, 112, "open notional cap breached") + ErrNoOffsettingPositionsFound = errors.Register(ModuleName, 113, "no valid offsetting positions found") ) diff --git a/chain/exchange/types/exchange.pb.go b/chain/exchange/types/exchange.pb.go index 74abc83a..3ad2d6b3 100644 --- a/chain/exchange/types/exchange.pb.go +++ b/chain/exchange/types/exchange.pb.go @@ -156,6 +156,8 @@ const ( ExecutionType_LimitMatchNewOrder ExecutionType = 4 ExecutionType_MarketLiquidation ExecutionType = 5 ExecutionType_ExpiryMarketSettlement ExecutionType = 6 + ExecutionType_OffsettingPosition ExecutionType = 7 + ExecutionType_Synthetic ExecutionType = 8 ) var ExecutionType_name = map[int32]string{ @@ -166,6 +168,8 @@ var ExecutionType_name = map[int32]string{ 4: "LimitMatchNewOrder", 5: "MarketLiquidation", 6: "ExpiryMarketSettlement", + 7: "OffsettingPosition", + 8: "Synthetic", } var ExecutionType_value = map[string]int32{ @@ -176,6 +180,8 @@ var ExecutionType_value = map[string]int32{ "LimitMatchNewOrder": 4, "MarketLiquidation": 5, "ExpiryMarketSettlement": 6, + "OffsettingPosition": 7, + "Synthetic": 8, } func (x ExecutionType) String() string { @@ -3609,300 +3615,301 @@ func init() { } var fileDescriptor_2116e2804e9c53f9 = []byte{ - // 4675 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5c, 0xdb, 0x6f, 0x24, 0xd9, - 0x59, 0x9f, 0xea, 0xf6, 0xa5, 0xfd, 0xf5, 0xc5, 0xed, 0xb2, 0xc7, 0x6e, 0xdb, 0x33, 0x76, 0x6f, - 0xcf, 0x4e, 0x76, 0x76, 0x76, 0xd7, 0xde, 0x99, 0xb0, 0x61, 0x77, 0xa2, 0x28, 0xdb, 0xbe, 0xcd, - 0x34, 0xeb, 0x5b, 0xaa, 0xed, 0x25, 0x9b, 0x28, 0x29, 0x8e, 0xab, 0x8e, 0xdd, 0x67, 0x5d, 0x97, - 0x9e, 0x3a, 0xd5, 0x1e, 0x7b, 0x11, 0x12, 0x0f, 0x0b, 0x62, 0x0d, 0x88, 0xf0, 0x80, 0x90, 0x90, - 0x06, 0x85, 0x07, 0x84, 0xe0, 0x85, 0x88, 0x27, 0x24, 0x78, 0x40, 0x42, 0x90, 0x3c, 0x04, 0x29, - 0x0f, 0x3c, 0x20, 0x1e, 0x02, 0xda, 0x45, 0x0a, 0xe2, 0x6f, 0x40, 0x11, 0x3a, 0x97, 0xba, 0xf4, - 0xc5, 0xed, 0x2e, 0x8f, 0x17, 0x02, 0xbc, 0xcc, 0xf4, 0xb9, 0x7c, 0xbf, 0xf3, 0x9d, 0xef, 0xfb, - 0xce, 0xf7, 0x7d, 0xe7, 0x52, 0x86, 0x57, 0x89, 0xf3, 0x21, 0x36, 0x7c, 0x72, 0x82, 0x97, 0xf1, - 0xa9, 0xd1, 0x40, 0xce, 0x11, 0x5e, 0x3e, 0x79, 0x70, 0x80, 0x7d, 0xf4, 0x20, 0xac, 0x58, 0x6a, - 0x7a, 0xae, 0xef, 0xaa, 0x73, 0x61, 0xd7, 0xa5, 0xb0, 0x45, 0x76, 0x9d, 0x9b, 0x3a, 0x72, 0x8f, - 0x5c, 0xde, 0x6d, 0x99, 0xfd, 0x12, 0x14, 0x73, 0x0b, 0x86, 0x4b, 0x6d, 0x97, 0x2e, 0x1f, 0x20, - 0x1a, 0xa1, 0x1a, 0x2e, 0x71, 0x64, 0xfb, 0xdd, 0x68, 0x70, 0xd7, 0x43, 0x86, 0x15, 0x75, 0x12, - 0x45, 0xd9, 0x6d, 0x02, 0xd9, 0xc4, 0x71, 0x97, 0xf9, 0xbf, 0xa2, 0xaa, 0xf2, 0x6b, 0x29, 0x18, - 0xdf, 0x69, 0x62, 0x67, 0xdb, 0xf5, 0x89, 0xeb, 0x20, 0x6b, 0x15, 0x35, 0xd5, 0x5f, 0x82, 0x4c, - 0xcb, 0x31, 0x50, 0xb3, 0x89, 0xcd, 0x92, 0x52, 0x56, 0xee, 0x65, 0x1f, 0x7e, 0x71, 0xe9, 0x62, - 0x96, 0x97, 0x3a, 0xc8, 0xf7, 0x25, 0xe9, 0x4a, 0xfe, 0x2f, 0x7e, 0xf2, 0xbd, 0xfb, 0x21, 0xd2, - 0x93, 0x1b, 0x5a, 0xf8, 0x5b, 0xfd, 0x3a, 0x8c, 0x48, 0xfc, 0x14, 0xc7, 0x7f, 0x90, 0x00, 0x7f, - 0x55, 0xa0, 0x67, 0x19, 0xfa, 0x48, 0x88, 0x2d, 0x7f, 0x3d, 0x5a, 0x3e, 0xff, 0xc9, 0xf7, 0xee, - 0xdf, 0x1f, 0x1c, 0x6d, 0x65, 0x18, 0xd2, 0x06, 0x6a, 0x56, 0x34, 0x98, 0xb9, 0x60, 0x1e, 0x8f, - 0x7e, 0x9e, 0x41, 0x3e, 0x4c, 0x2e, 0x80, 0xca, 0x27, 0x0a, 0xdc, 0xec, 0xc9, 0xbc, 0xfa, 0x0e, - 0x0c, 0x9f, 0x20, 0xab, 0x85, 0xb9, 0x78, 0xc7, 0x56, 0xee, 0xfc, 0xe0, 0xc7, 0x8b, 0x37, 0xfe, - 0xf9, 0xc7, 0x8b, 0xf3, 0x42, 0xcd, 0xd4, 0x3c, 0x5e, 0x22, 0xee, 0xb2, 0x8d, 0xfc, 0xc6, 0xd2, - 0x26, 0x3e, 0x42, 0xc6, 0xd9, 0x1a, 0x36, 0x34, 0x41, 0xf1, 0xe8, 0x2d, 0xc6, 0xcd, 0x9b, 0x49, - 0xc5, 0x55, 0xf9, 0x64, 0x1a, 0x46, 0x76, 0x91, 0x87, 0x6c, 0xaa, 0x62, 0x58, 0xa4, 0x4d, 0xd7, - 0xd7, 0x6d, 0xe4, 0x1d, 0x63, 0x5f, 0x27, 0x0e, 0xf5, 0x91, 0xe3, 0xeb, 0x16, 0xa1, 0x3e, 0x71, - 0x8e, 0xf4, 0x43, 0x8c, 0xa5, 0xd6, 0x67, 0x97, 0x04, 0x3f, 0x4b, 0xcc, 0xec, 0x42, 0xfc, 0x55, - 0x97, 0x38, 0x2b, 0x43, 0x8c, 0x63, 0x6d, 0x9e, 0xe1, 0x6c, 0x71, 0x98, 0x9a, 0x40, 0xd9, 0x14, - 0x20, 0x1b, 0x18, 0xab, 0x4f, 0xe1, 0xae, 0x89, 0x3d, 0x72, 0x82, 0x18, 0x9b, 0xfd, 0x06, 0x4b, - 0x0d, 0x36, 0xd8, 0x4b, 0x11, 0xda, 0x45, 0x43, 0x22, 0x98, 0x37, 0xf1, 0x21, 0x6a, 0x59, 0xbe, - 0x2e, 0x67, 0x78, 0x8c, 0x3d, 0x36, 0x86, 0xee, 0x21, 0x1f, 0x97, 0xd2, 0x83, 0x0b, 0x7b, 0x46, - 0xe2, 0xd4, 0xf9, 0x04, 0x8f, 0xb1, 0xb7, 0x81, 0xb1, 0x86, 0xfc, 0xee, 0x21, 0xfc, 0xf6, 0x21, - 0x86, 0xae, 0x36, 0xc4, 0x5e, 0x7c, 0x08, 0x1b, 0x5e, 0x0a, 0x86, 0x68, 0x13, 0x60, 0xdb, 0x40, - 0xc3, 0x83, 0x0f, 0x74, 0x5b, 0xa2, 0xad, 0xc5, 0xe4, 0x77, 0xe9, 0x70, 0x1d, 0xf3, 0x1a, 0x79, - 0x91, 0xe1, 0xda, 0x66, 0x67, 0xc2, 0xad, 0x60, 0x38, 0xe2, 0x10, 0x9f, 0x20, 0x8b, 0xd9, 0xc6, - 0x11, 0x71, 0xd8, 0x40, 0xc4, 0x2d, 0x8d, 0x0e, 0x3e, 0xd2, 0xac, 0x04, 0xaa, 0x09, 0x9c, 0x2d, - 0x0e, 0xa3, 0x31, 0x14, 0xd5, 0x82, 0x72, 0x30, 0x8a, 0x8d, 0x88, 0xe3, 0x63, 0x07, 0x39, 0x06, - 0x6e, 0x1f, 0x29, 0x93, 0x7c, 0x4e, 0x5b, 0x11, 0x56, 0x7c, 0xb4, 0xb7, 0xa1, 0x14, 0x8c, 0x76, - 0xd8, 0x72, 0x4c, 0x66, 0xd8, 0xac, 0x9f, 0x77, 0x82, 0xac, 0xd2, 0x58, 0x59, 0xb9, 0x97, 0xd6, - 0xa6, 0x65, 0xfb, 0x86, 0x68, 0xae, 0xc9, 0x56, 0xf5, 0x55, 0x28, 0x06, 0x14, 0x76, 0xcb, 0xf2, - 0x49, 0xd3, 0xc2, 0x25, 0xe0, 0x14, 0xe3, 0xb2, 0x7e, 0x4b, 0x56, 0xab, 0x5f, 0x87, 0x69, 0x0f, - 0x5b, 0xe8, 0x4c, 0xaa, 0x85, 0x36, 0x90, 0x27, 0x95, 0x93, 0x1d, 0x7c, 0x22, 0x93, 0x12, 0x62, - 0x03, 0xe3, 0x3a, 0x03, 0xe0, 0x2a, 0x21, 0xb0, 0x18, 0xb0, 0xdf, 0x70, 0x5b, 0x9e, 0x75, 0x16, - 0xce, 0x82, 0xc1, 0xeb, 0x06, 0x6a, 0x96, 0x72, 0x83, 0x0f, 0x11, 0xac, 0x8f, 0x27, 0x1c, 0x4a, - 0x4e, 0x98, 0x8d, 0xc3, 0x42, 0x4b, 0x4c, 0xfb, 0x72, 0x28, 0x2e, 0x28, 0x4c, 0x7d, 0x31, 0x95, - 0x7c, 0x72, 0xed, 0x8b, 0x71, 0x6a, 0x12, 0x86, 0x4f, 0x68, 0x0d, 0x16, 0x6d, 0x74, 0x1a, 0x37, - 0x67, 0xd7, 0x33, 0xb1, 0xa7, 0x53, 0x62, 0x62, 0xdd, 0x70, 0x5b, 0x8e, 0x5f, 0x2a, 0x94, 0x95, - 0x7b, 0x79, 0x6d, 0xde, 0x46, 0xa7, 0x91, 0x9d, 0xee, 0xb0, 0x4e, 0x75, 0x62, 0xe2, 0x55, 0xd6, - 0x45, 0xa5, 0xf0, 0x0a, 0x71, 0x3e, 0xd4, 0x3d, 0xfc, 0x0c, 0x79, 0xa6, 0x4e, 0xd9, 0x8a, 0x30, - 0x75, 0x0f, 0x3f, 0x6d, 0x11, 0x0f, 0xdb, 0xd8, 0xf1, 0x75, 0xbf, 0xe1, 0x61, 0xda, 0x70, 0x2d, - 0xb3, 0x34, 0xce, 0xd9, 0xbe, 0x2d, 0xd9, 0xbe, 0xd9, 0xcd, 0x76, 0xcd, 0xf1, 0xb5, 0x3b, 0xc4, - 0xf9, 0x50, 0xe3, 0x60, 0x75, 0x8e, 0xa5, 0x45, 0x50, 0x7b, 0x01, 0x92, 0xfa, 0x18, 0xca, 0xbe, - 0x87, 0x84, 0xf0, 0x79, 0x5f, 0xaa, 0x9f, 0x60, 0xe1, 0x2b, 0xcd, 0x16, 0xb7, 0x5b, 0xa7, 0x54, - 0xe4, 0x06, 0x72, 0x5b, 0xf6, 0x13, 0x90, 0xf4, 0x7d, 0xd1, 0x6b, 0x4d, 0x76, 0x62, 0x92, 0xb6, - 0xc8, 0xd3, 0x16, 0x31, 0x91, 0xef, 0x7a, 0xe1, 0x24, 0x22, 0xa3, 0x99, 0x48, 0x20, 0xe9, 0x08, - 0x48, 0xf2, 0x1f, 0x9a, 0xce, 0x29, 0xbc, 0x7a, 0x40, 0x1c, 0xe4, 0x9d, 0xe9, 0x6e, 0x93, 0x0d, - 0x4b, 0xfb, 0x39, 0x7a, 0x75, 0x30, 0x47, 0xff, 0xb2, 0x40, 0xdc, 0x11, 0x80, 0x17, 0xf9, 0xfa, - 0x5f, 0x55, 0xa0, 0x8c, 0x7c, 0xd7, 0x26, 0x46, 0x30, 0xa4, 0xd0, 0x31, 0x32, 0x0c, 0x4c, 0xa9, - 0x6e, 0xe1, 0x13, 0x6c, 0x95, 0x26, 0xcb, 0xca, 0xbd, 0xc2, 0xc3, 0xb7, 0xfb, 0x65, 0x17, 0x55, - 0x8e, 0x21, 0x46, 0xe1, 0x06, 0x50, 0xe5, 0x00, 0x9b, 0x8c, 0x5e, 0xbb, 0x85, 0xfa, 0xb4, 0xaa, - 0xa7, 0xf0, 0x0a, 0x8f, 0x01, 0xbd, 0xd8, 0x60, 0x4b, 0x54, 0xae, 0x68, 0x82, 0xbd, 0xd2, 0xd4, - 0xe0, 0xd2, 0xae, 0x30, 0xcc, 0x2e, 0xae, 0x36, 0x30, 0xde, 0x0a, 0xe1, 0xd4, 0x8f, 0x15, 0x78, - 0x23, 0x66, 0xdd, 0x03, 0x30, 0x70, 0x73, 0x70, 0x06, 0xee, 0x45, 0xc8, 0x97, 0xb0, 0xf1, 0x9b, - 0x0a, 0x3c, 0xe8, 0x50, 0xff, 0x00, 0xac, 0x4c, 0x0f, 0xce, 0xca, 0x6b, 0x6d, 0xa6, 0x70, 0x09, - 0x37, 0xdf, 0x86, 0x59, 0x9b, 0x38, 0xc4, 0x46, 0x96, 0xce, 0x73, 0x5b, 0xc3, 0xb5, 0xa2, 0x00, - 0x36, 0x33, 0xf8, 0xa0, 0xd3, 0x12, 0x65, 0x57, 0x82, 0x04, 0x91, 0xeb, 0x9b, 0xf0, 0x1a, 0xa1, - 0xa1, 0x61, 0x77, 0xe7, 0x36, 0x16, 0x6a, 0x39, 0x46, 0x43, 0xc7, 0x0e, 0x3a, 0xb0, 0xb0, 0x59, - 0x2a, 0x95, 0x95, 0x7b, 0x19, 0xed, 0x0b, 0x84, 0x4a, 0xdb, 0x5d, 0xeb, 0x48, 0x5f, 0x36, 0x79, - 0xf7, 0x75, 0xd1, 0x9b, 0xb9, 0xac, 0xa6, 0x4b, 0x7d, 0xdd, 0x75, 0xac, 0x33, 0xdd, 0x76, 0x4d, - 0xac, 0x37, 0x30, 0x39, 0x6a, 0xc4, 0x9d, 0xcc, 0x2c, 0x5f, 0xf6, 0xf3, 0xac, 0xdb, 0x8e, 0x63, - 0x9d, 0x6d, 0xb9, 0x26, 0x7e, 0xc2, 0xfb, 0x44, 0xde, 0xe3, 0x08, 0x1e, 0xc8, 0x10, 0x67, 0x62, - 0xc3, 0xc3, 0x88, 0x62, 0xbd, 0xe9, 0x11, 0x03, 0xeb, 0x3e, 0xb1, 0x31, 0xf5, 0x91, 0xdd, 0x8c, - 0xf0, 0x74, 0x8a, 0x0d, 0xd7, 0x31, 0x69, 0x69, 0x8e, 0xe3, 0xbe, 0x2e, 0x08, 0xd7, 0x24, 0xdd, - 0x2e, 0x23, 0xdb, 0x0b, 0xa8, 0xc2, 0x11, 0xea, 0x82, 0x46, 0x7d, 0x05, 0xc6, 0x83, 0x95, 0xa4, - 0x23, 0xd3, 0x26, 0x0e, 0x2d, 0xcd, 0x97, 0xd3, 0xf7, 0xc6, 0xb4, 0x42, 0x50, 0x5d, 0xe5, 0xb5, - 0xea, 0x26, 0x4c, 0x32, 0x27, 0x8a, 0x5a, 0x06, 0x53, 0xa1, 0xce, 0xdc, 0x32, 0x8b, 0x27, 0xb7, - 0x06, 0x71, 0x98, 0x45, 0xe2, 0x7c, 0x58, 0x15, 0x84, 0x5b, 0xe8, 0x94, 0x85, 0x8f, 0xfb, 0x30, - 0x71, 0x48, 0x4e, 0xb1, 0xa9, 0x1f, 0x21, 0x1a, 0x0a, 0xfa, 0x36, 0x17, 0xf4, 0x38, 0x6f, 0x78, - 0x8c, 0xa8, 0x94, 0xe8, 0xa3, 0xd2, 0xbf, 0x7f, 0x77, 0x51, 0x61, 0xc9, 0x72, 0xc8, 0xe9, 0xb2, - 0x48, 0x80, 0x2b, 0x1f, 0x2b, 0x30, 0x29, 0x74, 0xd0, 0x6e, 0x40, 0xf3, 0x30, 0x16, 0x78, 0x2f, - 0xb1, 0xf1, 0x19, 0xd3, 0x32, 0xa2, 0xa2, 0x66, 0xaa, 0xbf, 0x00, 0x85, 0x0e, 0x3b, 0x4e, 0x0d, - 0x6e, 0x52, 0xf9, 0xc3, 0xf8, 0x40, 0x8f, 0x86, 0x7e, 0xe3, 0xbb, 0x8b, 0x37, 0x2a, 0xdf, 0x07, - 0x28, 0x76, 0x1a, 0x85, 0x3a, 0x0d, 0x23, 0x3e, 0x31, 0x8e, 0xb1, 0x27, 0x19, 0x90, 0x25, 0x75, - 0x11, 0xb2, 0x62, 0x2b, 0xa7, 0x33, 0xb7, 0x29, 0xc6, 0xd6, 0x40, 0x54, 0xad, 0x20, 0x8a, 0xd5, - 0x97, 0x20, 0x27, 0x3b, 0x3c, 0x6d, 0xb9, 0x41, 0xb2, 0xab, 0x49, 0xa2, 0xaf, 0xb1, 0x2a, 0x75, - 0x3d, 0xc4, 0xf0, 0xcf, 0x9a, 0x22, 0x57, 0x2d, 0x3c, 0x7c, 0x39, 0xe6, 0x1c, 0xe5, 0x66, 0x31, - 0xdc, 0x49, 0xf0, 0xe2, 0xde, 0x59, 0x13, 0x07, 0x23, 0xb1, 0xdf, 0xea, 0x12, 0x4c, 0x4a, 0x18, - 0x6a, 0x20, 0x0b, 0xeb, 0x87, 0xc8, 0xf0, 0x5d, 0x8f, 0x67, 0xa4, 0x79, 0x6d, 0x42, 0x34, 0xd5, - 0x59, 0xcb, 0x06, 0x6f, 0x60, 0xac, 0x73, 0x96, 0x74, 0x13, 0x3b, 0xae, 0x2d, 0x52, 0x49, 0x0d, - 0x78, 0xd5, 0x1a, 0xab, 0x69, 0x97, 0xfb, 0x68, 0x87, 0xdc, 0xf7, 0x61, 0xaa, 0x67, 0x9e, 0x98, - 0x20, 0x7b, 0x53, 0x49, 0x77, 0x82, 0xf8, 0x2d, 0x28, 0x5d, 0x98, 0x18, 0x8e, 0x25, 0xf1, 0x15, - 0xbd, 0x33, 0xc2, 0x1a, 0x14, 0x3a, 0x12, 0x76, 0x18, 0x1c, 0x34, 0x67, 0xc7, 0x13, 0xe6, 0x1a, - 0x14, 0x3a, 0x92, 0xf1, 0x04, 0xf9, 0x5e, 0xce, 0x8f, 0x43, 0x5d, 0x9c, 0x42, 0xe6, 0x5e, 0x30, - 0x85, 0x2c, 0x43, 0x96, 0xd0, 0x5d, 0xec, 0x35, 0xb1, 0xdf, 0x42, 0x16, 0x4f, 0xe3, 0x32, 0x5a, - 0xbc, 0x4a, 0x7d, 0x17, 0x46, 0xa8, 0x8f, 0xfc, 0x16, 0xe5, 0xa9, 0x57, 0xe1, 0xe1, 0xbd, 0x7e, - 0x41, 0x59, 0x2c, 0x86, 0x3a, 0xef, 0xaf, 0x49, 0x3a, 0x55, 0x83, 0x49, 0x9b, 0x38, 0xa1, 0x43, - 0x33, 0x8e, 0x75, 0x4a, 0x3e, 0xc2, 0x32, 0xf7, 0x1a, 0x88, 0xf5, 0xa2, 0x4d, 0x1c, 0xe9, 0xd8, - 0x8c, 0xe3, 0x3a, 0xf9, 0x88, 0x4b, 0x84, 0x61, 0x3e, 0x6d, 0x21, 0xc7, 0x27, 0xfe, 0x59, 0x0c, - 0xb6, 0x98, 0x40, 0x22, 0x36, 0x71, 0xbe, 0x26, 0x11, 0x42, 0xe4, 0x0d, 0xc8, 0x31, 0x64, 0x47, - 0xee, 0xc4, 0x93, 0xe4, 0x5b, 0x59, 0x9b, 0x84, 0x3b, 0x78, 0x75, 0x0a, 0x86, 0xb9, 0x83, 0xe5, - 0xd9, 0xd3, 0x98, 0x26, 0x0a, 0xea, 0x6b, 0x30, 0xc1, 0x7f, 0xe8, 0x4d, 0xec, 0xd9, 0x84, 0x52, - 0x16, 0x1e, 0x79, 0xb6, 0x93, 0xd7, 0x8a, 0xbc, 0x61, 0x37, 0xaa, 0x57, 0xef, 0x42, 0x21, 0x58, - 0x80, 0x06, 0x0b, 0x6c, 0x94, 0xa7, 0x23, 0x79, 0x2d, 0x2f, 0xd7, 0xa0, 0xa8, 0x54, 0xeb, 0x30, - 0xe9, 0x61, 0xb3, 0xd5, 0xb9, 0x1a, 0x12, 0x64, 0x0e, 0x13, 0x82, 0xbe, 0x7d, 0x9d, 0x4d, 0xb8, - 0x4d, 0x1c, 0xc9, 0x81, 0x7b, 0xff, 0x69, 0x9e, 0x08, 0xbe, 0x96, 0xe0, 0xd0, 0x47, 0xa6, 0x86, - 0xe3, 0x6e, 0x7b, 0xb5, 0xf4, 0xa4, 0x3f, 0xcd, 0xc0, 0xe4, 0x4a, 0x77, 0xd2, 0x78, 0xa1, 0x33, - 0xbd, 0x03, 0xf9, 0xc0, 0x83, 0x9d, 0xd9, 0x07, 0xae, 0x25, 0xdd, 0xa9, 0x74, 0xa0, 0x75, 0x5e, - 0xc7, 0x42, 0x9c, 0xec, 0xd4, 0xf4, 0xdc, 0x13, 0x62, 0x62, 0x4f, 0xfa, 0xd4, 0x82, 0xa8, 0xde, - 0x95, 0xb5, 0xff, 0x53, 0x6e, 0xf5, 0x01, 0x4c, 0xe1, 0xd3, 0x26, 0x11, 0xe9, 0x7e, 0x14, 0xe0, - 0xb9, 0x7f, 0x4d, 0x6b, 0x93, 0x51, 0x5b, 0x18, 0xc5, 0x19, 0x09, 0xc5, 0xbe, 0x6f, 0xc9, 0xed, - 0x4b, 0x48, 0x32, 0x2a, 0x48, 0xa2, 0xb6, 0x88, 0x24, 0x34, 0xbf, 0x4c, 0xdc, 0xfc, 0x3a, 0x5c, - 0xfa, 0x58, 0x7f, 0x97, 0x0e, 0x1d, 0x2e, 0xbd, 0xdb, 0x39, 0x66, 0xaf, 0xcf, 0x39, 0xe6, 0xae, - 0xdf, 0x39, 0xe6, 0x5f, 0xd0, 0x39, 0xfe, 0x7f, 0x73, 0x7d, 0xdb, 0x50, 0x8c, 0x99, 0x19, 0x67, - 0x3a, 0xe6, 0xfe, 0x94, 0xcb, 0x30, 0xc7, 0x23, 0x62, 0xce, 0x71, 0x97, 0x2b, 0x55, 0xaf, 0xe8, - 0x4a, 0x3f, 0x07, 0xa7, 0x29, 0x1d, 0xd0, 0xbf, 0xa5, 0x60, 0x66, 0x9d, 0x2d, 0xb8, 0xb3, 0x8d, - 0x96, 0xdf, 0xf2, 0x70, 0xb8, 0x6b, 0x3d, 0x74, 0xfb, 0x67, 0x95, 0x17, 0x2d, 0xe2, 0xd4, 0xc5, - 0x8b, 0xf8, 0x4d, 0x98, 0xf2, 0x9f, 0xa1, 0xa6, 0x4e, 0x7d, 0xe4, 0xc5, 0x17, 0x71, 0x9a, 0x93, - 0xa8, 0xac, 0xad, 0xce, 0x9a, 0x22, 0x8a, 0x67, 0xf0, 0x85, 0xf8, 0x20, 0x11, 0xb1, 0xb0, 0x27, - 0xa3, 0x65, 0xb7, 0x2c, 0x9e, 0x83, 0x26, 0x39, 0xbe, 0xac, 0xc4, 0x78, 0x0b, 0x86, 0xe4, 0xea, - 0x5a, 0x0d, 0xe1, 0x7a, 0x1a, 0x42, 0x82, 0x83, 0xcb, 0x4e, 0x43, 0xa8, 0xfc, 0x7d, 0x0a, 0x26, - 0xc3, 0x8c, 0x62, 0x50, 0x11, 0x7f, 0x03, 0x66, 0x2e, 0x3a, 0xd5, 0x4a, 0x90, 0xc1, 0x4f, 0x35, - 0x7a, 0x1d, 0x67, 0xed, 0xc3, 0x54, 0xcf, 0x63, 0xac, 0x04, 0x27, 0xcd, 0x6a, 0xa3, 0xfb, 0xfc, - 0xea, 0xe7, 0x60, 0xda, 0xc1, 0xa7, 0xd1, 0x61, 0x62, 0xa4, 0xe4, 0x21, 0xae, 0xe4, 0x29, 0xd6, - 0x2a, 0x59, 0x89, 0xd4, 0x1c, 0x3b, 0x4b, 0x0c, 0x4f, 0x1f, 0x87, 0xdb, 0xce, 0x12, 0x83, 0x63, - 0xc7, 0xca, 0x67, 0x0a, 0x4c, 0x77, 0x08, 0x52, 0xc2, 0xa9, 0x1a, 0xa8, 0x91, 0x41, 0x04, 0x1c, - 0x24, 0xb9, 0xa7, 0x98, 0x88, 0xc8, 0x03, 0xcc, 0x6d, 0x28, 0xc6, 0x30, 0x85, 0x1d, 0x24, 0x90, - 0xfd, 0x78, 0x44, 0x2c, 0x1c, 0xc2, 0x5d, 0x28, 0x58, 0x88, 0x76, 0x1b, 0x7f, 0x9e, 0xd5, 0x86, - 0x02, 0xa9, 0xfc, 0xb6, 0x02, 0x0b, 0x9d, 0x1b, 0xac, 0x7a, 0x68, 0x52, 0x97, 0x5b, 0x4e, 0x2f, - 0xf3, 0x4d, 0xbd, 0x80, 0xf9, 0x7e, 0x05, 0xa6, 0xb6, 0x7b, 0x29, 0xee, 0x2e, 0x14, 0xb8, 0xba, - 0xa3, 0xe9, 0x28, 0x62, 0x3a, 0xac, 0x36, 0x9a, 0xce, 0x7f, 0x28, 0x50, 0xd8, 0x22, 0x26, 0xc7, - 0xaa, 0x3a, 0xe6, 0xde, 0xce, 0x8a, 0xfa, 0x2e, 0x8c, 0xd9, 0xc4, 0x94, 0xac, 0x29, 0x83, 0xbb, - 0xd8, 0x8c, 0x2d, 0x71, 0x58, 0x00, 0x3d, 0x60, 0x66, 0x7b, 0xd0, 0x3a, 0xeb, 0x9a, 0xe1, 0xa5, - 0x30, 0x39, 0x46, 0xba, 0xd2, 0x3a, 0x13, 0x50, 0xef, 0xc1, 0x38, 0x87, 0xa2, 0xd8, 0xb2, 0x24, - 0x56, 0x7a, 0x70, 0xac, 0x3c, 0xa3, 0xad, 0x63, 0xcb, 0x12, 0xb2, 0xfa, 0xcb, 0x11, 0x80, 0x7a, - 0x78, 0xbb, 0x74, 0x61, 0x26, 0x77, 0x1b, 0x80, 0xed, 0x87, 0x65, 0x1e, 0x22, 0xd2, 0xb8, 0x31, - 0x56, 0x23, 0xd2, 0x90, 0x8e, 0x3c, 0x25, 0xdd, 0x95, 0xa7, 0x74, 0xa7, 0x22, 0x43, 0xd7, 0x97, - 0x8a, 0x0c, 0x5f, 0x7f, 0x2a, 0x32, 0xf2, 0x82, 0xa9, 0x48, 0xdf, 0xad, 0x76, 0x94, 0xa7, 0x64, - 0xae, 0x37, 0x4f, 0x19, 0xfb, 0x7c, 0xf2, 0x14, 0xb8, 0xe6, 0x2d, 0x5a, 0xf6, 0x45, 0xb7, 0x68, - 0xb9, 0x4b, 0xb7, 0x68, 0xf9, 0x0b, 0xb2, 0x8d, 0x3b, 0x90, 0x97, 0x76, 0x2c, 0x93, 0x0d, 0x71, - 0x3f, 0x91, 0x13, 0xa6, 0x2c, 0x37, 0x68, 0xdd, 0x29, 0xc9, 0x78, 0x8f, 0x94, 0xa4, 0xf2, 0xc7, - 0x0a, 0x8c, 0xae, 0xe1, 0xa6, 0x4b, 0x89, 0xaf, 0xee, 0xc2, 0x04, 0x3a, 0x41, 0xc4, 0x42, 0x07, - 0xfc, 0xe4, 0xc8, 0x42, 0x8e, 0x91, 0xe8, 0xd2, 0xb9, 0x18, 0x52, 0xaf, 0x08, 0x62, 0xf5, 0x09, - 0xe4, 0x7d, 0xd7, 0x47, 0x56, 0x88, 0x96, 0x4a, 0x62, 0xe5, 0x8c, 0x52, 0x22, 0x55, 0x5e, 0x87, - 0xa9, 0x7a, 0xeb, 0x00, 0x19, 0xfc, 0x42, 0x66, 0xcf, 0x43, 0x26, 0xde, 0x76, 0xd9, 0x08, 0x53, - 0x30, 0xec, 0xb8, 0x01, 0x9f, 0x79, 0x4d, 0x14, 0x58, 0xc8, 0x1a, 0xe3, 0x87, 0xbe, 0xdc, 0x6f, - 0xdf, 0x81, 0x3c, 0x0d, 0x69, 0x23, 0xdf, 0x9d, 0x8b, 0x2a, 0x6b, 0x26, 0xeb, 0xc4, 0xd7, 0x22, - 0x36, 0x48, 0x93, 0x60, 0xc7, 0x0f, 0xb6, 0x79, 0x87, 0x18, 0x6b, 0x41, 0x9d, 0xfa, 0x0e, 0x0c, - 0x77, 0xfa, 0xaa, 0xcb, 0xaf, 0xe2, 0x39, 0x85, 0xfa, 0x55, 0xc8, 0x04, 0x56, 0x99, 0xc4, 0x6d, - 0x84, 0x44, 0x6a, 0x11, 0xd2, 0x06, 0x31, 0x85, 0x9f, 0xd0, 0xd8, 0xcf, 0xca, 0xc7, 0x29, 0x18, - 0x63, 0x6e, 0x8f, 0xcf, 0xf4, 0xb2, 0x03, 0x49, 0x10, 0xc7, 0xeb, 0xc4, 0x39, 0x74, 0xe5, 0x25, - 0xfa, 0xdd, 0xbe, 0x5b, 0xea, 0x40, 0x7a, 0x72, 0x33, 0x3d, 0xe6, 0x86, 0xe2, 0x5c, 0x0b, 0xb0, - 0xf8, 0x0e, 0x36, 0xcd, 0x57, 0xff, 0xe5, 0x58, 0x7c, 0x0b, 0x2b, 0x50, 0xf8, 0x0e, 0x96, 0x99, - 0x86, 0x47, 0x8e, 0x8e, 0xb0, 0x27, 0xdd, 0xff, 0x50, 0x82, 0x50, 0x22, 0x29, 0x85, 0xf7, 0xff, - 0x61, 0x0a, 0x0a, 0x4c, 0x0c, 0x9b, 0xc4, 0x26, 0x52, 0x16, 0xed, 0xd3, 0x55, 0xae, 0x71, 0xba, - 0xa9, 0x2b, 0x4e, 0xf7, 0xab, 0x90, 0x39, 0x24, 0x16, 0x5f, 0x1c, 0x49, 0x8c, 0x27, 0x24, 0xba, - 0x3e, 0x79, 0xb1, 0x30, 0x28, 0x26, 0xd4, 0x40, 0xb4, 0xc1, 0xed, 0x29, 0x27, 0x39, 0x7d, 0x82, - 0x68, 0xa3, 0xf2, 0x8f, 0x29, 0x18, 0x8f, 0x82, 0xe9, 0xf5, 0xcb, 0x73, 0x03, 0x72, 0xd2, 0x1b, - 0xe8, 0xfc, 0xa6, 0x22, 0x81, 0x4b, 0xc8, 0x4a, 0xc2, 0x27, 0xae, 0x65, 0x76, 0x4c, 0x23, 0xdd, - 0x31, 0x8d, 0x0e, 0xb5, 0x0d, 0x5d, 0x97, 0x95, 0x0e, 0x5f, 0xd5, 0x4a, 0xbf, 0x9f, 0x82, 0xf1, - 0x8e, 0xdb, 0xe3, 0xff, 0x6d, 0x4b, 0xf6, 0xcb, 0x30, 0x22, 0x0e, 0xfb, 0x92, 0x38, 0x30, 0x49, - 0x72, 0x8d, 0x92, 0xfc, 0xcf, 0x34, 0xcc, 0x47, 0xb1, 0x80, 0x73, 0x7a, 0xe0, 0xba, 0xc7, 0x5b, - 0xd8, 0x47, 0x26, 0xf2, 0x91, 0xfa, 0x0e, 0xcc, 0x9e, 0x20, 0x87, 0xad, 0x1b, 0xdd, 0x62, 0x2e, - 0x41, 0x5e, 0x2c, 0x8a, 0xab, 0x7c, 0x11, 0x26, 0xa6, 0x65, 0x87, 0xc8, 0x65, 0x88, 0x5b, 0xfc, - 0x77, 0xe1, 0xb6, 0x3c, 0xd5, 0xe4, 0x57, 0x6b, 0xdd, 0xe4, 0x29, 0x4e, 0x3e, 0x2b, 0x3a, 0xed, - 0x38, 0xd6, 0x59, 0x27, 0x42, 0x03, 0x16, 0xd0, 0xd1, 0x91, 0x87, 0x8f, 0xd8, 0xb6, 0x31, 0x8e, - 0x15, 0x3a, 0xff, 0x04, 0xab, 0x7f, 0x3e, 0x84, 0xd2, 0xc2, 0x01, 0x83, 0xc4, 0x44, 0x45, 0x30, - 0x17, 0x8d, 0x14, 0x4c, 0xf8, 0x2a, 0x21, 0xa6, 0x14, 0xc2, 0xbc, 0x2f, 0x50, 0xc2, 0x21, 0xd6, - 0x61, 0x31, 0x00, 0x36, 0x5c, 0xc7, 0x24, 0xf2, 0x54, 0x36, 0x2e, 0x10, 0x71, 0xe2, 0x78, 0x4b, - 0x76, 0x5b, 0x8d, 0x7a, 0xc5, 0x64, 0xb2, 0x09, 0x77, 0xe2, 0x92, 0xb8, 0x08, 0x6a, 0x84, 0x43, - 0x2d, 0x46, 0xb2, 0xed, 0x89, 0x56, 0xf9, 0x5b, 0x05, 0xc6, 0x3b, 0xd4, 0x1f, 0xc5, 0x65, 0xe5, - 0x85, 0xe2, 0x72, 0xea, 0x2a, 0x71, 0xb9, 0x02, 0x39, 0x42, 0x23, 0xfd, 0x70, 0xfd, 0x66, 0xb4, - 0xb6, 0xba, 0x20, 0x76, 0x0f, 0x45, 0xb1, 0xfb, 0x19, 0x4c, 0x76, 0x4c, 0x62, 0x8d, 0xd9, 0x6e, - 0x15, 0x86, 0xb9, 0x48, 0xa4, 0x8f, 0xed, 0x7b, 0xea, 0xdd, 0x41, 0xaf, 0x09, 0xca, 0x0e, 0xbf, - 0x98, 0xea, 0x74, 0xef, 0xbf, 0x93, 0x86, 0xa9, 0xc8, 0x0f, 0xfd, 0x4c, 0xc7, 0xcc, 0xc8, 0xdf, - 0xa4, 0x93, 0xfb, 0x9b, 0x78, 0xc0, 0x1d, 0xba, 0x96, 0x80, 0x3b, 0x7c, 0x3d, 0x01, 0x77, 0xa4, - 0x53, 0x23, 0xbf, 0x97, 0x86, 0x9b, 0x9d, 0x27, 0x0f, 0xff, 0x27, 0x55, 0xb2, 0x06, 0x59, 0x79, - 0x59, 0xc4, 0x03, 0x7f, 0x02, 0xad, 0x80, 0xa0, 0xe3, 0x71, 0xff, 0xbf, 0x4d, 0x2f, 0x7f, 0x97, - 0x82, 0xcc, 0x2e, 0xdb, 0x18, 0x11, 0xd7, 0x51, 0xa7, 0x61, 0x84, 0xd0, 0x4d, 0x57, 0x9e, 0x6e, - 0x65, 0x34, 0x59, 0x7a, 0x71, 0xf7, 0xb1, 0x06, 0x59, 0xec, 0xf8, 0xde, 0x99, 0x9e, 0x78, 0x63, - 0x01, 0x9c, 0x4e, 0x4c, 0xe5, 0x85, 0x42, 0xf3, 0xb7, 0xa0, 0xd4, 0x7d, 0x8a, 0xa7, 0x73, 0xf4, - 0x24, 0xc7, 0x12, 0xd3, 0x5d, 0x67, 0x79, 0xeb, 0x0c, 0xa2, 0x52, 0x83, 0xa9, 0x98, 0x51, 0xd7, - 0x1c, 0x93, 0x18, 0xc8, 0x77, 0x2f, 0xc9, 0x7e, 0xa6, 0x60, 0x98, 0xd0, 0x95, 0x96, 0x10, 0x6a, - 0x46, 0x13, 0x85, 0xca, 0x3f, 0xa4, 0x20, 0xc3, 0x37, 0x7f, 0x9b, 0x6e, 0xbb, 0xe8, 0x95, 0xab, - 0x88, 0x3e, 0x8c, 0x1a, 0xa9, 0xc4, 0x51, 0xa3, 0x6b, 0x4b, 0x29, 0xf2, 0xcf, 0xf6, 0x2d, 0xe5, - 0x5b, 0x90, 0x3e, 0xc4, 0x89, 0xbc, 0x0f, 0xeb, 0x7f, 0x49, 0x7e, 0xae, 0xbe, 0x0d, 0x37, 0xdb, - 0x36, 0xaa, 0x3a, 0x32, 0x4d, 0x0f, 0x53, 0x2a, 0x0c, 0x98, 0x2f, 0x7c, 0x45, 0x9b, 0x8c, 0x6f, - 0x5b, 0xab, 0xa2, 0x43, 0x10, 0x85, 0x46, 0xa3, 0x28, 0xf4, 0x07, 0x29, 0xc8, 0x07, 0x26, 0xbe, - 0x86, 0x2d, 0x1f, 0xa9, 0x33, 0x30, 0x4a, 0xa8, 0x6e, 0x75, 0x1b, 0xba, 0x06, 0x2a, 0x3e, 0xc5, - 0x46, 0x8b, 0x5f, 0x0b, 0x5c, 0xc5, 0xe4, 0x27, 0x42, 0xf2, 0x30, 0xbf, 0xd8, 0x86, 0x62, 0x84, - 0x99, 0xdc, 0xaf, 0x8c, 0x87, 0xc4, 0xe2, 0x12, 0x59, 0xdd, 0x84, 0xa8, 0xaa, 0x6b, 0x97, 0x74, - 0x29, 0x5c, 0x21, 0xa4, 0x15, 0x79, 0xe6, 0x1f, 0xa5, 0x41, 0x8d, 0xbd, 0x4b, 0x0e, 0xcc, 0xae, - 0xe7, 0x69, 0x42, 0xa7, 0xea, 0x77, 0xa1, 0xd0, 0x94, 0x72, 0xd5, 0x4d, 0x26, 0x58, 0x99, 0xc0, - 0xbf, 0xda, 0xcf, 0xe3, 0xb6, 0x69, 0x42, 0xcb, 0x37, 0xdb, 0x14, 0xf3, 0x65, 0x18, 0x69, 0xa2, - 0x33, 0xb7, 0xe5, 0x27, 0xf2, 0xbc, 0x82, 0xe4, 0x67, 0xdf, 0x12, 0x19, 0x87, 0x4d, 0xc7, 0x4a, - 0xf2, 0x50, 0x87, 0xf5, 0xaf, 0xfc, 0x32, 0xa8, 0x51, 0x1a, 0x14, 0x3a, 0xeb, 0x77, 0x21, 0x13, - 0x08, 0x4f, 0x46, 0xcd, 0x97, 0x07, 0x91, 0xbb, 0x16, 0x52, 0x75, 0x2b, 0x39, 0xd5, 0xad, 0xe4, - 0xca, 0x33, 0x98, 0x88, 0x06, 0x0f, 0x0e, 0xd1, 0x06, 0x32, 0x8f, 0xaf, 0xc0, 0xa8, 0x29, 0xfa, - 0x4b, 0xbb, 0xb8, 0xd3, 0x8f, 0x3f, 0x09, 0xad, 0x05, 0x34, 0x95, 0x26, 0xe4, 0x65, 0xdd, 0x7e, - 0xd3, 0x44, 0x3e, 0x3f, 0x05, 0x13, 0x87, 0xd6, 0xc2, 0x8d, 0x8a, 0x82, 0x5a, 0x83, 0x8c, 0xa4, - 0xa0, 0xa5, 0x54, 0x39, 0x7d, 0x2f, 0xfb, 0xf0, 0x8d, 0xc1, 0xf2, 0xc9, 0x60, 0xc0, 0x90, 0xbc, - 0xf2, 0x43, 0x05, 0x8a, 0xbb, 0x2e, 0x71, 0x7c, 0x1a, 0x7b, 0x02, 0xf7, 0x4d, 0x98, 0x11, 0xe7, - 0xe1, 0x4d, 0xde, 0x12, 0x7f, 0xee, 0x96, 0xc0, 0x1f, 0xdf, 0xe4, 0x18, 0xbd, 0xc0, 0xfd, 0x0b, - 0xc0, 0x13, 0x38, 0x9d, 0x9b, 0x7e, 0x2f, 0xf0, 0xca, 0x4f, 0x53, 0xb0, 0xb0, 0x17, 0x7f, 0x11, - 0xbd, 0x8a, 0xec, 0x26, 0x22, 0x47, 0xce, 0x8a, 0xeb, 0x52, 0x71, 0xd9, 0xf3, 0x16, 0xcc, 0x1c, - 0xb0, 0x02, 0x36, 0xf5, 0xb6, 0x0f, 0x60, 0x4c, 0x5a, 0x52, 0xf8, 0xe3, 0xc5, 0x29, 0xd9, 0x1c, - 0x9d, 0x95, 0xd4, 0x4c, 0xaa, 0x7e, 0x08, 0x33, 0xf1, 0xee, 0x11, 0xd7, 0x81, 0x0a, 0x5e, 0xef, - 0x6f, 0x89, 0xed, 0x8c, 0xca, 0x34, 0xee, 0x66, 0xf4, 0xe9, 0x4c, 0xd4, 0x46, 0xd5, 0x2a, 0xdc, - 0x0e, 0x58, 0xec, 0xf1, 0xf1, 0x8c, 0x49, 0x4b, 0x69, 0xce, 0xe8, 0x9c, 0xec, 0xd4, 0x99, 0x63, - 0x32, 0x76, 0x4f, 0xe0, 0x76, 0x37, 0x69, 0x9c, 0xe9, 0xa1, 0x2b, 0x33, 0x3d, 0xdf, 0xf9, 0x09, - 0x4e, 0x8c, 0xf5, 0xca, 0x5f, 0x2b, 0xa0, 0x06, 0x32, 0x17, 0x1a, 0xd8, 0x75, 0xc5, 0x33, 0x9a, - 0xce, 0x9b, 0x6a, 0x71, 0xbb, 0x55, 0xa0, 0xed, 0xb7, 0xd4, 0xbf, 0x02, 0x53, 0xe2, 0x75, 0xa8, - 0x80, 0x08, 0x9e, 0xbf, 0x4b, 0x19, 0xf7, 0x79, 0x35, 0xfe, 0x26, 0xe3, 0xed, 0xcf, 0xfe, 0x65, - 0xf1, 0xde, 0x11, 0xf1, 0x1b, 0xad, 0x83, 0x25, 0xc3, 0xb5, 0x97, 0xe5, 0xf7, 0x72, 0xe2, 0xbf, - 0x37, 0xa8, 0x79, 0xbc, 0xcc, 0x72, 0x64, 0xca, 0x09, 0xa8, 0xa6, 0xda, 0xe8, 0xb4, 0x9d, 0x55, - 0x5a, 0xf9, 0xd3, 0x14, 0xcc, 0xf6, 0xb4, 0x1f, 0x6e, 0x3a, 0x8f, 0x60, 0x36, 0x64, 0x2c, 0x78, - 0x87, 0x1f, 0x3e, 0xa0, 0x15, 0xf3, 0x99, 0x09, 0x3a, 0x04, 0x4f, 0xf0, 0x83, 0xb7, 0xb2, 0x2f, - 0x41, 0x2e, 0x76, 0x09, 0x25, 0x26, 0x34, 0xa6, 0x65, 0xa3, 0x5b, 0x28, 0xaa, 0xb6, 0x60, 0xb6, - 0xfd, 0xd5, 0xbf, 0xce, 0x15, 0x2c, 0x36, 0x09, 0x69, 0xee, 0x4e, 0x1e, 0xf5, 0xd3, 0x57, 0x7f, - 0xc3, 0xd7, 0xa6, 0xdb, 0x3e, 0x15, 0x88, 0x16, 0xc4, 0x97, 0x60, 0xc6, 0x24, 0xf4, 0x69, 0x0b, - 0x59, 0xe4, 0x90, 0x60, 0x33, 0x6e, 0x67, 0x43, 0x9c, 0xc9, 0x9b, 0xf1, 0xe6, 0xd0, 0xc4, 0x2a, - 0x7f, 0x93, 0x82, 0xc9, 0x0d, 0x8c, 0xd7, 0x08, 0x15, 0x67, 0xf7, 0x44, 0x6e, 0x48, 0xea, 0x30, - 0x29, 0xbc, 0x87, 0x29, 0x5b, 0xc4, 0xa5, 0x55, 0x92, 0xcb, 0x63, 0x4e, 0x1f, 0x00, 0xf3, 0x2b, - 0xab, 0x3a, 0x4c, 0xfa, 0x3d, 0x40, 0x93, 0xa4, 0x29, 0x7e, 0x17, 0xe8, 0x0a, 0xe4, 0xe5, 0x07, - 0x1d, 0xc8, 0xe6, 0x27, 0x15, 0xe9, 0x41, 0x1e, 0x24, 0xe7, 0x04, 0x4d, 0x95, 0x93, 0xb0, 0xf0, - 0x7d, 0xe2, 0x5a, 0x2d, 0x3b, 0x51, 0x10, 0x96, 0x24, 0x95, 0xdf, 0x6a, 0x17, 0x61, 0xdd, 0x68, - 0x60, 0xb3, 0x65, 0xf1, 0x67, 0xbc, 0x07, 0x2d, 0x83, 0x69, 0x21, 0x3a, 0xdc, 0x1a, 0xd2, 0xb2, - 0xa2, 0x4e, 0x9c, 0xbd, 0xbc, 0x02, 0xe3, 0xb2, 0x4b, 0xf8, 0x45, 0x88, 0x78, 0x2e, 0x52, 0x10, - 0xd5, 0xe1, 0x27, 0x20, 0x9d, 0x86, 0x97, 0xee, 0x36, 0xbc, 0x6d, 0x00, 0x9f, 0xc8, 0xdd, 0x68, - 0xe0, 0x19, 0x96, 0xfb, 0x59, 0x5a, 0x0f, 0xb5, 0x6b, 0x63, 0xbe, 0xfc, 0x45, 0xfb, 0x59, 0xd4, - 0x70, 0x3f, 0x8b, 0xda, 0x02, 0xb5, 0x03, 0x79, 0x6f, 0x6f, 0x53, 0x55, 0x61, 0xc8, 0x0f, 0x42, - 0xcf, 0x90, 0xc6, 0x7f, 0xb3, 0x60, 0xec, 0xfb, 0x56, 0xd7, 0x53, 0x99, 0x9c, 0xef, 0x5b, 0xd1, - 0x55, 0xf9, 0x1f, 0x2a, 0x90, 0x7b, 0x9f, 0x0b, 0x5a, 0xc3, 0x86, 0xeb, 0x99, 0xfc, 0xaa, 0x8f, - 0x1b, 0x91, 0xd4, 0x98, 0x92, 0xe4, 0xaa, 0x8f, 0x11, 0x0a, 0x34, 0x86, 0xe3, 0xc7, 0x71, 0x92, - 0x9c, 0x74, 0xfb, 0x11, 0x4e, 0xe5, 0x77, 0x15, 0x28, 0x54, 0x45, 0x64, 0x96, 0x0e, 0x48, 0x2d, - 0xc1, 0xa8, 0x8c, 0xd5, 0x32, 0xe4, 0x07, 0x45, 0x15, 0xc3, 0xe8, 0xe7, 0xe8, 0x0c, 0x03, 0xec, - 0xca, 0xaf, 0x2b, 0x90, 0xe3, 0x29, 0xb1, 0x90, 0x19, 0xed, 0xbf, 0x9b, 0xfb, 0x00, 0xa6, 0x2c, - 0xe4, 0x63, 0xea, 0xeb, 0xcc, 0xb9, 0xf0, 0x94, 0xd1, 0x8d, 0x38, 0x7c, 0xe5, 0x32, 0x6f, 0x25, - 0x07, 0xd1, 0x54, 0x01, 0x12, 0x1f, 0xb7, 0xf2, 0x25, 0xc8, 0x47, 0x89, 0x4b, 0x6d, 0x8d, 0x5f, - 0x7c, 0xb6, 0x25, 0x60, 0x22, 0x5e, 0xe7, 0xb4, 0x7c, 0x3c, 0x03, 0xa3, 0x95, 0x3f, 0x51, 0x20, - 0x1b, 0x03, 0x52, 0x6f, 0xc1, 0x58, 0x67, 0xd0, 0x89, 0x2a, 0x5e, 0x64, 0xab, 0x18, 0xdf, 0xa6, - 0xa6, 0xaf, 0xb0, 0x4d, 0xad, 0xd8, 0x30, 0x2c, 0x3e, 0x21, 0x7a, 0x00, 0x4a, 0x33, 0x89, 0x31, - 0x2a, 0x4d, 0x46, 0xf2, 0x34, 0x09, 0xcf, 0xca, 0xd3, 0xca, 0xef, 0x2b, 0xb0, 0x58, 0x0d, 0x4e, - 0x84, 0x23, 0xd1, 0xb6, 0xad, 0x90, 0x81, 0x6e, 0x54, 0x77, 0xa0, 0x20, 0x2d, 0x42, 0xd8, 0x7f, - 0xa0, 0xee, 0x01, 0x5e, 0x0a, 0xc8, 0xc1, 0xf2, 0x76, 0xac, 0x44, 0x2b, 0x9f, 0x28, 0x70, 0x2b, - 0xe4, 0xac, 0xda, 0x83, 0xad, 0x8b, 0x57, 0xc5, 0xb5, 0xf3, 0x42, 0x21, 0x17, 0x6f, 0xee, 0x6f, - 0xfe, 0x1b, 0xa1, 0xf3, 0x17, 0xd9, 0x7e, 0xdf, 0x51, 0xe3, 0x33, 0x92, 0xa9, 0x54, 0x10, 0x07, - 0xaa, 0x2c, 0xef, 0x77, 0x5c, 0x3b, 0xbc, 0xe4, 0xef, 0x9d, 0xf7, 0xcf, 0xb1, 0xbc, 0x5f, 0x5e, - 0xfa, 0xa7, 0xb8, 0x37, 0x0c, 0xcb, 0x15, 0x0c, 0xea, 0x63, 0x0f, 0x39, 0x7e, 0xb5, 0xe5, 0x37, - 0x5c, 0x8f, 0x7c, 0x24, 0x9c, 0x7f, 0x09, 0x46, 0x8f, 0x58, 0xad, 0xfc, 0x9a, 0x7b, 0x4c, 0x0b, - 0x8a, 0xea, 0x5b, 0x30, 0x22, 0x83, 0x5e, 0x6a, 0x90, 0xa0, 0x27, 0x3b, 0x57, 0xbe, 0x0d, 0xd9, - 0x2a, 0x9f, 0x1f, 0x1f, 0x2c, 0xc2, 0xf7, 0xda, 0xf1, 0xbd, 0xab, 0xe2, 0x7f, 0x47, 0x81, 0xc2, - 0xfa, 0xe1, 0x21, 0x1e, 0x68, 0x8c, 0x1a, 0x4c, 0x38, 0xd8, 0xd7, 0x45, 0x51, 0x7e, 0x9c, 0x39, - 0xd8, 0x70, 0xe3, 0x0e, 0xf6, 0x1f, 0x0b, 0x32, 0xfe, 0x19, 0xa6, 0x3a, 0x0b, 0x19, 0x42, 0xf5, - 0x13, 0x64, 0xc9, 0x23, 0x9f, 0x8c, 0x36, 0x4a, 0xe8, 0xfb, 0xac, 0x58, 0x69, 0x42, 0x91, 0x2b, - 0x67, 0xab, 0xfd, 0xb1, 0x47, 0x0f, 0xfd, 0x74, 0x3e, 0x25, 0x49, 0x5d, 0xed, 0x29, 0xc9, 0x7d, - 0x1f, 0x6e, 0xf5, 0xfb, 0x20, 0x51, 0x05, 0x18, 0xd9, 0x76, 0x0f, 0x5c, 0xf3, 0xac, 0x78, 0x43, - 0xad, 0xc0, 0xc2, 0x0a, 0x3e, 0x22, 0xce, 0x8a, 0xe5, 0x1a, 0xc7, 0xd8, 0xab, 0xdb, 0xc8, 0xf3, - 0x57, 0x5d, 0xc7, 0xf7, 0x90, 0xe1, 0xd3, 0x1d, 0xc7, 0x3a, 0x2b, 0x2a, 0xea, 0x34, 0xa8, 0x3d, - 0xea, 0x53, 0x6a, 0x0e, 0x32, 0xeb, 0x27, 0xd8, 0x3b, 0x73, 0x1d, 0x5c, 0x4c, 0xdf, 0xdf, 0x0b, - 0x2c, 0x5f, 0x3c, 0xe7, 0x51, 0xc7, 0x21, 0xbb, 0xef, 0xd0, 0x26, 0x36, 0x78, 0x94, 0x2e, 0xde, - 0x60, 0xc3, 0x0a, 0xdd, 0x17, 0x15, 0xf6, 0x7b, 0x17, 0xb5, 0x28, 0x36, 0x8b, 0x29, 0xb5, 0x00, - 0xb0, 0x86, 0x6d, 0xd7, 0x22, 0xb4, 0x81, 0xcd, 0x62, 0x5a, 0xcd, 0xc2, 0x28, 0x7f, 0x06, 0x8b, - 0xcd, 0xe2, 0xd0, 0xfd, 0xbf, 0x4a, 0xc9, 0x17, 0x1b, 0xfc, 0x98, 0xb9, 0x0c, 0xd9, 0xfd, 0xed, - 0xfa, 0xee, 0xfa, 0x6a, 0x6d, 0xa3, 0xb6, 0xbe, 0x56, 0xbc, 0x31, 0x37, 0x7e, 0xfe, 0xbc, 0x1c, - 0xaf, 0x52, 0x8b, 0x90, 0x5e, 0xd9, 0xff, 0xa0, 0xa8, 0xcc, 0x8d, 0x9e, 0x3f, 0x2f, 0xb3, 0x9f, - 0x2c, 0xfe, 0xd7, 0xd7, 0x37, 0x37, 0x8b, 0xa9, 0xb9, 0xcc, 0xf9, 0xf3, 0x32, 0xff, 0xcd, 0x56, - 0x42, 0x7d, 0x6f, 0x67, 0x57, 0x67, 0x5d, 0xd3, 0x73, 0xb9, 0xf3, 0xe7, 0xe5, 0xb0, 0xcc, 0x1c, - 0x3e, 0xff, 0xcd, 0x89, 0x86, 0xe6, 0xf2, 0xe7, 0xcf, 0xcb, 0x51, 0x05, 0xa3, 0xdc, 0xab, 0xbe, - 0xb7, 0xce, 0x29, 0x87, 0x05, 0x65, 0x50, 0x66, 0x94, 0xfc, 0x37, 0xa7, 0x1c, 0x11, 0x94, 0x61, - 0x85, 0x3a, 0x0d, 0x23, 0x2b, 0xfb, 0x1f, 0xe8, 0xbb, 0x3b, 0xc5, 0xd1, 0x39, 0x38, 0x7f, 0x5e, - 0x96, 0x25, 0x66, 0x9f, 0xac, 0x9d, 0x35, 0x64, 0xe6, 0xb2, 0xe7, 0xcf, 0xcb, 0x41, 0x51, 0x5d, - 0x00, 0x60, 0x7d, 0xaa, 0x7b, 0x3b, 0x5b, 0xb5, 0xd5, 0xe2, 0xd8, 0x5c, 0xe1, 0xfc, 0x79, 0x39, - 0x56, 0xc3, 0xa4, 0xc1, 0xbb, 0xca, 0x0e, 0x20, 0xa4, 0x11, 0xab, 0xba, 0xff, 0xe7, 0x0a, 0xe4, - 0xd7, 0x83, 0xd3, 0x2b, 0x2e, 0xc1, 0x5b, 0x50, 0x8a, 0x69, 0xa5, 0xad, 0x4d, 0xa8, 0x48, 0xe8, - 0xb0, 0xa8, 0xa8, 0x79, 0x18, 0xe3, 0xb7, 0x40, 0x1b, 0xc4, 0xb2, 0x8a, 0x29, 0x75, 0x0e, 0xa6, - 0x79, 0x71, 0x0b, 0xf9, 0x46, 0x43, 0x13, 0xdf, 0x09, 0x73, 0xc5, 0x14, 0xd3, 0xcc, 0x40, 0xa2, - 0xb6, 0x6d, 0xfc, 0x4c, 0xd4, 0x0f, 0xa9, 0x37, 0x61, 0x42, 0x7e, 0xa6, 0x28, 0xbf, 0xfd, 0x25, - 0xae, 0x53, 0x1c, 0x66, 0x50, 0xe2, 0x9d, 0x73, 0xe7, 0x6b, 0xca, 0xe2, 0xc8, 0xfd, 0x4f, 0x02, - 0x7d, 0x6f, 0x21, 0x7a, 0xcc, 0x64, 0xb6, 0xbf, 0xbd, 0x5f, 0xe7, 0xaa, 0xe6, 0x32, 0x13, 0x25, - 0xa6, 0xe5, 0xea, 0x76, 0xa8, 0xe5, 0xea, 0xf6, 0x07, 0x4c, 0x8a, 0xda, 0xfa, 0xe3, 0xfd, 0xcd, - 0xaa, 0x56, 0x4c, 0x09, 0x29, 0xca, 0x22, 0x93, 0xd2, 0xea, 0xce, 0xf6, 0x5a, 0x6d, 0xaf, 0xb6, - 0xb3, 0x5d, 0x65, 0x1a, 0xe5, 0x52, 0x8a, 0x55, 0xa9, 0x4b, 0x30, 0xb3, 0x56, 0xd3, 0xd6, 0x57, - 0x59, 0x91, 0x29, 0x52, 0xdf, 0xd1, 0xf4, 0x27, 0xb5, 0xc7, 0x4f, 0xd6, 0xb5, 0x62, 0x66, 0x6e, - 0xe2, 0xfc, 0x79, 0x39, 0xdf, 0x56, 0xd9, 0xde, 0x9f, 0x8b, 0x7b, 0x47, 0xd3, 0x37, 0x77, 0x7e, - 0x71, 0x5d, 0x2b, 0x16, 0x45, 0xff, 0xb6, 0x4a, 0x75, 0x1e, 0xb2, 0x7b, 0x1f, 0xec, 0xae, 0xeb, - 0x5b, 0x55, 0xed, 0xbd, 0xf5, 0xbd, 0x62, 0x59, 0x4c, 0x45, 0x94, 0xd4, 0x59, 0x00, 0xde, 0xb8, - 0x59, 0xdb, 0xaa, 0xed, 0x15, 0xdf, 0x9d, 0x1b, 0x3b, 0x7f, 0x5e, 0x1e, 0xe6, 0x85, 0x95, 0xc6, - 0x0f, 0x3e, 0x5d, 0x50, 0x7e, 0xf4, 0xe9, 0x82, 0xf2, 0xaf, 0x9f, 0x2e, 0x28, 0xdf, 0xf9, 0x6c, - 0xe1, 0xc6, 0x8f, 0x3e, 0x5b, 0xb8, 0xf1, 0x4f, 0x9f, 0x2d, 0xdc, 0xf8, 0xc6, 0x76, 0x2c, 0x31, - 0xab, 0x05, 0x21, 0x63, 0x13, 0x1d, 0xd0, 0xe5, 0x30, 0x80, 0xbc, 0x61, 0xb8, 0x1e, 0x8e, 0x17, - 0x1b, 0x88, 0x38, 0xcb, 0xb6, 0xcb, 0x36, 0x08, 0x34, 0xfa, 0xeb, 0x32, 0x3c, 0x89, 0x3b, 0x18, - 0xe1, 0xdf, 0xba, 0x7e, 0xf1, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x33, 0xb2, 0xf1, 0xde, 0x80, - 0x46, 0x00, 0x00, + // 4704 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5c, 0xeb, 0x6f, 0x24, 0xd9, + 0x55, 0x9f, 0xea, 0xf6, 0xa3, 0xfb, 0xb8, 0xbb, 0xdd, 0x2e, 0x7b, 0xec, 0xb6, 0x3d, 0x63, 0xf7, + 0xf6, 0xec, 0x64, 0x67, 0x67, 0x77, 0xed, 0x9d, 0x09, 0x9b, 0xec, 0x4e, 0x14, 0x65, 0xdb, 0xaf, + 0x99, 0x66, 0xfd, 0x4a, 0xb5, 0xbd, 0xb0, 0x89, 0x92, 0xd2, 0x75, 0xd5, 0xb5, 0xfb, 0xae, 0xeb, + 0xd1, 0x53, 0xb7, 0xda, 0x63, 0x2f, 0x42, 0x42, 0x68, 0x85, 0x58, 0x03, 0x22, 0x7c, 0x40, 0x48, + 0x48, 0x83, 0xc2, 0x07, 0x84, 0xe0, 0x53, 0xc4, 0x27, 0x24, 0xf8, 0x80, 0x84, 0x20, 0xf9, 0x10, + 0xa4, 0x7c, 0x40, 0x08, 0x81, 0x14, 0xd0, 0x2e, 0x52, 0x10, 0x7f, 0x03, 0x8a, 0xd0, 0x7d, 0xd4, + 0xa3, 0x1f, 0x6e, 0x77, 0x79, 0xbc, 0x10, 0xe0, 0xcb, 0x4c, 0xdf, 0xc7, 0xf9, 0x9d, 0x73, 0xcf, + 0x3d, 0xf7, 0x9c, 0x73, 0x1f, 0x65, 0x78, 0x95, 0x38, 0x1f, 0x62, 0xc3, 0x27, 0x27, 0x78, 0x19, + 0x9f, 0x1a, 0x0d, 0xe4, 0x1c, 0xe1, 0xe5, 0x93, 0x07, 0x07, 0xd8, 0x47, 0x0f, 0xc2, 0x8a, 0xa5, + 0xa6, 0xe7, 0xfa, 0xae, 0x3a, 0x17, 0x76, 0x5d, 0x0a, 0x5b, 0x64, 0xd7, 0xb9, 0xa9, 0x23, 0xf7, + 0xc8, 0xe5, 0xdd, 0x96, 0xd9, 0x2f, 0x41, 0x31, 0xb7, 0x60, 0xb8, 0xd4, 0x76, 0xe9, 0xf2, 0x01, + 0xa2, 0x11, 0xaa, 0xe1, 0x12, 0x47, 0xb6, 0xdf, 0x8d, 0x98, 0xbb, 0x1e, 0x32, 0xac, 0xa8, 0x93, + 0x28, 0xca, 0x6e, 0x13, 0xc8, 0x26, 0x8e, 0xbb, 0xcc, 0xff, 0x15, 0x55, 0x95, 0x7f, 0x4e, 0xc1, + 0xf8, 0x4e, 0x13, 0x3b, 0xdb, 0xae, 0x4f, 0x5c, 0x07, 0x59, 0xab, 0xa8, 0xa9, 0x9e, 0x2b, 0x90, + 0x69, 0x39, 0x06, 0x6a, 0x36, 0xb1, 0x59, 0x52, 0xca, 0xca, 0xbd, 0xb1, 0x87, 0x5f, 0x5c, 0xba, + 0x58, 0xe6, 0xa5, 0x0e, 0xfa, 0x7d, 0x49, 0xba, 0xf2, 0xe5, 0x3f, 0xfb, 0xc9, 0xf7, 0xee, 0x3f, + 0x4c, 0x4e, 0xf8, 0xe4, 0x86, 0x16, 0xf2, 0x57, 0x7f, 0x55, 0x81, 0x11, 0x29, 0x4a, 0x8a, 0x8b, + 0xf2, 0x20, 0x81, 0x28, 0xab, 0x42, 0x90, 0xb7, 0x98, 0x20, 0x6f, 0x26, 0x25, 0x7b, 0x72, 0x43, + 0x93, 0x9c, 0x1f, 0x2d, 0x9f, 0xff, 0xe4, 0x7b, 0xf7, 0xef, 0x0f, 0x0e, 0xb0, 0x32, 0x0c, 0x69, + 0x03, 0x35, 0x2b, 0x1a, 0xcc, 0x5c, 0x30, 0xc6, 0x47, 0x5f, 0x3e, 0xbf, 0x9a, 0x72, 0x2a, 0x9f, + 0x28, 0x70, 0xb3, 0xa7, 0xbc, 0xea, 0x3b, 0x30, 0x7c, 0x82, 0xac, 0x16, 0xe6, 0x73, 0x96, 0x5d, + 0xb9, 0xf3, 0x83, 0x1f, 0x2f, 0xde, 0xf8, 0xa7, 0x1f, 0x2f, 0xce, 0x0b, 0xe3, 0xa1, 0xe6, 0xf1, + 0x12, 0x71, 0x97, 0x6d, 0xe4, 0x37, 0x96, 0x36, 0xf1, 0x11, 0x32, 0xce, 0xd6, 0xb0, 0xa1, 0x09, + 0x8a, 0x47, 0x6f, 0x9d, 0x5f, 0x45, 0x43, 0x95, 0x4f, 0xa6, 0x61, 0x64, 0x17, 0x79, 0xc8, 0xa6, + 0x2a, 0x86, 0x45, 0xda, 0x74, 0x7d, 0xdd, 0x46, 0xde, 0x31, 0xf6, 0x75, 0xe2, 0x50, 0x1f, 0x39, + 0xbe, 0x6e, 0x11, 0xea, 0x13, 0xe7, 0x48, 0x3f, 0xc4, 0x58, 0x9a, 0xd2, 0xec, 0x92, 0x90, 0x67, + 0x89, 0x19, 0x73, 0x88, 0xbf, 0xea, 0x12, 0x67, 0x65, 0x88, 0x49, 0xac, 0xcd, 0x33, 0x9c, 0x2d, + 0x0e, 0x53, 0x13, 0x28, 0x9b, 0x02, 0x64, 0x03, 0x63, 0xf5, 0x29, 0xdc, 0x35, 0xb1, 0x47, 0x4e, + 0x10, 0x13, 0xb3, 0x1f, 0xb3, 0xd4, 0x60, 0xcc, 0x5e, 0x8a, 0xd0, 0x2e, 0x62, 0x89, 0x60, 0xde, + 0xc4, 0x87, 0xa8, 0x65, 0xf9, 0xba, 0x1c, 0xe1, 0x31, 0xf6, 0x18, 0x0f, 0xdd, 0x43, 0x3e, 0x2e, + 0xa5, 0x07, 0x57, 0xf6, 0x8c, 0xc4, 0xa9, 0xf3, 0x01, 0x1e, 0x63, 0x6f, 0x03, 0x63, 0x0d, 0xf9, + 0xdd, 0x2c, 0xfc, 0x76, 0x16, 0x43, 0x57, 0x63, 0xb1, 0x17, 0x67, 0x61, 0xc3, 0x4b, 0x01, 0x8b, + 0x36, 0x05, 0xb6, 0x31, 0x1a, 0x1e, 0x9c, 0xd1, 0x6d, 0x89, 0xb6, 0x16, 0xd3, 0xdf, 0xa5, 0xec, + 0x3a, 0xc6, 0x35, 0xf2, 0x22, 0xec, 0xda, 0x46, 0x67, 0xc2, 0xad, 0x80, 0x1d, 0x71, 0x88, 0x4f, + 0x90, 0xc5, 0x6c, 0xe3, 0x88, 0x38, 0x8c, 0x11, 0x71, 0x4b, 0xa3, 0x83, 0x73, 0x9a, 0x95, 0x40, + 0x35, 0x81, 0xb3, 0xc5, 0x61, 0x34, 0x86, 0xa2, 0x5a, 0x50, 0x0e, 0xb8, 0xd8, 0x88, 0x38, 0x3e, + 0x76, 0x90, 0x63, 0xe0, 0x76, 0x4e, 0x99, 0xe4, 0x63, 0xda, 0x8a, 0xb0, 0xe2, 0xdc, 0xde, 0x86, + 0x52, 0xc0, 0xed, 0xb0, 0xe5, 0x98, 0xcc, 0xb0, 0x59, 0x3f, 0xef, 0x04, 0x59, 0xa5, 0x6c, 0x59, + 0xb9, 0x97, 0xd6, 0xa6, 0x65, 0xfb, 0x86, 0x68, 0xae, 0xc9, 0x56, 0xf5, 0x55, 0x28, 0x06, 0x14, + 0x76, 0xcb, 0xf2, 0x49, 0xd3, 0xc2, 0x25, 0xe0, 0x14, 0xe3, 0xb2, 0x7e, 0x4b, 0x56, 0xab, 0xbf, + 0x08, 0xd3, 0x1e, 0xb6, 0xd0, 0x99, 0x9c, 0x16, 0xda, 0x40, 0x9e, 0x9c, 0x9c, 0xb1, 0xc1, 0x07, + 0x32, 0x29, 0x21, 0x36, 0x30, 0xae, 0x33, 0x00, 0x3e, 0x25, 0x04, 0x16, 0x03, 0xf1, 0x1b, 0x6e, + 0xcb, 0xb3, 0xce, 0xc2, 0x51, 0x30, 0x78, 0xdd, 0x40, 0xcd, 0x52, 0x6e, 0x70, 0x16, 0xc1, 0xfa, + 0x78, 0xc2, 0xa1, 0xe4, 0x80, 0x19, 0x1f, 0x16, 0xb0, 0x62, 0xb3, 0x2f, 0x59, 0x71, 0x45, 0x61, + 0xea, 0x8b, 0xa1, 0xe4, 0x93, 0xcf, 0xbe, 0xe0, 0x53, 0x93, 0x30, 0x7c, 0x40, 0x6b, 0xb0, 0x68, + 0xa3, 0xd3, 0xb8, 0x39, 0xbb, 0x9e, 0x89, 0x3d, 0x9d, 0x12, 0x13, 0xeb, 0x86, 0xdb, 0x72, 0xfc, + 0x52, 0xa1, 0xac, 0xdc, 0xcb, 0x6b, 0xf3, 0x36, 0x3a, 0x8d, 0xec, 0x74, 0x87, 0x75, 0xaa, 0x13, + 0x13, 0xaf, 0xb2, 0x2e, 0x2a, 0x85, 0x57, 0x88, 0xf3, 0xa1, 0xee, 0xe1, 0x67, 0xc8, 0x33, 0x75, + 0xca, 0x56, 0x84, 0xa9, 0x7b, 0xf8, 0x69, 0x8b, 0x78, 0xd8, 0xc6, 0x8e, 0xaf, 0xfb, 0x0d, 0x0f, + 0xd3, 0x86, 0x6b, 0x99, 0xa5, 0x71, 0x2e, 0xf6, 0x6d, 0x29, 0xf6, 0xcd, 0x6e, 0xb1, 0x6b, 0x8e, + 0xaf, 0xdd, 0x21, 0xce, 0x87, 0x1a, 0x07, 0xab, 0x73, 0x2c, 0x2d, 0x82, 0xda, 0x0b, 0x90, 0xd4, + 0xc7, 0x50, 0xf6, 0x3d, 0x24, 0x94, 0xcf, 0xfb, 0x52, 0xfd, 0x04, 0x0b, 0x5f, 0x69, 0xb6, 0xb8, + 0xdd, 0x3a, 0xa5, 0x22, 0x37, 0x90, 0xdb, 0xb2, 0x9f, 0x80, 0xa4, 0xef, 0x8b, 0x5e, 0x6b, 0xb2, + 0x13, 0xd3, 0xb4, 0x45, 0x9e, 0xb6, 0x88, 0x89, 0x7c, 0xd7, 0x0b, 0x07, 0x11, 0x19, 0xcd, 0x44, + 0x02, 0x4d, 0x47, 0x40, 0x52, 0xfe, 0xd0, 0x74, 0x4e, 0xe1, 0xd5, 0x03, 0xe2, 0x20, 0xef, 0x4c, + 0x77, 0x9b, 0x8c, 0x2d, 0xed, 0xe7, 0xe8, 0xd5, 0xc1, 0x1c, 0xfd, 0xcb, 0x02, 0x71, 0x47, 0x00, + 0x5e, 0xe4, 0xeb, 0x7f, 0x45, 0x81, 0x32, 0xf2, 0x5d, 0x9b, 0x18, 0x01, 0x4b, 0x31, 0xc7, 0xc8, + 0x30, 0x30, 0xa5, 0xba, 0x85, 0x4f, 0xb0, 0x55, 0x9a, 0x2c, 0x2b, 0xf7, 0x0a, 0x0f, 0xdf, 0xee, + 0x97, 0x87, 0x54, 0x39, 0x86, 0xe0, 0xc2, 0x0d, 0xa0, 0xca, 0x01, 0x36, 0x19, 0xbd, 0x76, 0x0b, + 0xf5, 0x69, 0x55, 0x4f, 0xe1, 0x15, 0x1e, 0x03, 0x7a, 0x89, 0xc1, 0x96, 0xa8, 0x5c, 0xd1, 0x04, + 0x7b, 0xa5, 0xa9, 0xc1, 0xb5, 0x5d, 0x61, 0x98, 0x5d, 0x52, 0x6d, 0x60, 0xbc, 0x15, 0xc2, 0xa9, + 0x1f, 0x2b, 0xf0, 0x46, 0xcc, 0xba, 0x07, 0x10, 0xe0, 0xe6, 0xe0, 0x02, 0xdc, 0x8b, 0x90, 0x2f, + 0x11, 0xe3, 0x37, 0x14, 0x78, 0xd0, 0x31, 0xfd, 0x03, 0x88, 0x32, 0x3d, 0xb8, 0x28, 0xaf, 0xb5, + 0x99, 0xc2, 0x25, 0xd2, 0x7c, 0x1b, 0x66, 0x6d, 0xe2, 0x10, 0x1b, 0x59, 0x3a, 0xcf, 0x98, 0x0d, + 0xd7, 0x8a, 0x02, 0xd8, 0xcc, 0xe0, 0x4c, 0xa7, 0x25, 0xca, 0xae, 0x04, 0x09, 0x22, 0xd7, 0x37, + 0xe1, 0x35, 0x42, 0x43, 0xc3, 0xee, 0xce, 0x6d, 0x2c, 0xd4, 0x72, 0x8c, 0x86, 0x8e, 0x1d, 0x74, + 0x60, 0x61, 0xb3, 0x54, 0x2a, 0x2b, 0xf7, 0x32, 0xda, 0x17, 0x08, 0x95, 0xb6, 0xbb, 0xd6, 0x91, + 0xbe, 0x6c, 0xf2, 0xee, 0xeb, 0xa2, 0x37, 0x73, 0x59, 0x4d, 0x97, 0xfa, 0xba, 0xeb, 0x58, 0x67, + 0xba, 0xed, 0x9a, 0x58, 0x6f, 0x60, 0x72, 0xd4, 0x88, 0x3b, 0x99, 0x59, 0xbe, 0xec, 0xe7, 0x59, + 0xb7, 0x1d, 0xc7, 0x3a, 0xdb, 0x72, 0x4d, 0xfc, 0x84, 0xf7, 0x89, 0xbc, 0xc7, 0x11, 0x3c, 0x90, + 0x21, 0xce, 0xc4, 0x86, 0x87, 0x11, 0xc5, 0x7a, 0xd3, 0x23, 0x06, 0xd6, 0x7d, 0x62, 0x63, 0xea, + 0x23, 0xbb, 0x19, 0xe1, 0xe9, 0x14, 0x1b, 0xae, 0x63, 0xd2, 0xd2, 0x1c, 0xc7, 0x7d, 0x5d, 0x10, + 0xae, 0x49, 0xba, 0x5d, 0x46, 0xb6, 0x17, 0x50, 0x85, 0x1c, 0xea, 0x82, 0x46, 0x7d, 0x05, 0xc6, + 0x83, 0x95, 0xa4, 0x23, 0xd3, 0x26, 0x0e, 0x2d, 0xcd, 0x97, 0xd3, 0xf7, 0xb2, 0x5a, 0x21, 0xa8, + 0xae, 0xf2, 0x5a, 0x75, 0x13, 0x26, 0x99, 0x13, 0x45, 0x2d, 0x83, 0x4d, 0xa1, 0xce, 0xdc, 0x32, + 0x8b, 0x27, 0xb7, 0x06, 0x71, 0x98, 0x45, 0xe2, 0x7c, 0x58, 0x15, 0x84, 0x5b, 0xe8, 0x94, 0x85, + 0x8f, 0xfb, 0x30, 0x71, 0x48, 0x4e, 0xb1, 0xa9, 0x1f, 0x21, 0x1a, 0x2a, 0xfa, 0x36, 0x57, 0xf4, + 0x38, 0x6f, 0x78, 0x8c, 0xa8, 0xd4, 0xe8, 0xa3, 0xd2, 0xbf, 0x7f, 0x77, 0x51, 0x61, 0xc9, 0x72, + 0x28, 0xe9, 0xb2, 0x48, 0x80, 0x2b, 0x1f, 0x2b, 0x30, 0x29, 0xe6, 0xa0, 0xdd, 0x80, 0xe6, 0x21, + 0x1b, 0x78, 0x2f, 0xb1, 0x9b, 0xca, 0x6a, 0x19, 0x51, 0x51, 0x33, 0xd5, 0x9f, 0x87, 0x42, 0x87, + 0x1d, 0xa7, 0x06, 0x37, 0xa9, 0xfc, 0x61, 0x9c, 0xd1, 0xa3, 0xa1, 0x5f, 0xff, 0xee, 0xe2, 0x8d, + 0xca, 0xf7, 0x01, 0x8a, 0x9d, 0x46, 0xa1, 0x4e, 0xc3, 0x88, 0x4f, 0x8c, 0x63, 0xec, 0x49, 0x01, + 0x64, 0x49, 0x5d, 0x84, 0x31, 0xb1, 0x41, 0xd4, 0x99, 0xdb, 0x14, 0xbc, 0x35, 0x10, 0x55, 0x2b, + 0x88, 0x62, 0xf5, 0x25, 0xc8, 0xc9, 0x0e, 0x4f, 0x5b, 0x6e, 0x90, 0xec, 0x6a, 0x92, 0xe8, 0xeb, + 0xac, 0x4a, 0x5d, 0x0f, 0x31, 0xfc, 0xb3, 0xa6, 0xc8, 0x55, 0x0b, 0x0f, 0x5f, 0x8e, 0x39, 0x47, + 0xb9, 0x05, 0x0d, 0x77, 0x12, 0xbc, 0xb8, 0x77, 0xd6, 0xc4, 0x01, 0x27, 0xf6, 0x5b, 0x5d, 0x82, + 0x49, 0x09, 0x43, 0x0d, 0x64, 0x61, 0xfd, 0x10, 0x19, 0xbe, 0xeb, 0xf1, 0x8c, 0x34, 0xaf, 0x4d, + 0x88, 0xa6, 0x3a, 0x6b, 0xd9, 0xe0, 0x0d, 0x4c, 0x74, 0x2e, 0x92, 0x6e, 0x62, 0xc7, 0xb5, 0x45, + 0x2a, 0xa9, 0x01, 0xaf, 0x5a, 0x63, 0x35, 0xed, 0x7a, 0x1f, 0xed, 0xd0, 0xfb, 0x3e, 0x4c, 0xf5, + 0xcc, 0x13, 0x13, 0x64, 0x6f, 0x2a, 0xe9, 0x4e, 0x10, 0xbf, 0x05, 0xa5, 0x0b, 0x13, 0xc3, 0x6c, + 0x12, 0x5f, 0xd1, 0x3b, 0x23, 0xac, 0x41, 0xa1, 0x23, 0x61, 0x87, 0xc1, 0x41, 0x73, 0x76, 0x3c, + 0x61, 0xae, 0x41, 0xa1, 0x23, 0x19, 0x4f, 0x90, 0xef, 0xe5, 0xfc, 0x38, 0xd4, 0xc5, 0x29, 0x64, + 0xee, 0x05, 0x53, 0xc8, 0x32, 0x8c, 0x11, 0xba, 0x8b, 0xbd, 0x26, 0xf6, 0x5b, 0xc8, 0xe2, 0x69, + 0x5c, 0x46, 0x8b, 0x57, 0xa9, 0xef, 0xc2, 0x08, 0xf5, 0x91, 0xdf, 0xa2, 0x3c, 0xf5, 0x2a, 0x3c, + 0xbc, 0xd7, 0x2f, 0x28, 0x8b, 0xc5, 0x50, 0xe7, 0xfd, 0x35, 0x49, 0xa7, 0x6a, 0x30, 0x69, 0x13, + 0x27, 0x74, 0x68, 0xc6, 0xb1, 0x4e, 0xc9, 0x47, 0x58, 0xe6, 0x5e, 0x03, 0x89, 0x5e, 0xb4, 0x89, + 0x23, 0x1d, 0x9b, 0x71, 0x5c, 0x27, 0x1f, 0x71, 0x8d, 0x30, 0xcc, 0xa7, 0x2d, 0xe4, 0xf8, 0xc4, + 0x3f, 0x8b, 0xc1, 0x16, 0x13, 0x68, 0xc4, 0x26, 0xce, 0xd7, 0x25, 0x42, 0x88, 0xbc, 0x01, 0x39, + 0x86, 0xec, 0xc8, 0x9d, 0x78, 0x92, 0x7c, 0x6b, 0xcc, 0x26, 0xe1, 0x0e, 0x5e, 0x9d, 0x82, 0x61, + 0xee, 0x60, 0x79, 0xf6, 0x94, 0xd5, 0x44, 0x41, 0x7d, 0x0d, 0x26, 0xf8, 0x0f, 0xbd, 0x89, 0x3d, + 0x9b, 0x50, 0xca, 0xc2, 0x23, 0xcf, 0x76, 0xf2, 0x5a, 0x91, 0x37, 0xec, 0x46, 0xf5, 0xea, 0x5d, + 0x28, 0x04, 0x0b, 0xd0, 0x60, 0x81, 0x8d, 0xf2, 0x74, 0x24, 0xaf, 0xe5, 0xe5, 0x1a, 0x14, 0x95, + 0x6a, 0x1d, 0x26, 0x3d, 0x6c, 0xb6, 0x3a, 0x57, 0x43, 0x82, 0xcc, 0x61, 0x42, 0xd0, 0xb7, 0xaf, + 0xb3, 0x09, 0xb7, 0x89, 0x23, 0x3d, 0x70, 0xef, 0x3f, 0xcd, 0x13, 0xc1, 0xd7, 0x12, 0x1c, 0x0f, + 0xc9, 0xd4, 0x70, 0xdc, 0x6d, 0xaf, 0x96, 0x9e, 0xf4, 0xa7, 0x19, 0x98, 0x5c, 0xe9, 0x4e, 0x1a, + 0x2f, 0x74, 0xa6, 0x77, 0x20, 0x1f, 0x78, 0xb0, 0x33, 0xfb, 0xc0, 0xb5, 0xa4, 0x3b, 0x95, 0x0e, + 0xb4, 0xce, 0xeb, 0x58, 0x88, 0x93, 0x9d, 0x9a, 0x9e, 0x7b, 0x42, 0x4c, 0xec, 0x49, 0x9f, 0x5a, + 0x10, 0xd5, 0xbb, 0xb2, 0xf6, 0x7f, 0xca, 0xad, 0x3e, 0x80, 0x29, 0x7c, 0xda, 0x24, 0x22, 0xdd, + 0x8f, 0x02, 0x3c, 0xf7, 0xaf, 0x69, 0x6d, 0x32, 0x6a, 0x0b, 0xa3, 0x38, 0x23, 0xa1, 0xd8, 0xf7, + 0x2d, 0xb9, 0x7d, 0x09, 0x49, 0x46, 0x05, 0x49, 0xd4, 0x16, 0x91, 0x84, 0xe6, 0x97, 0x89, 0x9b, + 0x5f, 0x87, 0x4b, 0xcf, 0xf6, 0x77, 0xe9, 0xd0, 0xe1, 0xd2, 0xbb, 0x9d, 0xe3, 0xd8, 0xf5, 0x39, + 0xc7, 0xdc, 0xf5, 0x3b, 0xc7, 0xfc, 0x0b, 0x3a, 0xc7, 0xff, 0x6f, 0xae, 0x6f, 0x1b, 0x8a, 0x31, + 0x33, 0xe3, 0x42, 0xc7, 0xdc, 0x9f, 0x72, 0x19, 0xe6, 0x78, 0x44, 0xcc, 0x25, 0xee, 0x72, 0xa5, + 0xea, 0x15, 0x5d, 0xe9, 0xe7, 0xe0, 0x34, 0xa5, 0x03, 0xfa, 0xb7, 0x14, 0xcc, 0xac, 0xb3, 0x05, + 0x77, 0xb6, 0xd1, 0xf2, 0x5b, 0x1e, 0x0e, 0x77, 0xad, 0x87, 0x6e, 0xff, 0xac, 0xf2, 0xa2, 0x45, + 0x9c, 0xba, 0x78, 0x11, 0xbf, 0x09, 0x53, 0xfe, 0x33, 0xd4, 0xd4, 0xa9, 0x8f, 0xbc, 0xf8, 0x22, + 0x4e, 0x73, 0x12, 0x95, 0xb5, 0xd5, 0x59, 0x53, 0x44, 0xf1, 0x0c, 0xbe, 0x10, 0x67, 0x12, 0x11, + 0x0b, 0x7b, 0x32, 0x5a, 0x76, 0xcb, 0xe2, 0x39, 0x68, 0x92, 0xe3, 0xcb, 0x4a, 0x4c, 0xb6, 0x80, + 0x25, 0x9f, 0xae, 0xd5, 0x10, 0xae, 0xa7, 0x21, 0x24, 0x38, 0xb8, 0xec, 0x34, 0x84, 0xca, 0xdf, + 0xa6, 0x60, 0x32, 0xcc, 0x28, 0x06, 0x55, 0xf1, 0x37, 0x60, 0xe6, 0xa2, 0x53, 0xad, 0x04, 0x19, + 0xfc, 0x54, 0xa3, 0xd7, 0x71, 0xd6, 0x3e, 0x4c, 0xf5, 0x3c, 0xc6, 0x4a, 0x70, 0xd2, 0xac, 0x36, + 0xba, 0xcf, 0xaf, 0x7e, 0x0e, 0xa6, 0x1d, 0x7c, 0x1a, 0x1d, 0x26, 0x46, 0x93, 0x3c, 0xc4, 0x27, + 0x79, 0x8a, 0xb5, 0x4a, 0x51, 0xa2, 0x69, 0x8e, 0x9d, 0x25, 0x86, 0xa7, 0x8f, 0xc3, 0x6d, 0x67, + 0x89, 0xc1, 0xb1, 0x63, 0xe5, 0x33, 0x05, 0xa6, 0x3b, 0x14, 0x29, 0xe1, 0x54, 0x0d, 0xd4, 0xc8, + 0x20, 0x02, 0x09, 0x92, 0xdc, 0x53, 0x4c, 0x44, 0xe4, 0x01, 0xe6, 0x36, 0x14, 0x63, 0x98, 0xc2, + 0x0e, 0x12, 0xe8, 0x7e, 0x3c, 0x22, 0x16, 0x0e, 0xe1, 0x2e, 0x14, 0x2c, 0x44, 0xbb, 0x8d, 0x3f, + 0xcf, 0x6a, 0x43, 0x85, 0x54, 0x7e, 0x4b, 0x81, 0x85, 0xce, 0x0d, 0x56, 0x3d, 0x34, 0xa9, 0xcb, + 0x2d, 0xa7, 0x97, 0xf9, 0xa6, 0x5e, 0xc0, 0x7c, 0xbf, 0x0a, 0x53, 0xdb, 0xbd, 0x26, 0xee, 0x2e, + 0x14, 0xf8, 0x74, 0x47, 0xc3, 0x51, 0xc4, 0x70, 0x58, 0x6d, 0x34, 0x9c, 0xff, 0x50, 0xa0, 0xb0, + 0x45, 0x4c, 0x8e, 0x55, 0x75, 0xcc, 0xbd, 0x9d, 0x15, 0xf5, 0x5d, 0xc8, 0xda, 0xc4, 0x94, 0xa2, + 0x29, 0x83, 0xbb, 0xd8, 0x8c, 0x2d, 0x71, 0x58, 0x00, 0x3d, 0x60, 0x66, 0x7b, 0xd0, 0x3a, 0xeb, + 0x1a, 0xe1, 0xa5, 0x30, 0x39, 0x46, 0xba, 0xd2, 0x3a, 0x13, 0x50, 0xef, 0xc1, 0x38, 0x87, 0xa2, + 0xd8, 0xb2, 0x24, 0x56, 0x7a, 0x70, 0xac, 0x3c, 0xa3, 0xad, 0x63, 0xcb, 0x12, 0xba, 0xfa, 0xf3, + 0x11, 0x80, 0x7a, 0x78, 0xbb, 0x74, 0x61, 0x26, 0x77, 0x1b, 0x80, 0xed, 0x87, 0x65, 0x1e, 0x22, + 0xd2, 0xb8, 0x2c, 0xab, 0x11, 0x69, 0x48, 0x47, 0x9e, 0x92, 0xee, 0xca, 0x53, 0xba, 0x53, 0x91, + 0xa1, 0xeb, 0x4b, 0x45, 0x86, 0xaf, 0x3f, 0x15, 0x19, 0x79, 0xc1, 0x54, 0xa4, 0xef, 0x56, 0x3b, + 0xca, 0x53, 0x32, 0xd7, 0x9b, 0xa7, 0x64, 0x3f, 0x9f, 0x3c, 0x05, 0xae, 0x79, 0x8b, 0x36, 0xf6, + 0xa2, 0x5b, 0xb4, 0xdc, 0xa5, 0x5b, 0xb4, 0xfc, 0x05, 0xd9, 0xc6, 0x1d, 0xc8, 0x4b, 0x3b, 0x96, + 0xc9, 0x86, 0xb8, 0x9f, 0xc8, 0x09, 0x53, 0x96, 0x1b, 0xb4, 0xee, 0x94, 0x64, 0xbc, 0x47, 0x4a, + 0x52, 0xf9, 0x23, 0x05, 0x46, 0xd7, 0x70, 0xd3, 0xa5, 0xc4, 0x57, 0x77, 0x61, 0x02, 0x9d, 0x20, + 0x62, 0xa1, 0x03, 0x7e, 0x72, 0x64, 0x21, 0xc7, 0x48, 0x74, 0xe9, 0x5c, 0x0c, 0xa9, 0x57, 0x04, + 0xb1, 0xfa, 0x04, 0xf2, 0xbe, 0xeb, 0x23, 0x2b, 0x44, 0x4b, 0x25, 0xb1, 0x72, 0x46, 0x29, 0x91, + 0x2a, 0xaf, 0xc3, 0x54, 0xbd, 0x75, 0x80, 0x0c, 0x7e, 0x21, 0xb3, 0xe7, 0x21, 0x13, 0x6f, 0xbb, + 0x8c, 0xc3, 0x14, 0x0c, 0x3b, 0x6e, 0x20, 0x67, 0x5e, 0x13, 0x05, 0x16, 0xb2, 0xb2, 0xfc, 0xd0, + 0x97, 0xfb, 0xed, 0x3b, 0x90, 0xa7, 0x21, 0x6d, 0xe4, 0xbb, 0x73, 0x51, 0x65, 0xcd, 0x64, 0x9d, + 0xf8, 0x5a, 0xc4, 0x06, 0x69, 0x12, 0xec, 0xf8, 0xc1, 0x36, 0xef, 0x10, 0x63, 0x2d, 0xa8, 0x53, + 0xdf, 0x81, 0xe1, 0x4e, 0x5f, 0x75, 0xf9, 0x55, 0x3c, 0xa7, 0x50, 0xbf, 0x06, 0x99, 0xc0, 0x2a, + 0x93, 0xb8, 0x8d, 0x90, 0x48, 0x2d, 0x42, 0xda, 0x20, 0xa6, 0xf0, 0x13, 0x1a, 0xfb, 0x59, 0xf9, + 0x38, 0x05, 0x59, 0xe6, 0xf6, 0xf8, 0x48, 0x2f, 0x3b, 0x90, 0x04, 0x71, 0xbc, 0x4e, 0x9c, 0x43, + 0x57, 0x5e, 0xa2, 0xdf, 0xed, 0xbb, 0xa5, 0x0e, 0xb4, 0x27, 0x37, 0xd3, 0x59, 0x37, 0x54, 0xe7, + 0x5a, 0x80, 0xc5, 0x77, 0xb0, 0x69, 0xbe, 0xfa, 0x2f, 0xc7, 0xe2, 0x5b, 0x58, 0x81, 0xc2, 0x77, + 0xb0, 0xcc, 0x34, 0x3c, 0x72, 0x74, 0x84, 0x3d, 0xe9, 0xfe, 0x87, 0x12, 0x84, 0x12, 0x49, 0x29, + 0xbc, 0xff, 0x0f, 0x53, 0x50, 0x60, 0x6a, 0xd8, 0x24, 0x36, 0x91, 0xba, 0x68, 0x1f, 0xae, 0x72, + 0x8d, 0xc3, 0x4d, 0x5d, 0x71, 0xb8, 0x5f, 0x83, 0xcc, 0x21, 0xb1, 0xf8, 0xe2, 0x48, 0x62, 0x3c, + 0x21, 0xd1, 0xf5, 0xe9, 0x8b, 0x85, 0x41, 0x31, 0xa0, 0x06, 0xa2, 0x0d, 0x6e, 0x4f, 0x39, 0x29, + 0xe9, 0x13, 0x44, 0x1b, 0x95, 0xbf, 0x4f, 0xc1, 0x78, 0x14, 0x4c, 0xaf, 0x5f, 0x9f, 0x1b, 0x90, + 0x93, 0xde, 0x40, 0xe7, 0x37, 0x15, 0x09, 0x5c, 0xc2, 0x98, 0x24, 0x7c, 0xe2, 0x5a, 0x66, 0xc7, + 0x30, 0xd2, 0x1d, 0xc3, 0xe8, 0x98, 0xb6, 0xa1, 0xeb, 0xb2, 0xd2, 0xe1, 0xab, 0x5a, 0xe9, 0xf7, + 0x53, 0x30, 0xde, 0x71, 0x7b, 0xfc, 0xbf, 0x6d, 0xc9, 0x7e, 0x05, 0x46, 0xc4, 0x61, 0x5f, 0x12, + 0x07, 0x26, 0x49, 0xae, 0x51, 0x93, 0xff, 0x99, 0x86, 0xf9, 0x28, 0x16, 0x70, 0x49, 0x0f, 0x5c, + 0xf7, 0x78, 0x0b, 0xfb, 0xc8, 0x44, 0x3e, 0x52, 0xdf, 0x81, 0xd9, 0x13, 0xe4, 0xb0, 0x75, 0xa3, + 0x5b, 0xcc, 0x25, 0xc8, 0x8b, 0x45, 0x71, 0x95, 0x2f, 0xc2, 0xc4, 0xb4, 0xec, 0x10, 0xb9, 0x0c, + 0x71, 0x8b, 0xff, 0x2e, 0xdc, 0x96, 0xa7, 0x9a, 0xfc, 0x6a, 0xad, 0x9b, 0x3c, 0xc5, 0xc9, 0x67, + 0x45, 0xa7, 0x1d, 0xc7, 0x3a, 0xeb, 0x44, 0x68, 0xc0, 0x02, 0x3a, 0x3a, 0xf2, 0xf0, 0x11, 0xdb, + 0x36, 0xc6, 0xb1, 0x42, 0xe7, 0x9f, 0x60, 0xf5, 0xcf, 0x87, 0x50, 0x5a, 0xc8, 0x30, 0x48, 0x4c, + 0x54, 0x04, 0x73, 0x11, 0xa7, 0x60, 0xc0, 0x57, 0x09, 0x31, 0xa5, 0x10, 0xe6, 0x7d, 0x81, 0x12, + 0xb2, 0x58, 0x87, 0xc5, 0x00, 0xd8, 0x70, 0x1d, 0x93, 0xc8, 0x53, 0xd9, 0xb8, 0x42, 0xc4, 0x89, + 0xe3, 0x2d, 0xd9, 0x6d, 0x35, 0xea, 0x15, 0xd3, 0xc9, 0x26, 0xdc, 0x89, 0x6b, 0xe2, 0x22, 0xa8, + 0x11, 0x0e, 0xb5, 0x18, 0xe9, 0xb6, 0x27, 0x5a, 0xe5, 0xaf, 0x15, 0x18, 0xef, 0x98, 0xfe, 0x28, + 0x2e, 0x2b, 0x2f, 0x14, 0x97, 0x53, 0x57, 0x89, 0xcb, 0x15, 0xc8, 0x11, 0x1a, 0xcd, 0x0f, 0x9f, + 0xdf, 0x8c, 0xd6, 0x56, 0x17, 0xc4, 0xee, 0xa1, 0x28, 0x76, 0x3f, 0x83, 0xc9, 0x8e, 0x41, 0xac, + 0x31, 0xdb, 0xad, 0xc2, 0x30, 0x57, 0x89, 0xf4, 0xb1, 0x7d, 0x4f, 0xbd, 0x3b, 0xe8, 0x35, 0x41, + 0xd9, 0xe1, 0x17, 0x53, 0x9d, 0xee, 0xfd, 0xb7, 0xd3, 0x30, 0x15, 0xf9, 0xa1, 0x9f, 0xe9, 0x98, + 0x19, 0xf9, 0x9b, 0x74, 0x72, 0x7f, 0x13, 0x0f, 0xb8, 0x43, 0xd7, 0x12, 0x70, 0x87, 0xaf, 0x27, + 0xe0, 0x8e, 0x74, 0xce, 0xc8, 0xef, 0xa6, 0xe1, 0x66, 0xe7, 0xc9, 0xc3, 0xff, 0xc9, 0x29, 0x59, + 0x83, 0x31, 0x79, 0x59, 0xc4, 0x03, 0x7f, 0x82, 0x59, 0x01, 0x41, 0xc7, 0xe3, 0xfe, 0x7f, 0xdb, + 0xbc, 0xfc, 0x4d, 0x0a, 0x32, 0xbb, 0x6c, 0x63, 0x44, 0x5c, 0x47, 0x9d, 0x86, 0x11, 0x42, 0x37, + 0x5d, 0x79, 0xba, 0x95, 0xd1, 0x64, 0xe9, 0xc5, 0xdd, 0xc7, 0x1a, 0x8c, 0x61, 0xc7, 0xf7, 0xce, + 0xf4, 0xc4, 0x1b, 0x0b, 0xe0, 0x74, 0x62, 0x28, 0x2f, 0x14, 0x9a, 0xbf, 0x05, 0xa5, 0xee, 0x53, + 0x3c, 0x9d, 0xa3, 0x27, 0x39, 0x96, 0x98, 0xee, 0x3a, 0xcb, 0x5b, 0x67, 0x10, 0x95, 0x1a, 0x4c, + 0xc5, 0x8c, 0xba, 0xe6, 0x98, 0xc4, 0x40, 0xbe, 0x7b, 0x49, 0xf6, 0x33, 0x05, 0xc3, 0x84, 0xae, + 0xb4, 0x84, 0x52, 0x33, 0x9a, 0x28, 0x54, 0xfe, 0x2e, 0x05, 0x19, 0xbe, 0xf9, 0xdb, 0x74, 0xdb, + 0x55, 0xaf, 0x5c, 0x45, 0xf5, 0x61, 0xd4, 0x48, 0x25, 0x8e, 0x1a, 0x5d, 0x5b, 0x4a, 0x91, 0x7f, + 0xb6, 0x6f, 0x29, 0xdf, 0x82, 0xf4, 0x21, 0x4e, 0xe4, 0x7d, 0x58, 0xff, 0x4b, 0xf2, 0x73, 0xf5, + 0x6d, 0xb8, 0xd9, 0xb6, 0x51, 0xd5, 0x91, 0x69, 0x7a, 0x98, 0x52, 0x61, 0xc0, 0x7c, 0xe1, 0x2b, + 0xda, 0x64, 0x7c, 0xdb, 0x5a, 0x15, 0x1d, 0x82, 0x28, 0x34, 0x1a, 0x45, 0xa1, 0xdf, 0x4f, 0x41, + 0x3e, 0x30, 0xf1, 0x35, 0x6c, 0xf9, 0x48, 0x9d, 0x81, 0x51, 0x42, 0x75, 0xab, 0xdb, 0xd0, 0x35, + 0x50, 0xf1, 0x29, 0x36, 0x5a, 0xfc, 0x5a, 0xe0, 0x2a, 0x26, 0x3f, 0x11, 0x92, 0x87, 0xf9, 0xc5, + 0x36, 0x14, 0x23, 0xcc, 0xe4, 0x7e, 0x65, 0x3c, 0x24, 0x16, 0x97, 0xc8, 0xea, 0x26, 0x44, 0x55, + 0x5d, 0xbb, 0xa4, 0x4b, 0xe1, 0x0a, 0x21, 0xad, 0xc8, 0x33, 0xff, 0x30, 0x0d, 0x6a, 0xec, 0x5d, + 0x72, 0x60, 0x76, 0x3d, 0x4f, 0x13, 0x3a, 0xa7, 0x7e, 0x17, 0x0a, 0x4d, 0xa9, 0x57, 0xdd, 0x64, + 0x8a, 0x95, 0x09, 0xfc, 0xab, 0xfd, 0x3c, 0x6e, 0xdb, 0x4c, 0x68, 0xf9, 0x66, 0xdb, 0xc4, 0x7c, + 0x05, 0x46, 0x9a, 0xe8, 0xcc, 0x6d, 0xf9, 0x89, 0x3c, 0xaf, 0x20, 0xf9, 0xd9, 0xb7, 0x44, 0x26, + 0x61, 0xd3, 0xb1, 0x92, 0x3c, 0xd4, 0x61, 0xfd, 0x2b, 0xbf, 0x04, 0x6a, 0x94, 0x06, 0x85, 0xce, + 0xfa, 0x5d, 0xc8, 0x04, 0xca, 0x93, 0x51, 0xf3, 0xe5, 0x41, 0xf4, 0xae, 0x85, 0x54, 0xdd, 0x93, + 0x9c, 0xea, 0x9e, 0xe4, 0xca, 0x33, 0x98, 0x88, 0x98, 0x07, 0x87, 0x68, 0x03, 0x99, 0xc7, 0x57, + 0x61, 0xd4, 0x14, 0xfd, 0xa5, 0x5d, 0xdc, 0xe9, 0x27, 0x9f, 0x84, 0xd6, 0x02, 0x9a, 0x4a, 0x13, + 0xf2, 0xb2, 0x6e, 0xbf, 0x69, 0x22, 0x9f, 0x9f, 0x82, 0x89, 0x43, 0x6b, 0xe1, 0x46, 0x45, 0x41, + 0xad, 0x41, 0x46, 0x52, 0xd0, 0x52, 0xaa, 0x9c, 0xbe, 0x37, 0xf6, 0xf0, 0x8d, 0xc1, 0xf2, 0xc9, + 0x80, 0x61, 0x48, 0x5e, 0xf9, 0xa1, 0x02, 0xc5, 0x5d, 0x97, 0x38, 0x3e, 0x8d, 0x3d, 0x81, 0xfb, + 0x26, 0xcc, 0x88, 0xf3, 0xf0, 0x26, 0x6f, 0x89, 0x3f, 0x77, 0x4b, 0xe0, 0x8f, 0x6f, 0x72, 0x8c, + 0x5e, 0xe0, 0xfe, 0x05, 0xe0, 0x09, 0x9c, 0xce, 0x4d, 0xbf, 0x17, 0x78, 0xe5, 0xa7, 0x29, 0x58, + 0xd8, 0x8b, 0xbf, 0x88, 0x5e, 0x45, 0x76, 0x13, 0x91, 0x23, 0x67, 0xc5, 0x75, 0xa9, 0xb8, 0xec, + 0x79, 0x0b, 0x66, 0x0e, 0x58, 0x01, 0x9b, 0x7a, 0xdb, 0x07, 0x30, 0x26, 0x2d, 0x29, 0xfc, 0xf1, + 0xe2, 0x94, 0x6c, 0x8e, 0xce, 0x4a, 0x6a, 0x26, 0x55, 0x3f, 0x84, 0x99, 0x78, 0xf7, 0x48, 0xea, + 0x60, 0x0a, 0x5e, 0xef, 0x6f, 0x89, 0xed, 0x82, 0xca, 0x34, 0xee, 0x66, 0xf4, 0xe9, 0x4c, 0xd4, + 0x46, 0xd5, 0x2a, 0xdc, 0x0e, 0x44, 0xec, 0xf1, 0xf1, 0x8c, 0x49, 0x4b, 0x69, 0x2e, 0xe8, 0x9c, + 0xec, 0xd4, 0x99, 0x63, 0x32, 0x71, 0x4f, 0xe0, 0x76, 0x37, 0x69, 0x5c, 0xe8, 0xa1, 0x2b, 0x0b, + 0x3d, 0xdf, 0xf9, 0x09, 0x4e, 0x4c, 0xf4, 0xca, 0x5f, 0x2a, 0xa0, 0x06, 0x3a, 0x17, 0x33, 0xb0, + 0xeb, 0x8a, 0x67, 0x34, 0x9d, 0x37, 0xd5, 0xe2, 0x76, 0xab, 0x40, 0xdb, 0x6f, 0xa9, 0x7f, 0x19, + 0xa6, 0xc4, 0xeb, 0x50, 0x01, 0x11, 0x3c, 0x7f, 0x97, 0x3a, 0xee, 0xf3, 0x6a, 0xfc, 0x4d, 0x26, + 0xdb, 0x9f, 0xfe, 0xcb, 0xe2, 0xbd, 0x23, 0xe2, 0x37, 0x5a, 0x07, 0x4b, 0x86, 0x6b, 0x2f, 0xcb, + 0xaf, 0xf0, 0xc4, 0x7f, 0x6f, 0x50, 0xf3, 0x78, 0x99, 0xe5, 0xc8, 0x94, 0x13, 0x50, 0x4d, 0xb5, + 0xd1, 0x69, 0xbb, 0xa8, 0xb4, 0xf2, 0x27, 0x29, 0x98, 0xed, 0x69, 0x3f, 0xdc, 0x74, 0x1e, 0xc1, + 0x6c, 0x28, 0x58, 0xf0, 0x0e, 0x3f, 0x7c, 0x40, 0x2b, 0xc6, 0x33, 0x13, 0x74, 0x08, 0x9e, 0xe0, + 0x07, 0x6f, 0x65, 0x5f, 0x82, 0x5c, 0xec, 0x12, 0x4a, 0x0c, 0x28, 0xab, 0x8d, 0x45, 0xb7, 0x50, + 0x54, 0x6d, 0xc1, 0x6c, 0xfb, 0xab, 0x7f, 0x9d, 0x4f, 0xb0, 0xd8, 0x24, 0xa4, 0xb9, 0x3b, 0x79, + 0xd4, 0x6f, 0xbe, 0xfa, 0x1b, 0xbe, 0x36, 0xdd, 0xf6, 0xa9, 0x40, 0xb4, 0x20, 0xbe, 0x04, 0x33, + 0x26, 0xa1, 0x4f, 0x5b, 0xc8, 0x22, 0x87, 0x04, 0x9b, 0x71, 0x3b, 0x1b, 0xe2, 0x42, 0xde, 0x8c, + 0x37, 0x87, 0x26, 0x56, 0xf9, 0xab, 0x14, 0x4c, 0x6e, 0x60, 0xbc, 0x46, 0xa8, 0x38, 0xbb, 0x27, + 0x72, 0x43, 0x52, 0x87, 0x49, 0xe1, 0x3d, 0x4c, 0xd9, 0x22, 0x2e, 0xad, 0x92, 0x5c, 0x1e, 0x73, + 0xfa, 0x00, 0x98, 0x5f, 0x59, 0xd5, 0x61, 0xd2, 0xef, 0x01, 0x9a, 0x24, 0x4d, 0xf1, 0xbb, 0x40, + 0x57, 0x20, 0x2f, 0x3f, 0xe8, 0x40, 0x36, 0x3f, 0xa9, 0x48, 0x0f, 0xf2, 0x20, 0x39, 0x27, 0x68, + 0xaa, 0x9c, 0x84, 0x85, 0xef, 0x13, 0xd7, 0x6a, 0xd9, 0x89, 0x82, 0xb0, 0x24, 0xa9, 0xfc, 0x66, + 0xbb, 0x0a, 0xeb, 0x46, 0x03, 0x9b, 0x2d, 0x8b, 0x3f, 0xe3, 0x3d, 0x68, 0x19, 0x6c, 0x16, 0xa2, + 0xc3, 0xad, 0x21, 0x6d, 0x4c, 0xd4, 0x89, 0xb3, 0x97, 0x57, 0x60, 0x5c, 0x76, 0x09, 0xbf, 0x08, + 0x11, 0xcf, 0x45, 0x0a, 0xa2, 0x3a, 0xfc, 0x04, 0xa4, 0xd3, 0xf0, 0xd2, 0xdd, 0x86, 0xb7, 0x0d, + 0xe0, 0x13, 0xb9, 0x1b, 0x0d, 0x3c, 0xc3, 0x72, 0x3f, 0x4b, 0xeb, 0x31, 0xed, 0x5a, 0xd6, 0x97, + 0xbf, 0x68, 0x3f, 0x8b, 0x1a, 0xee, 0x67, 0x51, 0x5b, 0xa0, 0x76, 0x20, 0xef, 0xed, 0x6d, 0xaa, + 0x2a, 0x0c, 0xf9, 0x41, 0xe8, 0x19, 0xd2, 0xf8, 0x6f, 0x16, 0x8c, 0x7d, 0xdf, 0xea, 0x7a, 0x2a, + 0x93, 0xf3, 0x7d, 0x2b, 0xba, 0x2a, 0xff, 0x03, 0x05, 0x72, 0xef, 0x73, 0x45, 0x6b, 0xd8, 0x70, + 0x3d, 0x93, 0x5f, 0xf5, 0x71, 0x23, 0x92, 0x33, 0xa6, 0x24, 0xb9, 0xea, 0x63, 0x84, 0x02, 0x8d, + 0xe1, 0xf8, 0x71, 0x9c, 0x24, 0x27, 0xdd, 0x7e, 0x84, 0x53, 0xf9, 0x1d, 0x05, 0x0a, 0x55, 0x11, + 0x99, 0xa5, 0x03, 0x52, 0x4b, 0x30, 0x2a, 0x63, 0xb5, 0x0c, 0xf9, 0x41, 0x51, 0xc5, 0x30, 0xfa, + 0x39, 0x3a, 0xc3, 0x00, 0xbb, 0xf2, 0x6b, 0x0a, 0xe4, 0x78, 0x4a, 0x2c, 0x74, 0x46, 0xfb, 0xef, + 0xe6, 0x3e, 0x80, 0x29, 0x0b, 0xf9, 0x98, 0xfa, 0x3a, 0x73, 0x2e, 0x3c, 0x65, 0x74, 0x23, 0x09, + 0x5f, 0xb9, 0xcc, 0x5b, 0x49, 0x26, 0x9a, 0x2a, 0x40, 0xe2, 0x7c, 0x2b, 0x5f, 0x82, 0x7c, 0x94, + 0xb8, 0xd4, 0xd6, 0xf8, 0xc5, 0x67, 0x5b, 0x02, 0x26, 0xe2, 0x75, 0x4e, 0xcb, 0xc7, 0x33, 0x30, + 0x5a, 0xf9, 0x63, 0x05, 0xc6, 0x62, 0x40, 0xea, 0x2d, 0xc8, 0x76, 0x06, 0x9d, 0xa8, 0xe2, 0x45, + 0xb6, 0x8a, 0xf1, 0x6d, 0x6a, 0xfa, 0x0a, 0xdb, 0xd4, 0x8a, 0x0d, 0xc3, 0xe2, 0x13, 0xa2, 0x07, + 0xa0, 0x34, 0x93, 0x18, 0xa3, 0xd2, 0x64, 0x24, 0x4f, 0x93, 0xc8, 0xac, 0x3c, 0xad, 0xfc, 0x9e, + 0x02, 0x8b, 0xd5, 0xe0, 0x44, 0x38, 0x52, 0x6d, 0xdb, 0x0a, 0x19, 0xe8, 0x46, 0x75, 0x07, 0x0a, + 0xd2, 0x22, 0x84, 0xfd, 0x07, 0xd3, 0x3d, 0xc0, 0x4b, 0x01, 0xc9, 0x2c, 0x6f, 0xc7, 0x4a, 0xb4, + 0xf2, 0x89, 0x02, 0xb7, 0x42, 0xc9, 0xaa, 0x3d, 0xc4, 0xba, 0x78, 0x55, 0x5c, 0xbb, 0x2c, 0x14, + 0x72, 0xf1, 0xe6, 0xfe, 0xe6, 0xbf, 0x11, 0x3a, 0x7f, 0x91, 0xed, 0xf7, 0xe5, 0x1a, 0x1f, 0x91, + 0x4c, 0xa5, 0x82, 0x38, 0x50, 0x65, 0x79, 0xbf, 0xe3, 0xda, 0xe1, 0x25, 0x7f, 0xef, 0xbc, 0x7f, + 0x8e, 0xe5, 0xfd, 0xf2, 0xd2, 0x3f, 0xc5, 0xbd, 0x61, 0x58, 0xae, 0x60, 0x50, 0x1f, 0x7b, 0xc8, + 0xf1, 0xab, 0x2d, 0xbf, 0xe1, 0x7a, 0xe4, 0x23, 0xe1, 0xfc, 0x4b, 0x30, 0x7a, 0xc4, 0x6a, 0xe5, + 0xd7, 0xdc, 0x59, 0x2d, 0x28, 0xaa, 0x6f, 0xc1, 0x88, 0x0c, 0x7a, 0xa9, 0x41, 0x82, 0x9e, 0xec, + 0x5c, 0xf9, 0x36, 0x8c, 0x55, 0xf9, 0xf8, 0x38, 0xb3, 0x08, 0xdf, 0x6b, 0xc7, 0xf7, 0xae, 0x8a, + 0xff, 0x1d, 0x05, 0x0a, 0xeb, 0x87, 0x87, 0x78, 0x20, 0x1e, 0x35, 0x98, 0x70, 0xb0, 0xaf, 0x8b, + 0xa2, 0xfc, 0x38, 0x73, 0x30, 0x76, 0xe3, 0x0e, 0xf6, 0x1f, 0x0b, 0x32, 0xfe, 0x19, 0xa6, 0x3a, + 0x0b, 0x19, 0x42, 0xf5, 0x13, 0x64, 0xc9, 0x23, 0x9f, 0x8c, 0x36, 0x4a, 0xe8, 0xfb, 0xac, 0x58, + 0x69, 0x42, 0x91, 0x4f, 0xce, 0x56, 0xfb, 0x63, 0x8f, 0x1e, 0xf3, 0xd3, 0xf9, 0x94, 0x24, 0x75, + 0xb5, 0xa7, 0x24, 0xf7, 0x7d, 0xb8, 0xd5, 0xef, 0x83, 0x44, 0x15, 0x60, 0x64, 0xdb, 0x3d, 0x70, + 0xcd, 0xb3, 0xe2, 0x0d, 0xb5, 0x02, 0x0b, 0x2b, 0xf8, 0x88, 0x38, 0x2b, 0x96, 0x6b, 0x1c, 0x63, + 0xaf, 0x6e, 0x23, 0xcf, 0x5f, 0x75, 0x1d, 0xdf, 0x43, 0x86, 0x4f, 0x77, 0x1c, 0xeb, 0xac, 0xa8, + 0xa8, 0xd3, 0xa0, 0xf6, 0xa8, 0x4f, 0xa9, 0x39, 0xc8, 0xac, 0x9f, 0x60, 0xef, 0xcc, 0x75, 0x70, + 0x31, 0x7d, 0x7f, 0x2f, 0xb0, 0x7c, 0xf1, 0x9c, 0x47, 0x1d, 0x87, 0xb1, 0x7d, 0x87, 0x36, 0xb1, + 0xc1, 0xa3, 0x74, 0xf1, 0x06, 0x63, 0x2b, 0xe6, 0xbe, 0xa8, 0xb0, 0xdf, 0xbb, 0xa8, 0x45, 0xb1, + 0x59, 0x4c, 0xa9, 0x05, 0x80, 0x35, 0x6c, 0xbb, 0x16, 0xa1, 0x0d, 0x6c, 0x16, 0xd3, 0xea, 0x18, + 0x8c, 0xf2, 0x67, 0xb0, 0xd8, 0x2c, 0x0e, 0xdd, 0xff, 0x8b, 0x94, 0x7c, 0xb1, 0xc1, 0x8f, 0x99, + 0xcb, 0x30, 0xb6, 0xbf, 0x5d, 0xdf, 0x5d, 0x5f, 0xad, 0x6d, 0xd4, 0xd6, 0xd7, 0x8a, 0x37, 0xe6, + 0xc6, 0xcf, 0x9f, 0x97, 0xe3, 0x55, 0x6a, 0x11, 0xd2, 0x2b, 0xfb, 0x1f, 0x14, 0x95, 0xb9, 0xd1, + 0xf3, 0xe7, 0x65, 0xf6, 0x93, 0xc5, 0xff, 0xfa, 0xfa, 0xe6, 0x66, 0x31, 0x35, 0x97, 0x39, 0x7f, + 0x5e, 0xe6, 0xbf, 0xd9, 0x4a, 0xa8, 0xef, 0xed, 0xec, 0xea, 0xac, 0x6b, 0x7a, 0x2e, 0x77, 0xfe, + 0xbc, 0x1c, 0x96, 0x99, 0xc3, 0xe7, 0xbf, 0x39, 0xd1, 0xd0, 0x5c, 0xfe, 0xfc, 0x79, 0x39, 0xaa, + 0x60, 0x94, 0x7b, 0xd5, 0xf7, 0xd6, 0x39, 0xe5, 0xb0, 0xa0, 0x0c, 0xca, 0x8c, 0x92, 0xff, 0xe6, + 0x94, 0x23, 0x82, 0x32, 0xac, 0x50, 0xa7, 0x61, 0x64, 0x65, 0xff, 0x03, 0x7d, 0x77, 0xa7, 0x38, + 0x3a, 0x07, 0xe7, 0xcf, 0xcb, 0xb2, 0xc4, 0xec, 0x93, 0xb5, 0xb3, 0x86, 0xcc, 0xdc, 0xd8, 0xf9, + 0xf3, 0x72, 0x50, 0x54, 0x17, 0x00, 0x58, 0x9f, 0xea, 0xde, 0xce, 0x56, 0x6d, 0xb5, 0x98, 0x9d, + 0x2b, 0x9c, 0x3f, 0x2f, 0xc7, 0x6a, 0x98, 0x36, 0x78, 0x57, 0xd9, 0x01, 0x84, 0x36, 0x62, 0x55, + 0xf7, 0xff, 0x41, 0x81, 0xfc, 0x7a, 0x70, 0x7a, 0xc5, 0x35, 0x78, 0x0b, 0x4a, 0xb1, 0x59, 0x69, + 0x6b, 0x13, 0x53, 0x24, 0xe6, 0xb0, 0xa8, 0xa8, 0x79, 0xc8, 0xf2, 0x5b, 0xa0, 0x0d, 0x62, 0x59, + 0xc5, 0x94, 0x3a, 0x07, 0xd3, 0xbc, 0xb8, 0x85, 0x7c, 0xa3, 0xa1, 0x89, 0xef, 0x84, 0xf9, 0xc4, + 0x14, 0xd3, 0xcc, 0x40, 0xa2, 0xb6, 0x6d, 0xfc, 0x4c, 0xd4, 0x0f, 0xa9, 0x37, 0x61, 0x42, 0x7e, + 0xa6, 0x28, 0xbf, 0xfd, 0x25, 0xae, 0x53, 0x1c, 0x66, 0x50, 0xe2, 0x9d, 0x73, 0xe7, 0x6b, 0xca, + 0xe2, 0x08, 0x83, 0xda, 0x39, 0x3c, 0xa4, 0xd8, 0x67, 0xf8, 0xc1, 0x01, 0x4c, 0x71, 0x94, 0x49, + 0x53, 0x3f, 0x73, 0xfc, 0x06, 0xf6, 0x89, 0x51, 0xcc, 0xdc, 0xff, 0x24, 0x30, 0x8b, 0x2d, 0x44, + 0x8f, 0x99, 0x6a, 0xf7, 0xb7, 0xf7, 0xeb, 0xdc, 0x22, 0xb8, 0x6a, 0x45, 0x89, 0x19, 0x43, 0x75, + 0x3b, 0x34, 0x86, 0xea, 0xf6, 0x07, 0x4c, 0xd9, 0xda, 0xfa, 0xe3, 0xfd, 0xcd, 0xaa, 0x56, 0x4c, + 0x09, 0x65, 0xcb, 0x22, 0x53, 0xe6, 0xea, 0xce, 0xf6, 0x5a, 0x6d, 0xaf, 0xb6, 0xb3, 0x5d, 0x65, + 0x13, 0xcf, 0x95, 0x19, 0xab, 0x52, 0x97, 0x60, 0x66, 0xad, 0xa6, 0xad, 0xaf, 0xb2, 0x22, 0x9b, + 0x6f, 0x7d, 0x47, 0xd3, 0x9f, 0xd4, 0x1e, 0x3f, 0x59, 0xd7, 0x8a, 0x99, 0xb9, 0x89, 0xf3, 0xe7, + 0xe5, 0x7c, 0x5b, 0x65, 0x7b, 0x7f, 0x3e, 0x2b, 0x3b, 0x9a, 0xbe, 0xb9, 0xf3, 0x0b, 0xeb, 0x5a, + 0xb1, 0x28, 0xfa, 0xb7, 0x55, 0xaa, 0xf3, 0x30, 0xb6, 0xf7, 0xc1, 0xee, 0xba, 0xbe, 0x55, 0xd5, + 0xde, 0x5b, 0xdf, 0x2b, 0x96, 0xc5, 0x50, 0x44, 0x49, 0x9d, 0x05, 0xe0, 0x8d, 0x9b, 0xb5, 0xad, + 0xda, 0x5e, 0xf1, 0xdd, 0xb9, 0xec, 0xf9, 0xf3, 0xf2, 0x30, 0x2f, 0xac, 0x34, 0x7e, 0xf0, 0xe9, + 0x82, 0xf2, 0xa3, 0x4f, 0x17, 0x94, 0x7f, 0xfd, 0x74, 0x41, 0xf9, 0xce, 0x67, 0x0b, 0x37, 0x7e, + 0xf4, 0xd9, 0xc2, 0x8d, 0x7f, 0xfc, 0x6c, 0xe1, 0xc6, 0x37, 0xb6, 0x63, 0xf9, 0x5b, 0x2d, 0x88, + 0x2c, 0x9b, 0xe8, 0x80, 0x2e, 0x87, 0x71, 0xe6, 0x0d, 0xc3, 0xf5, 0x70, 0xbc, 0xd8, 0x40, 0xc4, + 0x59, 0xb6, 0x5d, 0xb6, 0x8f, 0xa0, 0xd1, 0x9f, 0xb6, 0xe1, 0xb9, 0xde, 0xc1, 0x08, 0xff, 0x24, + 0xf6, 0x8b, 0xff, 0x15, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x24, 0x31, 0x0d, 0xfd, 0x46, 0x00, 0x00, } func (this *Params) Equal(that interface{}) bool { diff --git a/chain/exchange/types/expected_keepers.go b/chain/exchange/types/expected_keepers.go index 827180b1..00acd6d6 100644 --- a/chain/exchange/types/expected_keepers.go +++ b/chain/exchange/types/expected_keepers.go @@ -30,10 +30,28 @@ type BankKeeper interface { // OracleKeeper defines the expected oracle keeper methods. type OracleKeeper interface { GetPrice(ctx sdk.Context, oracletype oracletypes.OracleType, base string, quote string) *sdkmath.LegacyDec - GetPricePairState(ctx sdk.Context, oracletype oracletypes.OracleType, base, quote string, scalingOptions *oracletypes.ScalingOptions) *oracletypes.PricePairState - GetCumulativePrice(ctx sdk.Context, oracleType oracletypes.OracleType, base string, quote string) *sdkmath.LegacyDec - GetHistoricalPriceRecords(ctx sdk.Context, oracleType oracletypes.OracleType, symbol string, from int64) (entry *oracletypes.PriceRecords, omitted bool) - GetMixedHistoricalPriceRecords(ctx sdk.Context, baseOracleType, quoteOracleType oracletypes.OracleType, baseSymbol, quoteSymbol string, from int64) (mixed *oracletypes.PriceRecords, ok bool) + GetPricePairState( + ctx sdk.Context, + oracletype oracletypes.OracleType, + base, quote string, scalingOptions *oracletypes.ScalingOptions, + ) *oracletypes.PricePairState + GetCumulativePrice( + ctx sdk.Context, + oracleType oracletypes.OracleType, + base, quote string, + ) (baseCumulative, quoteCumulative *sdkmath.LegacyDec) + GetHistoricalPriceRecords( + ctx sdk.Context, + oracleType oracletypes.OracleType, + symbol string, + from int64, + ) (entry *oracletypes.PriceRecords, omitted bool) + GetMixedHistoricalPriceRecords( + ctx sdk.Context, + baseOracleType, quoteOracleType oracletypes.OracleType, + baseSymbol, quoteSymbol string, + from int64, + ) (mixed *oracletypes.PriceRecords, ok bool) GetStandardDeviationForPriceRecords(priceRecords []*oracletypes.PriceRecord) *sdkmath.LegacyDec GetProviderInfo(ctx sdk.Context, provider string) *oracletypes.ProviderInfo GetProviderPrice(ctx sdk.Context, provider, symbol string) *sdkmath.LegacyDec @@ -86,3 +104,8 @@ type DowntimeKeeper interface { GetLastDowntimeOfLength(ctx sdk.Context, dur downtimetypes.Downtime) (time.Time, error) GetLastBlockTime(ctx sdk.Context) (time.Time, error) } + +type PermissionsKeeper interface { + IsEnforcedRestrictionsDenom(ctx sdk.Context, denom string) bool + SendRestrictionFn(ctx context.Context, fromAddr, toAddr sdk.AccAddress, amount sdk.Coin) (newToAddr sdk.AccAddress, err error) +} diff --git a/chain/exchange/types/key.go b/chain/exchange/types/key.go index f6307cec..7e6a904e 100644 --- a/chain/exchange/types/key.go +++ b/chain/exchange/types/key.go @@ -124,6 +124,8 @@ var ( OrderExpirationsPrefix = []byte{0x85} // prefix to store order expirations OrderExpirationMarketsPrefix = []byte{0x86} // prefix to store markets with order expirations PostOnlyModeCancellationKey = []byte{0x87} // key to mark post-only mode cancellation for next BeginBlock + + TransientAtomicPerpetualVwapPrefix = []byte{0x88} // prefix for transient atomic perpetual market VWAP data ) func GetSubaccountCidKey(subaccountID common.Hash, cid string) []byte { @@ -590,3 +592,8 @@ func GetOrderExpirationMarketPrefix(blockNumber int64) []byte { return buf } + +// GetTransientAtomicPerpetualVwapKey returns the transient store key for atomic perpetual VWAP data for a market +func GetTransientAtomicPerpetualVwapKey(marketID common.Hash) []byte { + return append(TransientAtomicPerpetualVwapPrefix, marketID.Bytes()...) +} diff --git a/chain/exchange/types/msgs.go b/chain/exchange/types/msgs.go index 9f0bccd4..d5120105 100644 --- a/chain/exchange/types/msgs.go +++ b/chain/exchange/types/msgs.go @@ -2096,6 +2096,8 @@ func (msg *MsgAuthorizeStakeGrants) ValidateBasic() error { return errors.Wrap(sdkerrors.ErrInvalidAddress, msg.Sender) } + seenGrantees := make(map[string]struct{}) + for idx := range msg.Grants { grant := msg.Grants[idx] @@ -2103,6 +2105,11 @@ func (msg *MsgAuthorizeStakeGrants) ValidateBasic() error { return errors.Wrap(sdkerrors.ErrInvalidAddress, grant.Grantee) } + if _, ok := seenGrantees[grant.Grantee]; ok { + return errors.Wrapf(ErrInvalidStakeGrant, "duplicate grantee %s in MsgAuthorizeStakeGrants", grant.Grantee) + } + seenGrantees[grant.Grantee] = struct{}{} + if grant.Amount.IsNegative() || grant.Amount.GT(MaxTokenInt) { return errors.Wrap(ErrInvalidStakeGrant, grant.Amount.String()) diff --git a/chain/exchange/types/proposal.go b/chain/exchange/types/proposal.go index bf2e5e2f..58c95894 100644 --- a/chain/exchange/types/proposal.go +++ b/chain/exchange/types/proposal.go @@ -5,13 +5,13 @@ import ( "cosmossdk.io/errors" "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + gov "github.com/cosmos/cosmos-sdk/x/gov/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" oracletypes "github.com/InjectiveLabs/sdk-go/chain/oracle/types" chaintypes "github.com/InjectiveLabs/sdk-go/chain/types" - sdk "github.com/cosmos/cosmos-sdk/types" - gov "github.com/cosmos/cosmos-sdk/x/gov/types" ) // constants @@ -288,13 +288,8 @@ func (p *SpotMarketParamUpdateProposal) ValidateBasic() error { } if p.AdminInfo != nil { - if p.AdminInfo.Admin != "" { - if _, err := sdk.AccAddressFromBech32(p.AdminInfo.Admin); err != nil { - return errors.Wrap(ErrInvalidAddress, err.Error()) - } - } - if p.AdminInfo.AdminPermissions > MaxPerm { - return ErrInvalidPermissions + if err := p.AdminInfo.ValidateBasic(); err != nil { + return err } } @@ -430,6 +425,12 @@ func (p *SpotMarketLaunchProposal) ValidateBasic() error { return errors.Wrap(ErrInvalidDenomDecimal, "quote decimals is invalid") } + if p.AdminInfo != nil { + if err := p.AdminInfo.ValidateBasic(); err != nil { + return err + } + } + return govtypes.ValidateAbstract(p) } @@ -532,13 +533,8 @@ func (p *DerivativeMarketParamUpdateProposal) ValidateBasic() error { } if p.AdminInfo != nil { - if p.AdminInfo.Admin != "" { - if _, err := sdk.AccAddressFromBech32(p.AdminInfo.Admin); err != nil { - return errors.Wrap(ErrInvalidAddress, err.Error()) - } - } - if p.AdminInfo.AdminPermissions > MaxPerm { - return ErrInvalidPermissions + if err := p.AdminInfo.ValidateBasic(); err != nil { + return err } } @@ -681,9 +677,9 @@ func (p *OracleParams) ValidateBasic() error { return ErrSameOracles } switch p.OracleType { - case oracletypes.OracleType_Band, oracletypes.OracleType_PriceFeed, oracletypes.OracleType_Coinbase, oracletypes.OracleType_Chainlink, oracletypes.OracleType_Razor, - oracletypes.OracleType_Dia, oracletypes.OracleType_API3, oracletypes.OracleType_Uma, oracletypes.OracleType_Pyth, oracletypes.OracleType_BandIBC, oracletypes.OracleType_Provider, - oracletypes.OracleType_Stork: + case oracletypes.OracleType_PriceFeed, oracletypes.OracleType_Coinbase, oracletypes.OracleType_Chainlink, oracletypes.OracleType_Razor, + oracletypes.OracleType_Dia, oracletypes.OracleType_API3, oracletypes.OracleType_Uma, oracletypes.OracleType_Pyth, oracletypes.OracleType_Provider, + oracletypes.OracleType_Stork, oracletypes.OracleType_ChainlinkDataStreams: default: return errors.Wrap(ErrInvalidOracleType, p.OracleType.String()) @@ -803,6 +799,12 @@ func (p *PerpetualMarketLaunchProposal) ValidateBasic() error { return errors.Wrap(ErrInvalidNotional, err.Error()) } + if p.AdminInfo != nil { + if err := p.AdminInfo.ValidateBasic(); err != nil { + return err + } + } + return govtypes.ValidateAbstract(p) } @@ -898,6 +900,12 @@ func (p *ExpiryFuturesMarketLaunchProposal) ValidateBasic() error { return errors.Wrap(ErrInvalidNotional, err.Error()) } + if p.AdminInfo != nil { + if err := p.AdminInfo.ValidateBasic(); err != nil { + return err + } + } + return govtypes.ValidateAbstract(p) } @@ -1643,3 +1651,15 @@ func (p *DenomMinNotionalProposal) ValidateBasic() error { } return govtypes.ValidateAbstract(p) } + +func (a *AdminInfo) ValidateBasic() error { + if a.Admin != "" { + if _, err := sdk.AccAddressFromBech32(a.Admin); err != nil { + return errors.Wrap(ErrInvalidAddress, err.Error()) + } + } + if a.AdminPermissions > MaxPerm { + return ErrInvalidPermissions + } + return nil +} diff --git a/chain/exchange/types/query.pb.go b/chain/exchange/types/query.pb.go index 932433b5..279ab383 100644 --- a/chain/exchange/types/query.pb.go +++ b/chain/exchange/types/query.pb.go @@ -7477,397 +7477,397 @@ func init() { } var fileDescriptor_523db28b8af54781 = []byte{ - // 6229 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x7d, 0x8c, 0x1c, 0xc9, - 0x55, 0xb8, 0x7b, 0xf6, 0xfb, 0xed, 0x77, 0xed, 0x7a, 0xbd, 0x1e, 0xdf, 0xf9, 0xa3, 0x1d, 0xe7, - 0x7c, 0xce, 0x79, 0xd7, 0x5e, 0x7f, 0x7f, 0x7b, 0x67, 0xd7, 0x6b, 0xef, 0x79, 0xd7, 0x76, 0x66, - 0xd7, 0x77, 0xc9, 0x25, 0xbf, 0xdf, 0xa4, 0x77, 0xa6, 0x77, 0xb6, 0xe3, 0x9e, 0xe9, 0xf1, 0x74, - 0xcf, 0x9e, 0x17, 0xe3, 0x08, 0x08, 0x28, 0x01, 0x24, 0x40, 0x8a, 0x00, 0x21, 0x10, 0x02, 0xfe, - 0xe0, 0x0f, 0x44, 0x84, 0x44, 0xc4, 0x87, 0x12, 0x29, 0x51, 0x38, 0x04, 0xe1, 0x82, 0xe0, 0x20, - 0x47, 0x40, 0x11, 0x1c, 0xd1, 0x5d, 0x20, 0xca, 0x09, 0x24, 0xfe, 0x42, 0x42, 0xa0, 0x80, 0xba, - 0xea, 0x55, 0x4d, 0x7f, 0x4f, 0xf5, 0xec, 0x9e, 0x7c, 0x81, 0xbf, 0xbc, 0x53, 0x5d, 0xef, 0xd5, - 0x7b, 0xf5, 0x5e, 0xbd, 0x7a, 0x55, 0xf5, 0xde, 0x33, 0x7c, 0xd0, 0xa8, 0x7e, 0x52, 0x2f, 0x3a, - 0xc6, 0xa6, 0x3e, 0xad, 0x3f, 0x2a, 0x6e, 0x68, 0xd5, 0xb2, 0x3e, 0xbd, 0x79, 0x72, 0x4d, 0x77, - 0xb4, 0x93, 0xd3, 0x0f, 0x1b, 0x7a, 0x7d, 0x6b, 0xaa, 0x56, 0xb7, 0x1c, 0x8b, 0x64, 0x45, 0xbf, - 0x29, 0xde, 0x6f, 0x0a, 0xfb, 0x65, 0x9f, 0x29, 0x5b, 0x56, 0xd9, 0xd4, 0xa7, 0xb5, 0x9a, 0x31, - 0xad, 0x55, 0xab, 0x96, 0xa3, 0x39, 0x86, 0x55, 0xb5, 0x19, 0x64, 0xf6, 0xf9, 0x84, 0x11, 0x04, - 0x2a, 0xd6, 0xf5, 0x68, 0x42, 0xd7, 0xb2, 0x5e, 0xd5, 0x6d, 0x83, 0x23, 0x3d, 0xd2, 0xec, 0x69, - 0xd5, 0xb5, 0xa2, 0xd9, 0xec, 0xc7, 0x7e, 0x62, 0xb7, 0xf1, 0xb2, 0x55, 0xb6, 0xe8, 0x9f, 0xd3, - 0xee, 0x5f, 0xac, 0x55, 0xbd, 0x0b, 0xb0, 0xd2, 0x58, 0xd3, 0x8a, 0x45, 0xab, 0x51, 0x75, 0xc8, - 0x04, 0x74, 0x3b, 0x75, 0xad, 0xa4, 0xd7, 0x27, 0x95, 0x83, 0xca, 0xd1, 0xbe, 0x3c, 0xfe, 0x22, - 0xcf, 0xc3, 0x88, 0x2d, 0x7a, 0x15, 0xaa, 0x56, 0xb5, 0xa8, 0x4f, 0x66, 0x0e, 0x2a, 0x47, 0x07, - 0xf3, 0xc3, 0xcd, 0xf6, 0x3b, 0x6e, 0xb3, 0xfa, 0x09, 0x78, 0xe6, 0xc3, 0xee, 0x5c, 0x35, 0xb1, - 0xde, 0xad, 0x97, 0xf4, 0xba, 0x9d, 0xd7, 0x1f, 0x36, 0x74, 0xdb, 0x21, 0x87, 0x61, 0xd0, 0x83, - 0xca, 0x28, 0xe1, 0x48, 0x03, 0xcd, 0xc6, 0xc5, 0x12, 0xd9, 0x07, 0x7d, 0x15, 0xad, 0xfe, 0x40, - 0xa7, 0x1d, 0x32, 0xb4, 0x43, 0x2f, 0x6b, 0x58, 0x2c, 0xa9, 0x5f, 0x55, 0xe0, 0xd9, 0x98, 0x21, - 0xec, 0x9a, 0x55, 0xb5, 0x75, 0x72, 0x07, 0x60, 0xad, 0xb1, 0x55, 0xb0, 0x68, 0xeb, 0xa4, 0x72, - 0xb0, 0xe3, 0x68, 0xff, 0xcc, 0xf4, 0x54, 0xbc, 0xd4, 0xa6, 0x02, 0x98, 0xe6, 0x35, 0x47, 0xcb, - 0xf7, 0xad, 0x35, 0xb6, 0x18, 0x5e, 0x72, 0x0f, 0xfa, 0x6d, 0xdd, 0x34, 0x39, 0xc2, 0x4c, 0x7b, - 0x08, 0xc1, 0xc5, 0xc1, 0x30, 0xaa, 0xbf, 0xa3, 0xc0, 0x91, 0x40, 0x9f, 0x35, 0xcb, 0x7a, 0xb0, - 0xac, 0x3b, 0x5a, 0x49, 0x73, 0xb4, 0x97, 0x0d, 0x67, 0x63, 0x99, 0xf2, 0x4b, 0x56, 0xa0, 0xb7, - 0x82, 0xad, 0x74, 0xaa, 0xfa, 0x67, 0xce, 0xa5, 0x18, 0xd8, 0x8b, 0x34, 0x2f, 0x10, 0x25, 0xce, - 0x2f, 0x19, 0x87, 0x2e, 0xc3, 0xce, 0x35, 0xb6, 0x26, 0x3b, 0x0e, 0x2a, 0x47, 0x7b, 0xf3, 0xec, - 0x87, 0xfa, 0x0c, 0x64, 0xe9, 0xa4, 0xdf, 0xc0, 0x11, 0xef, 0x69, 0x75, 0xad, 0xc2, 0xa5, 0xaa, - 0x16, 0x60, 0x5f, 0xe4, 0x57, 0x14, 0xc8, 0x75, 0xe8, 0xae, 0xd1, 0x16, 0x64, 0x41, 0x4d, 0x62, - 0x81, 0xc1, 0xe6, 0x3a, 0xbf, 0xf6, 0xd6, 0x81, 0x5d, 0x79, 0x84, 0x53, 0x3f, 0xa7, 0xc0, 0xfe, - 0x80, 0xd0, 0xe7, 0xf5, 0x9a, 0x65, 0x1b, 0x4e, 0x3a, 0xcd, 0x5a, 0x02, 0x68, 0xfe, 0xa6, 0xac, - 0xf7, 0xcf, 0x7c, 0x50, 0x6e, 0x42, 0x29, 0x45, 0x4a, 0xde, 0x03, 0xaf, 0xbe, 0xab, 0xc0, 0x81, - 0x58, 0xaa, 0x90, 0x77, 0x1d, 0x7a, 0x4b, 0xd8, 0x86, 0xaa, 0xb8, 0x98, 0x34, 0x5e, 0x0b, 0x74, - 0x53, 0xbc, 0xe1, 0x46, 0xd5, 0xa9, 0x6f, 0xe5, 0x05, 0xea, 0xec, 0x27, 0x60, 0xd0, 0xf7, 0x89, - 0x8c, 0x40, 0xc7, 0x03, 0x7d, 0x0b, 0x27, 0xc1, 0xfd, 0x93, 0x5c, 0x80, 0xae, 0x4d, 0xcd, 0x6c, - 0xe8, 0xc8, 0xf6, 0xe1, 0x24, 0x32, 0x10, 0x57, 0x9e, 0x41, 0x5c, 0xcc, 0x9c, 0x57, 0xd4, 0xfd, - 0xb8, 0xb2, 0xb9, 0x8c, 0x73, 0x9a, 0xa9, 0x55, 0x8b, 0xba, 0xd0, 0x81, 0x75, 0x5c, 0x96, 0xe1, - 0xef, 0x38, 0x13, 0x37, 0xa0, 0x77, 0x0d, 0xdb, 0x70, 0x26, 0x12, 0x49, 0x40, 0x78, 0x54, 0x04, - 0x01, 0xaa, 0x9e, 0x43, 0x5d, 0x9b, 0x2d, 0x97, 0xeb, 0x7a, 0x59, 0x73, 0xf4, 0x97, 0x2c, 0xb3, - 0x51, 0xd1, 0xb9, 0x1a, 0x4c, 0x42, 0x0f, 0x17, 0x2f, 0xe3, 0x9d, 0xff, 0x54, 0x1b, 0xc8, 0x40, - 0x08, 0x10, 0xe9, 0xbb, 0x0f, 0xa3, 0x1a, 0xff, 0x54, 0xd8, 0xa4, 0xdf, 0x38, 0xa1, 0x47, 0x93, - 0x08, 0x65, 0x2b, 0x15, 0x91, 0x8d, 0x68, 0x7e, 0xec, 0xb6, 0xfa, 0xd1, 0xe8, 0x61, 0x85, 0xde, - 0x66, 0xa1, 0x17, 0x29, 0x64, 0xa3, 0xf5, 0xe5, 0xc5, 0x6f, 0xf2, 0x2c, 0x80, 0x58, 0xa8, 0xcc, - 0xf0, 0xf4, 0xe5, 0xfb, 0xf8, 0x4a, 0xb5, 0xd5, 0xff, 0xe0, 0xa6, 0x30, 0x8c, 0x1b, 0x79, 0x72, - 0x60, 0x6f, 0x93, 0x27, 0xbe, 0x36, 0xfc, 0xbc, 0x9d, 0x4f, 0xe2, 0x4d, 0x20, 0x9e, 0x65, 0xb0, - 0x7c, 0xca, 0x8a, 0x56, 0xbd, 0x94, 0xdf, 0xa3, 0x45, 0x7e, 0xb5, 0xc9, 0x1a, 0x4c, 0x36, 0x47, - 0x45, 0x06, 0xf8, 0xa0, 0x99, 0x94, 0x13, 0x3a, 0x21, 0x30, 0x79, 0x9b, 0x6d, 0xf5, 0x3a, 0x1c, - 0xf2, 0xb3, 0xee, 0x83, 0xc2, 0xb9, 0xf5, 0x19, 0x3a, 0x25, 0xb0, 0x91, 0x98, 0xa0, 0x26, 0x61, - 0xc0, 0x19, 0x5c, 0x80, 0x6e, 0x46, 0x3a, 0xda, 0xae, 0x44, 0xca, 0xbd, 0xd3, 0xc3, 0x2d, 0x18, - 0x83, 0x56, 0x4f, 0xc0, 0x24, 0x1d, 0x6d, 0x5e, 0xaf, 0x5a, 0x95, 0x79, 0xbd, 0x68, 0x54, 0x34, - 0x93, 0x93, 0x39, 0x0e, 0x5d, 0x25, 0xb7, 0x19, 0x49, 0x64, 0x3f, 0xd4, 0x33, 0xb0, 0x37, 0x02, - 0x02, 0xc9, 0x9a, 0x84, 0x9e, 0x12, 0x6b, 0xa2, 0x40, 0x9d, 0x79, 0xfe, 0x53, 0x3d, 0x15, 0x01, - 0x26, 0x94, 0x6d, 0x02, 0xba, 0x29, 0x72, 0xae, 0x6a, 0xf8, 0x4b, 0x75, 0xd0, 0xbc, 0x07, 0x80, - 0x70, 0xb0, 0x97, 0x60, 0x88, 0xf6, 0x2b, 0xe0, 0x18, 0x5c, 0x75, 0x9e, 0x4f, 0x36, 0x21, 0x1e, - 0x54, 0x38, 0x19, 0x83, 0x25, 0x6f, 0xa3, 0x3a, 0x97, 0x24, 0x01, 0x41, 0xb3, 0x7f, 0x11, 0x28, - 0xc1, 0x45, 0x60, 0xc0, 0xe1, 0x44, 0x24, 0xc8, 0x43, 0x0e, 0x7a, 0xda, 0x5d, 0xd3, 0x1c, 0x50, - 0x7d, 0x25, 0xe4, 0x79, 0x70, 0x3b, 0x99, 0x66, 0x0f, 0x12, 0xd2, 0xce, 0x78, 0xa5, 0xad, 0xc5, - 0x6d, 0x70, 0x82, 0x83, 0x6b, 0xbe, 0x9d, 0x44, 0xda, 0x84, 0x0b, 0x20, 0xf5, 0x1e, 0xec, 0x61, - 0x43, 0xd4, 0x2c, 0x87, 0x31, 0xe8, 0xd5, 0x0b, 0xdb, 0xd1, 0x9c, 0x86, 0xcd, 0x3d, 0x3f, 0xf6, - 0xab, 0x95, 0x01, 0xfa, 0x38, 0x2a, 0xb5, 0x0f, 0xa3, 0xd8, 0xf4, 0x7b, 0x58, 0x47, 0x3e, 0xe1, - 0xc9, 0xfb, 0xac, 0xc0, 0x90, 0xe7, 0x60, 0xea, 0x19, 0x98, 0x08, 0x60, 0x97, 0x5a, 0xd7, 0x1f, - 0x0d, 0xb1, 0x29, 0x68, 0xba, 0x0a, 0xdd, 0xac, 0x1b, 0x4e, 0xa0, 0x2c, 0x49, 0x08, 0xa5, 0x7e, - 0x33, 0x83, 0x8b, 0xcb, 0xfd, 0x26, 0x3c, 0x2c, 0x19, 0xaa, 0x5c, 0xa9, 0x9b, 0x46, 0xc5, 0x60, - 0x4e, 0x47, 0x67, 0x9e, 0xfd, 0x20, 0xf3, 0x00, 0xd4, 0xab, 0x2c, 0xd8, 0x46, 0x49, 0xa7, 0x1e, - 0xd7, 0xd0, 0xcc, 0x91, 0x24, 0xa2, 0xe8, 0xa0, 0x2b, 0x46, 0x49, 0xcf, 0xf7, 0x59, 0xfc, 0x4f, - 0x52, 0x80, 0xbd, 0x14, 0x5d, 0xa1, 0xd8, 0xa8, 0x34, 0x4c, 0xcd, 0x85, 0x2c, 0x54, 0x2d, 0xf7, - 0xe4, 0xa1, 0x99, 0x93, 0x9d, 0x2e, 0x21, 0xb9, 0xc3, 0xae, 0xf3, 0xf2, 0xad, 0xb7, 0x0e, 0xec, - 0x2b, 0x5a, 0x76, 0xc5, 0xb2, 0xed, 0xd2, 0x83, 0x29, 0xc3, 0x9a, 0xae, 0x68, 0xce, 0xc6, 0xd4, - 0x92, 0x5e, 0xd6, 0x8a, 0x5b, 0xf3, 0x7a, 0x31, 0xbf, 0x87, 0x62, 0x99, 0x13, 0x48, 0xee, 0x20, - 0x8e, 0xc8, 0x01, 0x1e, 0x36, 0xb4, 0xaa, 0x63, 0x38, 0x5b, 0x93, 0x5d, 0xed, 0x0f, 0xf0, 0x61, - 0xc4, 0xa1, 0xfe, 0xa1, 0x82, 0x06, 0x28, 0x30, 0xb1, 0x28, 0xb7, 0xdb, 0x30, 0xb2, 0xd6, 0xd8, - 0xb2, 0x0b, 0xb5, 0xba, 0x51, 0xd4, 0x0b, 0xa6, 0xbe, 0xa9, 0x9b, 0xa8, 0x54, 0x87, 0x92, 0x26, - 0x6b, 0xc9, 0xed, 0x98, 0x1f, 0x72, 0x41, 0xef, 0xb9, 0x90, 0xf4, 0x37, 0x59, 0x86, 0x51, 0xd7, - 0x15, 0xf7, 0x63, 0xcb, 0xc8, 0x62, 0x1b, 0xa6, 0xb0, 0x4d, 0x74, 0xea, 0xe7, 0x15, 0x18, 0x5a, - 0x68, 0x98, 0x66, 0x53, 0x5d, 0xb6, 0xab, 0x66, 0xe4, 0x63, 0x30, 0x5a, 0x31, 0x4a, 0x48, 0x9f, - 0x56, 0x2d, 0x15, 0x1c, 0x6b, 0x0d, 0xbd, 0xb6, 0x63, 0x89, 0x56, 0xcb, 0x28, 0x51, 0xc2, 0x66, - 0xab, 0xa5, 0xd5, 0xbb, 0x39, 0x74, 0x58, 0x87, 0x2a, 0x9e, 0x56, 0x6b, 0x4d, 0xfd, 0xac, 0x82, - 0x0e, 0x94, 0x9f, 0xe8, 0x6d, 0x9a, 0x02, 0x32, 0x03, 0x13, 0xaf, 0x1a, 0xce, 0x46, 0x21, 0x4c, - 0x38, 0x3b, 0x47, 0x10, 0xf7, 0xeb, 0xb2, 0x9f, 0x94, 0x12, 0xba, 0x46, 0x21, 0x4a, 0x50, 0xec, - 0xf3, 0x41, 0x13, 0x92, 0xc8, 0xbd, 0x1f, 0x4b, 0xd3, 0x8c, 0x54, 0x50, 0xb5, 0x02, 0xdf, 0x65, - 0x16, 0x6d, 0x3c, 0x53, 0x99, 0x58, 0xa6, 0xb4, 0xc8, 0xe9, 0xf5, 0xec, 0x43, 0x7e, 0xdd, 0x48, - 0xc3, 0x12, 0x37, 0x43, 0x3f, 0x21, 0x4e, 0x43, 0x7c, 0xb5, 0xd8, 0xb9, 0xad, 0x5b, 0x9a, 0xbd, - 0xd1, 0xdc, 0x34, 0x13, 0xd9, 0x0a, 0x6d, 0x53, 0x99, 0x88, 0x6d, 0xea, 0x10, 0x0c, 0x30, 0xd3, - 0xb4, 0x41, 0x11, 0x4f, 0x76, 0x50, 0x89, 0xf7, 0xd3, 0x36, 0x36, 0x96, 0x6a, 0xf2, 0xe3, 0x4f, - 0x04, 0x19, 0xc8, 0xee, 0x22, 0x74, 0xfb, 0xce, 0xe1, 0x27, 0x93, 0xd8, 0x5d, 0xad, 0x1b, 0x95, - 0x8a, 0x5e, 0x72, 0xd1, 0x2d, 0xb9, 0x86, 0x82, 0xe2, 0xcc, 0x23, 0x02, 0x71, 0xb5, 0xb0, 0x4a, - 0x2f, 0x25, 0x9a, 0x63, 0xee, 0x18, 0xcb, 0xaa, 0x09, 0x1f, 0x60, 0xae, 0x04, 0x6b, 0x99, 0x2d, - 0x95, 0xea, 0xba, 0x6d, 0xa7, 0x1c, 0xe9, 0x39, 0x18, 0xe6, 0xc3, 0x68, 0x0c, 0x01, 0x8e, 0x35, - 0xa4, 0xf9, 0xd0, 0xaa, 0xbf, 0x9c, 0x81, 0xdd, 0x91, 0x1c, 0xbb, 0x27, 0x35, 0xaa, 0x6d, 0x0c, - 0x37, 0x35, 0xad, 0xbb, 0x5a, 0x99, 0x56, 0x06, 0xe1, 0x3a, 0x09, 0xc2, 0x30, 0x67, 0xe4, 0xa1, - 0x05, 0x90, 0x8b, 0x60, 0xdd, 0x30, 0x4d, 0x6d, 0xcd, 0x64, 0xfb, 0x91, 0x2c, 0x02, 0x0e, 0xd4, - 0xbc, 0x3f, 0xe8, 0xf4, 0xdc, 0x1f, 0xb8, 0xd6, 0xa3, 0xa9, 0x4d, 0x6c, 0xcb, 0xc0, 0x1d, 0xcc, - 0x55, 0x18, 0xf7, 0xb4, 0x5a, 0x34, 0x4a, 0x93, 0xdd, 0xec, 0xb4, 0x5a, 0x34, 0x4a, 0xea, 0x27, - 0xd1, 0xd7, 0x0a, 0x4b, 0x7b, 0xe7, 0x35, 0xab, 0x0e, 0x47, 0x5a, 0xc8, 0x7d, 0xe7, 0xc7, 0xbc, - 0xe2, 0x59, 0xc2, 0x7e, 0xbb, 0x2d, 0xe5, 0xe4, 0xfc, 0xa7, 0xe2, 0x59, 0x7b, 0x41, 0x78, 0xe1, - 0x81, 0xf5, 0x09, 0xc3, 0xe5, 0x51, 0xa5, 0x96, 0xbb, 0x74, 0x2f, 0xdf, 0x31, 0xc8, 0x22, 0x0c, - 0xad, 0xe9, 0xb6, 0x53, 0x58, 0x6b, 0x6c, 0x21, 0x9a, 0x8c, 0x3c, 0x9a, 0x01, 0x17, 0x34, 0xd7, - 0xd8, 0x62, 0xa8, 0x6e, 0xc3, 0x30, 0x45, 0x45, 0x6f, 0xd2, 0x18, 0xae, 0x0e, 0x79, 0x5c, 0x83, - 0x2e, 0xec, 0x8a, 0x6e, 0x9a, 0x14, 0x99, 0x3a, 0x87, 0x0b, 0x75, 0x5e, 0xaf, 0x1b, 0x9b, 0xd4, - 0x93, 0x68, 0x63, 0x0a, 0x7f, 0x34, 0x83, 0x62, 0x8f, 0xc7, 0xf2, 0xbf, 0x7e, 0x22, 0x7f, 0x8f, - 0xab, 0x51, 0x73, 0x0e, 0x76, 0xc2, 0xad, 0x4d, 0x74, 0x48, 0x3b, 0xb6, 0xef, 0x90, 0xaa, 0x5f, - 0x56, 0xe0, 0x60, 0x3c, 0xdd, 0x3f, 0x00, 0x5e, 0xe3, 0xaf, 0x74, 0xc0, 0x54, 0xa4, 0x7d, 0x5b, - 0xb5, 0xe6, 0xb4, 0x6a, 0x51, 0x37, 0xef, 0xd7, 0x56, 0xad, 0xd9, 0x8a, 0x6b, 0x8e, 0x76, 0x6e, - 0x4b, 0x9f, 0x87, 0xfe, 0x35, 0xcd, 0xd6, 0x0b, 0x1a, 0xc5, 0x9b, 0xc6, 0xbc, 0x83, 0x0b, 0xc7, - 0xc8, 0x21, 0x0b, 0x30, 0xf0, 0xb0, 0x61, 0x39, 0x02, 0x4d, 0xa7, 0x3c, 0x9a, 0x7e, 0x0a, 0x88, - 0x78, 0x96, 0xa0, 0xd7, 0x76, 0xea, 0x9a, 0xa3, 0x97, 0xd9, 0x19, 0x62, 0x68, 0xe6, 0x44, 0xd2, - 0x44, 0xb2, 0x69, 0x31, 0xe9, 0x83, 0xca, 0x0a, 0xc2, 0xe5, 0x05, 0x06, 0xb2, 0x04, 0xc3, 0x75, - 0x7d, 0x5d, 0xaf, 0xeb, 0xd5, 0xa2, 0x8e, 0xcb, 0xa2, 0x5b, 0x5e, 0xd1, 0x86, 0x04, 0x2c, 0x5b, - 0x17, 0x7f, 0x9f, 0x81, 0xd3, 0x1e, 0xf1, 0x04, 0xb4, 0xec, 0x3d, 0x15, 0x52, 0x70, 0x7a, 0x3b, - 0x76, 0x60, 0x7a, 0x3b, 0xdf, 0x8b, 0xe9, 0xed, 0x6a, 0x7f, 0x7a, 0xd7, 0xf1, 0xe2, 0x27, 0x7a, - 0x76, 0x77, 0xce, 0xa1, 0xab, 0xc3, 0xb1, 0x88, 0x8d, 0xbd, 0xad, 0xf1, 0xa4, 0xdd, 0xba, 0xef, - 0x65, 0x60, 0x1f, 0x6e, 0xfd, 0xcd, 0x81, 0xde, 0x27, 0xce, 0xdd, 0x25, 0x7a, 0xf8, 0x28, 0x1b, - 0xd5, 0x34, 0x5a, 0x85, 0x20, 0x3e, 0xcf, 0xb0, 0xb3, 0x1d, 0xcf, 0xf0, 0x00, 0xf7, 0x0c, 0x5d, - 0xcd, 0xe9, 0xcd, 0xf5, 0xbd, 0xfb, 0xd6, 0x01, 0xd6, 0x10, 0xed, 0x24, 0x76, 0xc7, 0x38, 0x89, - 0x3d, 0x4d, 0x27, 0x71, 0x13, 0xef, 0xfe, 0xe2, 0xf4, 0x08, 0x37, 0x82, 0xbb, 0x01, 0xb7, 0xed, - 0x9c, 0x84, 0xdb, 0x16, 0x25, 0x3b, 0xe1, 0xbc, 0x7d, 0x0a, 0x3e, 0x24, 0xa5, 0x57, 0xef, 0xd5, - 0xf8, 0x3f, 0xad, 0x84, 0x1c, 0xa0, 0xa7, 0x78, 0x0c, 0x7c, 0x14, 0xf2, 0xa3, 0x62, 0x0e, 0x83, - 0x3b, 0x3e, 0x0f, 0x3f, 0xc5, 0x1f, 0x40, 0x3c, 0x2e, 0xdc, 0x53, 0xbb, 0xcd, 0xf8, 0xac, 0x02, - 0xe0, 0x71, 0x18, 0x9e, 0xe2, 0x3a, 0x57, 0xbf, 0xa2, 0xc0, 0xf8, 0x3d, 0xbd, 0x5e, 0xd3, 0x9d, - 0x86, 0x66, 0xb2, 0x19, 0x59, 0x71, 0x34, 0x47, 0x27, 0xf7, 0xa0, 0x9f, 0xb3, 0x5d, 0x5d, 0xb7, - 0xf0, 0x0a, 0x22, 0xf1, 0x29, 0x3b, 0x80, 0x66, 0xb1, 0xba, 0x6e, 0xe5, 0x71, 0xea, 0xdc, 0xbf, - 0xc9, 0x7d, 0x18, 0x58, 0x6f, 0x54, 0x4b, 0x46, 0xb5, 0xcc, 0x50, 0xb2, 0x6b, 0xaa, 0x99, 0x14, - 0x28, 0x17, 0x18, 0x78, 0xbe, 0x1f, 0xf1, 0xb8, 0x68, 0xd5, 0x2f, 0x76, 0xc0, 0xf8, 0x42, 0xc3, - 0x34, 0x83, 0x82, 0x25, 0xf3, 0x81, 0xfb, 0x93, 0x17, 0x92, 0xef, 0xc0, 0xfd, 0xd0, 0xe2, 0x86, - 0xed, 0xa3, 0x30, 0x54, 0xe3, 0x54, 0x78, 0xe9, 0x3e, 0x91, 0x82, 0x6e, 0x3a, 0xa3, 0xb7, 0x76, - 0xe5, 0x07, 0x05, 0x26, 0x3a, 0x21, 0x1f, 0x71, 0x27, 0xc4, 0x69, 0xd4, 0x75, 0x9b, 0x21, 0xee, - 0xa0, 0x88, 0x4f, 0x25, 0x21, 0xbe, 0xf1, 0xa8, 0x66, 0xd4, 0xb7, 0x16, 0x18, 0x54, 0x73, 0x9e, - 0x6f, 0xed, 0x72, 0xe7, 0x84, 0x36, 0x52, 0xcc, 0x39, 0xa6, 0xb3, 0xb8, 0xfd, 0xa6, 0x30, 0xc1, - 0x54, 0xb1, 0xd9, 0xe9, 0x21, 0xf2, 0x6a, 0xb1, 0x6b, 0x67, 0xae, 0x16, 0x73, 0xdd, 0xd0, 0xe9, - 0xb2, 0xac, 0x9a, 0x78, 0xb6, 0x8d, 0x58, 0x95, 0x68, 0x09, 0x5e, 0x0c, 0xde, 0xec, 0x9d, 0x68, - 0x75, 0x0d, 0x16, 0x12, 0xa5, 0xb8, 0xdf, 0xbb, 0x84, 0xf7, 0x42, 0xa1, 0x1e, 0x32, 0x87, 0x40, - 0x23, 0xc6, 0x80, 0x08, 0x4a, 0x6f, 0x05, 0xf4, 0x2d, 0x3d, 0xa1, 0xfc, 0xd6, 0x2e, 0x87, 0x9b, - 0x55, 0xb0, 0x03, 0xee, 0x1e, 0x52, 0xe4, 0xea, 0xe1, 0x83, 0xaf, 0x1f, 0x47, 0xf3, 0x79, 0x90, - 0x7b, 0x29, 0xfc, 0x15, 0x9c, 0xfd, 0x94, 0xf3, 0x9b, 0x6e, 0xe2, 0xe9, 0xaa, 0xf9, 0x18, 0x45, - 0x77, 0x58, 0x1a, 0xe2, 0x93, 0xe6, 0xad, 0x4b, 0x5d, 0x08, 0x05, 0x48, 0xdc, 0xb3, 0x6c, 0x83, - 0xc6, 0x44, 0xa5, 0xc2, 0xf3, 0x49, 0xf8, 0x60, 0x0c, 0x9e, 0xc5, 0xaa, 0x5f, 0xda, 0xdb, 0x0f, - 0x30, 0xb2, 0x61, 0x3a, 0x30, 0xd6, 0x8d, 0xf5, 0x75, 0x26, 0xf1, 0xf7, 0x6e, 0xd0, 0x17, 0x51, - 0x39, 0x02, 0x01, 0x3c, 0x22, 0x78, 0x27, 0xcd, 0x64, 0x55, 0x43, 0xd2, 0xf3, 0x4c, 0xba, 0x58, - 0x80, 0x5d, 0xee, 0x4e, 0xa8, 0xe3, 0xf2, 0x9b, 0x92, 0xb3, 0xa2, 0x1c, 0x0f, 0x3e, 0xe7, 0x32, - 0x14, 0xea, 0x03, 0x78, 0xae, 0xa5, 0x70, 0xc4, 0x4d, 0x8a, 0x18, 0xd6, 0x5d, 0x4c, 0x1f, 0x48, - 0x34, 0xb7, 0xde, 0xc1, 0x14, 0x3e, 0xd8, 0xa7, 0x33, 0x30, 0x1a, 0x92, 0x07, 0xd9, 0x03, 0x3d, - 0x86, 0x5d, 0x30, 0xad, 0x6a, 0x99, 0x62, 0xee, 0xcd, 0x77, 0x1b, 0xf6, 0x92, 0x55, 0x2d, 0x6f, - 0xdf, 0x65, 0x9e, 0x87, 0x7e, 0xbd, 0xea, 0xd4, 0xb7, 0x42, 0x57, 0x2d, 0xad, 0xcf, 0xcc, 0x14, - 0x8e, 0x99, 0xdd, 0x3b, 0x30, 0xa2, 0x73, 0xa2, 0x0b, 0xe8, 0x82, 0xa7, 0x30, 0xe0, 0xc3, 0x02, - 0x78, 0x99, 0xc2, 0xaa, 0x4f, 0xe0, 0x84, 0xbc, 0x8e, 0x8a, 0xcb, 0x4b, 0xdf, 0xdc, 0x1f, 0x4f, - 0xdc, 0x91, 0x82, 0xd8, 0xfc, 0x42, 0xb8, 0x8a, 0xcb, 0x3a, 0xca, 0x39, 0x90, 0x31, 0x63, 0x15, - 0xd4, 0xd0, 0x48, 0x78, 0x41, 0x6e, 0xe7, 0x36, 0x7c, 0x14, 0xd4, 0x50, 0xb6, 0x1f, 0x71, 0xcb, - 0x1b, 0xb3, 0xcf, 0x4a, 0x91, 0xdc, 0x40, 0xcb, 0x1b, 0x8b, 0x03, 0xc9, 0x5e, 0xf6, 0x91, 0xdd, - 0xce, 0xb6, 0xef, 0x23, 0x7d, 0x16, 0x4f, 0xca, 0x31, 0x3e, 0x93, 0x1c, 0xe5, 0x87, 0x13, 0x51, - 0x88, 0xa8, 0x49, 0x9f, 0x7a, 0xb4, 0xe1, 0xc1, 0xf9, 0xad, 0x82, 0x38, 0xa3, 0xc4, 0x9a, 0x34, - 0x1c, 0xb8, 0xe8, 0x0b, 0x71, 0x74, 0xad, 0xd1, 0x6c, 0x9b, 0x21, 0x8e, 0xcd, 0xb8, 0x49, 0x1e, - 0x35, 0xc6, 0x11, 0xab, 0x17, 0x30, 0x5c, 0x28, 0x7a, 0x47, 0x43, 0x4a, 0xc6, 0xa1, 0x8b, 0x05, - 0xb7, 0x2a, 0x34, 0xb8, 0x95, 0xfd, 0x50, 0xf7, 0x62, 0x3c, 0xc1, 0xb2, 0x55, 0x6a, 0x98, 0x3a, - 0xf5, 0xfa, 0x78, 0xcc, 0xdb, 0x2b, 0x18, 0xff, 0xe0, 0xfb, 0x24, 0x62, 0x0d, 0x7c, 0xf3, 0x99, - 0x18, 0x6e, 0x72, 0x93, 0x45, 0xf4, 0x32, 0x04, 0x38, 0x7f, 0x7b, 0x60, 0x37, 0x13, 0x5b, 0x60, - 0xc3, 0x54, 0x4b, 0x18, 0x16, 0xf1, 0xde, 0x1a, 0xf5, 0x87, 0xde, 0xf7, 0x97, 0xbc, 0xfe, 0xaa, - 0x56, 0x2f, 0xdd, 0xb3, 0x8c, 0xaa, 0x23, 0x15, 0xb7, 0x76, 0x1a, 0x26, 0x6a, 0x3a, 0x3b, 0x14, - 0xd4, 0x2c, 0xcb, 0x2c, 0x38, 0x46, 0x45, 0xb7, 0x1d, 0xad, 0x52, 0xa3, 0x36, 0xb8, 0x23, 0x3f, - 0x8e, 0x5f, 0xef, 0x59, 0x96, 0xb9, 0xca, 0xbf, 0xa9, 0x3f, 0xce, 0x9f, 0x35, 0x23, 0xc6, 0x44, - 0x0e, 0xd7, 0x60, 0x1f, 0xdf, 0xfc, 0x68, 0x6c, 0x72, 0xa1, 0x4e, 0x7b, 0x15, 0x6a, 0xb4, 0x1b, - 0xa3, 0x43, 0xce, 0xa4, 0x4e, 0x7a, 0xd5, 0xc0, 0x3b, 0x96, 0x7a, 0x08, 0x8d, 0x9b, 0xe7, 0xcb, - 0x9c, 0x56, 0xa9, 0x69, 0x46, 0xb9, 0xca, 0x45, 0xf0, 0xfd, 0x4e, 0x34, 0x60, 0x91, 0x7d, 0x90, - 0xd6, 0x4d, 0x78, 0xc6, 0xa5, 0xd1, 0x9d, 0x04, 0xa4, 0xb2, 0x88, 0x5d, 0xbc, 0x87, 0xaf, 0x33, - 0xc9, 0x67, 0x60, 0x8d, 0xad, 0x51, 0xef, 0x00, 0xd4, 0xdc, 0xec, 0x75, 0xe2, 0x3e, 0x91, 0x1f, - 0x51, 0xe0, 0x48, 0x60, 0x60, 0x2a, 0x04, 0x31, 0xba, 0x5d, 0xdc, 0xd0, 0x5d, 0x7d, 0xc5, 0xeb, - 0xeb, 0xa9, 0xe4, 0x6b, 0x41, 0xce, 0x15, 0x9b, 0x21, 0xcb, 0xcc, 0x1f, 0xf2, 0x0d, 0xed, 0x36, - 0xf1, 0x4e, 0x2b, 0x88, 0x98, 0xfc, 0x7f, 0xd8, 0xeb, 0x58, 0x8e, 0x66, 0x46, 0x0a, 0x29, 0xc5, - 0x16, 0x3a, 0x41, 0xb1, 0x84, 0x44, 0x44, 0x7e, 0x56, 0x81, 0xe3, 0x5c, 0xc1, 0xe4, 0x58, 0xed, - 0x6c, 0x8b, 0xd5, 0xa3, 0x38, 0xc8, 0x6a, 0x4b, 0x8e, 0x2b, 0x70, 0x48, 0x10, 0x14, 0xcb, 0x79, - 0x97, 0xbc, 0x7a, 0x3e, 0xcb, 0x47, 0x8e, 0x9c, 0x00, 0xf5, 0x12, 0xea, 0xe8, 0xa2, 0x7d, 0xb7, - 0xe6, 0xe8, 0xa5, 0xbb, 0x0d, 0xe7, 0xee, 0x3a, 0xeb, 0x60, 0xb7, 0x0e, 0x84, 0x9d, 0x47, 0xe5, - 0x8d, 0x04, 0x46, 0xe5, 0x3d, 0x08, 0x03, 0x86, 0x5d, 0xb0, 0xdc, 0xef, 0x05, 0xab, 0xe1, 0xa0, - 0x57, 0x05, 0x86, 0x00, 0x51, 0x9f, 0xc3, 0x5b, 0x9f, 0x10, 0x0e, 0xbc, 0x14, 0x13, 0xf6, 0x6a, - 0x1e, 0x7d, 0xf7, 0x84, 0x8e, 0x38, 0x68, 0x82, 0x49, 0x51, 0xaf, 0xe2, 0x46, 0xb8, 0xa0, 0xeb, - 0xf3, 0x86, 0xcd, 0xae, 0xdd, 0xd0, 0xe3, 0xf5, 0x6c, 0xe1, 0xf1, 0x4c, 0x7f, 0x4f, 0xc1, 0x6d, - 0x30, 0x0e, 0x01, 0xd2, 0xf0, 0x2c, 0x80, 0x63, 0xe8, 0x75, 0xf1, 0x5c, 0xa4, 0x1c, 0xed, 0xcc, - 0xf7, 0xb9, 0x2d, 0xec, 0x56, 0x27, 0x0f, 0x03, 0xc2, 0xfb, 0x6e, 0x5e, 0x1b, 0x24, 0x7a, 0x27, - 0x9e, 0x01, 0x57, 0x0d, 0xbd, 0x4e, 0x47, 0xeb, 0xd7, 0x9a, 0x43, 0x93, 0xbb, 0xd0, 0x2f, 0x8c, - 0x9a, 0x63, 0xe2, 0x85, 0xc1, 0x54, 0x0a, 0x94, 0xab, 0xab, 0x4b, 0x79, 0xe0, 0xf6, 0xcc, 0x31, - 0x85, 0x05, 0xf3, 0x74, 0xe3, 0x8a, 0xca, 0x85, 0xf2, 0x19, 0xfe, 0x80, 0x16, 0xd9, 0x47, 0xec, - 0xcc, 0xbb, 0xd7, 0x75, 0xbd, 0x50, 0xc2, 0xef, 0xcd, 0xd5, 0xa4, 0xa4, 0xe2, 0x5a, 0xe0, 0x1d, - 0x5b, 0x0f, 0x37, 0xaa, 0xd7, 0x71, 0xa3, 0xc1, 0x78, 0xef, 0x65, 0xc3, 0xae, 0x68, 0x4e, 0xd1, - 0x73, 0x87, 0x79, 0x00, 0xfa, 0x4b, 0x0d, 0xdb, 0x29, 0xac, 0x6b, 0x45, 0xc7, 0x62, 0xa9, 0x29, - 0x1d, 0x79, 0x70, 0x9b, 0x16, 0x68, 0x8b, 0xfa, 0x1b, 0x1d, 0x30, 0x1c, 0x80, 0x26, 0x2a, 0xf8, - 0xce, 0x44, 0xf2, 0x81, 0x98, 0x64, 0x16, 0xfa, 0xb4, 0x4d, 0xcd, 0x48, 0x1d, 0x01, 0xd1, 0x84, - 0x22, 0x17, 0xa0, 0x8b, 0x1a, 0x81, 0x34, 0x2e, 0x3e, 0x83, 0x20, 0x0b, 0x30, 0x80, 0x91, 0xee, - 0x85, 0x0d, 0xcb, 0x2c, 0x79, 0x1e, 0x59, 0x5a, 0xbf, 0xfe, 0x20, 0xe0, 0x2d, 0xcb, 0x2c, 0x91, - 0x17, 0x61, 0x48, 0x7f, 0x54, 0xd3, 0x8b, 0xee, 0xfa, 0x65, 0xb4, 0x74, 0xcb, 0x63, 0x1a, 0xe4, - 0xa0, 0xd4, 0xfa, 0x90, 0x39, 0x80, 0x92, 0xb1, 0x8e, 0x0f, 0x38, 0xec, 0xfa, 0x5d, 0xf2, 0x04, - 0xd4, 0x04, 0x53, 0x7f, 0x18, 0xf7, 0xf6, 0x08, 0x31, 0xa3, 0xb6, 0xbd, 0x02, 0x84, 0xb3, 0x5e, - 0x11, 0x5f, 0xd1, 0x95, 0xf9, 0x90, 0x44, 0xa6, 0x00, 0x47, 0x99, 0x1f, 0x5d, 0x0b, 0x8e, 0xa1, - 0x1e, 0xc1, 0xc5, 0x8f, 0x5d, 0x5d, 0x47, 0x31, 0xd7, 0x9c, 0x2d, 0x61, 0xaa, 0x7e, 0x31, 0x03, - 0xbb, 0x3d, 0x5d, 0xd8, 0x61, 0x8b, 0xce, 0xe7, 0xff, 0x71, 0x7d, 0x52, 0x7f, 0x81, 0x7b, 0xf3, - 0xb1, 0x33, 0x88, 0x52, 0xac, 0x42, 0x96, 0x0f, 0x48, 0x6f, 0xd0, 0xbd, 0xa3, 0x4b, 0x85, 0xcd, - 0x44, 0xce, 0x7f, 0x7e, 0xcf, 0x5a, 0xf4, 0xb8, 0x62, 0x1b, 0x0a, 0x98, 0x44, 0xd7, 0x95, 0x36, - 0x6c, 0xc7, 0x28, 0x0a, 0xd9, 0x5e, 0x80, 0x41, 0xdf, 0x07, 0x42, 0xa0, 0xd3, 0xb5, 0xeb, 0x68, - 0xe3, 0xe9, 0xdf, 0xae, 0x08, 0x9b, 0xa9, 0x41, 0x9d, 0x79, 0xf6, 0x43, 0xb5, 0x71, 0x07, 0x4b, - 0x18, 0x43, 0x1c, 0x5a, 0xc1, 0x16, 0xad, 0x32, 0x51, 0xf2, 0x3e, 0x3c, 0x79, 0x0f, 0xb0, 0xeb, - 0xff, 0x2f, 0x1b, 0x8e, 0xf5, 0x92, 0xd6, 0x30, 0xe9, 0x36, 0x21, 0x18, 0xf9, 0x63, 0x05, 0x26, - 0x82, 0x5f, 0x70, 0xf8, 0xe7, 0x61, 0xa4, 0xa2, 0xd9, 0x8e, 0x5e, 0xe7, 0x6f, 0x94, 0x3a, 0xdf, - 0x48, 0x87, 0x59, 0xfb, 0x2c, 0x6f, 0x26, 0x27, 0x61, 0xbc, 0x24, 0x8e, 0x00, 0x9e, 0xee, 0xec, - 0x29, 0x64, 0xac, 0xf9, 0xad, 0x09, 0x72, 0x04, 0x86, 0xec, 0x9a, 0xe5, 0x78, 0x3a, 0xb3, 0xc7, - 0xa0, 0x41, 0xb7, 0xd5, 0xd7, 0xad, 0xf8, 0xea, 0xcc, 0x09, 0x4f, 0xb7, 0x4e, 0xd6, 0xcd, 0x6d, - 0x15, 0xdd, 0xd4, 0x79, 0xb4, 0xfb, 0x78, 0xf0, 0x9d, 0x5f, 0xa8, 0x5b, 0x15, 0xca, 0x92, 0xe7, - 0xae, 0x6b, 0xd3, 0xfd, 0x5d, 0xf0, 0xdf, 0x64, 0x0e, 0xd0, 0x46, 0xfe, 0xda, 0xca, 0xc3, 0xa8, - 0x22, 0xb0, 0xe0, 0x9c, 0x24, 0x9e, 0x8d, 0xf9, 0xf1, 0xfa, 0x96, 0x61, 0x3b, 0x56, 0xdd, 0x28, - 0x0a, 0x5f, 0xab, 0x68, 0x79, 0x5c, 0xa9, 0x44, 0x14, 0x0e, 0x9a, 0x96, 0x38, 0x14, 0xe2, 0x5e, - 0x60, 0x90, 0xbb, 0x84, 0xf4, 0x83, 0x4c, 0x16, 0x82, 0x0f, 0xd1, 0x80, 0xe3, 0xf9, 0xa5, 0xfe, - 0x81, 0x02, 0x63, 0xf4, 0x33, 0x1b, 0xd6, 0x75, 0xae, 0xdc, 0xa3, 0x20, 0x79, 0x01, 0x08, 0x1b, - 0xa6, 0x5c, 0xb7, 0x1a, 0x35, 0xd7, 0x1d, 0xb5, 0xf5, 0x22, 0xaa, 0xf8, 0x08, 0xfd, 0x72, 0x13, - 0x3f, 0xac, 0xe8, 0x45, 0xb2, 0x07, 0x7a, 0x2a, 0xda, 0xa3, 0x82, 0x56, 0xd6, 0x51, 0xe1, 0xbb, - 0x2b, 0xda, 0xa3, 0xd9, 0xb2, 0x4e, 0xa6, 0x60, 0xcc, 0xa8, 0x16, 0xcd, 0x86, 0x4b, 0xaf, 0xf6, - 0x6a, 0x61, 0x83, 0x0d, 0x82, 0x21, 0x7d, 0xa3, 0xf8, 0x29, 0xaf, 0xbd, 0x8a, 0xa3, 0xbb, 0x8a, - 0xc7, 0xfb, 0x8b, 0xb3, 0x3c, 0x7d, 0xe5, 0xcd, 0x0f, 0x63, 0x3b, 0x3f, 0xa3, 0xab, 0xbf, 0xa6, - 0xe0, 0x7d, 0xbd, 0xc8, 0xb1, 0xd0, 0x1c, 0xc3, 0x34, 0x9c, 0x2d, 0xa9, 0x37, 0xcb, 0x22, 0xec, - 0x66, 0xfc, 0x21, 0x49, 0xae, 0x8b, 0xea, 0x32, 0x2e, 0xe3, 0x88, 0x45, 0xcc, 0x57, 0x7e, 0xcc, - 0x09, 0x37, 0xaa, 0x9f, 0xce, 0xf8, 0x74, 0xd3, 0x4b, 0xa2, 0xc8, 0xc5, 0x80, 0x4d, 0xd1, 0x8a, - 0x2f, 0x7c, 0x07, 0x5a, 0x6e, 0x87, 0x4d, 0x10, 0xf2, 0x32, 0x8c, 0x70, 0x0e, 0xc4, 0x84, 0x65, - 0x42, 0x0f, 0x5a, 0x98, 0xc1, 0x2b, 0x1e, 0x61, 0xb0, 0xa7, 0xc7, 0xf0, 0x0c, 0x23, 0x16, 0xfe, - 0x89, 0xdc, 0x82, 0x7e, 0xaf, 0xc4, 0x3a, 0xa8, 0x96, 0x3d, 0x27, 0xa9, 0x65, 0x79, 0xa8, 0x0b, - 0x99, 0x8a, 0x44, 0xa2, 0x9c, 0x51, 0xd5, 0xf8, 0x54, 0xb4, 0x7a, 0x57, 0x55, 0xcb, 0x18, 0x6c, - 0x1d, 0x00, 0x12, 0xe6, 0x31, 0xf0, 0xec, 0x93, 0x28, 0x2f, 0x86, 0x03, 0x85, 0x12, 0x7c, 0xf5, - 0x79, 0x08, 0xc7, 0x23, 0x9f, 0xfe, 0xe7, 0xac, 0x6a, 0xc9, 0x60, 0x51, 0x62, 0x3b, 0x9d, 0x79, - 0xfc, 0xab, 0x1d, 0x70, 0x28, 0xf4, 0x2a, 0x1d, 0x1c, 0xef, 0x07, 0x37, 0xbe, 0xe3, 0x26, 0x0c, - 0x38, 0x75, 0xa3, 0x5c, 0xd6, 0xeb, 0xf7, 0xd2, 0x3e, 0x30, 0xfa, 0x00, 0x5b, 0xc7, 0x79, 0x1c, - 0x81, 0x1e, 0xc3, 0xa6, 0xcf, 0xf9, 0xd4, 0x2b, 0xed, 0xcd, 0xf5, 0xbf, 0xfb, 0xd6, 0x01, 0xde, - 0x94, 0xe7, 0x7f, 0x04, 0xc2, 0x41, 0x7a, 0x62, 0xc2, 0x41, 0x7a, 0x9b, 0xe1, 0x20, 0x9f, 0x51, - 0x7c, 0x41, 0x75, 0x89, 0x4a, 0x21, 0x92, 0x3e, 0xfd, 0x21, 0x09, 0x57, 0x52, 0x85, 0x24, 0x04, - 0xf1, 0x8a, 0xc0, 0x84, 0xcb, 0x68, 0x40, 0x78, 0x00, 0x7f, 0xaa, 0xa0, 0x4a, 0xf5, 0x37, 0xf9, - 0x45, 0x58, 0x04, 0x38, 0xd2, 0x3d, 0x0b, 0x9d, 0x39, 0x43, 0xec, 0x22, 0xc7, 0x25, 0xa8, 0xf6, - 0x84, 0x4f, 0x50, 0x50, 0x17, 0xc5, 0xac, 0xfd, 0x80, 0x67, 0x64, 0xa6, 0x45, 0xe1, 0x82, 0x8a, - 0x8b, 0x75, 0xff, 0xbb, 0x67, 0x3a, 0x66, 0x7f, 0x9b, 0x7b, 0x96, 0xb1, 0x48, 0xde, 0x57, 0x2c, - 0x7f, 0x43, 0x81, 0xd1, 0xd0, 0xb7, 0xa7, 0xba, 0xe8, 0xfd, 0xcb, 0xa4, 0x23, 0xb8, 0x4c, 0x42, - 0x76, 0xaf, 0x33, 0xe2, 0xc9, 0x70, 0x19, 0x17, 0x0e, 0xbe, 0x26, 0x3b, 0x56, 0xc5, 0x28, 0xde, - 0x78, 0xa4, 0x17, 0x1b, 0xae, 0x72, 0x2f, 0xe8, 0xfa, 0x72, 0xc3, 0x74, 0x8c, 0x9a, 0x69, 0xe8, - 0x75, 0x29, 0x99, 0x6e, 0xe2, 0x13, 0xaa, 0x0c, 0x3a, 0x94, 0xee, 0x1c, 0x40, 0x45, 0xb4, 0xa6, - 0x99, 0x46, 0x0f, 0x98, 0x7a, 0x9e, 0xe7, 0x5a, 0x53, 0xa1, 0xae, 0x38, 0xda, 0x03, 0xfd, 0x66, - 0x5d, 0x6b, 0x46, 0x67, 0x4e, 0x42, 0x4f, 0xd9, 0xfd, 0xad, 0xeb, 0xfc, 0x7a, 0x08, 0x7f, 0xaa, - 0x5f, 0x10, 0xa9, 0xd4, 0x21, 0x50, 0x24, 0xf0, 0x0a, 0x74, 0xd1, 0xce, 0x78, 0xf9, 0x91, 0xb8, - 0xa5, 0x32, 0x24, 0x0c, 0x9e, 0x41, 0x91, 0x15, 0x68, 0x3e, 0xe2, 0x15, 0x18, 0x22, 0x89, 0x8c, - 0x2e, 0xf1, 0x0e, 0xc7, 0x70, 0x0d, 0xe9, 0xbe, 0xdf, 0xea, 0x2a, 0xda, 0x09, 0xfa, 0x6b, 0xb6, - 0xe1, 0x6c, 0x58, 0x75, 0xe3, 0x87, 0x68, 0x08, 0x67, 0x88, 0xe3, 0xba, 0x9f, 0xe3, 0xba, 0x77, - 0x2e, 0x32, 0xfe, 0xb9, 0xf8, 0x08, 0x5e, 0x1f, 0x45, 0x61, 0xc5, 0xc9, 0x38, 0x03, 0xdd, 0x18, - 0x9e, 0xca, 0x24, 0xf5, 0x2c, 0x4a, 0x6a, 0x77, 0x58, 0x52, 0x8b, 0x55, 0x27, 0x8f, 0x9d, 0xc5, - 0xb5, 0x65, 0x18, 0xb3, 0xdd, 0x92, 0x60, 0xd7, 0xe5, 0x3d, 0x18, 0x0f, 0x2d, 0x62, 0xbe, 0x09, - 0xbb, 0x7f, 0xa5, 0x50, 0x85, 0x34, 0x44, 0x8e, 0x50, 0x40, 0x86, 0x9c, 0x47, 0x3a, 0x77, 0x53, - 0x34, 0xb6, 0xcc, 0x4d, 0x79, 0xc4, 0x6c, 0x21, 0xb4, 0x7a, 0x1e, 0x3d, 0x29, 0x7c, 0x9b, 0x62, - 0xc7, 0x57, 0xa9, 0x85, 0xa4, 0xa1, 0x3b, 0x15, 0x80, 0x14, 0x6b, 0xa6, 0x07, 0x8f, 0xc5, 0xa8, - 0x94, 0xcf, 0xb7, 0xce, 0x69, 0xe6, 0x38, 0x38, 0xa4, 0xa8, 0xec, 0xe1, 0xfb, 0xec, 0x79, 0x6c, - 0xda, 0x17, 0xf9, 0x35, 0xb6, 0xa6, 0x43, 0x0a, 0x12, 0x9a, 0x35, 0x1d, 0x1e, 0xc0, 0xa0, 0xef, - 0x53, 0xf2, 0x19, 0xe0, 0x4a, 0x93, 0xed, 0x14, 0x06, 0x53, 0x30, 0x7c, 0x5a, 0xc4, 0x0b, 0x55, - 0xad, 0xca, 0xb2, 0x51, 0xe5, 0x49, 0x05, 0xc9, 0xd9, 0xf8, 0x1f, 0x17, 0x81, 0x42, 0x41, 0x28, - 0x9c, 0x8a, 0x4b, 0x81, 0x25, 0x21, 0xe7, 0x7b, 0xe1, 0xc2, 0x38, 0x10, 0x83, 0x5d, 0xc8, 0xe1, - 0x53, 0x22, 0xa4, 0x2a, 0xd4, 0x01, 0xc7, 0xff, 0x38, 0x8c, 0xb1, 0x24, 0xfd, 0x8a, 0x51, 0x15, - 0xc9, 0x16, 0x5c, 0x2a, 0x2f, 0xb4, 0xcc, 0xd4, 0xf7, 0xb2, 0x34, 0x5a, 0x0a, 0x8e, 0x72, 0xec, - 0x34, 0xf4, 0x89, 0xd4, 0x63, 0x32, 0x0e, 0x23, 0xee, 0xbf, 0x85, 0xfb, 0x55, 0xbb, 0xa6, 0x17, - 0x8d, 0x75, 0x43, 0x2f, 0x8d, 0xec, 0x22, 0x3d, 0xd0, 0x91, 0x6b, 0x6c, 0x8d, 0x28, 0xa4, 0x17, - 0x3a, 0x57, 0x74, 0xd3, 0x1c, 0xc9, 0x1c, 0x7b, 0x09, 0xc6, 0xa3, 0xe2, 0xca, 0x5d, 0x04, 0x1e, - 0x58, 0x8a, 0x78, 0x64, 0x17, 0x19, 0x83, 0x61, 0xf7, 0xf8, 0xfe, 0xb2, 0x55, 0xb7, 0x9d, 0x55, - 0x2b, 0xa7, 0xdb, 0xce, 0x88, 0xc2, 0x1b, 0xdd, 0x5f, 0xab, 0x16, 0xfd, 0x34, 0x92, 0x99, 0xf9, - 0x49, 0x0b, 0xba, 0xe8, 0x74, 0x90, 0xb7, 0x15, 0xd8, 0xbd, 0x74, 0x2a, 0xe0, 0x36, 0xe4, 0x2c, - 0xeb, 0x01, 0xb9, 0xd6, 0xb2, 0xcc, 0x4a, 0xb2, 0xd7, 0x92, 0xbd, 0xde, 0x3e, 0x02, 0x26, 0x12, - 0x75, 0xe1, 0xc7, 0xbe, 0xf1, 0x9d, 0xcf, 0x65, 0xae, 0x93, 0xab, 0xd3, 0x09, 0xd5, 0x9c, 0x9a, - 0x37, 0x2d, 0xd3, 0x4b, 0xa7, 0x04, 0xf9, 0xd3, 0x8f, 0x85, 0xfe, 0x3f, 0x21, 0xaf, 0x2b, 0x30, - 0xbc, 0x74, 0x4a, 0x38, 0x82, 0x94, 0xbd, 0x0b, 0x52, 0xd4, 0x45, 0xf9, 0x9e, 0xd9, 0x8b, 0xed, - 0x80, 0x22, 0x4b, 0xd7, 0x29, 0x4b, 0x17, 0xc9, 0xf9, 0x24, 0x96, 0xec, 0x9a, 0xe5, 0xc4, 0x32, - 0xf3, 0x45, 0x05, 0xc6, 0x22, 0x8a, 0x05, 0x91, 0xb3, 0x2d, 0xa9, 0x8a, 0xac, 0x3d, 0x94, 0x3d, - 0x97, 0x1a, 0x0e, 0x59, 0x99, 0xa1, 0xac, 0xbc, 0x40, 0x8e, 0x4d, 0x4b, 0x94, 0xe5, 0x42, 0x22, - 0xff, 0x42, 0x01, 0x12, 0xae, 0xce, 0x43, 0x2e, 0xb6, 0x55, 0xd2, 0x87, 0xd1, 0x7f, 0x69, 0x1b, - 0xe5, 0x80, 0xd4, 0x6b, 0x94, 0x87, 0x0b, 0xe4, 0x9c, 0x0c, 0x0f, 0xd3, 0x76, 0x98, 0xf2, 0xd7, - 0x15, 0x18, 0x0d, 0xe1, 0x97, 0x50, 0xae, 0xb8, 0x12, 0x18, 0xd9, 0x8b, 0xed, 0x80, 0x22, 0x37, - 0x57, 0x29, 0x37, 0xe7, 0xc9, 0xd9, 0xf6, 0xb8, 0x21, 0x7f, 0xa2, 0xc0, 0x48, 0xb0, 0xfc, 0x10, - 0x39, 0x2f, 0xad, 0x1f, 0x81, 0xbd, 0x2f, 0x7b, 0xa1, 0x0d, 0x48, 0xe4, 0xe4, 0x0a, 0xe5, 0xe4, - 0x1c, 0x39, 0x23, 0xc5, 0x89, 0x1e, 0xa4, 0xf9, 0xcf, 0x15, 0x18, 0x0e, 0xd4, 0xf4, 0x21, 0xad, - 0xf5, 0x3c, 0xba, 0x22, 0x52, 0xf6, 0x7c, 0x7a, 0xc0, 0x34, 0xf6, 0x4b, 0x34, 0x04, 0x2a, 0x1f, - 0x4d, 0x3f, 0x46, 0xe9, 0x3c, 0xa1, 0x72, 0x09, 0x96, 0x28, 0x22, 0xa9, 0xc9, 0x4a, 0x21, 0x97, - 0xb8, 0x7a, 0x48, 0x29, 0xe5, 0x12, 0xac, 0xe5, 0x44, 0xfe, 0x59, 0x81, 0xdd, 0x91, 0x75, 0x66, - 0xc8, 0x15, 0x79, 0x9a, 0x22, 0x0a, 0x15, 0x65, 0xaf, 0xb6, 0x0b, 0x8e, 0x7c, 0xdd, 0xa1, 0x7c, - 0xdd, 0x22, 0x0b, 0xe9, 0xf8, 0xf2, 0xe2, 0xf2, 0x19, 0xe9, 0xb7, 0x14, 0x98, 0x88, 0x2e, 0xa8, - 0x43, 0xda, 0x24, 0x55, 0x48, 0xef, 0x5a, 0xdb, 0xf0, 0xc8, 0xeb, 0x1c, 0xe5, 0xf5, 0x0a, 0xb9, - 0xd4, 0x3e, 0xaf, 0x36, 0xf9, 0x8a, 0x02, 0x03, 0xde, 0x0a, 0x45, 0xe4, 0x74, 0x4b, 0xb2, 0x22, - 0x2a, 0x37, 0x65, 0xcf, 0xa4, 0x84, 0x42, 0x16, 0x72, 0x94, 0x85, 0xcb, 0xe4, 0xa2, 0x14, 0x0b, - 0xbe, 0xda, 0x4b, 0xd3, 0x8f, 0xe9, 0xcf, 0x27, 0xe4, 0x4b, 0x0a, 0x0c, 0xfa, 0x6a, 0x2c, 0x91, - 0x74, 0xc4, 0x08, 0x81, 0x9c, 0x4d, 0x0b, 0x86, 0x4c, 0x5c, 0xa2, 0x4c, 0x9c, 0x21, 0xa7, 0xd2, - 0x33, 0x61, 0x93, 0xdf, 0x52, 0xa0, 0xdf, 0x53, 0xf2, 0x83, 0x9c, 0x6a, 0xbd, 0x6d, 0x84, 0x4a, - 0x95, 0x64, 0x4f, 0xa7, 0x03, 0x42, 0xba, 0x4f, 0x50, 0xba, 0x8f, 0x91, 0xa3, 0x2d, 0x5d, 0x18, - 0xbc, 0x6b, 0x26, 0x5f, 0x50, 0x00, 0x3c, 0xe5, 0x5d, 0x66, 0x52, 0x0c, 0xcb, 0x49, 0x3d, 0x95, - 0x0a, 0x06, 0x29, 0xbd, 0x4c, 0x29, 0x3d, 0x4b, 0x4e, 0xcb, 0x52, 0xea, 0x5b, 0xc3, 0x5f, 0x52, - 0x60, 0x38, 0x50, 0x59, 0x45, 0x62, 0x13, 0x89, 0xae, 0x0a, 0x23, 0xb1, 0x89, 0xc4, 0x14, 0x71, - 0x51, 0xcf, 0x50, 0x26, 0xa6, 0xc9, 0xf1, 0x96, 0x4c, 0xac, 0x37, 0x4c, 0xb3, 0xc0, 0xe7, 0xfc, - 0xb5, 0x70, 0x59, 0x9d, 0xb3, 0x29, 0x69, 0x90, 0xf7, 0x10, 0xa3, 0x6b, 0xb5, 0xa4, 0x70, 0x76, - 0x3d, 0xa4, 0xfb, 0x64, 0xf0, 0x65, 0x05, 0x06, 0x7d, 0x8e, 0xb4, 0xc4, 0x22, 0x8d, 0xf4, 0xd9, - 0xcf, 0xa6, 0x05, 0x4b, 0xe3, 0x52, 0x51, 0x16, 0x2c, 0x0e, 0xeb, 0x63, 0xe0, 0x4d, 0x05, 0x46, - 0x82, 0x29, 0xea, 0x12, 0x5b, 0x77, 0x4c, 0x8d, 0x16, 0x89, 0xad, 0x3b, 0xae, 0xde, 0x87, 0x7a, - 0x9b, 0x72, 0x72, 0x83, 0xcc, 0xc9, 0x71, 0xe2, 0x5b, 0x0b, 0xd3, 0x8f, 0x7d, 0x57, 0xa0, 0x4f, - 0xc8, 0xbf, 0x2b, 0x30, 0x19, 0x57, 0xed, 0x83, 0xb4, 0x3e, 0xf8, 0xb5, 0x28, 0x10, 0x93, 0x9d, - 0xdd, 0x06, 0x06, 0x64, 0xf7, 0x3e, 0x65, 0xf7, 0x2e, 0x59, 0x6e, 0x87, 0x5d, 0x64, 0x55, 0xb8, - 0x60, 0xfc, 0x09, 0xfd, 0x09, 0xf9, 0x8e, 0x7b, 0x80, 0x09, 0x95, 0xeb, 0x91, 0x39, 0xc0, 0xc4, - 0x95, 0x1a, 0x92, 0x39, 0xc0, 0xc4, 0xd6, 0x07, 0x4a, 0xcd, 0x66, 0x61, 0x6d, 0x0b, 0x33, 0x51, - 0x13, 0xe5, 0xfb, 0x9a, 0x02, 0x23, 0xc1, 0xfa, 0xc0, 0x12, 0x6a, 0x1b, 0x53, 0xb5, 0x38, 0x7b, - 0xa1, 0x0d, 0x48, 0x64, 0xf0, 0x22, 0x65, 0xf0, 0x34, 0x99, 0x49, 0x62, 0x90, 0x8b, 0x30, 0xc0, - 0xc5, 0x77, 0x15, 0xd8, 0xdb, 0x5c, 0x0f, 0xab, 0x75, 0xad, 0x6a, 0x1b, 0x7a, 0xf5, 0xa9, 0xae, - 0x42, 0x79, 0x79, 0x39, 0x9c, 0xdc, 0x82, 0xc4, 0x7a, 0xfc, 0x1b, 0x54, 0x4b, 0x7f, 0x9a, 0xa1, - 0xa4, 0x5a, 0x46, 0xd6, 0x7e, 0x91, 0x54, 0xcb, 0xe8, 0x8a, 0x2f, 0x72, 0x27, 0x1f, 0xb6, 0xf3, - 0x06, 0xb3, 0x29, 0x7d, 0xe6, 0xf3, 0x5f, 0x15, 0x98, 0x8c, 0x2b, 0x2f, 0x23, 0x61, 0x67, 0x5a, - 0xd4, 0xb7, 0x91, 0xb0, 0x33, 0xad, 0x6a, 0xdb, 0xa8, 0x4b, 0x94, 0xd3, 0x05, 0x32, 0x2f, 0x79, - 0x47, 0x95, 0xcc, 0xef, 0x37, 0x15, 0x18, 0x8b, 0xb8, 0x11, 0x23, 0x97, 0x52, 0x10, 0x1a, 0xda, - 0xfb, 0x2e, 0xb7, 0x07, 0x8c, 0x0c, 0xce, 0x53, 0x06, 0xaf, 0x92, 0xcb, 0x92, 0x0c, 0x46, 0xef, - 0x83, 0xff, 0xa2, 0xc0, 0x44, 0x74, 0x95, 0x01, 0x89, 0x03, 0x51, 0x62, 0x99, 0x0b, 0x89, 0x03, - 0x51, 0x72, 0x79, 0x03, 0xf5, 0xc3, 0x94, 0xc3, 0xdb, 0x64, 0x31, 0x0d, 0x87, 0xc9, 0xeb, 0xf1, - 0x67, 0x32, 0xb0, 0x3f, 0xb9, 0xb8, 0x01, 0x59, 0x48, 0xb9, 0xc7, 0xc5, 0xb1, 0x7f, 0x73, 0xdb, - 0x78, 0x70, 0x1a, 0x3e, 0x46, 0xa7, 0xe1, 0x3e, 0x59, 0x69, 0x7f, 0x1a, 0xe2, 0xf7, 0xcd, 0xff, - 0xf2, 0x2d, 0xe4, 0xc0, 0xee, 0x79, 0x3d, 0xad, 0x82, 0x86, 0xf6, 0xd0, 0xd9, 0x6d, 0x60, 0xd8, - 0x16, 0xfb, 0x92, 0xfb, 0xe9, 0x7f, 0x2b, 0x70, 0x20, 0xa8, 0x85, 0xc1, 0xfd, 0xe8, 0xa9, 0xaf, - 0x83, 0xb4, 0x33, 0x90, 0x6a, 0x87, 0xfa, 0x23, 0x05, 0x46, 0x43, 0xf9, 0xec, 0x12, 0x17, 0xa5, - 0x71, 0x95, 0x29, 0x24, 0x2e, 0x4a, 0x63, 0xd3, 0xe7, 0xd5, 0xb3, 0x94, 0xd3, 0x13, 0x64, 0x4a, - 0xd6, 0x68, 0x23, 0xb9, 0x5f, 0x57, 0x60, 0x24, 0x54, 0x51, 0xe1, 0x7c, 0x6a, 0x42, 0xe4, 0xfd, - 0x88, 0xb8, 0xb4, 0x7a, 0xb9, 0x1b, 0x90, 0x30, 0x07, 0x3e, 0x9b, 0xfc, 0x5d, 0x05, 0xf6, 0xc4, - 0x24, 0xc2, 0x4b, 0xbc, 0xfe, 0x24, 0xa7, 0xe1, 0x67, 0xaf, 0xb7, 0x8f, 0x00, 0x59, 0x5c, 0xa4, - 0x2c, 0xce, 0x91, 0xd9, 0x54, 0x2c, 0x72, 0x93, 0xe3, 0xe3, 0xf4, 0xaf, 0x14, 0x18, 0x8f, 0xca, - 0x5c, 0x24, 0x97, 0x53, 0x38, 0xa6, 0xa1, 0x14, 0xfe, 0xec, 0x95, 0x36, 0xa1, 0xd3, 0x5c, 0x4f, - 0x88, 0x86, 0xe0, 0x82, 0xfa, 0x5d, 0x05, 0xc6, 0xf8, 0xfd, 0xb9, 0x27, 0x7f, 0x52, 0xe2, 0x26, - 0x28, 0x9c, 0x88, 0x29, 0x71, 0x13, 0x14, 0x91, 0xa2, 0x29, 0x77, 0x13, 0x54, 0xa1, 0x80, 0x05, - 0x9a, 0x15, 0x49, 0x7e, 0x5d, 0x81, 0x3e, 0x91, 0x77, 0x49, 0x4e, 0xb6, 0x1c, 0x35, 0x98, 0xbc, - 0x99, 0x9d, 0x49, 0x03, 0x82, 0x64, 0x1e, 0xa7, 0x64, 0x3e, 0x47, 0x8e, 0x24, 0x91, 0x59, 0x13, - 0x54, 0xfd, 0xa5, 0x02, 0x63, 0x11, 0xa9, 0xff, 0x24, 0xcd, 0x43, 0x53, 0x88, 0xee, 0xcb, 0xed, - 0x01, 0xa7, 0xb9, 0x76, 0x17, 0x1c, 0x84, 0x54, 0xe5, 0xdf, 0x14, 0xc8, 0xc6, 0x17, 0x17, 0x20, - 0xb9, 0x36, 0x68, 0x0b, 0x54, 0x70, 0xc8, 0xce, 0x6d, 0x0b, 0x47, 0x9a, 0x15, 0x1f, 0xcb, 0xa6, - 0x6f, 0xc5, 0xff, 0x7c, 0x06, 0x0e, 0x4b, 0x24, 0xf7, 0x93, 0xdb, 0x29, 0xe8, 0x6e, 0x55, 0xc6, - 0x22, 0xbb, 0xb4, 0x33, 0xc8, 0x70, 0x36, 0x56, 0xe8, 0x6c, 0x2c, 0x93, 0xdb, 0x89, 0xe6, 0x41, - 0xc4, 0x44, 0xc9, 0xcd, 0xcb, 0xdf, 0x2a, 0x30, 0x16, 0x91, 0xee, 0x2f, 0xa1, 0xdc, 0xf1, 0xb5, - 0x0a, 0x24, 0x94, 0x3b, 0xa1, 0x50, 0x81, 0x7a, 0x83, 0xf2, 0x79, 0x8d, 0x5c, 0x49, 0x94, 0xba, - 0xa8, 0x36, 0xe4, 0xa9, 0xbf, 0xe4, 0xe3, 0xec, 0xdb, 0x0a, 0xec, 0x89, 0xa9, 0x08, 0x20, 0xb1, - 0x9b, 0x25, 0x97, 0x36, 0x90, 0xd8, 0xcd, 0x5a, 0xd4, 0x35, 0x90, 0x7d, 0xb2, 0x70, 0x91, 0xc4, - 0xb2, 0xf8, 0x8e, 0x02, 0x13, 0xd1, 0xa5, 0x03, 0x24, 0x9c, 0xc7, 0xc4, 0x0a, 0x08, 0x12, 0xce, - 0x63, 0x72, 0xf9, 0x03, 0xf5, 0x16, 0xe5, 0x2f, 0x47, 0xae, 0xa7, 0x92, 0x22, 0x96, 0xac, 0x0a, - 0x09, 0x32, 0xa6, 0xe6, 0x81, 0x84, 0x20, 0x93, 0x0b, 0xc0, 0x48, 0x08, 0xb2, 0x45, 0xb9, 0x05, - 0x39, 0x41, 0xb2, 0x80, 0x52, 0x9e, 0x99, 0x10, 0x75, 0xbd, 0x36, 0x1a, 0xce, 0xca, 0x96, 0xbc, - 0x56, 0x8a, 0x28, 0x26, 0x20, 0xe1, 0x0c, 0xc7, 0xd6, 0x04, 0x50, 0xcf, 0x51, 0x86, 0x4e, 0x92, - 0xe9, 0x24, 0x86, 0x22, 0xd2, 0xb1, 0xc9, 0x5f, 0x2b, 0x30, 0x79, 0xaf, 0x99, 0xe0, 0xfd, 0xbe, - 0x60, 0x46, 0x2a, 0xa0, 0xc3, 0x9b, 0xfa, 0x1e, 0x64, 0xea, 0xeb, 0x3c, 0x31, 0xc8, 0x5f, 0x19, - 0x40, 0xc2, 0x40, 0xc6, 0xd7, 0x3b, 0x90, 0x30, 0x90, 0x09, 0x85, 0x10, 0xd4, 0x0b, 0x94, 0xa7, - 0x53, 0xe4, 0xa4, 0xb4, 0x80, 0x78, 0xfe, 0x3e, 0x79, 0x5b, 0x81, 0x89, 0xe8, 0x84, 0x6d, 0x09, - 0x8b, 0x91, 0x98, 0x2a, 0x2e, 0x61, 0x31, 0x92, 0x33, 0xc5, 0xd5, 0x9b, 0x94, 0xad, 0x59, 0x72, - 0x2d, 0x89, 0x2d, 0x5f, 0xfe, 0xb4, 0x37, 0x73, 0xdc, 0x13, 0x1e, 0xe1, 0x8a, 0x2c, 0x22, 0x5d, - 0x5a, 0x42, 0x64, 0xf1, 0x09, 0xde, 0x12, 0x22, 0x4b, 0xc8, 0xfc, 0x96, 0x13, 0x59, 0x64, 0x6e, - 0x38, 0x79, 0x43, 0x81, 0xd1, 0x50, 0x92, 0xaf, 0xc4, 0x72, 0x8a, 0xcb, 0xff, 0x96, 0x58, 0x4e, - 0xb1, 0x39, 0xc5, 0x72, 0x97, 0x7f, 0xe1, 0xac, 0xe3, 0xe9, 0xc7, 0x9e, 0x8c, 0xf3, 0x27, 0xe4, - 0x1f, 0x14, 0xd8, 0x13, 0x93, 0xf7, 0x2a, 0x61, 0xd1, 0x93, 0x73, 0x8e, 0x25, 0x2c, 0x7a, 0x8b, - 0x94, 0x5b, 0x39, 0x9b, 0xc1, 0x63, 0x6d, 0x23, 0xb2, 0x72, 0xc9, 0x3f, 0x2a, 0xb0, 0x37, 0x36, - 0xb7, 0x95, 0xcc, 0xa6, 0xd1, 0xa4, 0xc8, 0xdc, 0xdb, 0x6c, 0x6e, 0x3b, 0x28, 0xd2, 0x84, 0x1b, - 0xf8, 0x54, 0x92, 0xd6, 0x71, 0x70, 0xcf, 0x6d, 0x36, 0xf9, 0xbc, 0x02, 0x43, 0xfe, 0x9c, 0xd9, - 0xe4, 0xc3, 0x5b, 0x64, 0xe6, 0x6d, 0xf2, 0xe1, 0x2d, 0x3a, 0x25, 0x57, 0x3d, 0x4d, 0xc9, 0x9e, - 0x22, 0x2f, 0x24, 0x9e, 0x31, 0x0d, 0xc7, 0x2a, 0xb0, 0x64, 0x57, 0x83, 0x12, 0xf7, 0xa6, 0x82, - 0x45, 0x7e, 0x42, 0x79, 0xad, 0x12, 0x2b, 0x29, 0x2e, 0xa3, 0x56, 0x62, 0x25, 0xc5, 0xa6, 0xd1, - 0xca, 0x45, 0xdd, 0x30, 0x16, 0x84, 0x2f, 0x34, 0xfd, 0xd8, 0x97, 0xc0, 0x4b, 0xbd, 0xf7, 0x89, - 0xe8, 0x3c, 0x59, 0x09, 0x73, 0x9e, 0x98, 0xa3, 0x2b, 0x61, 0xce, 0x93, 0x13, 0x74, 0xe5, 0x6e, - 0x33, 0x36, 0x04, 0x8e, 0x82, 0x2f, 0x9b, 0x97, 0x9e, 0x4b, 0x22, 0xea, 0xa9, 0x48, 0xd8, 0xf0, - 0xf8, 0x12, 0x2e, 0x12, 0x36, 0x3c, 0xa1, 0x84, 0x8b, 0xdc, 0xb9, 0xc4, 0x5b, 0xe4, 0xa5, 0x60, - 0xad, 0xe3, 0x06, 0x6c, 0x7b, 0x76, 0xa7, 0x7f, 0x52, 0x60, 0x6f, 0x6c, 0xe9, 0x16, 0x09, 0xe3, - 0xd0, 0xaa, 0x3e, 0x8c, 0x84, 0x71, 0x68, 0x59, 0x39, 0x46, 0x9d, 0xa5, 0xbc, 0x5e, 0x22, 0x17, - 0x12, 0x9d, 0xda, 0x08, 0x46, 0x0b, 0xa2, 0x66, 0xd5, 0xeb, 0x0a, 0x8c, 0x04, 0xf3, 0x7d, 0x25, - 0xee, 0x46, 0x63, 0xb2, 0x98, 0xb3, 0x17, 0xda, 0x80, 0x4c, 0xc3, 0x4c, 0xf3, 0xbf, 0x55, 0x44, - 0x70, 0xdf, 0x19, 0xe4, 0xab, 0x0a, 0x8c, 0x47, 0xa4, 0xcf, 0xca, 0xc4, 0x88, 0x45, 0xa5, 0xfb, - 0x4a, 0x84, 0x9f, 0x44, 0x26, 0xfc, 0xca, 0xbd, 0x7e, 0xaf, 0x51, 0x50, 0x9e, 0xc9, 0x2d, 0x2e, - 0xab, 0x7f, 0x29, 0x03, 0x87, 0x5a, 0x26, 0x72, 0x92, 0xc5, 0xd4, 0xaf, 0x06, 0x71, 0x19, 0xc2, - 0xd9, 0x17, 0x77, 0x02, 0x15, 0x32, 0xfe, 0xff, 0x28, 0xe3, 0x2f, 0x93, 0xfb, 0xe9, 0x1e, 0xa3, - 0x8a, 0x4d, 0x84, 0x89, 0xaf, 0x11, 0xdf, 0x57, 0x40, 0x6d, 0x9d, 0x5c, 0x47, 0x5e, 0x94, 0x54, - 0x42, 0x89, 0x84, 0xbf, 0xec, 0xed, 0x1d, 0xc1, 0x95, 0xc6, 0x65, 0xd1, 0x28, 0x26, 0xf6, 0x38, - 0x53, 0x70, 0x77, 0xf6, 0x66, 0xa6, 0x1f, 0xf9, 0x33, 0x05, 0x46, 0x82, 0xa9, 0x7a, 0x32, 0x21, - 0xc5, 0xd1, 0x89, 0x81, 0x32, 0x21, 0xc5, 0x31, 0x79, 0x81, 0x72, 0x41, 0x62, 0x1a, 0xbb, 0xe3, - 0xb2, 0x5d, 0x70, 0x96, 0x9a, 0x36, 0xfd, 0x18, 0xd3, 0xed, 0x9e, 0x90, 0x6f, 0x29, 0x40, 0xc2, - 0xd9, 0x63, 0x12, 0xc1, 0x0f, 0xb1, 0x69, 0x7f, 0x12, 0xc1, 0x0f, 0xf1, 0xc9, 0x7d, 0x72, 0x91, - 0x56, 0x98, 0x5f, 0xe7, 0x45, 0xc0, 0x59, 0xaa, 0x3f, 0xf1, 0x30, 0xf7, 0xa6, 0x02, 0x63, 0x11, - 0x09, 0x7b, 0xa4, 0x1d, 0x0a, 0x53, 0x6c, 0x8c, 0x09, 0x39, 0x82, 0x72, 0x37, 0x20, 0x11, 0xfc, - 0xd9, 0x4d, 0x06, 0x69, 0x60, 0x9f, 0x3f, 0x65, 0xed, 0x8c, 0xe4, 0xfa, 0xf0, 0xa7, 0xff, 0x49, - 0x58, 0xd6, 0xc8, 0xdc, 0x3f, 0xb9, 0xc0, 0x3e, 0xb4, 0x20, 0xe8, 0xed, 0xfb, 0x76, 0x88, 0xdf, - 0x77, 0x3d, 0x62, 0x5f, 0x52, 0x1f, 0x49, 0x49, 0x4a, 0x8a, 0x0c, 0x9c, 0xe8, 0xec, 0x41, 0xf5, - 0x14, 0xe5, 0xe1, 0x38, 0xf9, 0x90, 0x3c, 0x0f, 0x36, 0xf9, 0x53, 0xfa, 0x86, 0xe9, 0xcf, 0x4f, - 0x93, 0x7a, 0xc3, 0x8c, 0xcc, 0xf6, 0x93, 0x7a, 0xc3, 0x8c, 0xce, 0xf8, 0x93, 0x13, 0x41, 0x38, - 0x27, 0x4f, 0x44, 0x70, 0xbf, 0x46, 0x9f, 0x94, 0x03, 0x99, 0x76, 0x24, 0x3d, 0x41, 0xa9, 0x9e, - 0x94, 0x63, 0xd2, 0x07, 0xe5, 0x6e, 0xd1, 0x22, 0x12, 0x0c, 0x73, 0x1b, 0x5f, 0x7b, 0x7b, 0xbf, - 0xf2, 0xc6, 0xdb, 0xfb, 0x95, 0x6f, 0xbf, 0xbd, 0x5f, 0xf9, 0xb9, 0x77, 0xf6, 0xef, 0x7a, 0xe3, - 0x9d, 0xfd, 0xbb, 0xfe, 0xee, 0x9d, 0xfd, 0xbb, 0x5e, 0xb9, 0x53, 0x36, 0x9c, 0x8d, 0xc6, 0xda, - 0x54, 0xd1, 0xaa, 0x4c, 0x2f, 0x72, 0xa4, 0x4b, 0xda, 0x9a, 0xdd, 0x1c, 0xe2, 0x78, 0xd1, 0xaa, - 0xeb, 0xde, 0x9f, 0x1b, 0x9a, 0x51, 0xc5, 0x27, 0x37, 0xbb, 0x39, 0xbe, 0xb3, 0x55, 0xd3, 0xed, - 0xb5, 0xee, 0x5a, 0xdd, 0x72, 0xac, 0x53, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0xb7, 0x2a, 0xe6, - 0x46, 0xa9, 0x81, 0x00, 0x00, + // 6232 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3d, 0x6d, 0x8c, 0x1c, 0xc9, + 0x55, 0xee, 0xd9, 0xef, 0xb7, 0xdf, 0xb5, 0xeb, 0xf5, 0x7a, 0x7c, 0xe7, 0x8f, 0x76, 0x9c, 0xf3, + 0x39, 0xe7, 0x5d, 0x7b, 0xfd, 0xfd, 0xed, 0x9d, 0x5d, 0xaf, 0xbd, 0xe7, 0x5d, 0xdb, 0x99, 0x5d, + 0xdf, 0x25, 0x97, 0xc0, 0xa4, 0x77, 0xa6, 0x77, 0xb6, 0xe3, 0x9e, 0xe9, 0xf1, 0x74, 0xcf, 0x9e, + 0x17, 0xe3, 0x08, 0x08, 0x28, 0x11, 0x48, 0x80, 0x14, 0x3e, 0x84, 0x40, 0x08, 0xf8, 0xc1, 0x0f, + 0x44, 0x84, 0x44, 0xc4, 0x87, 0x12, 0x29, 0x51, 0x08, 0x82, 0x70, 0x41, 0xe8, 0x20, 0x47, 0x40, + 0x27, 0x38, 0xa2, 0xbb, 0x40, 0x94, 0x13, 0x48, 0xfc, 0x42, 0x42, 0xa0, 0x80, 0xba, 0xea, 0x55, + 0x4d, 0x7f, 0x4f, 0xf5, 0xec, 0x9e, 0x7c, 0x81, 0x5f, 0xde, 0xa9, 0xae, 0xf7, 0xea, 0xbd, 0x7a, + 0xaf, 0x5e, 0xbd, 0xaa, 0x7a, 0xef, 0x19, 0x3e, 0x68, 0x54, 0x3f, 0xa9, 0x17, 0x1d, 0x63, 0x53, + 0x9f, 0xd6, 0x1f, 0x15, 0x37, 0xb4, 0x6a, 0x59, 0x9f, 0xde, 0x3c, 0xb9, 0xa6, 0x3b, 0xda, 0xc9, + 0xe9, 0x87, 0x0d, 0xbd, 0xbe, 0x35, 0x55, 0xab, 0x5b, 0x8e, 0x45, 0xb2, 0xa2, 0xdf, 0x14, 0xef, + 0x37, 0x85, 0xfd, 0xb2, 0xcf, 0x94, 0x2d, 0xab, 0x6c, 0xea, 0xd3, 0x5a, 0xcd, 0x98, 0xd6, 0xaa, + 0x55, 0xcb, 0xd1, 0x1c, 0xc3, 0xaa, 0xda, 0x0c, 0x32, 0xfb, 0x7c, 0xc2, 0x08, 0x02, 0x15, 0xeb, + 0x7a, 0x34, 0xa1, 0x6b, 0x59, 0xaf, 0xea, 0xb6, 0xc1, 0x91, 0x1e, 0x69, 0xf6, 0xb4, 0xea, 0x5a, + 0xd1, 0x6c, 0xf6, 0x63, 0x3f, 0xb1, 0xdb, 0x78, 0xd9, 0x2a, 0x5b, 0xf4, 0xcf, 0x69, 0xf7, 0x2f, + 0xd6, 0xaa, 0xde, 0x05, 0x58, 0x69, 0xac, 0x69, 0xc5, 0xa2, 0xd5, 0xa8, 0x3a, 0x64, 0x02, 0xba, + 0x9d, 0xba, 0x56, 0xd2, 0xeb, 0x93, 0xca, 0x41, 0xe5, 0x68, 0x5f, 0x1e, 0x7f, 0x91, 0xe7, 0x61, + 0xc4, 0x16, 0xbd, 0x0a, 0x55, 0xab, 0x5a, 0xd4, 0x27, 0x33, 0x07, 0x95, 0xa3, 0x83, 0xf9, 0xe1, + 0x66, 0xfb, 0x1d, 0xb7, 0x59, 0xfd, 0x04, 0x3c, 0xf3, 0x61, 0x77, 0xae, 0x9a, 0x58, 0xef, 0xd6, + 0x4b, 0x7a, 0xdd, 0xce, 0xeb, 0x0f, 0x1b, 0xba, 0xed, 0x90, 0xc3, 0x30, 0xe8, 0x41, 0x65, 0x94, + 0x70, 0xa4, 0x81, 0x66, 0xe3, 0x62, 0x89, 0xec, 0x83, 0xbe, 0x8a, 0x56, 0x7f, 0xa0, 0xd3, 0x0e, + 0x19, 0xda, 0xa1, 0x97, 0x35, 0x2c, 0x96, 0xd4, 0xaf, 0x2a, 0xf0, 0x6c, 0xcc, 0x10, 0x76, 0xcd, + 0xaa, 0xda, 0x3a, 0xb9, 0x03, 0xb0, 0xd6, 0xd8, 0x2a, 0x58, 0xb4, 0x75, 0x52, 0x39, 0xd8, 0x71, + 0xb4, 0x7f, 0x66, 0x7a, 0x2a, 0x5e, 0x6a, 0x53, 0x01, 0x4c, 0xf3, 0x9a, 0xa3, 0xe5, 0xfb, 0xd6, + 0x1a, 0x5b, 0x0c, 0x2f, 0xb9, 0x07, 0xfd, 0xb6, 0x6e, 0x9a, 0x1c, 0x61, 0xa6, 0x3d, 0x84, 0xe0, + 0xe2, 0x60, 0x18, 0xd5, 0xdf, 0x53, 0xe0, 0x48, 0xa0, 0xcf, 0x9a, 0x65, 0x3d, 0x58, 0xd6, 0x1d, + 0xad, 0xa4, 0x39, 0xda, 0xcb, 0x86, 0xb3, 0xb1, 0x4c, 0xf9, 0x25, 0x2b, 0xd0, 0x5b, 0xc1, 0x56, + 0x3a, 0x55, 0xfd, 0x33, 0xe7, 0x52, 0x0c, 0xec, 0x45, 0x9a, 0x17, 0x88, 0x12, 0xe7, 0x97, 0x8c, + 0x43, 0x97, 0x61, 0xe7, 0x1a, 0x5b, 0x93, 0x1d, 0x07, 0x95, 0xa3, 0xbd, 0x79, 0xf6, 0x43, 0x7d, + 0x06, 0xb2, 0x74, 0xd2, 0x6f, 0xe0, 0x88, 0xf7, 0xb4, 0xba, 0x56, 0xe1, 0x52, 0x55, 0x0b, 0xb0, + 0x2f, 0xf2, 0x2b, 0x0a, 0xe4, 0x3a, 0x74, 0xd7, 0x68, 0x0b, 0xb2, 0xa0, 0x26, 0xb1, 0xc0, 0x60, + 0x73, 0x9d, 0x5f, 0x7f, 0xeb, 0xc0, 0xae, 0x3c, 0xc2, 0xa9, 0x9f, 0x53, 0x60, 0x7f, 0x40, 0xe8, + 0xf3, 0x7a, 0xcd, 0xb2, 0x0d, 0x27, 0x9d, 0x66, 0x2d, 0x01, 0x34, 0x7f, 0x53, 0xd6, 0xfb, 0x67, + 0x3e, 0x28, 0x37, 0xa1, 0x94, 0x22, 0x25, 0xef, 0x81, 0x57, 0xdf, 0x55, 0xe0, 0x40, 0x2c, 0x55, + 0xc8, 0xbb, 0x0e, 0xbd, 0x25, 0x6c, 0x43, 0x55, 0x5c, 0x4c, 0x1a, 0xaf, 0x05, 0xba, 0x29, 0xde, + 0x70, 0xa3, 0xea, 0xd4, 0xb7, 0xf2, 0x02, 0x75, 0xf6, 0x13, 0x30, 0xe8, 0xfb, 0x44, 0x46, 0xa0, + 0xe3, 0x81, 0xbe, 0x85, 0x93, 0xe0, 0xfe, 0x49, 0x2e, 0x40, 0xd7, 0xa6, 0x66, 0x36, 0x74, 0x64, + 0xfb, 0x70, 0x12, 0x19, 0x88, 0x2b, 0xcf, 0x20, 0x2e, 0x66, 0xce, 0x2b, 0xea, 0x7e, 0x5c, 0xd9, + 0x5c, 0xc6, 0x39, 0xcd, 0xd4, 0xaa, 0x45, 0x5d, 0xe8, 0xc0, 0x3a, 0x2e, 0xcb, 0xf0, 0x77, 0x9c, + 0x89, 0x1b, 0xd0, 0xbb, 0x86, 0x6d, 0x38, 0x13, 0x89, 0x24, 0x20, 0x3c, 0x2a, 0x82, 0x00, 0x55, + 0xcf, 0xa1, 0xae, 0xcd, 0x96, 0xcb, 0x75, 0xbd, 0xac, 0x39, 0xfa, 0x4b, 0x96, 0xd9, 0xa8, 0xe8, + 0x5c, 0x0d, 0x26, 0xa1, 0x87, 0x8b, 0x97, 0xf1, 0xce, 0x7f, 0xaa, 0x0d, 0x64, 0x20, 0x04, 0x88, + 0xf4, 0xdd, 0x87, 0x51, 0x8d, 0x7f, 0x2a, 0x6c, 0xd2, 0x6f, 0x9c, 0xd0, 0xa3, 0x49, 0x84, 0xb2, + 0x95, 0x8a, 0xc8, 0x46, 0x34, 0x3f, 0x76, 0x5b, 0xfd, 0x68, 0xf4, 0xb0, 0x42, 0x6f, 0xb3, 0xd0, + 0x8b, 0x14, 0xb2, 0xd1, 0xfa, 0xf2, 0xe2, 0x37, 0x79, 0x16, 0x40, 0x2c, 0x54, 0x66, 0x78, 0xfa, + 0xf2, 0x7d, 0x7c, 0xa5, 0xda, 0xea, 0x7f, 0x72, 0x53, 0x18, 0xc6, 0x8d, 0x3c, 0x39, 0xb0, 0xb7, + 0xc9, 0x13, 0x5f, 0x1b, 0x7e, 0xde, 0xce, 0x27, 0xf1, 0x26, 0x10, 0xcf, 0x32, 0x58, 0x3e, 0x65, + 0x45, 0xab, 0x5e, 0xca, 0xef, 0xd1, 0x22, 0xbf, 0xda, 0x64, 0x0d, 0x26, 0x9b, 0xa3, 0x22, 0x03, + 0x7c, 0xd0, 0x4c, 0xca, 0x09, 0x9d, 0x10, 0x98, 0xbc, 0xcd, 0xb6, 0x7a, 0x1d, 0x0e, 0xf9, 0x59, + 0xf7, 0x41, 0xe1, 0xdc, 0xfa, 0x0c, 0x9d, 0x12, 0xd8, 0x48, 0x4c, 0x50, 0x93, 0x30, 0xe0, 0x0c, + 0x2e, 0x40, 0x37, 0x23, 0x1d, 0x6d, 0x57, 0x22, 0xe5, 0xde, 0xe9, 0xe1, 0x16, 0x8c, 0x41, 0xab, + 0x27, 0x60, 0x92, 0x8e, 0x36, 0xaf, 0x57, 0xad, 0xca, 0xbc, 0x5e, 0x34, 0x2a, 0x9a, 0xc9, 0xc9, + 0x1c, 0x87, 0xae, 0x92, 0xdb, 0x8c, 0x24, 0xb2, 0x1f, 0xea, 0x19, 0xd8, 0x1b, 0x01, 0x81, 0x64, + 0x4d, 0x42, 0x4f, 0x89, 0x35, 0x51, 0xa0, 0xce, 0x3c, 0xff, 0xa9, 0x9e, 0x8a, 0x00, 0x13, 0xca, + 0x36, 0x01, 0xdd, 0x14, 0x39, 0x57, 0x35, 0xfc, 0xa5, 0x3a, 0x68, 0xde, 0x03, 0x40, 0x38, 0xd8, + 0x4b, 0x30, 0x44, 0xfb, 0x15, 0x70, 0x0c, 0xae, 0x3a, 0xcf, 0x27, 0x9b, 0x10, 0x0f, 0x2a, 0x9c, + 0x8c, 0xc1, 0x92, 0xb7, 0x51, 0x9d, 0x4b, 0x92, 0x80, 0xa0, 0xd9, 0xbf, 0x08, 0x94, 0xe0, 0x22, + 0x30, 0xe0, 0x70, 0x22, 0x12, 0xe4, 0x21, 0x07, 0x3d, 0xed, 0xae, 0x69, 0x0e, 0xa8, 0xbe, 0x12, + 0xf2, 0x3c, 0xb8, 0x9d, 0x4c, 0xb3, 0x07, 0x09, 0x69, 0x67, 0xbc, 0xd2, 0xd6, 0xe2, 0x36, 0x38, + 0xc1, 0xc1, 0x35, 0xdf, 0x4e, 0x22, 0x6d, 0xc2, 0x05, 0x90, 0x7a, 0x0f, 0xf6, 0xb0, 0x21, 0x6a, + 0x96, 0xc3, 0x18, 0xf4, 0xea, 0x85, 0xed, 0x68, 0x4e, 0xc3, 0xe6, 0x9e, 0x1f, 0xfb, 0xd5, 0xca, + 0x00, 0x7d, 0x1c, 0x95, 0xda, 0x87, 0x51, 0x6c, 0xfa, 0x3d, 0xac, 0x23, 0x9f, 0xf0, 0xe4, 0x7d, + 0x56, 0x60, 0xc8, 0x73, 0x30, 0xf5, 0x0c, 0x4c, 0x04, 0xb0, 0x4b, 0xad, 0xeb, 0x8f, 0x86, 0xd8, + 0x14, 0x34, 0x5d, 0x85, 0x6e, 0xd6, 0x0d, 0x27, 0x50, 0x96, 0x24, 0x84, 0x52, 0xbf, 0x95, 0xc1, + 0xc5, 0xe5, 0x7e, 0x13, 0x1e, 0x96, 0x0c, 0x55, 0xae, 0xd4, 0x4d, 0xa3, 0x62, 0x30, 0xa7, 0xa3, + 0x33, 0xcf, 0x7e, 0x90, 0x79, 0x00, 0xea, 0x55, 0x16, 0x6c, 0xa3, 0xa4, 0x53, 0x8f, 0x6b, 0x68, + 0xe6, 0x48, 0x12, 0x51, 0x74, 0xd0, 0x15, 0xa3, 0xa4, 0xe7, 0xfb, 0x2c, 0xfe, 0x27, 0x29, 0xc0, + 0x5e, 0x8a, 0xae, 0x50, 0x6c, 0x54, 0x1a, 0xa6, 0xe6, 0x42, 0x16, 0xaa, 0x96, 0x7b, 0xf2, 0xd0, + 0xcc, 0xc9, 0x4e, 0x97, 0x90, 0xdc, 0x61, 0xd7, 0x79, 0x79, 0xf3, 0xad, 0x03, 0xfb, 0x8a, 0x96, + 0x5d, 0xb1, 0x6c, 0xbb, 0xf4, 0x60, 0xca, 0xb0, 0xa6, 0x2b, 0x9a, 0xb3, 0x31, 0xb5, 0xa4, 0x97, + 0xb5, 0xe2, 0xd6, 0xbc, 0x5e, 0xcc, 0xef, 0xa1, 0x58, 0xe6, 0x04, 0x92, 0x3b, 0x88, 0x23, 0x72, + 0x80, 0x87, 0x0d, 0xad, 0xea, 0x18, 0xce, 0xd6, 0x64, 0x57, 0xfb, 0x03, 0x7c, 0x18, 0x71, 0xa8, + 0x7f, 0xac, 0xa0, 0x01, 0x0a, 0x4c, 0x2c, 0xca, 0xed, 0x36, 0x8c, 0xac, 0x35, 0xb6, 0xec, 0x42, + 0xad, 0x6e, 0x14, 0xf5, 0x82, 0xa9, 0x6f, 0xea, 0x26, 0x2a, 0xd5, 0xa1, 0xa4, 0xc9, 0x5a, 0x72, + 0x3b, 0xe6, 0x87, 0x5c, 0xd0, 0x7b, 0x2e, 0x24, 0xfd, 0x4d, 0x96, 0x61, 0xd4, 0x75, 0xc5, 0xfd, + 0xd8, 0x32, 0xb2, 0xd8, 0x86, 0x29, 0x6c, 0x13, 0x9d, 0xfa, 0x79, 0x05, 0x86, 0x16, 0x1a, 0xa6, + 0xd9, 0x54, 0x97, 0xed, 0xaa, 0x19, 0xf9, 0x18, 0x8c, 0x56, 0x8c, 0x12, 0xd2, 0xa7, 0x55, 0x4b, + 0x05, 0xc7, 0x5a, 0x43, 0xaf, 0xed, 0x58, 0xa2, 0xd5, 0x32, 0x4a, 0x94, 0xb0, 0xd9, 0x6a, 0x69, + 0xf5, 0x6e, 0x0e, 0x1d, 0xd6, 0xa1, 0x8a, 0xa7, 0xd5, 0x5a, 0x53, 0x3f, 0xab, 0xa0, 0x03, 0xe5, + 0x27, 0x7a, 0x9b, 0xa6, 0x80, 0xcc, 0xc0, 0xc4, 0xab, 0x86, 0xb3, 0x51, 0x08, 0x13, 0xce, 0xce, + 0x11, 0xc4, 0xfd, 0xba, 0xec, 0x27, 0xa5, 0x84, 0xae, 0x51, 0x88, 0x12, 0x14, 0xfb, 0x7c, 0xd0, + 0x84, 0x24, 0x72, 0xef, 0xc7, 0xd2, 0x34, 0x23, 0x15, 0x54, 0xad, 0xc0, 0x77, 0x99, 0x45, 0x1b, + 0xcf, 0x54, 0x26, 0x96, 0x29, 0x2d, 0x72, 0x7a, 0x3d, 0xfb, 0x90, 0x5f, 0x37, 0xd2, 0xb0, 0xc4, + 0xcd, 0xd0, 0x4f, 0x89, 0xd3, 0x10, 0x5f, 0x2d, 0x76, 0x6e, 0xeb, 0x96, 0x66, 0x6f, 0x34, 0x37, + 0xcd, 0x44, 0xb6, 0x42, 0xdb, 0x54, 0x26, 0x62, 0x9b, 0x3a, 0x04, 0x03, 0xcc, 0x34, 0x6d, 0x50, + 0xc4, 0x93, 0x1d, 0x54, 0xe2, 0xfd, 0xb4, 0x8d, 0x8d, 0xa5, 0x9a, 0xfc, 0xf8, 0x13, 0x41, 0x06, + 0xb2, 0xbb, 0x08, 0xdd, 0xbe, 0x73, 0xf8, 0xc9, 0x24, 0x76, 0x57, 0xeb, 0x46, 0xa5, 0xa2, 0x97, + 0x5c, 0x74, 0x4b, 0xae, 0xa1, 0xa0, 0x38, 0xf3, 0x88, 0x40, 0x5c, 0x2d, 0xac, 0xd2, 0x4b, 0x89, + 0xe6, 0x98, 0x3b, 0xc6, 0xb2, 0x6a, 0xc2, 0x07, 0x98, 0x2b, 0xc1, 0x5a, 0x66, 0x4b, 0xa5, 0xba, + 0x6e, 0xdb, 0x29, 0x47, 0x7a, 0x0e, 0x86, 0xf9, 0x30, 0x1a, 0x43, 0x80, 0x63, 0x0d, 0x69, 0x3e, + 0xb4, 0xea, 0xaf, 0x66, 0x60, 0x77, 0x24, 0xc7, 0xee, 0x49, 0x8d, 0x6a, 0x1b, 0xc3, 0x4d, 0x4d, + 0xeb, 0xae, 0x56, 0xa6, 0x95, 0x41, 0xb8, 0x4e, 0x82, 0x30, 0xcc, 0x19, 0x79, 0x68, 0x01, 0xe4, + 0x22, 0x58, 0x37, 0x4c, 0x53, 0x5b, 0x33, 0xd9, 0x7e, 0x24, 0x8b, 0x80, 0x03, 0x35, 0xef, 0x0f, + 0x3a, 0x3d, 0xf7, 0x07, 0xae, 0xf5, 0x68, 0x6a, 0x13, 0xdb, 0x32, 0x70, 0x07, 0x73, 0x15, 0xc6, + 0x3d, 0xad, 0x16, 0x8d, 0xd2, 0x64, 0x37, 0x3b, 0xad, 0x16, 0x8d, 0x92, 0xfa, 0x49, 0xf4, 0xb5, + 0xc2, 0xd2, 0xde, 0x79, 0xcd, 0xaa, 0xc3, 0x91, 0x16, 0x72, 0xdf, 0xf9, 0x31, 0xaf, 0x78, 0x96, + 0xb0, 0xdf, 0x6e, 0x4b, 0x39, 0x39, 0xff, 0xa5, 0x78, 0xd6, 0x5e, 0x10, 0x5e, 0x78, 0x60, 0x7d, + 0xc2, 0x70, 0x79, 0x54, 0xa9, 0xe5, 0x2e, 0xdd, 0xcb, 0x77, 0x0c, 0xb2, 0x08, 0x43, 0x6b, 0xba, + 0xed, 0x14, 0xd6, 0x1a, 0x5b, 0x88, 0x26, 0x23, 0x8f, 0x66, 0xc0, 0x05, 0xcd, 0x35, 0xb6, 0x18, + 0xaa, 0xdb, 0x30, 0x4c, 0x51, 0xd1, 0x9b, 0x34, 0x86, 0xab, 0x43, 0x1e, 0xd7, 0xa0, 0x0b, 0xbb, + 0xa2, 0x9b, 0x26, 0x45, 0xa6, 0xce, 0xe1, 0x42, 0x9d, 0xd7, 0xeb, 0xc6, 0x26, 0xf5, 0x24, 0xda, + 0x98, 0xc2, 0x1f, 0xcf, 0xa0, 0xd8, 0xe3, 0xb1, 0xfc, 0x9f, 0x9f, 0xc8, 0x3f, 0xe0, 0x6a, 0xd4, + 0x9c, 0x83, 0x9d, 0x70, 0x6b, 0x13, 0x1d, 0xd2, 0x8e, 0xed, 0x3b, 0xa4, 0xea, 0x97, 0x15, 0x38, + 0x18, 0x4f, 0xf7, 0x0f, 0x80, 0xd7, 0xf8, 0x6b, 0x1d, 0x30, 0x15, 0x69, 0xdf, 0x56, 0xad, 0x39, + 0xad, 0x5a, 0xd4, 0xcd, 0xfb, 0xb5, 0x55, 0x6b, 0xb6, 0xe2, 0x9a, 0xa3, 0x9d, 0xdb, 0xd2, 0xe7, + 0xa1, 0x7f, 0x4d, 0xb3, 0xf5, 0x82, 0x46, 0xf1, 0xa6, 0x31, 0xef, 0xe0, 0xc2, 0x31, 0x72, 0xc8, + 0x02, 0x0c, 0x3c, 0x6c, 0x58, 0x8e, 0x40, 0xd3, 0x29, 0x8f, 0xa6, 0x9f, 0x02, 0x22, 0x9e, 0x25, + 0xe8, 0xb5, 0x9d, 0xba, 0xe6, 0xe8, 0x65, 0x76, 0x86, 0x18, 0x9a, 0x39, 0x91, 0x34, 0x91, 0x6c, + 0x5a, 0x4c, 0xfa, 0xa0, 0xb2, 0x82, 0x70, 0x79, 0x81, 0x81, 0x2c, 0xc1, 0x70, 0x5d, 0x5f, 0xd7, + 0xeb, 0x7a, 0xb5, 0xa8, 0xe3, 0xb2, 0xe8, 0x96, 0x57, 0xb4, 0x21, 0x01, 0xcb, 0xd6, 0xc5, 0x3f, + 0x64, 0xe0, 0xb4, 0x47, 0x3c, 0x01, 0x2d, 0x7b, 0x4f, 0x85, 0x14, 0x9c, 0xde, 0x8e, 0x1d, 0x98, + 0xde, 0xce, 0xf7, 0x62, 0x7a, 0xbb, 0xda, 0x9f, 0xde, 0x75, 0xbc, 0xf8, 0x89, 0x9e, 0xdd, 0x9d, + 0x73, 0xe8, 0xea, 0x70, 0x2c, 0x62, 0x63, 0x6f, 0x6b, 0x3c, 0x69, 0xb7, 0xee, 0x7b, 0x19, 0xd8, + 0x87, 0x5b, 0x7f, 0x73, 0xa0, 0xf7, 0x89, 0x73, 0x77, 0x89, 0x1e, 0x3e, 0xca, 0x46, 0x35, 0x8d, + 0x56, 0x21, 0x88, 0xcf, 0x33, 0xec, 0x6c, 0xc7, 0x33, 0x3c, 0xc0, 0x3d, 0x43, 0x57, 0x73, 0x7a, + 0x73, 0x7d, 0xef, 0xbe, 0x75, 0x80, 0x35, 0x44, 0x3b, 0x89, 0xdd, 0x31, 0x4e, 0x62, 0x4f, 0xd3, + 0x49, 0xdc, 0xc4, 0xbb, 0xbf, 0x38, 0x3d, 0xc2, 0x8d, 0xe0, 0x6e, 0xc0, 0x6d, 0x3b, 0x27, 0xe1, + 0xb6, 0x45, 0xc9, 0x4e, 0x38, 0x6f, 0x9f, 0x82, 0x0f, 0x49, 0xe9, 0xd5, 0x7b, 0x35, 0xfe, 0xcf, + 0x28, 0x21, 0x07, 0xe8, 0x29, 0x1e, 0x03, 0x1f, 0x85, 0xfc, 0xa8, 0x98, 0xc3, 0xe0, 0x8e, 0xcf, + 0xc3, 0x4f, 0xf3, 0x07, 0x10, 0x8f, 0x0b, 0xf7, 0xd4, 0x6e, 0x33, 0x3e, 0xab, 0x00, 0x78, 0x1c, + 0x86, 0xa7, 0xb8, 0xce, 0xd5, 0xaf, 0x28, 0x30, 0x7e, 0x4f, 0xaf, 0xd7, 0x74, 0xa7, 0xa1, 0x99, + 0x6c, 0x46, 0x56, 0x1c, 0xcd, 0xd1, 0xc9, 0x3d, 0xe8, 0xe7, 0x6c, 0x57, 0xd7, 0x2d, 0xbc, 0x82, + 0x48, 0x7c, 0xca, 0x0e, 0xa0, 0x59, 0xac, 0xae, 0x5b, 0x79, 0x9c, 0x3a, 0xf7, 0x6f, 0x72, 0x1f, + 0x06, 0xd6, 0x1b, 0xd5, 0x92, 0x51, 0x2d, 0x33, 0x94, 0xec, 0x9a, 0x6a, 0x26, 0x05, 0xca, 0x05, + 0x06, 0x9e, 0xef, 0x47, 0x3c, 0x2e, 0x5a, 0xf5, 0x8b, 0x1d, 0x30, 0xbe, 0xd0, 0x30, 0xcd, 0xa0, + 0x60, 0xc9, 0x7c, 0xe0, 0xfe, 0xe4, 0x85, 0xe4, 0x3b, 0x70, 0x3f, 0xb4, 0xb8, 0x61, 0xfb, 0x28, + 0x0c, 0xd5, 0x38, 0x15, 0x5e, 0xba, 0x4f, 0xa4, 0xa0, 0x9b, 0xce, 0xe8, 0xad, 0x5d, 0xf9, 0x41, + 0x81, 0x89, 0x4e, 0xc8, 0x47, 0xdc, 0x09, 0x71, 0x1a, 0x75, 0xdd, 0x66, 0x88, 0x3b, 0x28, 0xe2, + 0x53, 0x49, 0x88, 0x6f, 0x3c, 0xaa, 0x19, 0xf5, 0xad, 0x05, 0x06, 0xd5, 0x9c, 0xe7, 0x5b, 0xbb, + 0xdc, 0x39, 0xa1, 0x8d, 0x14, 0x73, 0x8e, 0xe9, 0x2c, 0x6e, 0xbf, 0x29, 0x4c, 0x30, 0x55, 0x6c, + 0x76, 0x7a, 0x88, 0xbc, 0x5a, 0xec, 0xda, 0x99, 0xab, 0xc5, 0x5c, 0x37, 0x74, 0xba, 0x2c, 0xab, + 0x26, 0x9e, 0x6d, 0x23, 0x56, 0x25, 0x5a, 0x82, 0x17, 0x83, 0x37, 0x7b, 0x27, 0x5a, 0x5d, 0x83, + 0x85, 0x44, 0x29, 0xee, 0xf7, 0x2e, 0xe1, 0xbd, 0x50, 0xa8, 0x87, 0xcc, 0x21, 0xd0, 0x88, 0x31, + 0x20, 0x82, 0xd2, 0x5b, 0x01, 0x7d, 0x4b, 0x4f, 0x28, 0xbf, 0xb5, 0xcb, 0xe1, 0x66, 0x15, 0xec, + 0x80, 0xbb, 0x87, 0x14, 0xb9, 0x7a, 0xf8, 0xe0, 0xeb, 0xc7, 0xd1, 0x7c, 0x1e, 0xe4, 0x5e, 0x0a, + 0x7f, 0x05, 0x67, 0x3f, 0xe5, 0xfc, 0xa6, 0x9b, 0x78, 0xba, 0x6a, 0x3e, 0x46, 0xd1, 0x1d, 0x96, + 0x86, 0xf8, 0xa4, 0x79, 0xeb, 0x52, 0x17, 0x42, 0x01, 0x12, 0xf7, 0x2c, 0xdb, 0xa0, 0x31, 0x51, + 0xa9, 0xf0, 0x7c, 0x12, 0x3e, 0x18, 0x83, 0x67, 0xb1, 0xea, 0x97, 0xf6, 0xf6, 0x03, 0x8c, 0x6c, + 0x98, 0x0e, 0x8c, 0x75, 0x63, 0x7d, 0x9d, 0x49, 0xfc, 0xbd, 0x1b, 0xf4, 0x45, 0x54, 0x8e, 0x40, + 0x00, 0x8f, 0x08, 0xde, 0x49, 0x33, 0x59, 0xd5, 0x90, 0xf4, 0x3c, 0x93, 0x2e, 0x16, 0x60, 0x97, + 0xbb, 0x13, 0xea, 0xb8, 0xfc, 0xa6, 0xe4, 0xac, 0x28, 0xc7, 0x83, 0xcf, 0xb9, 0x0c, 0x85, 0xfa, + 0x00, 0x9e, 0x6b, 0x29, 0x1c, 0x71, 0x93, 0x22, 0x86, 0x75, 0x17, 0xd3, 0x07, 0x12, 0xcd, 0xad, + 0x77, 0x30, 0x85, 0x0f, 0xf6, 0xe9, 0x0c, 0x8c, 0x86, 0xe4, 0x41, 0xf6, 0x40, 0x8f, 0x61, 0x17, + 0x4c, 0xab, 0x5a, 0xa6, 0x98, 0x7b, 0xf3, 0xdd, 0x86, 0xbd, 0x64, 0x55, 0xcb, 0xdb, 0x77, 0x99, + 0xe7, 0xa1, 0x5f, 0xaf, 0x3a, 0xf5, 0xad, 0xd0, 0x55, 0x4b, 0xeb, 0x33, 0x33, 0x85, 0x63, 0x66, + 0xf7, 0x0e, 0x8c, 0xe8, 0x9c, 0xe8, 0x02, 0xba, 0xe0, 0x29, 0x0c, 0xf8, 0xb0, 0x00, 0x5e, 0xa6, + 0xb0, 0xea, 0x13, 0x38, 0x21, 0xaf, 0xa3, 0xe2, 0xf2, 0xd2, 0x37, 0xf7, 0xc7, 0x13, 0x77, 0xa4, + 0x20, 0x36, 0xbf, 0x10, 0xae, 0xe2, 0xb2, 0x8e, 0x72, 0x0e, 0x64, 0xcc, 0x58, 0x05, 0x35, 0x34, + 0x12, 0x5e, 0x90, 0xdb, 0xb9, 0x0d, 0x1f, 0x05, 0x35, 0x94, 0xed, 0x47, 0xdc, 0xf2, 0xc6, 0xec, + 0xb3, 0x52, 0x24, 0x37, 0xd0, 0xf2, 0xc6, 0xe2, 0x40, 0xb2, 0x97, 0x7d, 0x64, 0xb7, 0xb3, 0xed, + 0xfb, 0x48, 0x9f, 0xc5, 0x93, 0x72, 0x8c, 0xcf, 0x24, 0x47, 0xf9, 0xe1, 0x44, 0x14, 0x22, 0x6a, + 0xd2, 0xa7, 0x1e, 0x6d, 0x78, 0x70, 0x7e, 0xab, 0x20, 0xce, 0x28, 0xb1, 0x26, 0x0d, 0x07, 0x2e, + 0xfa, 0x42, 0x1c, 0x5d, 0x6b, 0x34, 0xdb, 0x66, 0x88, 0x63, 0x33, 0x6e, 0x92, 0x47, 0x8d, 0x71, + 0xc4, 0xea, 0x05, 0x0c, 0x17, 0x8a, 0xde, 0xd1, 0x90, 0x92, 0x71, 0xe8, 0x62, 0xc1, 0xad, 0x0a, + 0x0d, 0x6e, 0x65, 0x3f, 0xd4, 0xbd, 0x18, 0x4f, 0xb0, 0x6c, 0x95, 0x1a, 0xa6, 0x4e, 0xbd, 0x3e, + 0x1e, 0xf3, 0xf6, 0x0a, 0xc6, 0x3f, 0xf8, 0x3e, 0x89, 0x58, 0x03, 0xdf, 0x7c, 0x26, 0x86, 0x9b, + 0xdc, 0x64, 0x11, 0xbd, 0x0c, 0x01, 0xce, 0xdf, 0x1e, 0xd8, 0xcd, 0xc4, 0x16, 0xd8, 0x30, 0xd5, + 0x12, 0x86, 0x45, 0xbc, 0xb7, 0x46, 0xfd, 0xa1, 0xf7, 0xfd, 0x25, 0xaf, 0xbf, 0xaa, 0xd5, 0x4b, + 0xf7, 0x2c, 0xa3, 0xea, 0x48, 0xc5, 0xad, 0x9d, 0x86, 0x89, 0x9a, 0xce, 0x0e, 0x05, 0x35, 0xcb, + 0x32, 0x0b, 0x8e, 0x51, 0xd1, 0x6d, 0x47, 0xab, 0xd4, 0xa8, 0x0d, 0xee, 0xc8, 0x8f, 0xe3, 0xd7, + 0x7b, 0x96, 0x65, 0xae, 0xf2, 0x6f, 0xea, 0x4f, 0xf2, 0x67, 0xcd, 0x88, 0x31, 0x91, 0xc3, 0x35, + 0xd8, 0xc7, 0x37, 0x3f, 0x1a, 0x9b, 0x5c, 0xa8, 0xd3, 0x5e, 0x85, 0x1a, 0xed, 0xc6, 0xe8, 0x90, + 0x33, 0xa9, 0x93, 0x5e, 0x35, 0xf0, 0x8e, 0xa5, 0x1e, 0x42, 0xe3, 0xe6, 0xf9, 0x32, 0xa7, 0x55, + 0x6a, 0x9a, 0x51, 0xae, 0x72, 0x11, 0x7c, 0xbf, 0x13, 0x0d, 0x58, 0x64, 0x1f, 0xa4, 0x75, 0x13, + 0x9e, 0x71, 0x69, 0x74, 0x27, 0x01, 0xa9, 0x2c, 0x62, 0x17, 0xef, 0xe1, 0xeb, 0x4c, 0xf2, 0x19, + 0x58, 0x63, 0x6b, 0xd4, 0x3b, 0x00, 0x35, 0x37, 0x7b, 0x9d, 0xb8, 0x4f, 0xe4, 0xc7, 0x14, 0x38, + 0x12, 0x18, 0x98, 0x0a, 0x41, 0x8c, 0x6e, 0x17, 0x37, 0x74, 0x57, 0x5f, 0xf1, 0xfa, 0x7a, 0x2a, + 0xf9, 0x5a, 0x90, 0x73, 0xc5, 0x66, 0xc8, 0x32, 0xf3, 0x87, 0x7c, 0x43, 0xbb, 0x4d, 0xbc, 0xd3, + 0x0a, 0x22, 0x26, 0x3f, 0x0c, 0x7b, 0x1d, 0xcb, 0xd1, 0xcc, 0x48, 0x21, 0xa5, 0xd8, 0x42, 0x27, + 0x28, 0x96, 0x90, 0x88, 0xc8, 0xcf, 0x29, 0x70, 0x9c, 0x2b, 0x98, 0x1c, 0xab, 0x9d, 0x6d, 0xb1, + 0x7a, 0x14, 0x07, 0x59, 0x6d, 0xc9, 0x71, 0x05, 0x0e, 0x09, 0x82, 0x62, 0x39, 0xef, 0x92, 0x57, + 0xcf, 0x67, 0xf9, 0xc8, 0x91, 0x13, 0xa0, 0x5e, 0x42, 0x1d, 0x5d, 0xb4, 0xef, 0xd6, 0x1c, 0xbd, + 0x74, 0xb7, 0xe1, 0xdc, 0x5d, 0x67, 0x1d, 0xec, 0xd6, 0x81, 0xb0, 0xf3, 0xa8, 0xbc, 0x91, 0xc0, + 0xa8, 0xbc, 0x07, 0x61, 0xc0, 0xb0, 0x0b, 0x96, 0xfb, 0xbd, 0x60, 0x35, 0x1c, 0xf4, 0xaa, 0xc0, + 0x10, 0x20, 0xea, 0x73, 0x78, 0xeb, 0x13, 0xc2, 0x81, 0x97, 0x62, 0xc2, 0x5e, 0xcd, 0xa3, 0xef, + 0x9e, 0xd0, 0x11, 0x07, 0x4d, 0x30, 0x29, 0xea, 0x55, 0xdc, 0x08, 0x17, 0x74, 0x7d, 0xde, 0xb0, + 0xd9, 0xb5, 0x1b, 0x7a, 0xbc, 0x9e, 0x2d, 0x3c, 0x9e, 0xe9, 0xef, 0x29, 0xb8, 0x0d, 0xc6, 0x21, + 0x40, 0x1a, 0x9e, 0x05, 0x70, 0x0c, 0xbd, 0x2e, 0x9e, 0x8b, 0x94, 0xa3, 0x9d, 0xf9, 0x3e, 0xb7, + 0x85, 0xdd, 0xea, 0xe4, 0x61, 0x40, 0x78, 0xdf, 0xcd, 0x6b, 0x83, 0x44, 0xef, 0xc4, 0x33, 0xe0, + 0xaa, 0xa1, 0xd7, 0xe9, 0x68, 0xfd, 0x5a, 0x73, 0x68, 0x72, 0x17, 0xfa, 0x85, 0x51, 0x73, 0x4c, + 0xbc, 0x30, 0x98, 0x4a, 0x81, 0x72, 0x75, 0x75, 0x29, 0x0f, 0xdc, 0x9e, 0x39, 0xa6, 0xb0, 0x60, + 0x9e, 0x6e, 0x5c, 0x51, 0xb9, 0x50, 0x3e, 0xc3, 0x1f, 0xd0, 0x22, 0xfb, 0x88, 0x9d, 0x79, 0xf7, + 0xba, 0xae, 0x17, 0x4a, 0xf8, 0xbd, 0xb9, 0x9a, 0x94, 0x54, 0x5c, 0x0b, 0xbc, 0x63, 0xeb, 0xe1, + 0x46, 0xf5, 0x3a, 0x6e, 0x34, 0x18, 0xef, 0xbd, 0x6c, 0xd8, 0x15, 0xcd, 0x29, 0x7a, 0xee, 0x30, + 0x0f, 0x40, 0x7f, 0xa9, 0x61, 0x3b, 0x85, 0x75, 0xad, 0xe8, 0x58, 0x2c, 0x35, 0xa5, 0x23, 0x0f, + 0x6e, 0xd3, 0x02, 0x6d, 0x51, 0x7f, 0xab, 0x03, 0x86, 0x03, 0xd0, 0x44, 0x05, 0xdf, 0x99, 0x48, + 0x3e, 0x10, 0x93, 0xcc, 0x42, 0x9f, 0xb6, 0xa9, 0x19, 0xa9, 0x23, 0x20, 0x9a, 0x50, 0xe4, 0x02, + 0x74, 0x51, 0x23, 0x90, 0xc6, 0xc5, 0x67, 0x10, 0x64, 0x01, 0x06, 0x30, 0xd2, 0xbd, 0xb0, 0x61, + 0x99, 0x25, 0xcf, 0x23, 0x4b, 0xeb, 0xd7, 0x1f, 0x04, 0xbc, 0x65, 0x99, 0x25, 0xf2, 0x22, 0x0c, + 0xe9, 0x8f, 0x6a, 0x7a, 0xd1, 0x5d, 0xbf, 0x8c, 0x96, 0x6e, 0x79, 0x4c, 0x83, 0x1c, 0x94, 0x5a, + 0x1f, 0x32, 0x07, 0x50, 0x32, 0xd6, 0xf1, 0x01, 0x87, 0x5d, 0xbf, 0x4b, 0x9e, 0x80, 0x9a, 0x60, + 0xea, 0x8f, 0xe2, 0xde, 0x1e, 0x21, 0x66, 0xd4, 0xb6, 0x57, 0x80, 0x70, 0xd6, 0x2b, 0xe2, 0x2b, + 0xba, 0x32, 0x1f, 0x92, 0xc8, 0x14, 0xe0, 0x28, 0xf3, 0xa3, 0x6b, 0xc1, 0x31, 0xd4, 0x23, 0xb8, + 0xf8, 0xb1, 0xab, 0xeb, 0x28, 0xe6, 0x9a, 0xb3, 0x25, 0x4c, 0xd5, 0x2f, 0x67, 0x60, 0xb7, 0xa7, + 0x0b, 0x3b, 0x6c, 0xd1, 0xf9, 0xfc, 0x7f, 0xae, 0x4f, 0xea, 0x2f, 0x71, 0x6f, 0x3e, 0x76, 0x06, + 0x51, 0x8a, 0x55, 0xc8, 0xf2, 0x01, 0xe9, 0x0d, 0xba, 0x77, 0x74, 0xa9, 0xb0, 0x99, 0xc8, 0xf9, + 0xcf, 0xef, 0x59, 0x8b, 0x1e, 0x57, 0x6c, 0x43, 0x01, 0x93, 0xe8, 0xba, 0xd2, 0x86, 0xed, 0x18, + 0x45, 0x21, 0xdb, 0x0b, 0x30, 0xe8, 0xfb, 0x40, 0x08, 0x74, 0xba, 0x76, 0x1d, 0x6d, 0x3c, 0xfd, + 0xdb, 0x15, 0x61, 0x33, 0x35, 0xa8, 0x33, 0xcf, 0x7e, 0xa8, 0x36, 0xee, 0x60, 0x09, 0x63, 0x88, + 0x43, 0x2b, 0xd8, 0xa2, 0x55, 0x26, 0x4a, 0xde, 0x87, 0x27, 0xef, 0x01, 0x76, 0xfd, 0xff, 0x65, + 0xc3, 0xb1, 0x5e, 0xd2, 0x1a, 0x26, 0xdd, 0x26, 0x04, 0x23, 0x7f, 0xaa, 0xc0, 0x44, 0xf0, 0x0b, + 0x0e, 0xff, 0x3c, 0x8c, 0x54, 0x34, 0xdb, 0xd1, 0xeb, 0xfc, 0x8d, 0x52, 0xe7, 0x1b, 0xe9, 0x30, + 0x6b, 0x9f, 0xe5, 0xcd, 0xe4, 0x24, 0x8c, 0x97, 0xc4, 0x11, 0xc0, 0xd3, 0x9d, 0x3d, 0x85, 0x8c, + 0x35, 0xbf, 0x35, 0x41, 0x8e, 0xc0, 0x90, 0x5d, 0xb3, 0x1c, 0x4f, 0x67, 0xf6, 0x18, 0x34, 0xe8, + 0xb6, 0xfa, 0xba, 0x15, 0x5f, 0x9d, 0x39, 0xe1, 0xe9, 0xd6, 0xc9, 0xba, 0xb9, 0xad, 0xa2, 0x9b, + 0x3a, 0x8f, 0x76, 0x1f, 0x0f, 0xbe, 0xf3, 0x0b, 0x75, 0xab, 0x42, 0x59, 0xf2, 0xdc, 0x75, 0x6d, + 0xba, 0xbf, 0x0b, 0xfe, 0x9b, 0xcc, 0x01, 0xda, 0xc8, 0x5f, 0x5b, 0x79, 0x18, 0x55, 0x04, 0x16, + 0x9c, 0x93, 0xc4, 0xb3, 0x31, 0x3f, 0x5e, 0xdf, 0x32, 0x6c, 0xc7, 0xaa, 0x1b, 0x45, 0xe1, 0x6b, + 0x15, 0x2d, 0x8f, 0x2b, 0x95, 0x88, 0xc2, 0x41, 0xd3, 0x12, 0x87, 0x42, 0xdc, 0x0b, 0x0c, 0x72, + 0x97, 0x90, 0x7e, 0x90, 0xc9, 0x42, 0xf0, 0x21, 0x1a, 0x70, 0x3c, 0xbf, 0xd4, 0x3f, 0x52, 0x60, + 0x8c, 0x7e, 0x66, 0xc3, 0xba, 0xce, 0x95, 0x7b, 0x14, 0x24, 0x2f, 0x00, 0x61, 0xc3, 0x94, 0xeb, + 0x56, 0xa3, 0xe6, 0xba, 0xa3, 0xb6, 0x5e, 0x44, 0x15, 0x1f, 0xa1, 0x5f, 0x6e, 0xe2, 0x87, 0x15, + 0xbd, 0x48, 0xf6, 0x40, 0x4f, 0x45, 0x7b, 0x54, 0xd0, 0xca, 0x3a, 0x2a, 0x7c, 0x77, 0x45, 0x7b, + 0x34, 0x5b, 0xd6, 0xc9, 0x14, 0x8c, 0x19, 0xd5, 0xa2, 0xd9, 0x70, 0xe9, 0xd5, 0x5e, 0x2d, 0x6c, + 0xb0, 0x41, 0x30, 0xa4, 0x6f, 0x14, 0x3f, 0xe5, 0xb5, 0x57, 0x71, 0x74, 0x57, 0xf1, 0x78, 0x7f, + 0x71, 0x96, 0xa7, 0xaf, 0xbc, 0xf9, 0x61, 0x6c, 0xe7, 0x67, 0x74, 0xf5, 0x37, 0x14, 0xbc, 0xaf, + 0x17, 0x39, 0x16, 0x9a, 0x63, 0x98, 0x86, 0xb3, 0x25, 0xf5, 0x66, 0x59, 0x84, 0xdd, 0x8c, 0x3f, + 0x24, 0xc9, 0x75, 0x51, 0x5d, 0xc6, 0x65, 0x1c, 0xb1, 0x88, 0xf9, 0xca, 0x8f, 0x39, 0xe1, 0x46, + 0xf5, 0xd3, 0x19, 0x9f, 0x6e, 0x7a, 0x49, 0x14, 0xb9, 0x18, 0xb0, 0x29, 0x5a, 0xf1, 0x85, 0xef, + 0x40, 0xcb, 0xed, 0xb0, 0x09, 0x42, 0x5e, 0x86, 0x11, 0xce, 0x81, 0x98, 0xb0, 0x4c, 0xe8, 0x41, + 0x0b, 0x33, 0x78, 0xc5, 0x23, 0x0c, 0xf6, 0xf4, 0x18, 0x9e, 0x61, 0xc4, 0xc2, 0x3f, 0x91, 0x5b, + 0xd0, 0xef, 0x95, 0x58, 0x07, 0xd5, 0xb2, 0xe7, 0x24, 0xb5, 0x2c, 0x0f, 0x75, 0x21, 0x53, 0x91, + 0x48, 0x94, 0x33, 0xaa, 0x1a, 0x9f, 0x8a, 0x56, 0xef, 0xaa, 0x6a, 0x19, 0x83, 0xad, 0x03, 0x40, + 0xc2, 0x3c, 0x06, 0x9e, 0x7d, 0x12, 0xe5, 0xc5, 0x70, 0xa0, 0x50, 0x82, 0xaf, 0x3e, 0x0f, 0xe1, + 0x78, 0xe4, 0xd3, 0xff, 0x9c, 0x55, 0x2d, 0x19, 0x2c, 0x4a, 0x6c, 0xa7, 0x33, 0x8f, 0x7f, 0xbd, + 0x03, 0x0e, 0x85, 0x5e, 0xa5, 0x83, 0xe3, 0xfd, 0xe0, 0xc6, 0x77, 0xdc, 0x84, 0x01, 0xa7, 0x6e, + 0x94, 0xcb, 0x7a, 0xfd, 0x5e, 0xda, 0x07, 0x46, 0x1f, 0x60, 0xeb, 0x38, 0x8f, 0x23, 0xd0, 0x63, + 0xd8, 0xf4, 0x39, 0x9f, 0x7a, 0xa5, 0xbd, 0xb9, 0xfe, 0x77, 0xdf, 0x3a, 0xc0, 0x9b, 0xf2, 0xfc, + 0x8f, 0x40, 0x38, 0x48, 0x4f, 0x4c, 0x38, 0x48, 0x6f, 0x33, 0x1c, 0xe4, 0x33, 0x8a, 0x2f, 0xa8, + 0x2e, 0x51, 0x29, 0x44, 0xd2, 0xa7, 0x3f, 0x24, 0xe1, 0x4a, 0xaa, 0x90, 0x84, 0x20, 0x5e, 0x11, + 0x98, 0x70, 0x19, 0x0d, 0x08, 0x0f, 0xe0, 0x4f, 0x15, 0x54, 0xa9, 0xfe, 0x36, 0xbf, 0x08, 0x8b, + 0x00, 0x47, 0xba, 0x67, 0xa1, 0x33, 0x67, 0x88, 0x5d, 0xe4, 0xb8, 0x04, 0xd5, 0x9e, 0xf0, 0x09, + 0x0a, 0xea, 0xa2, 0x98, 0xb5, 0x1f, 0xf0, 0x8c, 0xcc, 0xb4, 0x28, 0x5c, 0x50, 0x71, 0xb1, 0xee, + 0x7f, 0xf7, 0x4c, 0xc7, 0xec, 0xef, 0x72, 0xcf, 0x32, 0x16, 0xc9, 0xfb, 0x8a, 0xe5, 0x6f, 0x2a, + 0x30, 0x1a, 0xfa, 0xf6, 0x54, 0x17, 0xbd, 0x7f, 0x99, 0x74, 0x04, 0x97, 0x49, 0xc8, 0xee, 0x75, + 0x46, 0x3c, 0x19, 0x2e, 0xe3, 0xc2, 0xc1, 0xd7, 0x64, 0xc7, 0xaa, 0x18, 0xc5, 0x1b, 0x8f, 0xf4, + 0x62, 0xc3, 0x55, 0xee, 0x05, 0x5d, 0x5f, 0x6e, 0x98, 0x8e, 0x51, 0x33, 0x0d, 0xbd, 0x2e, 0x25, + 0xd3, 0x4d, 0x7c, 0x42, 0x95, 0x41, 0x87, 0xd2, 0x9d, 0x03, 0xa8, 0x88, 0xd6, 0x34, 0xd3, 0xe8, + 0x01, 0x53, 0xcf, 0xf3, 0x5c, 0x6b, 0x2a, 0xd4, 0x15, 0x47, 0x7b, 0xa0, 0xdf, 0xac, 0x6b, 0xcd, + 0xe8, 0xcc, 0x49, 0xe8, 0x29, 0xbb, 0xbf, 0x75, 0x9d, 0x5f, 0x0f, 0xe1, 0x4f, 0xf5, 0x0b, 0x22, + 0x95, 0x3a, 0x04, 0x8a, 0x04, 0x5e, 0x81, 0x2e, 0xda, 0x19, 0x2f, 0x3f, 0x12, 0xb7, 0x54, 0x86, + 0x84, 0xc1, 0x33, 0x28, 0xb2, 0x02, 0xcd, 0x47, 0xbc, 0x02, 0x43, 0x24, 0x91, 0xd1, 0x25, 0xde, + 0xe1, 0x18, 0xae, 0x21, 0xdd, 0xf7, 0x5b, 0x5d, 0x45, 0x3b, 0x41, 0x7f, 0xcd, 0x36, 0x9c, 0x0d, + 0xab, 0x6e, 0xfc, 0x08, 0x0d, 0xe1, 0x0c, 0x71, 0x5c, 0xf7, 0x73, 0x5c, 0xf7, 0xce, 0x45, 0xc6, + 0x3f, 0x17, 0x1f, 0xc1, 0xeb, 0xa3, 0x28, 0xac, 0x38, 0x19, 0x67, 0xa0, 0x1b, 0xc3, 0x53, 0x99, + 0xa4, 0x9e, 0x45, 0x49, 0xed, 0x0e, 0x4b, 0x6a, 0xb1, 0xea, 0xe4, 0xb1, 0xb3, 0xb8, 0xb6, 0x0c, + 0x63, 0xb6, 0x5b, 0x12, 0xec, 0xba, 0xbc, 0x07, 0xe3, 0xa1, 0x45, 0xcc, 0x37, 0x61, 0xf7, 0xaf, + 0x14, 0xaa, 0x90, 0x86, 0xc8, 0x11, 0x0a, 0xc8, 0x90, 0xf3, 0x48, 0xe7, 0x6e, 0x8a, 0xc6, 0x96, + 0xb9, 0x29, 0x8f, 0x98, 0x2d, 0x84, 0x56, 0xcf, 0xa3, 0x27, 0x85, 0x6f, 0x53, 0xec, 0xf8, 0x2a, + 0xb5, 0x90, 0x34, 0x74, 0xa7, 0x02, 0x90, 0x62, 0xcd, 0xf4, 0xe0, 0xb1, 0x18, 0x95, 0xf2, 0xf9, + 0xd6, 0x39, 0xcd, 0x1c, 0x07, 0x87, 0x14, 0x95, 0x3d, 0x7c, 0x9f, 0x3d, 0x8f, 0x4d, 0xfb, 0x22, + 0xbf, 0xc6, 0xd6, 0x74, 0x48, 0x41, 0x42, 0xb3, 0xa6, 0xc3, 0x03, 0x18, 0xf4, 0x7d, 0x4a, 0x3e, + 0x03, 0x5c, 0x69, 0xb2, 0x9d, 0xc2, 0x60, 0x0a, 0x86, 0x4f, 0x8b, 0x78, 0xa1, 0xaa, 0x55, 0x59, + 0x36, 0xaa, 0x3c, 0xa9, 0x20, 0x39, 0x1b, 0xff, 0xe3, 0x22, 0x50, 0x28, 0x08, 0x85, 0x53, 0x71, + 0x29, 0xb0, 0x24, 0xe4, 0x7c, 0x2f, 0x5c, 0x18, 0x07, 0x62, 0xb0, 0x0b, 0x39, 0x7c, 0x4a, 0x84, + 0x54, 0x85, 0x3a, 0xe0, 0xf8, 0x1f, 0x87, 0x31, 0x96, 0xa4, 0x5f, 0x31, 0xaa, 0x22, 0xd9, 0x82, + 0x4b, 0xe5, 0x85, 0x96, 0x99, 0xfa, 0x5e, 0x96, 0x46, 0x4b, 0xc1, 0x51, 0x8e, 0x9d, 0x86, 0x3e, + 0x91, 0x7a, 0x4c, 0xc6, 0x61, 0xc4, 0xfd, 0xb7, 0x70, 0xbf, 0x6a, 0xd7, 0xf4, 0xa2, 0xb1, 0x6e, + 0xe8, 0xa5, 0x91, 0x5d, 0xa4, 0x07, 0x3a, 0x72, 0x8d, 0xad, 0x11, 0x85, 0xf4, 0x42, 0xe7, 0x8a, + 0x6e, 0x9a, 0x23, 0x99, 0x63, 0x2f, 0xc1, 0x78, 0x54, 0x5c, 0xb9, 0x8b, 0xc0, 0x03, 0x4b, 0x11, + 0x8f, 0xec, 0x22, 0x63, 0x30, 0xec, 0x1e, 0xdf, 0x5f, 0xb6, 0xea, 0xb6, 0xb3, 0x6a, 0xe5, 0x74, + 0xdb, 0x19, 0x51, 0x78, 0xa3, 0xfb, 0x6b, 0xd5, 0xa2, 0x9f, 0x46, 0x32, 0x33, 0xbf, 0x60, 0x41, + 0x17, 0x9d, 0x0e, 0xf2, 0xb6, 0x02, 0xbb, 0x97, 0x4e, 0x05, 0xdc, 0x86, 0x9c, 0x65, 0x3d, 0x20, + 0xd7, 0x5a, 0x96, 0x59, 0x49, 0xf6, 0x5a, 0xb2, 0xd7, 0xdb, 0x47, 0xc0, 0x44, 0xa2, 0x2e, 0xfc, + 0xc4, 0x37, 0xbf, 0xf3, 0xb9, 0xcc, 0x75, 0x72, 0x75, 0x3a, 0xa1, 0x9a, 0x53, 0xf3, 0xa6, 0x65, + 0x7a, 0xe9, 0x94, 0x20, 0x7f, 0xfa, 0xb1, 0xd0, 0xff, 0x27, 0xe4, 0x35, 0x05, 0x86, 0x97, 0x4e, + 0x09, 0x47, 0x90, 0xb2, 0x77, 0x41, 0x8a, 0xba, 0x28, 0xdf, 0x33, 0x7b, 0xb1, 0x1d, 0x50, 0x64, + 0xe9, 0x3a, 0x65, 0xe9, 0x22, 0x39, 0x9f, 0xc4, 0x92, 0x5d, 0xb3, 0x9c, 0x58, 0x66, 0xbe, 0xa8, + 0xc0, 0x58, 0x44, 0xb1, 0x20, 0x72, 0xb6, 0x25, 0x55, 0x91, 0xb5, 0x87, 0xb2, 0xe7, 0x52, 0xc3, + 0x21, 0x2b, 0x33, 0x94, 0x95, 0x17, 0xc8, 0xb1, 0x69, 0x89, 0xb2, 0x5c, 0x48, 0xe4, 0x5f, 0x29, + 0x40, 0xc2, 0xd5, 0x79, 0xc8, 0xc5, 0xb6, 0x4a, 0xfa, 0x30, 0xfa, 0x2f, 0x6d, 0xa3, 0x1c, 0x90, + 0x7a, 0x8d, 0xf2, 0x70, 0x81, 0x9c, 0x93, 0xe1, 0x61, 0xda, 0x0e, 0x53, 0xfe, 0x9a, 0x02, 0xa3, + 0x21, 0xfc, 0x12, 0xca, 0x15, 0x57, 0x02, 0x23, 0x7b, 0xb1, 0x1d, 0x50, 0xe4, 0xe6, 0x2a, 0xe5, + 0xe6, 0x3c, 0x39, 0xdb, 0x1e, 0x37, 0xe4, 0xcf, 0x14, 0x18, 0x09, 0x96, 0x1f, 0x22, 0xe7, 0xa5, + 0xf5, 0x23, 0xb0, 0xf7, 0x65, 0x2f, 0xb4, 0x01, 0x89, 0x9c, 0x5c, 0xa1, 0x9c, 0x9c, 0x23, 0x67, + 0xa4, 0x38, 0xd1, 0x83, 0x34, 0xff, 0xa5, 0x02, 0xc3, 0x81, 0x9a, 0x3e, 0xa4, 0xb5, 0x9e, 0x47, + 0x57, 0x44, 0xca, 0x9e, 0x4f, 0x0f, 0x98, 0xc6, 0x7e, 0x89, 0x86, 0x40, 0xe5, 0xa3, 0xe9, 0xc7, + 0x28, 0x9d, 0x27, 0x54, 0x2e, 0xc1, 0x12, 0x45, 0x24, 0x35, 0x59, 0x29, 0xe4, 0x12, 0x57, 0x0f, + 0x29, 0xa5, 0x5c, 0x82, 0xb5, 0x9c, 0xc8, 0xbf, 0x28, 0xb0, 0x3b, 0xb2, 0xce, 0x0c, 0xb9, 0x22, + 0x4f, 0x53, 0x44, 0xa1, 0xa2, 0xec, 0xd5, 0x76, 0xc1, 0x91, 0xaf, 0x3b, 0x94, 0xaf, 0x5b, 0x64, + 0x21, 0x1d, 0x5f, 0x5e, 0x5c, 0x3e, 0x23, 0xfd, 0x96, 0x02, 0x13, 0xd1, 0x05, 0x75, 0x48, 0x9b, + 0xa4, 0x0a, 0xe9, 0x5d, 0x6b, 0x1b, 0x1e, 0x79, 0x9d, 0xa3, 0xbc, 0x5e, 0x21, 0x97, 0xda, 0xe7, + 0xd5, 0x26, 0x5f, 0x51, 0x60, 0xc0, 0x5b, 0xa1, 0x88, 0x9c, 0x6e, 0x49, 0x56, 0x44, 0xe5, 0xa6, + 0xec, 0x99, 0x94, 0x50, 0xc8, 0x42, 0x8e, 0xb2, 0x70, 0x99, 0x5c, 0x94, 0x62, 0xc1, 0x57, 0x7b, + 0x69, 0xfa, 0x31, 0xfd, 0xf9, 0x84, 0x7c, 0x49, 0x81, 0x41, 0x5f, 0x8d, 0x25, 0x92, 0x8e, 0x18, + 0x21, 0x90, 0xb3, 0x69, 0xc1, 0x90, 0x89, 0x4b, 0x94, 0x89, 0x33, 0xe4, 0x54, 0x7a, 0x26, 0x6c, + 0xf2, 0x3b, 0x0a, 0xf4, 0x7b, 0x4a, 0x7e, 0x90, 0x53, 0xad, 0xb7, 0x8d, 0x50, 0xa9, 0x92, 0xec, + 0xe9, 0x74, 0x40, 0x48, 0xf7, 0x09, 0x4a, 0xf7, 0x31, 0x72, 0xb4, 0xa5, 0x0b, 0x83, 0x77, 0xcd, + 0xe4, 0x0b, 0x0a, 0x80, 0xa7, 0xbc, 0xcb, 0x4c, 0x8a, 0x61, 0x39, 0xa9, 0xa7, 0x52, 0xc1, 0x20, + 0xa5, 0x97, 0x29, 0xa5, 0x67, 0xc9, 0x69, 0x59, 0x4a, 0x7d, 0x6b, 0xf8, 0x4b, 0x0a, 0x0c, 0x07, + 0x2a, 0xab, 0x48, 0x6c, 0x22, 0xd1, 0x55, 0x61, 0x24, 0x36, 0x91, 0x98, 0x22, 0x2e, 0xea, 0x19, + 0xca, 0xc4, 0x34, 0x39, 0xde, 0x92, 0x89, 0xf5, 0x86, 0x69, 0x16, 0xf8, 0x9c, 0x7f, 0x2d, 0x5c, + 0x56, 0xe7, 0x6c, 0x4a, 0x1a, 0xe4, 0x3d, 0xc4, 0xe8, 0x5a, 0x2d, 0x29, 0x9c, 0x5d, 0x0f, 0xe9, + 0x3e, 0x19, 0x7c, 0x59, 0x81, 0x41, 0x9f, 0x23, 0x2d, 0xb1, 0x48, 0x23, 0x7d, 0xf6, 0xb3, 0x69, + 0xc1, 0xd2, 0xb8, 0x54, 0x94, 0x05, 0x8b, 0xc3, 0xfa, 0x18, 0x78, 0x43, 0x81, 0x91, 0x60, 0x8a, + 0xba, 0xc4, 0xd6, 0x1d, 0x53, 0xa3, 0x45, 0x62, 0xeb, 0x8e, 0xab, 0xf7, 0xa1, 0xde, 0xa6, 0x9c, + 0xdc, 0x20, 0x73, 0x72, 0x9c, 0xf8, 0xd6, 0xc2, 0xf4, 0x63, 0xdf, 0x15, 0xe8, 0x13, 0xf2, 0x1f, + 0x0a, 0x4c, 0xc6, 0x55, 0xfb, 0x20, 0xad, 0x0f, 0x7e, 0x2d, 0x0a, 0xc4, 0x64, 0x67, 0xb7, 0x81, + 0x01, 0xd9, 0xbd, 0x4f, 0xd9, 0xbd, 0x4b, 0x96, 0xdb, 0x61, 0x17, 0x59, 0x15, 0x2e, 0x18, 0x7f, + 0x42, 0x7f, 0x42, 0xbe, 0xe3, 0x1e, 0x60, 0x42, 0xe5, 0x7a, 0x64, 0x0e, 0x30, 0x71, 0xa5, 0x86, + 0x64, 0x0e, 0x30, 0xb1, 0xf5, 0x81, 0x52, 0xb3, 0x59, 0x58, 0xdb, 0xc2, 0x4c, 0xd4, 0x44, 0xf9, + 0x7e, 0x4d, 0x81, 0x91, 0x60, 0x7d, 0x60, 0x09, 0xb5, 0x8d, 0xa9, 0x5a, 0x9c, 0xbd, 0xd0, 0x06, + 0x24, 0x32, 0x78, 0x91, 0x32, 0x78, 0x9a, 0xcc, 0x24, 0x31, 0xc8, 0x45, 0x18, 0xe0, 0xe2, 0xbb, + 0x0a, 0xec, 0x6d, 0xae, 0x87, 0xd5, 0xba, 0x56, 0xb5, 0x0d, 0xbd, 0xfa, 0x54, 0x57, 0xa1, 0xbc, + 0xbc, 0x1c, 0x4e, 0x6e, 0x41, 0x62, 0x3d, 0xfe, 0x2d, 0xaa, 0xa5, 0x3f, 0xcd, 0x50, 0x52, 0x2d, + 0x23, 0x6b, 0xbf, 0x48, 0xaa, 0x65, 0x74, 0xc5, 0x17, 0xb9, 0x93, 0x0f, 0xdb, 0x79, 0x83, 0xd9, + 0x94, 0x3e, 0xf3, 0xf9, 0x6f, 0x0a, 0x4c, 0xc6, 0x95, 0x97, 0x91, 0xb0, 0x33, 0x2d, 0xea, 0xdb, + 0x48, 0xd8, 0x99, 0x56, 0xb5, 0x6d, 0xd4, 0x25, 0xca, 0xe9, 0x02, 0x99, 0x97, 0xbc, 0xa3, 0x4a, + 0xe6, 0xf7, 0x5b, 0x0a, 0x8c, 0x45, 0xdc, 0x88, 0x91, 0x4b, 0x29, 0x08, 0x0d, 0xed, 0x7d, 0x97, + 0xdb, 0x03, 0x46, 0x06, 0xe7, 0x29, 0x83, 0x57, 0xc9, 0x65, 0x49, 0x06, 0xa3, 0xf7, 0xc1, 0x7f, + 0x55, 0x60, 0x22, 0xba, 0xca, 0x80, 0xc4, 0x81, 0x28, 0xb1, 0xcc, 0x85, 0xc4, 0x81, 0x28, 0xb9, + 0xbc, 0x81, 0xfa, 0x61, 0xca, 0xe1, 0x6d, 0xb2, 0x98, 0x86, 0xc3, 0xe4, 0xf5, 0xf8, 0xb3, 0x19, + 0xd8, 0x9f, 0x5c, 0xdc, 0x80, 0x2c, 0xa4, 0xdc, 0xe3, 0xe2, 0xd8, 0xbf, 0xb9, 0x6d, 0x3c, 0x38, + 0x0d, 0x1f, 0xa3, 0xd3, 0x70, 0x9f, 0xac, 0xb4, 0x3f, 0x0d, 0xf1, 0xfb, 0xe6, 0x7f, 0xfb, 0x16, + 0x72, 0x60, 0xf7, 0xbc, 0x9e, 0x56, 0x41, 0x43, 0x7b, 0xe8, 0xec, 0x36, 0x30, 0x6c, 0x8b, 0x7d, + 0xc9, 0xfd, 0xf4, 0x7f, 0x14, 0x38, 0x10, 0xd4, 0xc2, 0xe0, 0x7e, 0xf4, 0xd4, 0xd7, 0x41, 0xda, + 0x19, 0x48, 0xb5, 0x43, 0xfd, 0x89, 0x02, 0xa3, 0xa1, 0x7c, 0x76, 0x89, 0x8b, 0xd2, 0xb8, 0xca, + 0x14, 0x12, 0x17, 0xa5, 0xb1, 0xe9, 0xf3, 0xea, 0x59, 0xca, 0xe9, 0x09, 0x32, 0x25, 0x6b, 0xb4, + 0x91, 0xdc, 0x6f, 0x28, 0x30, 0x12, 0xaa, 0xa8, 0x70, 0x3e, 0x35, 0x21, 0xf2, 0x7e, 0x44, 0x5c, + 0x5a, 0xbd, 0xdc, 0x0d, 0x48, 0x98, 0x03, 0x9f, 0x4d, 0xfe, 0xae, 0x02, 0x7b, 0x62, 0x12, 0xe1, + 0x25, 0x5e, 0x7f, 0x92, 0xd3, 0xf0, 0xb3, 0xd7, 0xdb, 0x47, 0x80, 0x2c, 0x2e, 0x52, 0x16, 0xe7, + 0xc8, 0x6c, 0x2a, 0x16, 0xb9, 0xc9, 0xf1, 0x71, 0xfa, 0xd7, 0x0a, 0x8c, 0x47, 0x65, 0x2e, 0x92, + 0xcb, 0x29, 0x1c, 0xd3, 0x50, 0x0a, 0x7f, 0xf6, 0x4a, 0x9b, 0xd0, 0x69, 0xae, 0x27, 0x44, 0x43, + 0x70, 0x41, 0xfd, 0xbe, 0x02, 0x63, 0xfc, 0xfe, 0xdc, 0x93, 0x3f, 0x29, 0x71, 0x13, 0x14, 0x4e, + 0xc4, 0x94, 0xb8, 0x09, 0x8a, 0x48, 0xd1, 0x94, 0xbb, 0x09, 0xaa, 0x50, 0xc0, 0x02, 0xcd, 0x8a, + 0x24, 0xbf, 0xa9, 0x40, 0x9f, 0xc8, 0xbb, 0x24, 0x27, 0x5b, 0x8e, 0x1a, 0x4c, 0xde, 0xcc, 0xce, + 0xa4, 0x01, 0x41, 0x32, 0x8f, 0x53, 0x32, 0x9f, 0x23, 0x47, 0x92, 0xc8, 0xac, 0x09, 0xaa, 0xde, + 0x54, 0x60, 0x2c, 0x22, 0xf5, 0x9f, 0xa4, 0x79, 0x68, 0x0a, 0xd1, 0x7d, 0xb9, 0x3d, 0x60, 0xe4, + 0xe0, 0x16, 0xe5, 0x20, 0x47, 0xae, 0x27, 0xba, 0xd3, 0x4d, 0xfd, 0x10, 0xcc, 0x84, 0xb4, 0xe6, + 0xdf, 0x15, 0xc8, 0xc6, 0xd7, 0x19, 0x20, 0xb9, 0x36, 0xc8, 0x0c, 0x14, 0x73, 0xc8, 0xce, 0x6d, + 0x0b, 0x47, 0x9a, 0xc5, 0x1f, 0xcb, 0xa6, 0x6f, 0xf1, 0xff, 0x62, 0x06, 0x0e, 0x4b, 0xe4, 0xf9, + 0x93, 0xdb, 0x29, 0xe8, 0x6e, 0x55, 0xd1, 0x22, 0xbb, 0xb4, 0x33, 0xc8, 0x70, 0x36, 0x56, 0xe8, + 0x6c, 0x2c, 0x93, 0xdb, 0x89, 0x96, 0x42, 0x84, 0x47, 0xc9, 0xcd, 0xcb, 0xdf, 0x29, 0x30, 0x16, + 0x91, 0xf9, 0x2f, 0xa1, 0xe7, 0xf1, 0x65, 0x0b, 0x24, 0xf4, 0x3c, 0xa1, 0x66, 0x81, 0x7a, 0x83, + 0xf2, 0x79, 0x8d, 0x5c, 0x49, 0x94, 0xba, 0x28, 0x3c, 0xe4, 0x29, 0xc5, 0xe4, 0xe3, 0xec, 0xdb, + 0x0a, 0xec, 0x89, 0x29, 0x0e, 0x20, 0xb1, 0xb1, 0x25, 0x57, 0x39, 0x90, 0xd8, 0xd8, 0x5a, 0x94, + 0x38, 0x90, 0x7d, 0xbd, 0x70, 0x91, 0xc4, 0xb2, 0xf8, 0x8e, 0x02, 0x13, 0xd1, 0x55, 0x04, 0x24, + 0xfc, 0xc8, 0xc4, 0x62, 0x08, 0x12, 0x7e, 0x64, 0x72, 0x25, 0x04, 0x39, 0x6b, 0x15, 0x92, 0x22, + 0x56, 0xaf, 0x0a, 0x09, 0x32, 0xa6, 0xfc, 0x81, 0x84, 0x20, 0x93, 0x6b, 0xc1, 0x48, 0x08, 0xb2, + 0x45, 0xe5, 0x05, 0x39, 0x41, 0xb2, 0xd8, 0x52, 0x9e, 0xa4, 0x10, 0x75, 0xd3, 0x36, 0x1a, 0x4e, + 0xd0, 0x96, 0xbc, 0x61, 0x8a, 0xa8, 0x2b, 0x20, 0xe1, 0x17, 0xc7, 0x96, 0x07, 0x50, 0xcf, 0x51, + 0x86, 0x4e, 0x92, 0xe9, 0x24, 0x86, 0x22, 0x32, 0xb3, 0xc9, 0xdf, 0x28, 0x30, 0x79, 0xaf, 0x99, + 0xeb, 0xfd, 0xbe, 0x60, 0x46, 0x2a, 0xb6, 0xc3, 0x9b, 0x05, 0x1f, 0x64, 0xea, 0x1b, 0x3c, 0x47, + 0xc8, 0x5f, 0x24, 0x40, 0xc2, 0x40, 0xc6, 0x97, 0x3e, 0x90, 0x30, 0x90, 0x09, 0x35, 0x11, 0xd4, + 0x0b, 0x94, 0xa7, 0x53, 0xe4, 0xa4, 0xb4, 0x80, 0x78, 0x2a, 0x3f, 0x79, 0x5b, 0x81, 0x89, 0xe8, + 0xdc, 0x6d, 0x09, 0x8b, 0x91, 0x98, 0x35, 0x2e, 0x61, 0x31, 0x92, 0x93, 0xc6, 0xd5, 0x9b, 0x94, + 0xad, 0x59, 0x72, 0x2d, 0x89, 0x2d, 0x5f, 0x2a, 0xb5, 0x37, 0x89, 0xdc, 0x13, 0x29, 0xe1, 0x8a, + 0x2c, 0x22, 0x73, 0x5a, 0x42, 0x64, 0xf1, 0xb9, 0xde, 0x12, 0x22, 0x4b, 0x48, 0x02, 0x97, 0x13, + 0x59, 0x64, 0x9a, 0x38, 0x79, 0x5d, 0x81, 0xd1, 0x50, 0xbe, 0xaf, 0xc4, 0x72, 0x8a, 0x4b, 0x05, + 0x97, 0x58, 0x4e, 0xb1, 0xe9, 0xc5, 0x72, 0xf7, 0x80, 0xe1, 0x04, 0xe4, 0xe9, 0xc7, 0x9e, 0xe4, + 0xf3, 0x27, 0xe4, 0x1f, 0x15, 0xd8, 0x13, 0x93, 0x02, 0x2b, 0x61, 0xd1, 0x93, 0xd3, 0x8f, 0x25, + 0x2c, 0x7a, 0x8b, 0xec, 0x5b, 0x39, 0x9b, 0xc1, 0xc3, 0x6e, 0x23, 0x12, 0x74, 0xc9, 0x3f, 0x29, + 0xb0, 0x37, 0x36, 0xcd, 0x95, 0xcc, 0xa6, 0xd1, 0xa4, 0xc8, 0x34, 0xdc, 0x6c, 0x6e, 0x3b, 0x28, + 0xd2, 0x44, 0x1e, 0xf8, 0x54, 0x92, 0x96, 0x74, 0x70, 0x8f, 0x70, 0x36, 0xf9, 0xbc, 0x02, 0x43, + 0xfe, 0xf4, 0xd9, 0xe4, 0x73, 0x5c, 0x64, 0x12, 0x6e, 0xf2, 0x39, 0x2e, 0x3a, 0x3b, 0x57, 0x3d, + 0x4d, 0xc9, 0x9e, 0x22, 0x2f, 0x24, 0x1e, 0x37, 0x0d, 0xc7, 0x2a, 0xb0, 0xbc, 0x57, 0x83, 0x12, + 0xf7, 0x86, 0x82, 0xf5, 0x7e, 0x42, 0x29, 0xae, 0x12, 0x2b, 0x29, 0x2e, 0xb9, 0x56, 0x62, 0x25, + 0xc5, 0x66, 0xd4, 0xca, 0x05, 0xe0, 0x30, 0x16, 0x84, 0x2f, 0x34, 0xfd, 0xd8, 0x97, 0xcb, 0x4b, + 0xbd, 0xf7, 0x89, 0xe8, 0x94, 0x59, 0x09, 0x73, 0x9e, 0x98, 0xae, 0x2b, 0x61, 0xce, 0x93, 0x73, + 0x75, 0xe5, 0x2e, 0x36, 0x36, 0x04, 0x8e, 0x82, 0x2f, 0xb1, 0x97, 0x9e, 0x4b, 0x22, 0x4a, 0xab, + 0x48, 0xd8, 0xf0, 0xf8, 0x6a, 0x2e, 0x12, 0x36, 0x3c, 0xa1, 0x9a, 0x8b, 0xdc, 0xb9, 0xc4, 0x5b, + 0xef, 0xa5, 0x60, 0xad, 0xe3, 0x06, 0x6c, 0x7b, 0x76, 0xa7, 0x7f, 0x56, 0x60, 0x6f, 0x6c, 0x15, + 0x17, 0x09, 0xe3, 0xd0, 0xaa, 0x54, 0x8c, 0x84, 0x71, 0x68, 0x59, 0x44, 0x46, 0x9d, 0xa5, 0xbc, + 0x5e, 0x22, 0x17, 0x12, 0x9d, 0xda, 0x08, 0x46, 0x0b, 0xa2, 0x7c, 0xd5, 0x6b, 0x0a, 0x8c, 0x04, + 0x53, 0x7f, 0x25, 0xae, 0x49, 0x63, 0x12, 0x9a, 0xb3, 0x17, 0xda, 0x80, 0x4c, 0xc3, 0x4c, 0xf3, + 0x7f, 0x58, 0x44, 0x70, 0xdf, 0x19, 0xe4, 0xab, 0x0a, 0x8c, 0x47, 0x64, 0xd2, 0xca, 0x84, 0x8b, + 0x45, 0x65, 0xfe, 0x4a, 0x44, 0xa2, 0x44, 0xe6, 0xfe, 0xca, 0x3d, 0x84, 0xaf, 0x51, 0x50, 0x9e, + 0xd4, 0x2d, 0xee, 0xad, 0x7f, 0x25, 0x03, 0x87, 0x5a, 0xe6, 0x74, 0x92, 0xc5, 0xd4, 0x0f, 0x08, + 0x71, 0xc9, 0xc2, 0xd9, 0x17, 0x77, 0x02, 0x15, 0x32, 0xfe, 0x43, 0x94, 0xf1, 0x97, 0xc9, 0xfd, + 0x74, 0xef, 0x52, 0xc5, 0x26, 0xc2, 0xc4, 0x87, 0x89, 0xef, 0x2b, 0xa0, 0xb6, 0xce, 0xb3, 0x23, + 0x2f, 0x4a, 0x2a, 0xa1, 0x44, 0xee, 0x5f, 0xf6, 0xf6, 0x8e, 0xe0, 0x4a, 0xe3, 0xb2, 0x68, 0x14, + 0x13, 0x7b, 0xa7, 0x29, 0xb8, 0x3b, 0x7b, 0x33, 0xe9, 0x8f, 0xfc, 0x85, 0x02, 0x23, 0xc1, 0xac, + 0x3d, 0x99, 0xe8, 0xe2, 0xe8, 0x1c, 0x41, 0x99, 0xe8, 0xe2, 0x98, 0x14, 0x41, 0xb9, 0x78, 0x31, + 0x8d, 0xdd, 0x71, 0xd9, 0x2e, 0x38, 0xcb, 0x52, 0x9b, 0x7e, 0x8c, 0x99, 0x77, 0x4f, 0xc8, 0x9b, + 0x0a, 0x90, 0x70, 0x22, 0x99, 0x44, 0x1c, 0x44, 0x6c, 0x06, 0xa0, 0x44, 0x1c, 0x44, 0x7c, 0x9e, + 0x9f, 0x5c, 0xd0, 0x15, 0xa6, 0xda, 0x79, 0x11, 0x70, 0x96, 0xea, 0x4f, 0x3c, 0xcc, 0xbd, 0xa1, + 0xc0, 0x58, 0x44, 0xee, 0x1e, 0x69, 0x87, 0xc2, 0x14, 0x1b, 0x63, 0x42, 0xba, 0xa0, 0xdc, 0x0d, + 0x48, 0x04, 0x7f, 0x76, 0x93, 0x41, 0x1a, 0xe3, 0xe7, 0xcf, 0x5e, 0x3b, 0x23, 0xb9, 0x3e, 0xfc, + 0x99, 0x80, 0x12, 0x96, 0x35, 0x32, 0x0d, 0x50, 0x2e, 0xc6, 0x0f, 0x2d, 0x08, 0x7a, 0xfb, 0xbe, + 0x1d, 0xe2, 0x0f, 0x5d, 0x8f, 0xd8, 0x97, 0xdf, 0x47, 0x52, 0x92, 0x92, 0x22, 0x19, 0x27, 0x3a, + 0x91, 0x50, 0x3d, 0x45, 0x79, 0x38, 0x4e, 0x3e, 0x24, 0xcf, 0x83, 0x4d, 0xfe, 0x9c, 0x3e, 0x67, + 0xfa, 0x53, 0xd5, 0xa4, 0x9e, 0x33, 0x23, 0x13, 0xff, 0xa4, 0x9e, 0x33, 0xa3, 0x93, 0xff, 0xe4, + 0x44, 0x10, 0x4e, 0xcf, 0x13, 0xc1, 0xdc, 0x5f, 0xa3, 0xaf, 0xcb, 0x81, 0xa4, 0x3b, 0x92, 0x9e, + 0xa0, 0x54, 0xaf, 0xcb, 0x31, 0x99, 0x84, 0x72, 0xb7, 0x68, 0x11, 0xb9, 0x86, 0xb9, 0x8d, 0xaf, + 0xbf, 0xbd, 0x5f, 0x79, 0xfd, 0xed, 0xfd, 0xca, 0xb7, 0xdf, 0xde, 0xaf, 0xfc, 0xfc, 0x3b, 0xfb, + 0x77, 0xbd, 0xfe, 0xce, 0xfe, 0x5d, 0x7f, 0xff, 0xce, 0xfe, 0x5d, 0xaf, 0xdc, 0x29, 0x1b, 0xce, + 0x46, 0x63, 0x6d, 0xaa, 0x68, 0x55, 0xa6, 0x17, 0x39, 0xd2, 0x25, 0x6d, 0xcd, 0x6e, 0x0e, 0x71, + 0xbc, 0x68, 0xd5, 0x75, 0xef, 0xcf, 0x0d, 0xcd, 0xa8, 0xe2, 0xeb, 0x9b, 0xdd, 0x1c, 0xdf, 0xd9, + 0xaa, 0xe9, 0xf6, 0x5a, 0x77, 0xad, 0x6e, 0x39, 0xd6, 0xa9, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, + 0xe7, 0x6c, 0x75, 0xee, 0xb4, 0x81, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/chain/exchange/types/v2/authz_exchange_generic.go b/chain/exchange/types/v2/authz_exchange_generic.go index f3756ad7..88c51f08 100644 --- a/chain/exchange/types/v2/authz_exchange_generic.go +++ b/chain/exchange/types/v2/authz_exchange_generic.go @@ -108,29 +108,26 @@ func (a GenericExchangeAuthorization) MsgTypeURL() string { // the incoming message type, and it would not have been created if the // message type was not allowed. func (a GenericExchangeAuthorization) Accept(ctx context.Context, _ sdk.Msg) (authz.AcceptResponse, error) { - newSpendLimit := a.SpendLimit + if noLimit := a.SpendLimit == nil; noLimit { + return authz.AcceptResponse{Accept: true, Updated: NewGenericExchangeAuthorization(a.Msg, nil)}, nil + } + + hold, ok := getHold(ctx) + if !ok { + return authz.AcceptResponse{Accept: false}, nil + } - // SpendLimit is optional, so we only check it if it is set - if a.SpendLimit != nil { - hold, ok := getHold(ctx) - if !ok { + limit := a.SpendLimit + for _, coin := range hold { + allowance := limit.AmountOf(coin.Denom) + if allowance.LT(coin.Amount) { return authz.AcceptResponse{Accept: false}, nil } - for _, coin := range hold { - allowed := a.SpendLimit.AmountOf(coin.Denom) - if allowed.LT(coin.Amount) { - return authz.AcceptResponse{Accept: false}, nil - } - newSpendLimit = a.SpendLimit.Sub(sdk.NewCoin(coin.Denom, coin.Amount)) - } - } - updatedAuthorization := NewGenericExchangeAuthorization( - a.Msg, - newSpendLimit, - ) + limit = limit.Sub(sdk.NewCoin(coin.Denom, coin.Amount)) + } - return authz.AcceptResponse{Accept: true, Updated: updatedAuthorization}, nil + return authz.AcceptResponse{Accept: true, Updated: NewGenericExchangeAuthorization(a.Msg, limit)}, nil } // getHold returns the hold from the context. Hold is the amount of coins that diff --git a/chain/exchange/types/v2/codec.go b/chain/exchange/types/v2/codec.go index f90076d9..ca8f8b9d 100644 --- a/chain/exchange/types/v2/codec.go +++ b/chain/exchange/types/v2/codec.go @@ -35,6 +35,10 @@ func init() { // RegisterLegacyAminoCodec registers the necessary x/exchange interfaces and concrete types // on the provided LegacyAmino codec. These types are used for Amino JSON serialization. func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + // Register oneof interfaces + cdc.RegisterInterface((*isOpenNotionalCap_Cap)(nil), nil) + cdc.RegisterInterface((*isFullDerivativeMarket_Info)(nil), nil) + cdc.RegisterConcrete(&MsgDeposit{}, "exchange/v2/MsgDeposit", nil) cdc.RegisterConcrete(&MsgWithdraw{}, "exchange/v2/MsgWithdraw", nil) cdc.RegisterConcrete(&MsgInstantSpotMarketLaunch{}, "exchange/v2/MsgInstantSpotMarketLaunch", nil) @@ -54,7 +58,9 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgSubaccountTransfer{}, "exchange/v2/MsgSubaccountTransfer", nil) cdc.RegisterConcrete(&MsgExternalTransfer{}, "exchange/v2/MsgExternalTransfer", nil) cdc.RegisterConcrete(&MsgIncreasePositionMargin{}, "exchange/v2/MsgIncreasePositionMargin", nil) + cdc.RegisterConcrete(&MsgDecreasePositionMargin{}, "exchange/v2/MsgDecreasePositionMargin", nil) cdc.RegisterConcrete(&MsgLiquidatePosition{}, "exchange/v2/MsgLiquidatePosition", nil) + cdc.RegisterConcrete(&MsgEmergencySettleMarket{}, "exchange/v2/MsgEmergencySettleMarket", nil) cdc.RegisterConcrete(&MsgOffsetPosition{}, "exchange/v2/MsgOffsetPosition", nil) cdc.RegisterConcrete(&MsgBatchUpdateOrders{}, "exchange/v2/MsgBatchUpdateOrders", nil) cdc.RegisterConcrete(&MsgPrivilegedExecuteContract{}, "exchange/v2/MsgPrivilegedExecuteContract", nil) @@ -67,6 +73,26 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgUpdateParams{}, "exchange/v2/MsgUpdateParams", nil) cdc.RegisterConcrete(&MsgUpdateSpotMarket{}, "exchange/v2/MsgUpdateSpotMarket", nil) cdc.RegisterConcrete(&MsgUpdateDerivativeMarket{}, "exchange/v2/MsgUpdateDerivativeMarket", nil) + cdc.RegisterConcrete(&MsgAuthorizeStakeGrants{}, "exchange/v2/MsgAuthorizeStakeGrants", nil) + cdc.RegisterConcrete(&MsgActivateStakeGrant{}, "exchange/v2/MsgActivateStakeGrant", nil) + cdc.RegisterConcrete(&MsgCancelPostOnlyMode{}, "exchange/v2/MsgCancelPostOnlyMode", nil) + cdc.RegisterConcrete(&MsgActivatePostOnlyMode{}, "exchange/v2/MsgActivatePostOnlyMode", nil) + cdc.RegisterConcrete(&MsgBatchExchangeModification{}, "exchange/v2/MsgBatchExchangeModification", nil) + cdc.RegisterConcrete(&MsgSpotMarketLaunch{}, "exchange/v2/MsgSpotMarketLaunch", nil) + cdc.RegisterConcrete(&MsgPerpetualMarketLaunch{}, "exchange/v2/MsgPerpetualMarketLaunch", nil) + cdc.RegisterConcrete(&MsgExpiryFuturesMarketLaunch{}, "exchange/v2/MsgExpiryFuturesMarketLaunch", nil) + cdc.RegisterConcrete(&MsgBinaryOptionsMarketLaunch{}, "exchange/v2/MsgBinaryOptionsMarketLaunch", nil) + cdc.RegisterConcrete(&MsgBatchCommunityPoolSpend{}, "exchange/v2/MsgBatchCommunityPoolSpend", nil) + cdc.RegisterConcrete(&MsgSpotMarketParamUpdate{}, "exchange/v2/MsgSpotMarketParamUpdate", nil) + cdc.RegisterConcrete(&MsgDerivativeMarketParamUpdate{}, "exchange/v2/MsgDerivativeMarketParamUpdate", nil) + cdc.RegisterConcrete(&MsgBinaryOptionsMarketParamUpdate{}, "exchange/v2/MsgBinaryOptionsMarketParamUpdate", nil) + cdc.RegisterConcrete(&MsgMarketForcedSettlement{}, "exchange/v2/MsgMarketForcedSettlement", nil) + cdc.RegisterConcrete(&MsgTradingRewardCampaignLaunch{}, "exchange/v2/MsgTradingRewardCampaignLaunch", nil) + cdc.RegisterConcrete(&MsgExchangeEnable{}, "exchange/v2/MsgExchangeEnable", nil) + cdc.RegisterConcrete(&MsgTradingRewardCampaignUpdate{}, "exchange/v2/MsgTradingRewardCampaignUpdate", nil) + cdc.RegisterConcrete(&MsgTradingRewardPendingPointsUpdate{}, "exchange/v2/MsgTradingRewardPendingPointsUpdate", nil) + cdc.RegisterConcrete(&MsgFeeDiscount{}, "exchange/v2/MsgFeeDiscount", nil) + cdc.RegisterConcrete(&MsgAtomicMarketOrderFeeMultiplierSchedule{}, "exchange/v2/MsgAtomicMarketOrderFeeMultiplierSchedule", nil) cdc.RegisterConcrete(&ExchangeEnableProposal{}, "exchange/v2/ExchangeEnableProposal", nil) cdc.RegisterConcrete(&BatchExchangeModificationProposal{}, "exchange/v2/BatchExchangeModificationProposal", nil) @@ -93,6 +119,8 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { "exchange/v2/AtomicMarketOrderFeeMultiplierScheduleProposal", nil, ) + cdc.RegisterConcrete(&MsgReclaimLockedFunds{}, "exchange/v2/MsgReclaimLockedFunds", nil) + cdc.RegisterConcrete(&DenomMinNotionalProposal{}, "exchange/v2/DenomMinNotionalProposal", nil) cdc.RegisterConcrete(&CreateSpotLimitOrderAuthz{}, "exchange/v2/CreateSpotLimitOrderAuthz", nil) cdc.RegisterConcrete(&CreateSpotMarketOrderAuthz{}, "exchange/v2/CreateSpotMarketOrderAuthz", nil) @@ -108,6 +136,14 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&GenericExchangeAuthorization{}, "exchange/v2/GenericExchangeAuthorization", nil) cdc.RegisterConcrete(&Params{}, "exchange/v2/Params", nil) + + // Register oneof implementations for OpenNotionalCap + cdc.RegisterConcrete(&OpenNotionalCap_Uncapped{}, "exchange/v2/OpenNotionalCapUncapped", nil) + cdc.RegisterConcrete(&OpenNotionalCap_Capped{}, "exchange/v2/OpenNotionalCapCapped", nil) + + // Register oneof implementations for FullDerivativeMarket + cdc.RegisterConcrete(&FullDerivativeMarket_PerpetualInfo{}, "exchange/v2/FullDerivativeMarketPerpetualInfo", nil) + cdc.RegisterConcrete(&FullDerivativeMarket_FuturesInfo{}, "exchange/v2/FullDerivativeMarketFuturesInfo", nil) } func RegisterInterfaces(registry types.InterfaceRegistry) { @@ -131,7 +167,9 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { &MsgSubaccountTransfer{}, &MsgExternalTransfer{}, &MsgIncreasePositionMargin{}, + &MsgDecreasePositionMargin{}, &MsgLiquidatePosition{}, + &MsgEmergencySettleMarket{}, &MsgOffsetPosition{}, &MsgBatchUpdateOrders{}, &MsgPrivilegedExecuteContract{}, @@ -144,6 +182,11 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { &MsgUpdateParams{}, &MsgUpdateSpotMarket{}, &MsgUpdateDerivativeMarket{}, + &MsgAuthorizeStakeGrants{}, + &MsgActivateStakeGrant{}, + &MsgCancelPostOnlyMode{}, + &MsgActivatePostOnlyMode{}, + &MsgReclaimLockedFunds{}, ) registry.RegisterImplementations( diff --git a/chain/exchange/types/v2/common_utils.go b/chain/exchange/types/v2/common_utils.go index 3b888332..57f7e359 100644 --- a/chain/exchange/types/v2/common_utils.go +++ b/chain/exchange/types/v2/common_utils.go @@ -2,9 +2,10 @@ package v2 import ( "cosmossdk.io/math" - "github.com/InjectiveLabs/sdk-go/chain/exchange/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/ethereum/go-ethereum/common" + + "github.com/InjectiveLabs/sdk-go/chain/exchange/types" ) type SpotLimitOrderDelta struct { diff --git a/chain/exchange/types/v2/deposit.go b/chain/exchange/types/v2/deposit.go index aad9a3f6..5edd86c9 100644 --- a/chain/exchange/types/v2/deposit.go +++ b/chain/exchange/types/v2/deposit.go @@ -17,6 +17,10 @@ func (d *Deposit) IsEmpty() bool { return d.AvailableBalance.IsZero() && d.TotalBalance.IsZero() } +func (d *Deposit) IsNegative() bool { + return d.AvailableBalance.IsNegative() || d.TotalBalance.IsNegative() +} + func (d *Deposit) Display() string { return fmt.Sprintf("Deposit Available: %s, Total: %s", getReadableDec(d.AvailableBalance), getReadableDec(d.TotalBalance)) } diff --git a/chain/exchange/types/v2/derivative.go b/chain/exchange/types/v2/derivative.go new file mode 100644 index 00000000..fe4d6cd4 --- /dev/null +++ b/chain/exchange/types/v2/derivative.go @@ -0,0 +1,1139 @@ +package v2 //nolint:revive // ok + +import ( + "bytes" + "sort" + + "cosmossdk.io/math" + "github.com/ethereum/go-ethereum/common" + + "github.com/InjectiveLabs/sdk-go/chain/exchange/types" +) + +// GetIsOrderLess returns true if the order is less than the other order +func GetIsOrderLess( //nolint:revive // ok + referencePrice, + order1Price, + order2Price math.LegacyDec, + order1IsBuy, + order2IsBuy, + isSortingFromWorstToBest bool, +) bool { + var firstDistanceToReferencePrice, secondDistanceToReferencePrice math.LegacyDec + + if order1IsBuy { + firstDistanceToReferencePrice = referencePrice.Sub(order1Price) + } else { + firstDistanceToReferencePrice = order1Price.Sub(referencePrice) + } + + if order2IsBuy { + secondDistanceToReferencePrice = referencePrice.Sub(order2Price) + } else { + secondDistanceToReferencePrice = order2Price.Sub(referencePrice) + } + + if isSortingFromWorstToBest { + return firstDistanceToReferencePrice.GT(secondDistanceToReferencePrice) + } + + return firstDistanceToReferencePrice.LT(secondDistanceToReferencePrice) +} + +// GetDerivativeOrdersToCancelUpToAmount returns the Derivative orders to cancel up to a given amount +func GetDerivativeOrdersToCancelUpToAmount( + market *DerivativeMarket, + orders []*TrimmedDerivativeLimitOrder, + strategy CancellationStrategy, + referencePrice *math.LegacyDec, + quoteAmount math.LegacyDec, +) ([]*TrimmedDerivativeLimitOrder, bool) { + switch strategy { + case CancellationStrategy_FromWorstToBest: + sort.SliceStable(orders, func(i, j int) bool { + return GetIsOrderLess(*referencePrice, orders[i].Price, orders[j].Price, orders[i].IsBuy, orders[j].IsBuy, true) + }) + case CancellationStrategy_FromBestToWorst: + sort.SliceStable(orders, func(i, j int) bool { + return GetIsOrderLess(*referencePrice, orders[i].Price, orders[j].Price, orders[i].IsBuy, orders[j].IsBuy, false) + }) + default: + // do nothing + } + + positiveMakerFeePart := math.LegacyMaxDec(math.LegacyZeroDec(), market.MakerFeeRate) + + ordersToCancel := make([]*TrimmedDerivativeLimitOrder, 0) + cumulativeQuoteAmount := math.LegacyZeroDec() + + for _, order := range orders { + hasSufficientQuote := cumulativeQuoteAmount.GTE(quoteAmount) + if hasSufficientQuote { + break + } + + ordersToCancel = append(ordersToCancel, order) + + notional := order.Fillable.Mul(order.Price) + fee := notional.Mul(positiveMakerFeePart) + remainingMargin := order.Margin.Mul(order.Fillable).Quo(order.Quantity) + cumulativeQuoteAmount = cumulativeQuoteAmount.Add(remainingMargin).Add(fee) + } + + hasProcessedFullAmount := cumulativeQuoteAmount.GTE(quoteAmount) + return ordersToCancel, hasProcessedFullAmount +} + +// ReduceOnlyOrdersTracker maps subaccountID => orders +type ReduceOnlyOrdersTracker map[common.Hash][]*DerivativeLimitOrder + +func NewReduceOnlyOrdersTracker() ReduceOnlyOrdersTracker { + return make(map[common.Hash][]*DerivativeLimitOrder) +} + +func (r ReduceOnlyOrdersTracker) GetSortedSubaccountIDs() []common.Hash { + subaccountIDs := make([]common.Hash, 0, len(r)) + for subaccountID := range r { + subaccountIDs = append(subaccountIDs, subaccountID) + } + + sort.SliceStable(subaccountIDs, func(i, j int) bool { + return bytes.Compare(subaccountIDs[i].Bytes(), subaccountIDs[j].Bytes()) < 0 + }) + return subaccountIDs +} + +func (r ReduceOnlyOrdersTracker) GetCumulativeOrderQuantity(subaccountID common.Hash) math.LegacyDec { + cumulativeQuantity := math.LegacyZeroDec() + orders := r[subaccountID] + + for idx := range orders { + cumulativeQuantity = cumulativeQuantity.Add(orders[idx].Fillable) + } + + return cumulativeQuantity +} + +func (r ReduceOnlyOrdersTracker) AppendOrder(subaccountID common.Hash, order *DerivativeLimitOrder) { + orders, ok := r[subaccountID] + if !ok { + r[subaccountID] = []*DerivativeLimitOrder{order} + return + } + + r[subaccountID] = append(orders, order) +} + +// ModifiedPositionCache maps marketID => subaccountID => position or nil indicator +type ModifiedPositionCache map[common.Hash]map[common.Hash]*Position + +func NewModifiedPositionCache() ModifiedPositionCache { + return make(map[common.Hash]map[common.Hash]*Position) +} + +func (c ModifiedPositionCache) SetPosition(marketID, subaccountID common.Hash, position *Position) { + if position == nil { + return + } + + v, ok := c[marketID] + if !ok { + v = make(map[common.Hash]*Position) + c[marketID] = v + } + + v[subaccountID] = position +} + +func (c ModifiedPositionCache) SetPositionIndicator(marketID, subaccountID common.Hash) { + v, ok := c[marketID] + if !ok { + v = make(map[common.Hash]*Position) + c[marketID] = v + } + + v[subaccountID] = nil +} + +func (c ModifiedPositionCache) GetPosition(marketID, subaccountID common.Hash) *Position { + v, ok := c[marketID] + if !ok { + return nil + } + return v[subaccountID] +} + +func (c ModifiedPositionCache) GetSortedSubaccountIDsByMarket(marketID common.Hash) []common.Hash { + v, ok := c[marketID] + if !ok { + return nil + } + + subaccountIDs := make([]common.Hash, 0, len(v)) + for subaccountID := range v { + subaccountIDs = append(subaccountIDs, subaccountID) + } + + sort.SliceStable(subaccountIDs, func(i, j int) bool { + return bytes.Compare(subaccountIDs[i].Bytes(), subaccountIDs[j].Bytes()) < 0 + }) + + return subaccountIDs +} + +func (c ModifiedPositionCache) HasAnyModifiedPositionsInMarket(marketID common.Hash) bool { + _, found := c[marketID] + return found +} + +func (c ModifiedPositionCache) HasPositionBeenModified(marketID, subaccountID common.Hash) bool { + v, ok := c[marketID] + if !ok { + return false + } + _, found := v[subaccountID] + return found +} + +type DerivativeMatchingExpansionData struct { + TransientLimitBuyExpansions []*DerivativeOrderStateExpansion + TransientLimitSellExpansions []*DerivativeOrderStateExpansion + RestingLimitBuyExpansions []*DerivativeOrderStateExpansion + RestingLimitSellExpansions []*DerivativeOrderStateExpansion + RestingLimitBuyOrderCancels []*DerivativeLimitOrder + RestingLimitSellOrderCancels []*DerivativeLimitOrder + TransientLimitBuyOrderCancels []*DerivativeLimitOrder + TransientLimitSellOrderCancels []*DerivativeLimitOrder + ClearingPrice math.LegacyDec + ClearingQuantity math.LegacyDec + MarketBalanceDelta math.LegacyDec + OpenInterestDelta math.LegacyDec + NewRestingLimitBuyOrders []*DerivativeLimitOrder // transient buy orders that become new resting limit orders + NewRestingLimitSellOrders []*DerivativeLimitOrder // transient sell orders that become new resting limit orders + PartialCancelOrders map[common.Hash]struct{} +} + +func NewDerivativeMatchingExpansionData(clearingPrice, clearingQuantity math.LegacyDec) *DerivativeMatchingExpansionData { + return &DerivativeMatchingExpansionData{ + TransientLimitBuyExpansions: make([]*DerivativeOrderStateExpansion, 0), + TransientLimitSellExpansions: make([]*DerivativeOrderStateExpansion, 0), + RestingLimitBuyExpansions: make([]*DerivativeOrderStateExpansion, 0), + RestingLimitSellExpansions: make([]*DerivativeOrderStateExpansion, 0), + RestingLimitBuyOrderCancels: make([]*DerivativeLimitOrder, 0), + RestingLimitSellOrderCancels: make([]*DerivativeLimitOrder, 0), + TransientLimitBuyOrderCancels: make([]*DerivativeLimitOrder, 0), + TransientLimitSellOrderCancels: make([]*DerivativeLimitOrder, 0), + ClearingPrice: clearingPrice, + ClearingQuantity: clearingQuantity, + OpenInterestDelta: math.LegacyZeroDec(), + MarketBalanceDelta: math.LegacyZeroDec(), + NewRestingLimitBuyOrders: make([]*DerivativeLimitOrder, 0), + NewRestingLimitSellOrders: make([]*DerivativeLimitOrder, 0), + PartialCancelOrders: make(map[common.Hash]struct{}), + } +} + +func (e *DerivativeMatchingExpansionData) AddExpansion(isBuy, isTransient bool, expansion *DerivativeOrderStateExpansion) { + e.MarketBalanceDelta = e.MarketBalanceDelta.Add(expansion.MarketBalanceDelta) + + switch { + case isBuy && isTransient: + e.TransientLimitBuyExpansions = append(e.TransientLimitBuyExpansions, expansion) + case isBuy && !isTransient: + e.RestingLimitBuyExpansions = append(e.RestingLimitBuyExpansions, expansion) + case !isBuy && isTransient: + e.TransientLimitSellExpansions = append(e.TransientLimitSellExpansions, expansion) + case !isBuy && !isTransient: + e.RestingLimitSellExpansions = append(e.RestingLimitSellExpansions, expansion) + } +} + +func (e *DerivativeMatchingExpansionData) AddNewBuyRestingLimitOrder(order *DerivativeLimitOrder) { + e.NewRestingLimitBuyOrders = append(e.NewRestingLimitBuyOrders, order) +} + +func (e *DerivativeMatchingExpansionData) AddNewSellRestingLimitOrder(order *DerivativeLimitOrder) { + e.NewRestingLimitSellOrders = append(e.NewRestingLimitSellOrders, order) +} + +func (e *DerivativeMatchingExpansionData) SetRestingLimitBuyOrderCancels(orders []*DerivativeLimitOrder) { + e.RestingLimitBuyOrderCancels = orders +} + +func (e *DerivativeMatchingExpansionData) SetRestingLimitSellOrderCancels(orders []*DerivativeLimitOrder) { + e.RestingLimitSellOrderCancels = orders +} + +func (e *DerivativeMatchingExpansionData) SetTransientLimitBuyOrderCancels(orders []*DerivativeLimitOrder) { + e.TransientLimitBuyOrderCancels = orders +} + +func (e *DerivativeMatchingExpansionData) SetTransientLimitSellOrderCancels(orders []*DerivativeLimitOrder) { + e.TransientLimitSellOrderCancels = orders +} + +func (e *DerivativeMatchingExpansionData) GetLimitMatchingDerivativeBatchExecutionData( + market DerivativeMarketI, + markPrice math.LegacyDec, + funding *PerpetualMarketFunding, + positionStates map[common.Hash]*PositionState, +) *DerivativeBatchExecutionData { + depositDeltas := types.NewDepositDeltas() + tradingRewardPoints := types.NewTradingRewardPoints() + + // process undermargined resting limit order forced cancellations + cancelLimitOrdersEvents, restingOrderCancelledDeltas, transientOrderCancelledDeltas := + e.applyCancellationsAndGetDerivativeLimitCancelEvents( + market, + market.GetMakerFeeRate(), + market.GetTakerFeeRate(), + depositDeltas, + ) + + positions, positionSubaccountIDs := GetPositionSliceData(positionStates) + + transientLimitBuyOrderBatchEvent, transientLimitBuyFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent( + true, + ExecutionType_LimitMatchNewOrder, + market, + funding, + e.TransientLimitBuyExpansions, + depositDeltas, + tradingRewardPoints, + false, + ) + restingLimitBuyOrderBatchEvent, restingLimitBuyFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent( + true, + ExecutionType_LimitMatchRestingOrder, + market, + funding, + e.RestingLimitBuyExpansions, + depositDeltas, + tradingRewardPoints, + false, + ) + transientLimitSellOrderBatchEvent, transientLimitSellFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent( + false, + ExecutionType_LimitMatchNewOrder, + market, + funding, + e.TransientLimitSellExpansions, + depositDeltas, + tradingRewardPoints, + false, + ) + restingLimitSellOrderBatchEvent, restingLimitSellFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent( + false, + ExecutionType_LimitMatchRestingOrder, + market, + funding, + e.RestingLimitSellExpansions, + depositDeltas, + tradingRewardPoints, + false, + ) + + restingOrderFilledDeltas := mergeDerivativeLimitOrderFilledDeltas(restingLimitBuyFilledDeltas, restingLimitSellFilledDeltas) + transientOrderFilledDeltas := mergeDerivativeLimitOrderFilledDeltas(transientLimitBuyFilledDeltas, transientLimitSellFilledDeltas) + + // sort keys since map iteration is non-deterministic + depositDeltaKeys := depositDeltas.GetSortedSubaccountKeys() + + vwapData := NewVwapData() + vwapData = vwapData.ApplyExecution(e.ClearingPrice, e.ClearingQuantity) + + var newOrdersEvent *EventNewDerivativeOrders + if len(e.NewRestingLimitBuyOrders) > 0 || len(e.NewRestingLimitSellOrders) > 0 { + newOrdersEvent = &EventNewDerivativeOrders{ + MarketId: market.MarketID().String(), + BuyOrders: e.NewRestingLimitBuyOrders, + SellOrders: e.NewRestingLimitSellOrders, + } + } + + // Final Step: Store the DerivativeBatchExecutionData for future reduction/processing + batch := &DerivativeBatchExecutionData{ + Market: market, + MarkPrice: markPrice, + Funding: funding, + DepositDeltas: depositDeltas, + DepositSubaccountIDs: depositDeltaKeys, + TradingRewards: tradingRewardPoints, + Positions: positions, + MarketBalanceDelta: market.NotionalToChainFormat(e.MarketBalanceDelta), + OpenInterestDelta: e.OpenInterestDelta, + PositionSubaccountIDs: positionSubaccountIDs, + RestingLimitOrderFilledDeltas: restingOrderFilledDeltas, + TransientLimitOrderFilledDeltas: transientOrderFilledDeltas, + RestingLimitOrderCancelledDeltas: restingOrderCancelledDeltas, + TransientLimitOrderCancelledDeltas: transientOrderCancelledDeltas, + MarketBuyOrderExecutionEvent: nil, + MarketSellOrderExecutionEvent: nil, + RestingLimitBuyOrderExecutionEvent: restingLimitBuyOrderBatchEvent, + RestingLimitSellOrderExecutionEvent: restingLimitSellOrderBatchEvent, + TransientLimitBuyOrderExecutionEvent: transientLimitBuyOrderBatchEvent, + TransientLimitSellOrderExecutionEvent: transientLimitSellOrderBatchEvent, + NewOrdersEvent: newOrdersEvent, + CancelLimitOrderEvents: cancelLimitOrdersEvents, + CancelMarketOrderEvents: nil, + VwapData: vwapData, + PartialCancelOrders: e.PartialCancelOrders, + } + + return batch +} + +func (e *DerivativeMatchingExpansionData) applyCancellationsAndGetDerivativeLimitCancelEvents( + market DerivativeMarketI, + makerFeeRate math.LegacyDec, + takerFeeRate math.LegacyDec, + depositDeltas types.DepositDeltas, +) ( + cancelOrdersEvent []*EventCancelDerivativeOrder, + restingOrderCancelledDeltas []*DerivativeLimitOrderDelta, + transientOrderCancelledDeltas []*DerivativeLimitOrderDelta, +) { + marketIDHex := market.MarketID().Hex() + + cancelOrdersEvent = make( + []*EventCancelDerivativeOrder, + 0, + len(e.RestingLimitBuyOrderCancels)+ + len(e.RestingLimitSellOrderCancels)+ + len(e.TransientLimitBuyOrderCancels)+ + len(e.TransientLimitSellOrderCancels), + ) + restingOrderCancelledDeltas = make( + []*DerivativeLimitOrderDelta, + 0, + len(e.RestingLimitBuyOrderCancels)+len(e.RestingLimitSellOrderCancels), + ) + transientOrderCancelledDeltas = make( + []*DerivativeLimitOrderDelta, + 0, + len(e.TransientLimitBuyOrderCancels)+len(e.TransientLimitSellOrderCancels), + ) + + for idx := range e.RestingLimitBuyOrderCancels { + order := e.RestingLimitBuyOrderCancels[idx] + + applyDerivativeLimitCancellation(order, makerFeeRate, depositDeltas, market) + cancelOrdersEvent = append(cancelOrdersEvent, &EventCancelDerivativeOrder{ + MarketId: marketIDHex, + IsLimitCancel: true, + LimitOrder: order, + }) + restingOrderCancelledDeltas = append(restingOrderCancelledDeltas, &DerivativeLimitOrderDelta{ + Order: order, + FillQuantity: math.LegacyZeroDec(), + CancelQuantity: order.Fillable, + }) + } + + for idx := range e.RestingLimitSellOrderCancels { + order := e.RestingLimitSellOrderCancels[idx] + + applyDerivativeLimitCancellation(order, makerFeeRate, depositDeltas, market) + cancelOrdersEvent = append(cancelOrdersEvent, &EventCancelDerivativeOrder{ + MarketId: marketIDHex, + IsLimitCancel: true, + LimitOrder: order, + }) + restingOrderCancelledDeltas = append(restingOrderCancelledDeltas, &DerivativeLimitOrderDelta{ + Order: order, + FillQuantity: math.LegacyZeroDec(), + CancelQuantity: order.Fillable, + }) + } + + for idx := range e.TransientLimitBuyOrderCancels { + order := e.TransientLimitBuyOrderCancels[idx] + + applyDerivativeLimitCancellation(order, takerFeeRate, depositDeltas, market) + cancelOrdersEvent = append(cancelOrdersEvent, &EventCancelDerivativeOrder{ + MarketId: marketIDHex, + IsLimitCancel: true, + LimitOrder: order, + }) + transientOrderCancelledDeltas = append(transientOrderCancelledDeltas, &DerivativeLimitOrderDelta{ + Order: order, + FillQuantity: math.LegacyZeroDec(), + CancelQuantity: order.Fillable, + }) + } + + for idx := range e.TransientLimitSellOrderCancels { + order := e.TransientLimitSellOrderCancels[idx] + applyDerivativeLimitCancellation(order, takerFeeRate, depositDeltas, market) + cancelOrdersEvent = append(cancelOrdersEvent, &EventCancelDerivativeOrder{ + MarketId: marketIDHex, + IsLimitCancel: true, + LimitOrder: order, + }) + transientOrderCancelledDeltas = append(transientOrderCancelledDeltas, &DerivativeLimitOrderDelta{ + Order: order, + FillQuantity: math.LegacyZeroDec(), + CancelQuantity: order.Fillable, + }) + } + + return cancelOrdersEvent, restingOrderCancelledDeltas, transientOrderCancelledDeltas +} + +func applyDerivativeLimitCancellation( + order *DerivativeLimitOrder, + orderFeeRate math.LegacyDec, + depositDeltas types.DepositDeltas, + market DerivativeMarketI, +) { + // For vanilla orders, increment the available balance + if order.IsVanilla() { + depositDelta := order.GetCancelDepositDelta(orderFeeRate) + chainFormatDepositDelta := types.DepositDelta{ + AvailableBalanceDelta: market.NotionalToChainFormat(depositDelta.AvailableBalanceDelta), + TotalBalanceDelta: market.NotionalToChainFormat(depositDelta.TotalBalanceDelta), + } + depositDeltas.ApplyDepositDelta(order.SubaccountID(), &chainFormatDepositDelta) + } +} + +type DerivativeMarketOrderExpansionData struct { + MarketBuyExpansions []*DerivativeOrderStateExpansion + MarketSellExpansions []*DerivativeOrderStateExpansion + LimitBuyExpansions []*DerivativeOrderStateExpansion + LimitSellExpansions []*DerivativeOrderStateExpansion + RestingLimitBuyOrderCancels []*DerivativeLimitOrder + RestingLimitSellOrderCancels []*DerivativeLimitOrder + MarketBuyOrderCancels []*DerivativeMarketOrderCancel + MarketSellOrderCancels []*DerivativeMarketOrderCancel + MarketBuyClearingPrice math.LegacyDec + MarketSellClearingPrice math.LegacyDec + MarketBuyClearingQuantity math.LegacyDec + MarketSellClearingQuantity math.LegacyDec + MarketBalanceDelta math.LegacyDec + OpenInterestDelta math.LegacyDec +} + +func (e *DerivativeMarketOrderExpansionData) SetSellExecutionData( + marketOrderClearingPrice, marketOrderClearingQuantity math.LegacyDec, + restingLimitOrderCancels []*DerivativeLimitOrder, + marketOrderStateExpansions, + restingLimitOrderStateExpansions []*DerivativeOrderStateExpansion, + marketOrderCancels []*DerivativeMarketOrderCancel, +) { + e.MarketSellClearingPrice = marketOrderClearingPrice + e.MarketSellClearingQuantity = marketOrderClearingQuantity + e.RestingLimitBuyOrderCancels = restingLimitOrderCancels + e.MarketSellExpansions = marketOrderStateExpansions + e.LimitBuyExpansions = restingLimitOrderStateExpansions + e.MarketSellOrderCancels = marketOrderCancels + + e.setExecutionData(marketOrderStateExpansions, restingLimitOrderStateExpansions) +} + +func (e *DerivativeMarketOrderExpansionData) SetBuyExecutionData( + marketOrderClearingPrice, marketOrderClearingQuantity math.LegacyDec, + restingLimitOrderCancels []*DerivativeLimitOrder, + marketOrderStateExpansions, + restingLimitOrderStateExpansions []*DerivativeOrderStateExpansion, + marketOrderCancels []*DerivativeMarketOrderCancel, +) { + e.MarketBuyClearingPrice = marketOrderClearingPrice + e.MarketBuyClearingQuantity = marketOrderClearingQuantity + e.RestingLimitSellOrderCancels = restingLimitOrderCancels + e.MarketBuyExpansions = marketOrderStateExpansions + e.LimitSellExpansions = restingLimitOrderStateExpansions + e.MarketBuyOrderCancels = marketOrderCancels + + e.setExecutionData(marketOrderStateExpansions, restingLimitOrderStateExpansions) +} + +func (e *DerivativeMarketOrderExpansionData) setExecutionData( + marketOrderStateExpansions, + restingLimitOrderStateExpansions []*DerivativeOrderStateExpansion, +) { + if e.MarketBalanceDelta.IsNil() { + e.MarketBalanceDelta = math.LegacyZeroDec() + } + + for idx := range marketOrderStateExpansions { + stateExpansion := marketOrderStateExpansions[idx] + e.MarketBalanceDelta = e.MarketBalanceDelta.Add(stateExpansion.MarketBalanceDelta) + } + for idx := range restingLimitOrderStateExpansions { + stateExpansion := restingLimitOrderStateExpansions[idx] + e.MarketBalanceDelta = e.MarketBalanceDelta.Add(stateExpansion.MarketBalanceDelta) + } +} + +func (e *DerivativeMarketOrderExpansionData) GetMarketDerivativeBatchExecutionData( //nolint:revive // ok + market DerivativeMarketI, + markPrice math.LegacyDec, + funding *PerpetualMarketFunding, + positionStates map[common.Hash]*PositionState, + isLiquidation bool, +) *DerivativeBatchExecutionData { + depositDeltas := types.NewDepositDeltas() + tradingRewardPoints := types.NewTradingRewardPoints() + + // process undermargined limit order forced cancellations + cancelLimitOrdersEvents, restingOrderCancelledDeltas := e.applyCancellationsAndGetDerivativeLimitCancelEvents( + market, + market.GetMakerFeeRate(), + depositDeltas, + ) + + // process unfilled market order cancellations + cancelMarketOrdersEvents := e.getDerivativeMarketCancelEvents(market.MarketID()) + + positions, positionSubaccountIDs := GetPositionSliceData(positionStates) + + buyMarketOrderBatchEvent, _ := ApplyDeltasAndGetDerivativeOrderBatchEvent( + true, + ExecutionType_Market, + market, + funding, + e.MarketBuyExpansions, + depositDeltas, + tradingRewardPoints, + isLiquidation, + ) + sellMarketOrderBatchEvent, _ := ApplyDeltasAndGetDerivativeOrderBatchEvent( + false, + ExecutionType_Market, + market, + funding, + e.MarketSellExpansions, + depositDeltas, + tradingRewardPoints, + isLiquidation, + ) + + restingLimitBuyOrderBatchEvent, limitBuyFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent( + true, + ExecutionType_LimitFill, + market, + funding, + e.LimitBuyExpansions, + depositDeltas, + tradingRewardPoints, + false, + ) + restingLimitSellOrderBatchEvent, limitSellFilledDeltas := ApplyDeltasAndGetDerivativeOrderBatchEvent( + false, + ExecutionType_LimitFill, + market, + funding, + e.LimitSellExpansions, + depositDeltas, + tradingRewardPoints, + false, + ) + + filledDeltas := mergeDerivativeLimitOrderFilledDeltas(limitBuyFilledDeltas, limitSellFilledDeltas) + + // sort keys since map iteration is non-deterministic + depositDeltaKeys := depositDeltas.GetSortedSubaccountKeys() + + vwapData := NewVwapData() + vwapData = vwapData.ApplyExecution(e.MarketBuyClearingPrice, e.MarketBuyClearingQuantity) + vwapData = vwapData.ApplyExecution(e.MarketSellClearingPrice, e.MarketSellClearingQuantity) + + // Final Step: Store the DerivativeBatchExecutionData for future reduction/processing + batch := &DerivativeBatchExecutionData{ + Market: market, + MarkPrice: markPrice, + Funding: funding, + DepositDeltas: depositDeltas, + DepositSubaccountIDs: depositDeltaKeys, + TradingRewards: tradingRewardPoints, + Positions: positions, + MarketBalanceDelta: market.NotionalToChainFormat(e.MarketBalanceDelta), + PositionSubaccountIDs: positionSubaccountIDs, + TransientLimitOrderFilledDeltas: nil, + RestingLimitOrderFilledDeltas: filledDeltas, + TransientLimitOrderCancelledDeltas: nil, + RestingLimitOrderCancelledDeltas: restingOrderCancelledDeltas, + MarketBuyOrderExecutionEvent: buyMarketOrderBatchEvent, + MarketSellOrderExecutionEvent: sellMarketOrderBatchEvent, + RestingLimitBuyOrderExecutionEvent: restingLimitBuyOrderBatchEvent, + RestingLimitSellOrderExecutionEvent: restingLimitSellOrderBatchEvent, + TransientLimitBuyOrderExecutionEvent: nil, + TransientLimitSellOrderExecutionEvent: nil, + NewOrdersEvent: nil, + OpenInterestDelta: e.OpenInterestDelta, + CancelLimitOrderEvents: cancelLimitOrdersEvents, + CancelMarketOrderEvents: cancelMarketOrdersEvents, + VwapData: vwapData, + } + return batch +} + +func (e *DerivativeMarketOrderExpansionData) getDerivativeMarketCancelEvents(marketID common.Hash) []*EventCancelDerivativeOrder { + marketIDHex := marketID.Hex() + cancelOrdersEvent := make([]*EventCancelDerivativeOrder, 0, len(e.MarketBuyOrderCancels)+len(e.MarketSellOrderCancels)) + + for idx := range e.MarketBuyOrderCancels { + orderCancel := e.MarketBuyOrderCancels[idx] + cancelOrdersEvent = append(cancelOrdersEvent, &EventCancelDerivativeOrder{ + MarketId: marketIDHex, + IsLimitCancel: false, + MarketOrderCancel: orderCancel, + }) + } + + for idx := range e.MarketSellOrderCancels { + orderCancel := e.MarketSellOrderCancels[idx] + cancelOrdersEvent = append(cancelOrdersEvent, &EventCancelDerivativeOrder{ + MarketId: marketIDHex, + IsLimitCancel: false, + MarketOrderCancel: orderCancel, + }) + } + return cancelOrdersEvent +} + +func (e *DerivativeMarketOrderExpansionData) applyCancellationsAndGetDerivativeLimitCancelEvents( + market DerivativeMarketI, + makerFeeRate math.LegacyDec, + depositDeltas types.DepositDeltas, +) ( + cancelOrdersEvent []*EventCancelDerivativeOrder, + restingOrderCancelledDeltas []*DerivativeLimitOrderDelta, +) { + marketIDHex := market.MarketID().Hex() + cancelOrdersEvent = make([]*EventCancelDerivativeOrder, 0, len(e.RestingLimitBuyOrderCancels)+len(e.RestingLimitSellOrderCancels)) + + restingOrderCancelledDeltas = make( + []*DerivativeLimitOrderDelta, 0, len(e.RestingLimitBuyOrderCancels)+len(e.RestingLimitSellOrderCancels), + ) + + for idx := range e.RestingLimitBuyOrderCancels { + order := e.RestingLimitBuyOrderCancels[idx] + applyDerivativeLimitCancellation(order, makerFeeRate, depositDeltas, market) + cancelOrdersEvent = append(cancelOrdersEvent, &EventCancelDerivativeOrder{ + MarketId: marketIDHex, + IsLimitCancel: true, + LimitOrder: order, + }) + + restingOrderCancelledDeltas = append(restingOrderCancelledDeltas, &DerivativeLimitOrderDelta{ + Order: order, + FillQuantity: math.LegacyZeroDec(), + CancelQuantity: order.Fillable, + }) + } + + for idx := range e.RestingLimitSellOrderCancels { + order := e.RestingLimitSellOrderCancels[idx] + applyDerivativeLimitCancellation(order, makerFeeRate, depositDeltas, market) + cancelOrdersEvent = append(cancelOrdersEvent, &EventCancelDerivativeOrder{ + MarketId: marketIDHex, + IsLimitCancel: true, + LimitOrder: order, + }) + + restingOrderCancelledDeltas = append(restingOrderCancelledDeltas, &DerivativeLimitOrderDelta{ + Order: order, + FillQuantity: math.LegacyZeroDec(), + CancelQuantity: order.Fillable, + }) + } + return cancelOrdersEvent, restingOrderCancelledDeltas +} + +func mergeDerivativeLimitOrderFilledDeltas(d1, d2 []*DerivativeLimitOrderDelta) []*DerivativeLimitOrderDelta { + filledDeltas := make([]*DerivativeLimitOrderDelta, 0, len(d1)+len(d2)) + if len(d1) > 0 { + filledDeltas = append(filledDeltas, d1...) + } + if len(d2) > 0 { + filledDeltas = append(filledDeltas, d2...) + } + return filledDeltas +} + +type VwapData struct { + Price math.LegacyDec + Quantity math.LegacyDec +} + +func NewVwapData() *VwapData { + return &VwapData{ + Price: math.LegacyZeroDec(), + Quantity: math.LegacyZeroDec(), + } +} + +func (p *VwapData) ApplyExecution(price, quantity math.LegacyDec) *VwapData { + if p == nil { + p = NewVwapData() + } + + if price.IsNil() || quantity.IsNil() || quantity.IsZero() { + return p + } + + newQuantity := p.Quantity.Add(quantity) + newPrice := p.Price.Mul(p.Quantity).Add(price.Mul(quantity)).Quo(newQuantity) + + return &VwapData{ + Price: newPrice, + Quantity: newQuantity, + } +} + +type VwapInfo struct { + MarkPrice *math.LegacyDec + VwapData *VwapData +} + +func NewVwapInfo(markPrice *math.LegacyDec) *VwapInfo { + return &VwapInfo{ + MarkPrice: markPrice, + VwapData: NewVwapData(), + } +} + +type DerivativeVwapInfo struct { + PerpetualVwapInfo map[common.Hash]*VwapInfo + ExpiryVwapInfo map[common.Hash]*VwapInfo + BinaryOptionsVwapInfo map[common.Hash]*VwapInfo +} + +func NewDerivativeVwapInfo() DerivativeVwapInfo { + return DerivativeVwapInfo{ + PerpetualVwapInfo: make(map[common.Hash]*VwapInfo), + ExpiryVwapInfo: make(map[common.Hash]*VwapInfo), + BinaryOptionsVwapInfo: make(map[common.Hash]*VwapInfo), + } +} + +func (p *DerivativeVwapInfo) ApplyVwap(marketID common.Hash, markPrice *math.LegacyDec, vwapData *VwapData, marketType types.MarketType) { + var vwapInfo *VwapInfo + + switch marketType { + case types.MarketType_Perpetual: + vwapInfo = p.PerpetualVwapInfo[marketID] + if vwapInfo == nil { + vwapInfo = NewVwapInfo(markPrice) + p.PerpetualVwapInfo[marketID] = vwapInfo + } + case types.MarketType_Expiry: + vwapInfo = p.ExpiryVwapInfo[marketID] + if vwapInfo == nil { + vwapInfo = NewVwapInfo(markPrice) + p.ExpiryVwapInfo[marketID] = vwapInfo + } + case types.MarketType_BinaryOption: + vwapInfo = p.BinaryOptionsVwapInfo[marketID] + if vwapInfo == nil { + vwapInfo = NewVwapInfo(markPrice) + p.BinaryOptionsVwapInfo[marketID] = vwapInfo + } + default: + } + + if !vwapData.Quantity.IsZero() { + vwapInfo.VwapData = vwapInfo.VwapData.ApplyExecution(vwapData.Price, vwapData.Quantity) + } +} + +func (p *DerivativeVwapInfo) GetSortedPerpetualMarketIDs() []common.Hash { + perpetualMarketIDs := make([]common.Hash, 0) + for k := range p.PerpetualVwapInfo { + perpetualMarketIDs = append(perpetualMarketIDs, k) + } + + sort.SliceStable(perpetualMarketIDs, func(i, j int) bool { + return bytes.Compare(perpetualMarketIDs[i].Bytes(), perpetualMarketIDs[j].Bytes()) < 0 + }) + return perpetualMarketIDs +} + +func (p *DerivativeVwapInfo) GetSortedExpiryFutureMarketIDs() []common.Hash { + expiryFutureMarketIDs := make([]common.Hash, 0) + for k := range p.ExpiryVwapInfo { + expiryFutureMarketIDs = append(expiryFutureMarketIDs, k) + } + + sort.SliceStable(expiryFutureMarketIDs, func(i, j int) bool { + return bytes.Compare(expiryFutureMarketIDs[i].Bytes(), expiryFutureMarketIDs[j].Bytes()) < 0 + }) + return expiryFutureMarketIDs +} + +func (p *DerivativeVwapInfo) GetSortedBinaryOptionsMarketIDs() []common.Hash { + binaryOptionsMarketIDs := make([]common.Hash, 0) + for k := range p.BinaryOptionsVwapInfo { + binaryOptionsMarketIDs = append(binaryOptionsMarketIDs, k) + } + + sort.SliceStable(binaryOptionsMarketIDs, func(i, j int) bool { + return bytes.Compare(binaryOptionsMarketIDs[i].Bytes(), binaryOptionsMarketIDs[j].Bytes()) < 0 + }) + return binaryOptionsMarketIDs +} + +// ComputeSyntheticVwapUnitDelta returns (price - markPrice) / markPrice +func (p *DerivativeVwapInfo) ComputeSyntheticVwapUnitDelta(marketID common.Hash) math.LegacyDec { + vwapInfo := p.PerpetualVwapInfo[marketID] + return vwapInfo.VwapData.Price.Sub(*vwapInfo.MarkPrice).Quo(*vwapInfo.MarkPrice) +} + +// MergeAtomicPerpetualVwap merges accumulated atomic order VWAP data into this DerivativeVwapInfo. +func (p *DerivativeVwapInfo) MergeAtomicPerpetualVwap(atomicVwapData map[common.Hash]*VwapInfo) { + for marketID, atomicInfo := range atomicVwapData { + if atomicInfo == nil || atomicInfo.MarkPrice == nil || atomicInfo.VwapData == nil { + continue + } + + if atomicInfo.VwapData.Quantity.IsZero() { + continue + } + + existingInfo := p.PerpetualVwapInfo[marketID] + if existingInfo == nil { + // No existing VWAP for this market, just use the atomic data + p.PerpetualVwapInfo[marketID] = atomicInfo + continue + } + + // Merge the VWAP data: newVwap = (existingPrice * existingQty + atomicPrice * atomicQty) / (existingQty + atomicQty) + existingInfo.VwapData = existingInfo.VwapData.ApplyExecution(atomicInfo.VwapData.Price, atomicInfo.VwapData.Quantity) + } +} + +type PositionState struct { + Position *Position +} + +func NewPositionStates() map[common.Hash]*PositionState { + return make(map[common.Hash]*PositionState) +} + +// ApplyFundingAndGetUpdatedPositionState updates the position to account for any funding payment and returns a PositionState. +func ApplyFundingAndGetUpdatedPositionState(p *Position, funding *PerpetualMarketFunding) *PositionState { + p.ApplyFunding(funding) + positionState := &PositionState{ + Position: p, + } + return positionState +} + +func GetSortedSubaccountKeys(p map[common.Hash]*PositionState) []common.Hash { + subaccountKeys := make([]common.Hash, 0) + for k := range p { + subaccountKeys = append(subaccountKeys, k) + } + sort.SliceStable(subaccountKeys, func(i, j int) bool { + return bytes.Compare(subaccountKeys[i].Bytes(), subaccountKeys[j].Bytes()) < 0 + }) + return subaccountKeys +} + +func GetPositionSliceData(p map[common.Hash]*PositionState) ([]*Position, []common.Hash) { + positionSubaccountIDs := GetSortedSubaccountKeys(p) + positions := make([]*Position, 0, len(positionSubaccountIDs)) + + nonNilPositionSubaccountIDs := make([]common.Hash, 0) + for idx := range positionSubaccountIDs { + subaccountID := positionSubaccountIDs[idx] + position := p[subaccountID] + if position.Position != nil { + positions = append(positions, position.Position) + nonNilPositionSubaccountIDs = append(nonNilPositionSubaccountIDs, subaccountID) + } + } + + return positions, nonNilPositionSubaccountIDs +} + +type DerivativeBatchExecutionData struct { + Market DerivativeMarketI + + MarkPrice math.LegacyDec + Funding *PerpetualMarketFunding + + // update the deposits for margin deductions, payouts and refunds + DepositDeltas types.DepositDeltas + DepositSubaccountIDs []common.Hash + + TradingRewards types.TradingRewardPoints + + // updated positions + Positions []*Position + MarketBalanceDelta math.LegacyDec + PositionSubaccountIDs []common.Hash + OpenInterestDelta math.LegacyDec + + // resting limit order filled deltas to apply + TransientLimitOrderFilledDeltas []*DerivativeLimitOrderDelta + // resting limit order filled deltas to apply + RestingLimitOrderFilledDeltas []*DerivativeLimitOrderDelta + // transient limit order cancelled deltas to apply + TransientLimitOrderCancelledDeltas []*DerivativeLimitOrderDelta + // resting limit order cancelled deltas to apply + RestingLimitOrderCancelledDeltas []*DerivativeLimitOrderDelta + + // events for batch market order and limit order execution + MarketBuyOrderExecutionEvent *EventBatchDerivativeExecution + MarketSellOrderExecutionEvent *EventBatchDerivativeExecution + RestingLimitBuyOrderExecutionEvent *EventBatchDerivativeExecution + RestingLimitSellOrderExecutionEvent *EventBatchDerivativeExecution + TransientLimitBuyOrderExecutionEvent *EventBatchDerivativeExecution + TransientLimitSellOrderExecutionEvent *EventBatchDerivativeExecution + + // event for new orders to add to the orderbook + NewOrdersEvent *EventNewDerivativeOrders + CancelLimitOrderEvents []*EventCancelDerivativeOrder + CancelMarketOrderEvents []*EventCancelDerivativeOrder + + VwapData *VwapData + + // Orders that were partially filled then became invalid + // Used by persistence layer to handle partial cancellations correctly + PartialCancelOrders map[common.Hash]struct{} +} + +func (d *DerivativeBatchExecutionData) GetAtomicDerivativeMarketOrderResults() *DerivativeMarketOrderResults { + var trade *DerivativeTradeLog + + switch { + case d.MarketBuyOrderExecutionEvent != nil: + trade = d.MarketBuyOrderExecutionEvent.Trades[0] + case d.MarketSellOrderExecutionEvent != nil: + trade = d.MarketSellOrderExecutionEvent.Trades[0] + default: + return EmptyDerivativeMarketOrderResults() + } + + return &DerivativeMarketOrderResults{ + Quantity: trade.PositionDelta.ExecutionQuantity, + Price: trade.PositionDelta.ExecutionPrice, + Fee: trade.Fee, + PositionDelta: *trade.PositionDelta, + Payout: trade.Payout, + } +} + +func ApplyDeltasAndGetDerivativeOrderBatchEvent( + isBuy bool, + executionType ExecutionType, + market DerivativeMarketI, + funding *PerpetualMarketFunding, + stateExpansions []*DerivativeOrderStateExpansion, + depositDeltas types.DepositDeltas, + tradingRewardPoints types.TradingRewardPoints, + isLiquidation bool, +) (batch *EventBatchDerivativeExecution, filledDeltas []*DerivativeLimitOrderDelta) { + if len(stateExpansions) == 0 { + return + } + + trades := make([]*DerivativeTradeLog, 0, len(stateExpansions)) + + if !executionType.IsMarket() { + filledDeltas = make([]*DerivativeLimitOrderDelta, 0, len(stateExpansions)) + } + + for idx := range stateExpansions { + expansion := stateExpansions[idx] + + feeRecipientSubaccount := types.EthAddressToSubaccountID(expansion.FeeRecipient) + if bytes.Equal(feeRecipientSubaccount.Bytes(), common.Hash{}.Bytes()) { + feeRecipientSubaccount = types.AuctionSubaccountID + } + + depositDeltas.ApplyDepositDelta(expansion.SubaccountID, &types.DepositDelta{ + TotalBalanceDelta: market.NotionalToChainFormat(expansion.TotalBalanceDelta), + AvailableBalanceDelta: market.NotionalToChainFormat(expansion.AvailableBalanceDelta), + }) + chainFormatFeeRecipientReward := market.NotionalToChainFormat(expansion.FeeRecipientReward) + chainFormatAuctionFeeReward := market.NotionalToChainFormat(expansion.AuctionFeeReward) + depositDeltas.ApplyUniformDelta(feeRecipientSubaccount, chainFormatFeeRecipientReward) + depositDeltas.ApplyUniformDelta(types.AuctionSubaccountID, chainFormatAuctionFeeReward) + + sender := types.SubaccountIDToSdkAddress(expansion.SubaccountID) + tradingRewardPoints.AddPointsForAddress(sender.String(), expansion.TradingRewardPoints) + + if !executionType.IsMarket() { + filledDeltas = append(filledDeltas, expansion.LimitOrderFilledDelta) + } + + var realizedTradeFee math.LegacyDec + + isSelfRelayedTrade := expansion.FeeRecipient == types.SubaccountIDToEthAddress(expansion.SubaccountID) + if isSelfRelayedTrade { + // if negative fee, equals the full negative rebate + // otherwise equals the fees going to auction + realizedTradeFee = expansion.AuctionFeeReward + } else { + realizedTradeFee = expansion.FeeRecipientReward.Add(expansion.AuctionFeeReward) + } + + if expansion.PositionDelta != nil { + tradeLog := &DerivativeTradeLog{ + SubaccountId: expansion.SubaccountID.Bytes(), + PositionDelta: expansion.PositionDelta, + Payout: expansion.Payout, + Fee: realizedTradeFee, + OrderHash: expansion.OrderHash.Bytes(), + FeeRecipientAddress: expansion.FeeRecipient.Bytes(), + Cid: expansion.Cid, + Pnl: expansion.Pnl, + } + trades = append(trades, tradeLog) + } + } + + if len(trades) == 0 { + return nil, filledDeltas + } + + batch = &EventBatchDerivativeExecution{ + MarketId: market.MarketID().String(), + IsBuy: isBuy, + IsLiquidation: isLiquidation, + ExecutionType: executionType, + Trades: trades, + } + if funding != nil { + batch.CumulativeFunding = &funding.CumulativeFunding + } + + return batch, filledDeltas +} + +type DerivativeOrderStateExpansion struct { + SubaccountID common.Hash + PositionDelta *PositionDelta + Payout math.LegacyDec + Pnl math.LegacyDec + MarketBalanceDelta math.LegacyDec + OpenInterestDelta math.LegacyDec + TotalBalanceDelta math.LegacyDec + AvailableBalanceDelta math.LegacyDec + AuctionFeeReward math.LegacyDec + TradingRewardPoints math.LegacyDec + FeeRecipientReward math.LegacyDec + FeeRecipient common.Address + LimitOrderFilledDelta *DerivativeLimitOrderDelta + MarketOrderFilledDelta *DerivativeMarketOrderDelta + OrderHash common.Hash + Cid string +} + +type DeficitPositions struct { + DerivativePosition *DerivativePosition + DeficitAmountAbs math.LegacyDec +} + +type SocializedLossData struct { + PositionsReceivingHaircut []*Position + DeficitPositions []DeficitPositions + DeficitAmountAbs math.LegacyDec + SurplusAmount math.LegacyDec + TotalProfits math.LegacyDec + TotalPositivePayouts math.LegacyDec +} diff --git a/chain/exchange/types/v2/events.pb.go b/chain/exchange/types/v2/events.pb.go index 523c1f8f..62e6033f 100644 --- a/chain/exchange/types/v2/events.pb.go +++ b/chain/exchange/types/v2/events.pb.go @@ -614,6 +614,50 @@ func (m *EventBinaryOptionsMarketUpdate) GetMarket() BinaryOptionsMarket { return BinaryOptionsMarket{} } +type EventDerivativeMarketUpdate struct { + Market DerivativeMarket `protobuf:"bytes,1,opt,name=market,proto3" json:"market"` +} + +func (m *EventDerivativeMarketUpdate) Reset() { *m = EventDerivativeMarketUpdate{} } +func (m *EventDerivativeMarketUpdate) String() string { return proto.CompactTextString(m) } +func (*EventDerivativeMarketUpdate) ProtoMessage() {} +func (*EventDerivativeMarketUpdate) Descriptor() ([]byte, []int) { + return fileDescriptor_8ac8f3da550fa1c4, []int{10} +} +func (m *EventDerivativeMarketUpdate) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventDerivativeMarketUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EventDerivativeMarketUpdate.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *EventDerivativeMarketUpdate) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventDerivativeMarketUpdate.Merge(m, src) +} +func (m *EventDerivativeMarketUpdate) XXX_Size() int { + return m.Size() +} +func (m *EventDerivativeMarketUpdate) XXX_DiscardUnknown() { + xxx_messageInfo_EventDerivativeMarketUpdate.DiscardUnknown(m) +} + +var xxx_messageInfo_EventDerivativeMarketUpdate proto.InternalMessageInfo + +func (m *EventDerivativeMarketUpdate) GetMarket() DerivativeMarket { + if m != nil { + return m.Market + } + return DerivativeMarket{} +} + type EventNewSpotOrders struct { MarketId string `protobuf:"bytes,1,opt,name=market_id,json=marketId,proto3" json:"market_id,omitempty"` BuyOrders []*SpotLimitOrder `protobuf:"bytes,2,rep,name=buy_orders,json=buyOrders,proto3" json:"buy_orders,omitempty"` @@ -624,7 +668,7 @@ func (m *EventNewSpotOrders) Reset() { *m = EventNewSpotOrders{} } func (m *EventNewSpotOrders) String() string { return proto.CompactTextString(m) } func (*EventNewSpotOrders) ProtoMessage() {} func (*EventNewSpotOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{10} + return fileDescriptor_8ac8f3da550fa1c4, []int{11} } func (m *EventNewSpotOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -684,7 +728,7 @@ func (m *EventNewDerivativeOrders) Reset() { *m = EventNewDerivativeOrde func (m *EventNewDerivativeOrders) String() string { return proto.CompactTextString(m) } func (*EventNewDerivativeOrders) ProtoMessage() {} func (*EventNewDerivativeOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{11} + return fileDescriptor_8ac8f3da550fa1c4, []int{12} } func (m *EventNewDerivativeOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -743,7 +787,7 @@ func (m *EventCancelSpotOrder) Reset() { *m = EventCancelSpotOrder{} } func (m *EventCancelSpotOrder) String() string { return proto.CompactTextString(m) } func (*EventCancelSpotOrder) ProtoMessage() {} func (*EventCancelSpotOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{12} + return fileDescriptor_8ac8f3da550fa1c4, []int{13} } func (m *EventCancelSpotOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -794,7 +838,7 @@ func (m *EventSpotMarketUpdate) Reset() { *m = EventSpotMarketUpdate{} } func (m *EventSpotMarketUpdate) String() string { return proto.CompactTextString(m) } func (*EventSpotMarketUpdate) ProtoMessage() {} func (*EventSpotMarketUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{13} + return fileDescriptor_8ac8f3da550fa1c4, []int{14} } func (m *EventSpotMarketUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -840,7 +884,7 @@ func (m *EventPerpetualMarketUpdate) Reset() { *m = EventPerpetualMarket func (m *EventPerpetualMarketUpdate) String() string { return proto.CompactTextString(m) } func (*EventPerpetualMarketUpdate) ProtoMessage() {} func (*EventPerpetualMarketUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{14} + return fileDescriptor_8ac8f3da550fa1c4, []int{15} } func (m *EventPerpetualMarketUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -899,7 +943,7 @@ func (m *EventExpiryFuturesMarketUpdate) Reset() { *m = EventExpiryFutur func (m *EventExpiryFuturesMarketUpdate) String() string { return proto.CompactTextString(m) } func (*EventExpiryFuturesMarketUpdate) ProtoMessage() {} func (*EventExpiryFuturesMarketUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{15} + return fileDescriptor_8ac8f3da550fa1c4, []int{16} } func (m *EventExpiryFuturesMarketUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -954,7 +998,7 @@ func (m *EventPerpetualMarketFundingUpdate) Reset() { *m = EventPerpetua func (m *EventPerpetualMarketFundingUpdate) String() string { return proto.CompactTextString(m) } func (*EventPerpetualMarketFundingUpdate) ProtoMessage() {} func (*EventPerpetualMarketFundingUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{16} + return fileDescriptor_8ac8f3da550fa1c4, []int{17} } func (m *EventPerpetualMarketFundingUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1014,7 +1058,7 @@ func (m *EventSubaccountDeposit) Reset() { *m = EventSubaccountDeposit{} func (m *EventSubaccountDeposit) String() string { return proto.CompactTextString(m) } func (*EventSubaccountDeposit) ProtoMessage() {} func (*EventSubaccountDeposit) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{17} + return fileDescriptor_8ac8f3da550fa1c4, []int{18} } func (m *EventSubaccountDeposit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1074,7 +1118,7 @@ func (m *EventSubaccountWithdraw) Reset() { *m = EventSubaccountWithdraw func (m *EventSubaccountWithdraw) String() string { return proto.CompactTextString(m) } func (*EventSubaccountWithdraw) ProtoMessage() {} func (*EventSubaccountWithdraw) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{18} + return fileDescriptor_8ac8f3da550fa1c4, []int{19} } func (m *EventSubaccountWithdraw) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1134,7 +1178,7 @@ func (m *EventSubaccountBalanceTransfer) Reset() { *m = EventSubaccountB func (m *EventSubaccountBalanceTransfer) String() string { return proto.CompactTextString(m) } func (*EventSubaccountBalanceTransfer) ProtoMessage() {} func (*EventSubaccountBalanceTransfer) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{19} + return fileDescriptor_8ac8f3da550fa1c4, []int{20} } func (m *EventSubaccountBalanceTransfer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1192,7 +1236,7 @@ func (m *EventBatchDepositUpdate) Reset() { *m = EventBatchDepositUpdate func (m *EventBatchDepositUpdate) String() string { return proto.CompactTextString(m) } func (*EventBatchDepositUpdate) ProtoMessage() {} func (*EventBatchDepositUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{20} + return fileDescriptor_8ac8f3da550fa1c4, []int{21} } func (m *EventBatchDepositUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1237,7 +1281,7 @@ func (m *DerivativeMarketOrderCancel) Reset() { *m = DerivativeMarketOrd func (m *DerivativeMarketOrderCancel) String() string { return proto.CompactTextString(m) } func (*DerivativeMarketOrderCancel) ProtoMessage() {} func (*DerivativeMarketOrderCancel) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{21} + return fileDescriptor_8ac8f3da550fa1c4, []int{22} } func (m *DerivativeMarketOrderCancel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1284,7 +1328,7 @@ func (m *EventCancelDerivativeOrder) Reset() { *m = EventCancelDerivativ func (m *EventCancelDerivativeOrder) String() string { return proto.CompactTextString(m) } func (*EventCancelDerivativeOrder) ProtoMessage() {} func (*EventCancelDerivativeOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{22} + return fileDescriptor_8ac8f3da550fa1c4, []int{23} } func (m *EventCancelDerivativeOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1349,7 +1393,7 @@ func (m *EventFeeDiscountSchedule) Reset() { *m = EventFeeDiscountSchedu func (m *EventFeeDiscountSchedule) String() string { return proto.CompactTextString(m) } func (*EventFeeDiscountSchedule) ProtoMessage() {} func (*EventFeeDiscountSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{23} + return fileDescriptor_8ac8f3da550fa1c4, []int{24} } func (m *EventFeeDiscountSchedule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1394,7 +1438,7 @@ func (m *EventTradingRewardCampaignUpdate) Reset() { *m = EventTradingRe func (m *EventTradingRewardCampaignUpdate) String() string { return proto.CompactTextString(m) } func (*EventTradingRewardCampaignUpdate) ProtoMessage() {} func (*EventTradingRewardCampaignUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{24} + return fileDescriptor_8ac8f3da550fa1c4, []int{25} } func (m *EventTradingRewardCampaignUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1445,7 +1489,7 @@ func (m *EventTradingRewardDistribution) Reset() { *m = EventTradingRewa func (m *EventTradingRewardDistribution) String() string { return proto.CompactTextString(m) } func (*EventTradingRewardDistribution) ProtoMessage() {} func (*EventTradingRewardDistribution) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{25} + return fileDescriptor_8ac8f3da550fa1c4, []int{26} } func (m *EventTradingRewardDistribution) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1492,7 +1536,7 @@ func (m *EventNewConditionalDerivativeOrder) Reset() { *m = EventNewCond func (m *EventNewConditionalDerivativeOrder) String() string { return proto.CompactTextString(m) } func (*EventNewConditionalDerivativeOrder) ProtoMessage() {} func (*EventNewConditionalDerivativeOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{26} + return fileDescriptor_8ac8f3da550fa1c4, []int{27} } func (m *EventNewConditionalDerivativeOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1560,7 +1604,7 @@ func (m *EventCancelConditionalDerivativeOrder) Reset() { *m = EventCanc func (m *EventCancelConditionalDerivativeOrder) String() string { return proto.CompactTextString(m) } func (*EventCancelConditionalDerivativeOrder) ProtoMessage() {} func (*EventCancelConditionalDerivativeOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{27} + return fileDescriptor_8ac8f3da550fa1c4, []int{28} } func (m *EventCancelConditionalDerivativeOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1631,7 +1675,7 @@ func (m *EventConditionalDerivativeOrderTrigger) Reset() { func (m *EventConditionalDerivativeOrderTrigger) String() string { return proto.CompactTextString(m) } func (*EventConditionalDerivativeOrderTrigger) ProtoMessage() {} func (*EventConditionalDerivativeOrderTrigger) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{28} + return fileDescriptor_8ac8f3da550fa1c4, []int{29} } func (m *EventConditionalDerivativeOrderTrigger) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1706,7 +1750,7 @@ func (m *EventOrderFail) Reset() { *m = EventOrderFail{} } func (m *EventOrderFail) String() string { return proto.CompactTextString(m) } func (*EventOrderFail) ProtoMessage() {} func (*EventOrderFail) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{29} + return fileDescriptor_8ac8f3da550fa1c4, []int{30} } func (m *EventOrderFail) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1775,7 +1819,7 @@ func (m *EventAtomicMarketOrderFeeMultipliersUpdated) String() string { } func (*EventAtomicMarketOrderFeeMultipliersUpdated) ProtoMessage() {} func (*EventAtomicMarketOrderFeeMultipliersUpdated) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{30} + return fileDescriptor_8ac8f3da550fa1c4, []int{31} } func (m *EventAtomicMarketOrderFeeMultipliersUpdated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1820,7 +1864,7 @@ func (m *EventOrderbookUpdate) Reset() { *m = EventOrderbookUpdate{} } func (m *EventOrderbookUpdate) String() string { return proto.CompactTextString(m) } func (*EventOrderbookUpdate) ProtoMessage() {} func (*EventOrderbookUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{31} + return fileDescriptor_8ac8f3da550fa1c4, []int{32} } func (m *EventOrderbookUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1872,7 +1916,7 @@ func (m *OrderbookUpdate) Reset() { *m = OrderbookUpdate{} } func (m *OrderbookUpdate) String() string { return proto.CompactTextString(m) } func (*OrderbookUpdate) ProtoMessage() {} func (*OrderbookUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{32} + return fileDescriptor_8ac8f3da550fa1c4, []int{33} } func (m *OrderbookUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1925,7 +1969,7 @@ func (m *Orderbook) Reset() { *m = Orderbook{} } func (m *Orderbook) String() string { return proto.CompactTextString(m) } func (*Orderbook) ProtoMessage() {} func (*Orderbook) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{33} + return fileDescriptor_8ac8f3da550fa1c4, []int{34} } func (m *Orderbook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1984,7 +2028,7 @@ func (m *EventGrantAuthorizations) Reset() { *m = EventGrantAuthorizatio func (m *EventGrantAuthorizations) String() string { return proto.CompactTextString(m) } func (*EventGrantAuthorizations) ProtoMessage() {} func (*EventGrantAuthorizations) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{34} + return fileDescriptor_8ac8f3da550fa1c4, []int{35} } func (m *EventGrantAuthorizations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2037,7 +2081,7 @@ func (m *EventGrantActivation) Reset() { *m = EventGrantActivation{} } func (m *EventGrantActivation) String() string { return proto.CompactTextString(m) } func (*EventGrantActivation) ProtoMessage() {} func (*EventGrantActivation) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{35} + return fileDescriptor_8ac8f3da550fa1c4, []int{36} } func (m *EventGrantActivation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2089,7 +2133,7 @@ func (m *EventInvalidGrant) Reset() { *m = EventInvalidGrant{} } func (m *EventInvalidGrant) String() string { return proto.CompactTextString(m) } func (*EventInvalidGrant) ProtoMessage() {} func (*EventInvalidGrant) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{36} + return fileDescriptor_8ac8f3da550fa1c4, []int{37} } func (m *EventInvalidGrant) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2144,7 +2188,7 @@ func (m *EventOrderCancelFail) Reset() { *m = EventOrderCancelFail{} } func (m *EventOrderCancelFail) String() string { return proto.CompactTextString(m) } func (*EventOrderCancelFail) ProtoMessage() {} func (*EventOrderCancelFail) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{37} + return fileDescriptor_8ac8f3da550fa1c4, []int{38} } func (m *EventOrderCancelFail) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2218,7 +2262,7 @@ func (m *EventDerivativeOrdersV2Migration) Reset() { *m = EventDerivativ func (m *EventDerivativeOrdersV2Migration) String() string { return proto.CompactTextString(m) } func (*EventDerivativeOrdersV2Migration) ProtoMessage() {} func (*EventDerivativeOrdersV2Migration) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{38} + return fileDescriptor_8ac8f3da550fa1c4, []int{39} } func (m *EventDerivativeOrdersV2Migration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2287,7 +2331,7 @@ func (m *DerivativeOrderV2Changes) Reset() { *m = DerivativeOrderV2Chang func (m *DerivativeOrderV2Changes) String() string { return proto.CompactTextString(m) } func (*DerivativeOrderV2Changes) ProtoMessage() {} func (*DerivativeOrderV2Changes) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{39} + return fileDescriptor_8ac8f3da550fa1c4, []int{40} } func (m *DerivativeOrderV2Changes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2340,7 +2384,7 @@ func (m *EventSpotOrdersV2Migration) Reset() { *m = EventSpotOrdersV2Mig func (m *EventSpotOrdersV2Migration) String() string { return proto.CompactTextString(m) } func (*EventSpotOrdersV2Migration) ProtoMessage() {} func (*EventSpotOrdersV2Migration) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{40} + return fileDescriptor_8ac8f3da550fa1c4, []int{41} } func (m *EventSpotOrdersV2Migration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2405,7 +2449,7 @@ func (m *EventTriggerConditionalMarketOrderFailed) Reset() { func (m *EventTriggerConditionalMarketOrderFailed) String() string { return proto.CompactTextString(m) } func (*EventTriggerConditionalMarketOrderFailed) ProtoMessage() {} func (*EventTriggerConditionalMarketOrderFailed) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{41} + return fileDescriptor_8ac8f3da550fa1c4, []int{42} } func (m *EventTriggerConditionalMarketOrderFailed) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2484,7 +2528,7 @@ func (m *EventTriggerConditionalLimitOrderFailed) Reset() { func (m *EventTriggerConditionalLimitOrderFailed) String() string { return proto.CompactTextString(m) } func (*EventTriggerConditionalLimitOrderFailed) ProtoMessage() {} func (*EventTriggerConditionalLimitOrderFailed) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{42} + return fileDescriptor_8ac8f3da550fa1c4, []int{43} } func (m *EventTriggerConditionalLimitOrderFailed) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2565,7 +2609,7 @@ func (m *SpotOrderV2Changes) Reset() { *m = SpotOrderV2Changes{} } func (m *SpotOrderV2Changes) String() string { return proto.CompactTextString(m) } func (*SpotOrderV2Changes) ProtoMessage() {} func (*SpotOrderV2Changes) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{43} + return fileDescriptor_8ac8f3da550fa1c4, []int{44} } func (m *SpotOrderV2Changes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2616,7 +2660,7 @@ func (m *EventDerivativePositionV2Migration) Reset() { *m = EventDerivat func (m *EventDerivativePositionV2Migration) String() string { return proto.CompactTextString(m) } func (*EventDerivativePositionV2Migration) ProtoMessage() {} func (*EventDerivativePositionV2Migration) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{44} + return fileDescriptor_8ac8f3da550fa1c4, []int{45} } func (m *EventDerivativePositionV2Migration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2652,6 +2696,67 @@ func (m *EventDerivativePositionV2Migration) GetPosition() *DerivativePosition { return nil } +type EventPositionTransfer struct { + MarketId string `protobuf:"bytes,1,opt,name=market_id,json=marketId,proto3" json:"market_id,omitempty"` + SourceSubaccountId string `protobuf:"bytes,2,opt,name=source_subaccount_id,json=sourceSubaccountId,proto3" json:"source_subaccount_id,omitempty"` + DestinationSubaccountId string `protobuf:"bytes,3,opt,name=destination_subaccount_id,json=destinationSubaccountId,proto3" json:"destination_subaccount_id,omitempty"` + Quantity cosmossdk_io_math.LegacyDec `protobuf:"bytes,4,opt,name=quantity,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"quantity"` +} + +func (m *EventPositionTransfer) Reset() { *m = EventPositionTransfer{} } +func (m *EventPositionTransfer) String() string { return proto.CompactTextString(m) } +func (*EventPositionTransfer) ProtoMessage() {} +func (*EventPositionTransfer) Descriptor() ([]byte, []int) { + return fileDescriptor_8ac8f3da550fa1c4, []int{46} +} +func (m *EventPositionTransfer) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventPositionTransfer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EventPositionTransfer.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *EventPositionTransfer) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventPositionTransfer.Merge(m, src) +} +func (m *EventPositionTransfer) XXX_Size() int { + return m.Size() +} +func (m *EventPositionTransfer) XXX_DiscardUnknown() { + xxx_messageInfo_EventPositionTransfer.DiscardUnknown(m) +} + +var xxx_messageInfo_EventPositionTransfer proto.InternalMessageInfo + +func (m *EventPositionTransfer) GetMarketId() string { + if m != nil { + return m.MarketId + } + return "" +} + +func (m *EventPositionTransfer) GetSourceSubaccountId() string { + if m != nil { + return m.SourceSubaccountId + } + return "" +} + +func (m *EventPositionTransfer) GetDestinationSubaccountId() string { + if m != nil { + return m.DestinationSubaccountId + } + return "" +} + func init() { proto.RegisterType((*EventBatchSpotExecution)(nil), "injective.exchange.v2.EventBatchSpotExecution") proto.RegisterType((*EventBatchDerivativeExecution)(nil), "injective.exchange.v2.EventBatchDerivativeExecution") @@ -2663,6 +2768,7 @@ func init() { proto.RegisterType((*EventMarketBeyondBankruptcy)(nil), "injective.exchange.v2.EventMarketBeyondBankruptcy") proto.RegisterType((*EventAllPositionsHaircut)(nil), "injective.exchange.v2.EventAllPositionsHaircut") proto.RegisterType((*EventBinaryOptionsMarketUpdate)(nil), "injective.exchange.v2.EventBinaryOptionsMarketUpdate") + proto.RegisterType((*EventDerivativeMarketUpdate)(nil), "injective.exchange.v2.EventDerivativeMarketUpdate") proto.RegisterType((*EventNewSpotOrders)(nil), "injective.exchange.v2.EventNewSpotOrders") proto.RegisterType((*EventNewDerivativeOrders)(nil), "injective.exchange.v2.EventNewDerivativeOrders") proto.RegisterType((*EventCancelSpotOrder)(nil), "injective.exchange.v2.EventCancelSpotOrder") @@ -2698,6 +2804,7 @@ func init() { proto.RegisterType((*EventTriggerConditionalLimitOrderFailed)(nil), "injective.exchange.v2.EventTriggerConditionalLimitOrderFailed") proto.RegisterType((*SpotOrderV2Changes)(nil), "injective.exchange.v2.SpotOrderV2Changes") proto.RegisterType((*EventDerivativePositionV2Migration)(nil), "injective.exchange.v2.EventDerivativePositionV2Migration") + proto.RegisterType((*EventPositionTransfer)(nil), "injective.exchange.v2.EventPositionTransfer") } func init() { @@ -2705,158 +2812,162 @@ func init() { } var fileDescriptor_8ac8f3da550fa1c4 = []byte{ - // 2401 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5a, 0xbb, 0x6f, 0x1c, 0xc7, - 0x19, 0xd7, 0x1e, 0x29, 0x8a, 0xf7, 0x1d, 0x45, 0x8a, 0x2b, 0x51, 0xa6, 0x24, 0x8b, 0xa4, 0xd6, - 0x7a, 0x59, 0xb6, 0xef, 0x2c, 0x1a, 0x81, 0x8b, 0xbc, 0xc0, 0xa7, 0x44, 0x83, 0x94, 0xe9, 0xa5, - 0x64, 0x07, 0x09, 0x8c, 0xcd, 0xdc, 0xee, 0xf0, 0x6e, 0xcc, 0xbd, 0x9d, 0xe5, 0xce, 0xec, 0x49, - 0x97, 0xce, 0x41, 0x0a, 0x77, 0x4e, 0x13, 0xc4, 0x4d, 0xba, 0x74, 0x69, 0x92, 0x2e, 0x40, 0x8a, - 0x20, 0x6e, 0xe2, 0xd2, 0x49, 0x65, 0x18, 0x88, 0x11, 0x48, 0x55, 0xfe, 0x86, 0x34, 0xc1, 0x3c, - 0xf6, 0x71, 0xef, 0x3b, 0x4a, 0x41, 0x02, 0x77, 0xbb, 0xb3, 0xdf, 0x6b, 0x7e, 0xdf, 0x63, 0xbe, - 0x6f, 0xee, 0xc0, 0x22, 0xc1, 0x47, 0xd8, 0xe5, 0xa4, 0x89, 0x2b, 0xf8, 0x89, 0x5b, 0x47, 0x41, - 0x0d, 0x57, 0x9a, 0xab, 0x15, 0xdc, 0xc4, 0x01, 0x67, 0xe5, 0x30, 0xa2, 0x9c, 0x9a, 0x0b, 0x29, - 0x4d, 0x39, 0xa1, 0x29, 0x37, 0x57, 0x2f, 0x5f, 0xa8, 0xd1, 0x1a, 0x95, 0x14, 0x15, 0xf1, 0xa4, - 0x88, 0x2f, 0x2f, 0xb9, 0x94, 0x35, 0x28, 0xab, 0x54, 0x11, 0xc3, 0x95, 0xe6, 0xdd, 0x2a, 0xe6, - 0xe8, 0x6e, 0xc5, 0xa5, 0x24, 0xd0, 0xdf, 0x6f, 0x64, 0x0a, 0x69, 0x84, 0x5c, 0x3f, 0x23, 0x52, - 0xaf, 0x9a, 0xec, 0x7a, 0x1f, 0xbb, 0x12, 0xfd, 0x8a, 0xaa, 0x8f, 0xf5, 0x0d, 0x14, 0x1d, 0x61, - 0xae, 0x69, 0xae, 0xf5, 0xa6, 0xa1, 0x91, 0x87, 0x23, 0x45, 0x62, 0xfd, 0xdd, 0x80, 0x97, 0xb6, - 0xc4, 0x8e, 0xd7, 0x11, 0x77, 0xeb, 0x07, 0x21, 0xe5, 0x5b, 0x4f, 0xb0, 0x1b, 0x73, 0x42, 0x03, - 0xf3, 0x0a, 0x14, 0x95, 0x38, 0x87, 0x78, 0x8b, 0xc6, 0x8a, 0x71, 0xbb, 0x68, 0x4f, 0xab, 0x85, - 0x1d, 0xcf, 0x5c, 0x80, 0x29, 0xc2, 0x9c, 0x6a, 0xdc, 0x5a, 0x2c, 0xac, 0x18, 0xb7, 0xa7, 0xed, - 0xd3, 0x84, 0xad, 0xc7, 0x2d, 0xf3, 0x1d, 0x38, 0x8b, 0x13, 0x01, 0x0f, 0x5b, 0x21, 0x5e, 0x9c, - 0x58, 0x31, 0x6e, 0xcf, 0xae, 0x5e, 0x2f, 0xf7, 0x04, 0xb2, 0xbc, 0x95, 0xa7, 0xb5, 0xdb, 0x59, - 0xcd, 0xb7, 0x61, 0x8a, 0x47, 0xc8, 0xc3, 0x6c, 0x71, 0x72, 0x65, 0xe2, 0x76, 0x69, 0x75, 0xb9, - 0x8f, 0x90, 0x87, 0x82, 0x68, 0x97, 0xd6, 0x6c, 0x4d, 0x6e, 0xfd, 0xa3, 0x00, 0x57, 0xb3, 0x4d, - 0x6d, 0xe2, 0x88, 0x34, 0x91, 0xe0, 0x7a, 0xbe, 0xad, 0xdd, 0x80, 0x59, 0xc2, 0x1c, 0x9f, 0x1c, - 0xc7, 0xc4, 0x43, 0x42, 0x8a, 0xdc, 0xdb, 0xb4, 0x7d, 0x96, 0xb0, 0xdd, 0x6c, 0xd1, 0xb4, 0xc1, - 0x74, 0xe3, 0x46, 0xec, 0x4b, 0x8d, 0xce, 0x61, 0x1c, 0x78, 0x24, 0xa8, 0x2d, 0x4e, 0x0a, 0x1d, - 0xeb, 0xaf, 0x7c, 0xf1, 0xcd, 0xb2, 0xf1, 0xf5, 0x37, 0xcb, 0x57, 0x54, 0xa4, 0x30, 0xef, 0xa8, - 0x4c, 0x68, 0xa5, 0x81, 0x78, 0xbd, 0xbc, 0x8b, 0x6b, 0xc8, 0x6d, 0x6d, 0x62, 0xd7, 0x9e, 0xcf, - 0xd8, 0xb7, 0x15, 0x77, 0x37, 0xaa, 0xa7, 0x4f, 0x8e, 0xea, 0x5a, 0x8a, 0xea, 0x94, 0x44, 0xf5, - 0xd5, 0x3e, 0x42, 0x32, 0xd8, 0xba, 0xf0, 0xfd, 0x3c, 0xc1, 0x77, 0x97, 0x32, 0x2e, 0x6c, 0x64, - 0xdb, 0x11, 0x6d, 0xe4, 0x41, 0x18, 0x88, 0xef, 0x2b, 0x70, 0x96, 0xc5, 0x55, 0xe4, 0xba, 0x34, - 0x0e, 0x24, 0x81, 0x80, 0x79, 0xc6, 0x9e, 0xc9, 0x16, 0x77, 0x3c, 0xf3, 0x09, 0xdc, 0xf2, 0x29, - 0xe3, 0x12, 0x40, 0xe6, 0x1c, 0x46, 0xb4, 0xe1, 0xa0, 0x26, 0x22, 0x3e, 0xaa, 0xfa, 0xd8, 0xf1, - 0xe2, 0x88, 0x04, 0x35, 0x27, 0x44, 0x2d, 0x1a, 0x73, 0xe9, 0x06, 0x85, 0xed, 0xa9, 0x61, 0xd8, - 0x5a, 0x7e, 0xde, 0xe2, 0xb5, 0x44, 0xe0, 0xa6, 0x94, 0xb7, 0x2f, 0xc5, 0x99, 0x18, 0xae, 0x76, - 0x6a, 0x96, 0x19, 0xe3, 0xb8, 0x28, 0x70, 0xb1, 0xcf, 0x72, 0xbe, 0x1c, 0xaa, 0xef, 0x52, 0x9b, - 0xbe, 0x77, 0x85, 0x98, 0x0d, 0x25, 0xc5, 0xfa, 0x85, 0x01, 0x2f, 0xf7, 0x0a, 0xd2, 0x7d, 0xca, - 0xc8, 0x70, 0x0c, 0xef, 0x41, 0x31, 0xd4, 0x84, 0x6c, 0xb1, 0x30, 0xd0, 0x91, 0x07, 0x29, 0xac, - 0x89, 0x68, 0x3b, 0xe3, 0xb5, 0xfe, 0x64, 0xc0, 0x15, 0x69, 0x46, 0x66, 0xc1, 0x9e, 0x54, 0xb2, - 0x8f, 0x62, 0x86, 0xbd, 0xc1, 0x56, 0x5c, 0x83, 0x19, 0x86, 0x39, 0xf7, 0xb1, 0x13, 0x46, 0xc4, - 0xc5, 0xd2, 0x91, 0x45, 0xbb, 0xa4, 0xd6, 0xf6, 0xc5, 0x92, 0x59, 0x86, 0xf3, 0x9c, 0x72, 0xe4, - 0x3b, 0x0d, 0xc2, 0x98, 0x70, 0x9a, 0x84, 0x55, 0xf9, 0xcc, 0x9e, 0x97, 0x9f, 0xf6, 0xd4, 0x17, - 0x09, 0x93, 0xf9, 0x3a, 0x98, 0x6d, 0x94, 0x4e, 0x84, 0x38, 0x56, 0x90, 0xdb, 0xe7, 0x1a, 0x39, - 0x4a, 0x1b, 0x71, 0x6c, 0xed, 0xc3, 0x25, 0x69, 0xfc, 0x81, 0xd4, 0xe8, 0x29, 0xcb, 0xd7, 0x91, - 0x2f, 0x30, 0x1e, 0x6c, 0xfa, 0x45, 0x98, 0x42, 0x0d, 0x01, 0x8a, 0x36, 0x5a, 0xbf, 0x59, 0x07, - 0xda, 0x2b, 0x0f, 0xe8, 0x0b, 0x14, 0xfa, 0x69, 0x02, 0xb2, 0x96, 0x85, 0x5b, 0x34, 0xf0, 0xd6, - 0x51, 0x70, 0x14, 0xc5, 0x21, 0x77, 0x5b, 0xcf, 0x0d, 0xf2, 0x9b, 0x70, 0x21, 0x01, 0x4d, 0xcb, - 0xc9, 0xa3, 0x9c, 0x00, 0xaa, 0x94, 0x4b, 0xf0, 0xac, 0x4f, 0x0c, 0x58, 0x94, 0x16, 0xad, 0xf9, - 0x7e, 0x12, 0x16, 0xec, 0x3e, 0x22, 0x91, 0x1b, 0xf3, 0xe7, 0x36, 0xa7, 0xb7, 0x0f, 0x27, 0xfa, - 0xf8, 0xf0, 0x23, 0x58, 0x52, 0x79, 0x40, 0x02, 0x14, 0xb5, 0xde, 0x0d, 0xa5, 0x29, 0xca, 0xd6, - 0x47, 0xa1, 0x87, 0x38, 0x36, 0xef, 0xc3, 0x94, 0x52, 0x2f, 0x8d, 0x29, 0xad, 0xde, 0xe9, 0x13, - 0xe9, 0x3d, 0x24, 0xac, 0x4f, 0x8a, 0x34, 0xb5, 0x35, 0xbf, 0xf5, 0x67, 0x03, 0x4c, 0xe5, 0x5e, - 0xfc, 0x58, 0x1c, 0x76, 0x32, 0x23, 0xd9, 0xe0, 0x0d, 0x6f, 0x02, 0x54, 0xe3, 0x96, 0xaa, 0x01, - 0x49, 0xae, 0xdd, 0xe8, 0x97, 0x6b, 0x21, 0xe5, 0xbb, 0xa4, 0x41, 0x94, 0x60, 0xbb, 0x58, 0x8d, - 0x5b, 0x5a, 0xc5, 0x36, 0x94, 0x18, 0xf6, 0xfd, 0x44, 0xcc, 0xc4, 0x38, 0x62, 0x40, 0x70, 0x2a, - 0x39, 0xd6, 0xdf, 0x12, 0xc7, 0x3d, 0xc0, 0x8f, 0xb3, 0x94, 0x1d, 0x65, 0x1f, 0xef, 0xf4, 0xd8, - 0xc7, 0x6b, 0x43, 0x8b, 0x7f, 0xef, 0xdd, 0xec, 0xf6, 0xda, 0xcd, 0x58, 0xc2, 0xf2, 0x7b, 0x6a, - 0xc2, 0x05, 0xb9, 0x25, 0x55, 0x1a, 0x53, 0xbf, 0x0c, 0xde, 0xce, 0x1a, 0x9c, 0x96, 0xda, 0x65, - 0x00, 0x8e, 0x0a, 0xa5, 0x0e, 0x07, 0xc5, 0x69, 0xfd, 0x08, 0x16, 0x54, 0xf5, 0x08, 0x29, 0x6f, - 0x0b, 0xb8, 0x1f, 0x76, 0x04, 0xdc, 0xb5, 0x01, 0xc2, 0x7b, 0xc6, 0xd9, 0x67, 0x05, 0xb8, 0x2c, - 0x45, 0xef, 0xe3, 0x28, 0xc4, 0x3c, 0x46, 0x7e, 0x9b, 0xfc, 0xad, 0x0e, 0xf9, 0xb7, 0x86, 0x22, - 0xd7, 0x4b, 0x8b, 0xe9, 0xc1, 0x42, 0x98, 0xc8, 0x4f, 0x12, 0x9f, 0x04, 0x87, 0x54, 0x43, 0xd2, - 0x2f, 0x4d, 0x3a, 0x6c, 0xda, 0x09, 0x0e, 0xa9, 0x14, 0x6c, 0xd8, 0xe7, 0xc3, 0xee, 0x4f, 0xe6, - 0x1e, 0x9c, 0x49, 0xba, 0x98, 0x09, 0x29, 0xf7, 0x8d, 0xd1, 0xe4, 0xea, 0xe6, 0x45, 0x8b, 0x4e, - 0x64, 0x58, 0x5f, 0x1b, 0x3a, 0xdf, 0xb7, 0x9e, 0x84, 0x24, 0x6a, 0x6d, 0xc7, 0x3c, 0x8e, 0x30, - 0xfb, 0x6f, 0xc0, 0x73, 0x0c, 0x97, 0xb1, 0xd4, 0xe1, 0x1c, 0x2a, 0x25, 0x6d, 0x18, 0xa9, 0xbd, - 0x94, 0xfb, 0xb6, 0x50, 0x5d, 0xc6, 0xe5, 0x70, 0x7a, 0x09, 0xf7, 0xfe, 0x6c, 0xfd, 0xb5, 0x00, - 0xd7, 0x7a, 0xf9, 0x5d, 0x63, 0xa1, 0xf7, 0x37, 0x30, 0xae, 0x73, 0x70, 0x17, 0x4e, 0x0a, 0xf7, - 0xa9, 0x14, 0x6e, 0xf3, 0x0e, 0xcc, 0x13, 0xe6, 0xd4, 0x69, 0x1c, 0xf9, 0x2d, 0x27, 0xef, 0xc7, - 0x69, 0x7b, 0x8e, 0xb0, 0xfb, 0x72, 0x3d, 0x69, 0x33, 0xb7, 0x61, 0x46, 0x53, 0xe4, 0x4e, 0xdd, - 0xd1, 0x9a, 0xd6, 0x92, 0x66, 0x14, 0x15, 0xdd, 0x5c, 0x07, 0x10, 0xdb, 0xd1, 0x07, 0xc4, 0xe9, - 0xd1, 0xa5, 0x48, 0x58, 0xe4, 0x19, 0x62, 0xfd, 0xda, 0x80, 0x8b, 0x2a, 0x39, 0xd3, 0xf6, 0x65, - 0x13, 0xcb, 0xb6, 0xc5, 0x5c, 0x86, 0x12, 0x8b, 0x5c, 0x07, 0x79, 0x5e, 0x84, 0x19, 0xd3, 0x00, - 0x02, 0x8b, 0xdc, 0x35, 0xb5, 0x32, 0x5a, 0x83, 0xf9, 0x76, 0x7a, 0x56, 0xab, 0x48, 0xb8, 0x54, - 0x56, 0x96, 0x95, 0xc5, 0xf8, 0x56, 0xd6, 0x93, 0x59, 0x79, 0x83, 0x92, 0x20, 0x09, 0x2b, 0x7d, - 0x98, 0x7f, 0x96, 0x8c, 0x4c, 0x99, 0x65, 0x1f, 0x10, 0x5e, 0xf7, 0x22, 0xf4, 0xb8, 0x5b, 0xb3, - 0xd1, 0x43, 0xf3, 0x32, 0x94, 0x3c, 0xc6, 0x53, 0xfb, 0xd5, 0x01, 0x0a, 0x1e, 0xe3, 0x89, 0xfd, - 0x27, 0x36, 0xed, 0x0f, 0x49, 0x6e, 0x65, 0xa6, 0xe9, 0xbe, 0xe5, 0x61, 0x84, 0x02, 0x76, 0x88, - 0x23, 0x11, 0x0f, 0x02, 0xbc, 0x6e, 0x2b, 0x8b, 0xf6, 0x1c, 0x8b, 0xdc, 0x83, 0xbc, 0xa1, 0x77, - 0x60, 0x5e, 0x18, 0xda, 0x8d, 0x65, 0xd1, 0x9e, 0xf3, 0x18, 0x3f, 0x78, 0x21, 0x70, 0xd6, 0xf3, - 0x03, 0xa8, 0x76, 0xb1, 0xce, 0x93, 0x3d, 0x98, 0xf3, 0xd4, 0x82, 0x13, 0xcb, 0x15, 0xe1, 0x6c, - 0x71, 0xd2, 0x5c, 0xef, 0x5b, 0x10, 0x72, 0xec, 0xf6, 0xac, 0x97, 0x7f, 0x65, 0xd6, 0xe7, 0x06, - 0x5c, 0xe9, 0x2c, 0x19, 0xb9, 0x96, 0xdc, 0x7c, 0x04, 0x33, 0x3a, 0x2d, 0xd5, 0xc1, 0xa2, 0x8a, - 0xcf, 0xeb, 0x23, 0x16, 0x9f, 0xec, 0x7c, 0x31, 0xec, 0x52, 0x23, 0x5b, 0x32, 0x77, 0x61, 0x4e, - 0x4d, 0x0e, 0xce, 0x71, 0x8c, 0x02, 0x4e, 0xb8, 0x9a, 0x2b, 0x47, 0x9c, 0x20, 0x66, 0x15, 0xef, - 0x7b, 0x9a, 0xd5, 0xfa, 0x4d, 0x72, 0xb2, 0x28, 0xa3, 0x3b, 0x5a, 0x80, 0xc1, 0xa5, 0xe5, 0x3a, - 0xc8, 0x59, 0xb5, 0x41, 0x34, 0xb3, 0x9e, 0x6f, 0xdb, 0x17, 0x4d, 0x1b, 0x4a, 0xbe, 0x78, 0xd5, - 0x28, 0x28, 0x77, 0x8e, 0x73, 0xb6, 0x6b, 0x10, 0xc0, 0x4f, 0x57, 0xcc, 0x3a, 0x9c, 0xcf, 0x43, - 0xab, 0x47, 0x29, 0x59, 0x60, 0x4a, 0xab, 0xab, 0xe3, 0x20, 0xac, 0x8c, 0xd4, 0x2a, 0xe6, 0x1b, - 0x9d, 0x1f, 0xac, 0xaa, 0x6e, 0x8f, 0xb6, 0x31, 0xde, 0x24, 0x4c, 0x46, 0xe7, 0x81, 0x5b, 0xc7, - 0x5e, 0xec, 0x63, 0x73, 0x1b, 0xa6, 0x99, 0x7e, 0x1e, 0xd2, 0x49, 0xf6, 0xe0, 0xb6, 0x53, 0x5e, - 0xeb, 0x2b, 0x03, 0x56, 0xa4, 0x12, 0x31, 0x19, 0x8b, 0xa2, 0x87, 0x1f, 0xa3, 0xc8, 0xdb, 0x40, - 0x8d, 0x10, 0x91, 0x5a, 0xa0, 0x83, 0xf7, 0x11, 0x9c, 0x75, 0xf5, 0x8a, 0x3a, 0x70, 0x94, 0xc6, - 0x37, 0x07, 0x5c, 0x62, 0x74, 0x89, 0x12, 0x67, 0x8a, 0x3d, 0xe3, 0xe6, 0xde, 0xcc, 0x0f, 0x61, - 0x21, 0x15, 0x1b, 0x49, 0x62, 0x27, 0xa4, 0xd4, 0x1f, 0x36, 0x04, 0x26, 0x12, 0x95, 0xfc, 0x7d, - 0x4a, 0x7d, 0xfb, 0xbc, 0xdb, 0xb5, 0xc6, 0xac, 0x50, 0x17, 0x90, 0x36, 0x73, 0x36, 0x09, 0xe3, - 0x11, 0xa9, 0xaa, 0xab, 0x93, 0x07, 0x30, 0x97, 0x54, 0x03, 0xa5, 0x3f, 0x49, 0xca, 0x7e, 0x1d, - 0xd8, 0x9a, 0xa2, 0x56, 0xa2, 0x98, 0x3d, 0x8b, 0xda, 0xde, 0xad, 0xdf, 0x1b, 0x60, 0x25, 0x0d, - 0xed, 0x06, 0x0d, 0x3c, 0x39, 0x8a, 0xa0, 0xf1, 0x02, 0xfb, 0x7b, 0xed, 0xbd, 0xe0, 0xcd, 0xa1, - 0x01, 0xa5, 0x7a, 0x50, 0xc5, 0x64, 0x9a, 0x30, 0x59, 0x47, 0xac, 0x2e, 0x23, 0x7d, 0xc6, 0x96, - 0xcf, 0x42, 0x1d, 0x49, 0xfa, 0x05, 0x19, 0xa6, 0xd3, 0xf6, 0x34, 0xd1, 0x27, 0xbd, 0xf5, 0xab, - 0x02, 0xdc, 0xc8, 0xe5, 0xe0, 0x49, 0xad, 0xfe, 0xdf, 0xa5, 0x63, 0x67, 0xa5, 0x9b, 0x7c, 0x21, - 0x95, 0xce, 0xfa, 0xb7, 0x01, 0x37, 0x15, 0x2e, 0x7d, 0x11, 0x79, 0x18, 0x91, 0x5a, 0xad, 0x17, - 0x30, 0x33, 0x39, 0x60, 0x6e, 0xc2, 0xac, 0xc6, 0x40, 0x93, 0x6b, 0x64, 0x3a, 0x56, 0xc5, 0xd8, - 0xcb, 0xd5, 0x23, 0xf6, 0x74, 0x61, 0xc9, 0x39, 0xd2, 0x4c, 0xbf, 0x49, 0xcd, 0xf7, 0x85, 0x5b, - 0xef, 0xc0, 0x7c, 0xe8, 0x23, 0xb7, 0x9d, 0x7c, 0x52, 0x92, 0xcf, 0xa9, 0x0f, 0x19, 0x6d, 0x19, - 0xce, 0x77, 0x4a, 0x77, 0x89, 0xa7, 0xda, 0x19, 0x7b, 0xbe, 0x5d, 0xf8, 0x06, 0xf1, 0x2c, 0x1f, - 0x66, 0xe5, 0xe6, 0xe5, 0xc2, 0x36, 0x22, 0xbe, 0xb9, 0x08, 0x67, 0x74, 0xb0, 0xeb, 0x2d, 0x26, - 0xaf, 0xe6, 0x45, 0x98, 0x12, 0xaa, 0xb1, 0x4a, 0xdb, 0x19, 0x5b, 0xbf, 0x99, 0x17, 0xe0, 0xf4, - 0xa1, 0x8f, 0x6a, 0x6a, 0xa2, 0x3a, 0x6b, 0xab, 0x17, 0x11, 0xa0, 0x2e, 0xf1, 0xd4, 0x35, 0x68, - 0xd1, 0x96, 0xcf, 0xd6, 0xa7, 0x06, 0xbc, 0xa6, 0x06, 0x78, 0x4e, 0x1b, 0xc4, 0xcd, 0x79, 0x66, - 0x1b, 0xe3, 0xbd, 0xd8, 0xe7, 0x24, 0xf4, 0x09, 0x8e, 0x98, 0xaa, 0x46, 0x9e, 0xf9, 0x53, 0xb8, - 0x98, 0x5c, 0x0d, 0x60, 0xec, 0x34, 0x32, 0x02, 0x9d, 0xbd, 0xfd, 0x2a, 0xa1, 0x6e, 0x2e, 0xf3, - 0x32, 0xed, 0x0b, 0x8d, 0xee, 0x45, 0x66, 0xfd, 0xd1, 0xd0, 0x63, 0x9c, 0xb4, 0xa2, 0x4a, 0xe9, - 0x91, 0xae, 0x84, 0x3b, 0x30, 0xc3, 0x42, 0xda, 0x79, 0x86, 0xf7, 0x4b, 0xd2, 0x0e, 0x6e, 0xbb, - 0x24, 0x78, 0xf5, 0x11, 0x6e, 0x3e, 0x02, 0xd3, 0x4b, 0x03, 0x2a, 0x15, 0x58, 0x18, 0x4b, 0xe0, - 0x7c, 0x26, 0x21, 0xe9, 0x0c, 0x5c, 0x98, 0xeb, 0x34, 0xfa, 0x1c, 0x4c, 0x30, 0x7c, 0x2c, 0xfd, - 0x36, 0x69, 0x8b, 0x47, 0xf3, 0x07, 0x50, 0xa4, 0x09, 0x91, 0x2e, 0x34, 0x2b, 0xc3, 0x54, 0xda, - 0x19, 0x8b, 0xf5, 0x5b, 0x03, 0x8a, 0xe9, 0x87, 0xc1, 0x09, 0xf0, 0x5d, 0x35, 0xaa, 0xfb, 0xb8, - 0x89, 0xd3, 0xca, 0xfe, 0x72, 0x1f, 0x5d, 0xbb, 0x82, 0x48, 0xce, 0xe6, 0xf2, 0x89, 0x99, 0xdf, - 0xd7, 0xb3, 0xb9, 0xe6, 0x9e, 0x18, 0x81, 0x5b, 0x0e, 0xe3, 0x8a, 0xdd, 0x7a, 0xac, 0x0f, 0xd0, - 0x7b, 0x11, 0x0a, 0xf8, 0x5a, 0xcc, 0xeb, 0x34, 0x22, 0x3f, 0x93, 0xb7, 0xba, 0x4c, 0x04, 0x74, - 0x4d, 0x2c, 0xeb, 0xe6, 0xa8, 0x68, 0x27, 0xaf, 0xe6, 0x1a, 0x4c, 0xc9, 0xc7, 0x61, 0xe7, 0x50, - 0xb7, 0x54, 0x5b, 0x33, 0x5a, 0x1f, 0x27, 0xf1, 0xa3, 0x68, 0x04, 0xaf, 0xba, 0x4c, 0x4e, 0xb5, - 0xe2, 0x76, 0xad, 0x38, 0x6f, 0x4f, 0xa1, 0xdd, 0x9e, 0xef, 0xb4, 0xb5, 0xa3, 0xc5, 0xf5, 0xab, - 0xba, 0xd7, 0x5a, 0xe8, 0xee, 0xb5, 0x76, 0x02, 0x9e, 0x36, 0xa3, 0xf7, 0x60, 0x5e, 0x9a, 0xb0, - 0x13, 0x34, 0x91, 0x4f, 0x3c, 0x69, 0xc9, 0x49, 0xf4, 0x5b, 0xbf, 0x6b, 0x4b, 0x06, 0x55, 0xca, - 0x65, 0x4d, 0x18, 0xff, 0x66, 0xbc, 0xd8, 0x31, 0x3e, 0x5c, 0x05, 0xe8, 0xa8, 0x75, 0x45, 0x1d, - 0x66, 0xb2, 0x6c, 0x9d, 0x83, 0x09, 0x51, 0xa6, 0xd4, 0x8d, 0xa9, 0x78, 0x34, 0x57, 0xa0, 0xe4, - 0x61, 0xe6, 0x46, 0x44, 0x5e, 0x8c, 0xe9, 0x02, 0x96, 0x5f, 0x12, 0x85, 0x7b, 0xa5, 0xe3, 0x12, - 0x58, 0x5d, 0xcd, 0xbc, 0xbf, 0xba, 0x47, 0x6a, 0xd1, 0x08, 0x77, 0xfa, 0x3f, 0x81, 0xf9, 0xf4, - 0x72, 0xc9, 0x51, 0xee, 0x4e, 0x42, 0xa1, 0x32, 0xda, 0x69, 0xfc, 0xfe, 0xea, 0x86, 0x62, 0xb3, - 0xe7, 0x92, 0x7b, 0x26, 0xbd, 0x60, 0x7e, 0x08, 0x66, 0x76, 0xdb, 0x94, 0x4a, 0x9f, 0x38, 0x99, - 0xf4, 0x73, 0xe9, 0xc5, 0x93, 0x5e, 0xb1, 0xfe, 0x52, 0x80, 0xc5, 0x7e, 0xe4, 0x09, 0x9c, 0x46, - 0x06, 0x67, 0xd2, 0x2e, 0x14, 0x72, 0xed, 0xc2, 0x5d, 0x30, 0xc2, 0x71, 0x7e, 0x87, 0x30, 0x42, - 0xc1, 0x72, 0x3c, 0xce, 0x4f, 0x09, 0xc6, 0xb1, 0x60, 0x69, 0xe4, 0xc6, 0xe9, 0xe1, 0x2c, 0x0d, - 0xc1, 0x72, 0xb8, 0x38, 0x35, 0x06, 0xcb, 0xa1, 0xf9, 0x16, 0x14, 0x78, 0xb8, 0x78, 0x66, 0xf4, - 0xa9, 0xbd, 0xc0, 0x43, 0xeb, 0x5f, 0x86, 0x1e, 0x4b, 0xb2, 0x5b, 0xd5, 0x91, 0x63, 0xe7, 0x51, - 0xff, 0xd8, 0x79, 0x75, 0xc0, 0xc5, 0xdb, 0xb0, 0xa8, 0xf9, 0x60, 0x40, 0xd4, 0x8c, 0x21, 0xb7, - 0x3b, 0x5e, 0x7e, 0x5e, 0x80, 0xdb, 0xba, 0x49, 0x96, 0x3d, 0x40, 0xae, 0xdb, 0xc9, 0x1f, 0xc3, - 0x88, 0xf8, 0xc3, 0x7e, 0x3f, 0x19, 0x29, 0xdf, 0xdb, 0x6f, 0x53, 0xc6, 0x08, 0xb2, 0xec, 0x36, - 0xa5, 0xa3, 0x66, 0xa8, 0x86, 0x27, 0x57, 0x33, 0x96, 0xa1, 0xa4, 0xfb, 0x19, 0x07, 0x47, 0x91, - 0xae, 0x10, 0xa0, 0x97, 0xb6, 0xa2, 0x28, 0xc9, 0x82, 0xa9, 0x34, 0x0b, 0xac, 0x8f, 0x0b, 0x70, - 0xab, 0x0f, 0x08, 0x59, 0xeb, 0xf9, 0x2d, 0xc7, 0xe0, 0x93, 0x02, 0x98, 0xdd, 0x11, 0xf3, 0xff, - 0x56, 0x32, 0x0e, 0xc7, 0x2a, 0x19, 0x49, 0xfe, 0x4f, 0x8d, 0x97, 0xff, 0x47, 0x7a, 0x88, 0xeb, - 0xfe, 0x1d, 0x33, 0x5f, 0x06, 0xb6, 0x60, 0x3a, 0xf9, 0xe5, 0x51, 0x8f, 0xc3, 0xc3, 0x7f, 0x7d, - 0x4e, 0x7f, 0xb4, 0x4c, 0x59, 0xd7, 0x8f, 0xbe, 0x78, 0xba, 0x64, 0x7c, 0xf9, 0x74, 0xc9, 0xf8, - 0xe7, 0xd3, 0x25, 0xe3, 0x97, 0xcf, 0x96, 0x4e, 0x7d, 0xf9, 0x6c, 0xe9, 0xd4, 0x57, 0xcf, 0x96, - 0x4e, 0xfd, 0xf8, 0xbd, 0x1a, 0xe1, 0xf5, 0xb8, 0x5a, 0x76, 0x69, 0xa3, 0xb2, 0x93, 0x08, 0xde, - 0x45, 0x55, 0x56, 0x49, 0xd5, 0xbc, 0xe1, 0xd2, 0x08, 0xe7, 0x5f, 0xeb, 0x88, 0x04, 0x95, 0x06, - 0x15, 0x93, 0x3d, 0xcb, 0xfe, 0x27, 0xc1, 0x5b, 0x21, 0x66, 0x95, 0xe6, 0x6a, 0x75, 0x4a, 0xfe, - 0x51, 0xe2, 0xad, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xa5, 0x8b, 0x83, 0xca, 0x2f, 0x22, 0x00, - 0x00, + // 2466 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5a, 0x4b, 0x6f, 0x1c, 0xc7, + 0x11, 0xd6, 0x2c, 0x29, 0x9a, 0x5b, 0x4b, 0x91, 0xe2, 0x88, 0x94, 0x28, 0xc9, 0x22, 0xa9, 0xb1, + 0x5e, 0x96, 0xed, 0x5d, 0x89, 0x46, 0x60, 0x20, 0x2f, 0x83, 0x4f, 0x89, 0x06, 0x29, 0xd3, 0x43, + 0xc9, 0x0e, 0x12, 0x18, 0x93, 0xde, 0x99, 0xe6, 0x6e, 0x9b, 0xb3, 0xd3, 0xc3, 0xe9, 0x1e, 0x4a, + 0x9b, 0x9b, 0x83, 0x1c, 0x7c, 0x73, 0x2e, 0x41, 0x7c, 0xc9, 0x2d, 0xb7, 0x5c, 0x92, 0x5b, 0x80, + 0x1c, 0x82, 0xf8, 0x12, 0x1f, 0x9d, 0x9c, 0x0c, 0x03, 0x31, 0x02, 0xe9, 0x94, 0xdf, 0x90, 0x4b, + 0xd0, 0x8f, 0x79, 0xec, 0x7b, 0x97, 0x92, 0x91, 0x20, 0xb7, 0x99, 0x9e, 0x7a, 0xf5, 0xd7, 0x55, + 0xd5, 0x55, 0xb5, 0x0b, 0x16, 0x09, 0x3e, 0xc2, 0x2e, 0x27, 0xc7, 0xb8, 0x82, 0x9f, 0xb8, 0x75, + 0x14, 0xd4, 0x70, 0xe5, 0x78, 0xa5, 0x82, 0x8f, 0x71, 0xc0, 0x59, 0x39, 0x8c, 0x28, 0xa7, 0xe6, + 0x7c, 0x4a, 0x53, 0x4e, 0x68, 0xca, 0xc7, 0x2b, 0x97, 0xe6, 0x6a, 0xb4, 0x46, 0x25, 0x45, 0x45, + 0x3c, 0x29, 0xe2, 0x4b, 0x8b, 0x2e, 0x65, 0x0d, 0xca, 0x2a, 0x55, 0xc4, 0x70, 0xe5, 0xf8, 0x6e, + 0x15, 0x73, 0x74, 0xb7, 0xe2, 0x52, 0x12, 0xe8, 0xef, 0xd7, 0x33, 0x85, 0x34, 0x42, 0xae, 0x9f, + 0x11, 0xa9, 0x57, 0x4d, 0x76, 0xad, 0x87, 0x5d, 0x89, 0x7e, 0x45, 0xd5, 0xc3, 0xfa, 0x06, 0x8a, + 0x0e, 0x31, 0xd7, 0x34, 0x57, 0xbb, 0xd3, 0xd0, 0xc8, 0xc3, 0x91, 0x22, 0xb1, 0xfe, 0x6e, 0xc0, + 0x85, 0x4d, 0xb1, 0xe3, 0x35, 0xc4, 0xdd, 0xfa, 0x7e, 0x48, 0xf9, 0xe6, 0x13, 0xec, 0xc6, 0x9c, + 0xd0, 0xc0, 0xbc, 0x0c, 0x45, 0x25, 0xce, 0x21, 0xde, 0x82, 0xb1, 0x6c, 0xdc, 0x2a, 0xda, 0x93, + 0x6a, 0x61, 0xdb, 0x33, 0xe7, 0x61, 0x82, 0x30, 0xa7, 0x1a, 0x37, 0x17, 0x0a, 0xcb, 0xc6, 0xad, + 0x49, 0xfb, 0x34, 0x61, 0x6b, 0x71, 0xd3, 0x7c, 0x07, 0xce, 0xe0, 0x44, 0xc0, 0xc3, 0x66, 0x88, + 0x17, 0xc6, 0x96, 0x8d, 0x5b, 0xd3, 0x2b, 0xd7, 0xca, 0x5d, 0x81, 0x2c, 0x6f, 0xe6, 0x69, 0xed, + 0x56, 0x56, 0xf3, 0x2d, 0x98, 0xe0, 0x11, 0xf2, 0x30, 0x5b, 0x18, 0x5f, 0x1e, 0xbb, 0x55, 0x5a, + 0x59, 0xea, 0x21, 0xe4, 0xa1, 0x20, 0xda, 0xa1, 0x35, 0x5b, 0x93, 0x5b, 0xff, 0x28, 0xc0, 0x95, + 0x6c, 0x53, 0x1b, 0x38, 0x22, 0xc7, 0x48, 0x70, 0x3d, 0xdf, 0xd6, 0xae, 0xc3, 0x34, 0x61, 0x8e, + 0x4f, 0x8e, 0x62, 0xe2, 0x21, 0x21, 0x45, 0xee, 0x6d, 0xd2, 0x3e, 0x43, 0xd8, 0x4e, 0xb6, 0x68, + 0xda, 0x60, 0xba, 0x71, 0x23, 0xf6, 0xa5, 0x46, 0xe7, 0x20, 0x0e, 0x3c, 0x12, 0xd4, 0x16, 0xc6, + 0x85, 0x8e, 0xb5, 0x57, 0xbe, 0xf8, 0x66, 0xc9, 0xf8, 0xfa, 0x9b, 0xa5, 0xcb, 0xca, 0x53, 0x98, + 0x77, 0x58, 0x26, 0xb4, 0xd2, 0x40, 0xbc, 0x5e, 0xde, 0xc1, 0x35, 0xe4, 0x36, 0x37, 0xb0, 0x6b, + 0xcf, 0x66, 0xec, 0x5b, 0x8a, 0xbb, 0x13, 0xd5, 0xd3, 0x27, 0x47, 0x75, 0x35, 0x45, 0x75, 0x42, + 0xa2, 0xfa, 0x6a, 0x0f, 0x21, 0x19, 0x6c, 0x1d, 0xf8, 0x7e, 0x9e, 0xe0, 0xbb, 0x43, 0x19, 0x17, + 0x36, 0xb2, 0xad, 0x88, 0x36, 0xf2, 0x20, 0xf4, 0xc5, 0xf7, 0x15, 0x38, 0xc3, 0xe2, 0x2a, 0x72, + 0x5d, 0x1a, 0x07, 0x92, 0x40, 0xc0, 0x3c, 0x65, 0x4f, 0x65, 0x8b, 0xdb, 0x9e, 0xf9, 0x04, 0x6e, + 0xfa, 0x94, 0x71, 0x09, 0x20, 0x73, 0x0e, 0x22, 0xda, 0x70, 0xd0, 0x31, 0x22, 0x3e, 0xaa, 0xfa, + 0xd8, 0xf1, 0xe2, 0x88, 0x04, 0x35, 0x27, 0x44, 0x4d, 0x1a, 0x73, 0x79, 0x0c, 0x0a, 0xdb, 0x53, + 0x83, 0xb0, 0xb5, 0xfc, 0xbc, 0xc5, 0xab, 0x89, 0xc0, 0x0d, 0x29, 0x6f, 0x4f, 0x8a, 0x33, 0x31, + 0x5c, 0x69, 0xd7, 0x2c, 0x23, 0xc6, 0x71, 0x51, 0xe0, 0x62, 0x9f, 0xe5, 0xce, 0x72, 0xa0, 0xbe, + 0x8b, 0x2d, 0xfa, 0xde, 0x15, 0x62, 0xd6, 0x95, 0x14, 0xeb, 0x17, 0x06, 0xbc, 0xdc, 0xcd, 0x49, + 0xf7, 0x28, 0x23, 0x83, 0x31, 0xbc, 0x07, 0xc5, 0x50, 0x13, 0xb2, 0x85, 0x42, 0xdf, 0x83, 0xdc, + 0x4f, 0x61, 0x4d, 0x44, 0xdb, 0x19, 0xaf, 0xf5, 0x27, 0x03, 0x2e, 0x4b, 0x33, 0x32, 0x0b, 0x76, + 0xa5, 0x92, 0x3d, 0x14, 0x33, 0xec, 0xf5, 0xb7, 0xe2, 0x2a, 0x4c, 0x31, 0xcc, 0xb9, 0x8f, 0x9d, + 0x30, 0x22, 0x2e, 0x96, 0x07, 0x59, 0xb4, 0x4b, 0x6a, 0x6d, 0x4f, 0x2c, 0x99, 0x65, 0x38, 0xc7, + 0x29, 0x47, 0xbe, 0xd3, 0x20, 0x8c, 0x89, 0x43, 0x93, 0xb0, 0xaa, 0x33, 0xb3, 0x67, 0xe5, 0xa7, + 0x5d, 0xf5, 0x45, 0xc2, 0x64, 0xbe, 0x0e, 0x66, 0x0b, 0xa5, 0x13, 0x21, 0x8e, 0x15, 0xe4, 0xf6, + 0xd9, 0x46, 0x8e, 0xd2, 0x46, 0x1c, 0x5b, 0x7b, 0x70, 0x51, 0x1a, 0xbf, 0x2f, 0x35, 0x7a, 0xca, + 0xf2, 0x35, 0xe4, 0x0b, 0x8c, 0xfb, 0x9b, 0x7e, 0x1e, 0x26, 0x50, 0x43, 0x80, 0xa2, 0x8d, 0xd6, + 0x6f, 0xd6, 0xbe, 0x3e, 0x95, 0x07, 0xf4, 0x05, 0x0a, 0xfd, 0x34, 0x01, 0x59, 0xcb, 0xc2, 0x4d, + 0x1a, 0x78, 0x6b, 0x28, 0x38, 0x8c, 0xe2, 0x90, 0xbb, 0xcd, 0xe7, 0x06, 0xf9, 0x0e, 0xcc, 0x25, + 0xa0, 0x69, 0x39, 0x79, 0x94, 0x13, 0x40, 0x95, 0x72, 0x09, 0x9e, 0xf5, 0x89, 0x01, 0x0b, 0xd2, + 0xa2, 0x55, 0xdf, 0x4f, 0xdc, 0x82, 0xdd, 0x47, 0x24, 0x72, 0x63, 0xfe, 0xdc, 0xe6, 0x74, 0x3f, + 0xc3, 0xb1, 0x1e, 0x67, 0xf8, 0x11, 0x2c, 0xaa, 0x38, 0x20, 0x01, 0x8a, 0x9a, 0xef, 0x86, 0xd2, + 0x14, 0x65, 0xeb, 0xa3, 0xd0, 0x43, 0x1c, 0x9b, 0xf7, 0x61, 0x42, 0xa9, 0x97, 0xc6, 0x94, 0x56, + 0x6e, 0xf7, 0xf0, 0xf4, 0x2e, 0x12, 0xd6, 0xc6, 0x45, 0x98, 0xda, 0x9a, 0xdf, 0xf2, 0x7a, 0x38, + 0xbb, 0x56, 0xb4, 0xd9, 0xa6, 0xe8, 0xe6, 0xc0, 0xdc, 0xd8, 0x55, 0xcb, 0x9f, 0x0d, 0x30, 0x95, + 0x13, 0xe1, 0xc7, 0xe2, 0x4a, 0x95, 0x71, 0xcf, 0xfa, 0xc3, 0xba, 0x01, 0x50, 0x8d, 0x9b, 0x2a, + 0xd3, 0x24, 0x11, 0x7d, 0xbd, 0x57, 0x44, 0x87, 0x94, 0xef, 0x90, 0x06, 0x51, 0x82, 0xed, 0x62, + 0x35, 0x6e, 0x6a, 0x15, 0x5b, 0x50, 0x62, 0xd8, 0xf7, 0x13, 0x31, 0x63, 0xa3, 0x88, 0x01, 0xc1, + 0xa9, 0xe4, 0x58, 0x7f, 0x4b, 0xdc, 0xe3, 0x01, 0x7e, 0x9c, 0x6d, 0x76, 0x98, 0x7d, 0xbc, 0xd3, + 0x65, 0x1f, 0xaf, 0x0d, 0x84, 0xb1, 0xfb, 0x6e, 0x76, 0xba, 0xed, 0x66, 0x24, 0x61, 0xf9, 0x3d, + 0x1d, 0xc3, 0x9c, 0xdc, 0x92, 0x4a, 0xc0, 0xe9, 0xb9, 0xf4, 0xdf, 0xce, 0x2a, 0x9c, 0x96, 0xda, + 0xa5, 0x9b, 0x0f, 0x0b, 0xa5, 0x76, 0x07, 0xc5, 0x69, 0xfd, 0x08, 0xe6, 0x55, 0x8e, 0x0a, 0x29, + 0x6f, 0xf1, 0xb6, 0xb7, 0xdb, 0xbc, 0xed, 0x6a, 0x1f, 0xe1, 0x5d, 0xfd, 0xec, 0xb3, 0x02, 0x5c, + 0x92, 0xa2, 0xf7, 0x70, 0x14, 0x62, 0x1e, 0x23, 0xff, 0x5b, 0xf0, 0x66, 0xd3, 0x83, 0xf9, 0x30, + 0x91, 0x9f, 0xa4, 0x17, 0x12, 0x1c, 0x50, 0x0d, 0x49, 0xaf, 0x60, 0x6c, 0xb3, 0x69, 0x3b, 0x38, + 0xa0, 0x52, 0xb0, 0x61, 0x9f, 0x0b, 0x3b, 0x3f, 0x99, 0xbb, 0xf0, 0x52, 0x52, 0x2b, 0x8d, 0x49, + 0xb9, 0x6f, 0x0c, 0x27, 0x57, 0x97, 0x48, 0x5a, 0x74, 0x22, 0xc3, 0xfa, 0xda, 0xd0, 0x59, 0x65, + 0xf3, 0x49, 0x48, 0xa2, 0xe6, 0x56, 0xcc, 0xe3, 0x08, 0xb3, 0x6f, 0x03, 0x9e, 0x23, 0xb8, 0x84, + 0xa5, 0x0e, 0xe7, 0x40, 0x29, 0x69, 0xc1, 0x48, 0xed, 0xa5, 0xdc, 0xb3, 0x50, 0xeb, 0x30, 0x2e, + 0x87, 0xd3, 0x05, 0xdc, 0xfd, 0xb3, 0xf5, 0xd7, 0x02, 0x5c, 0xed, 0x76, 0xee, 0x1a, 0x0b, 0xbd, + 0xbf, 0xbe, 0x7e, 0x9d, 0x83, 0xbb, 0x70, 0x52, 0xb8, 0x4f, 0xa5, 0x70, 0x9b, 0xb7, 0x61, 0x96, + 0x30, 0xa7, 0x4e, 0xe3, 0xc8, 0x6f, 0x3a, 0xf9, 0x73, 0x9c, 0xb4, 0x67, 0x08, 0xbb, 0x2f, 0xd7, + 0x93, 0x62, 0x76, 0x0b, 0xa6, 0x34, 0x45, 0xee, 0x6e, 0x1f, 0xae, 0x34, 0x2e, 0x69, 0x46, 0x71, + 0x6f, 0x98, 0x6b, 0x00, 0x62, 0x3b, 0xfa, 0x1a, 0x3a, 0x3d, 0xbc, 0x14, 0x09, 0x8b, 0xbc, 0xa9, + 0xac, 0x5f, 0x1b, 0x70, 0x5e, 0x05, 0x67, 0x5a, 0x24, 0x6d, 0x60, 0x59, 0x1c, 0x99, 0x4b, 0x50, + 0x62, 0x91, 0xeb, 0x20, 0xcf, 0x8b, 0x30, 0x63, 0x1a, 0x40, 0x60, 0x91, 0xbb, 0xaa, 0x56, 0x86, + 0x2b, 0x63, 0xdf, 0x4a, 0x2b, 0x02, 0xe5, 0x09, 0x17, 0xcb, 0xca, 0xb2, 0xb2, 0x68, 0x12, 0xcb, + 0xba, 0xff, 0x2b, 0xaf, 0x53, 0x12, 0x24, 0x6e, 0xa5, 0x4b, 0x86, 0xcf, 0x92, 0xc6, 0x2c, 0xb3, + 0xec, 0x03, 0xc2, 0xeb, 0x5e, 0x84, 0x1e, 0x77, 0x6a, 0x36, 0xba, 0x68, 0x5e, 0x82, 0x92, 0xc7, + 0x78, 0x6a, 0xbf, 0xba, 0xa6, 0xc1, 0x63, 0x3c, 0xb1, 0xff, 0xc4, 0xa6, 0xfd, 0x21, 0x89, 0xad, + 0xcc, 0x34, 0x5d, 0x1d, 0x3d, 0x8c, 0x50, 0xc0, 0x0e, 0x70, 0x24, 0xfc, 0x41, 0x80, 0xd7, 0x69, + 0x65, 0xd1, 0x9e, 0x61, 0x91, 0xbb, 0x9f, 0x37, 0xf4, 0x36, 0xcc, 0x0a, 0x43, 0x3b, 0xb1, 0x2c, + 0xda, 0x33, 0x1e, 0xe3, 0xfb, 0x2f, 0x04, 0xce, 0x7a, 0xbe, 0xcd, 0xd5, 0x47, 0xac, 0xe3, 0x64, + 0x17, 0x66, 0x3c, 0xb5, 0xe0, 0xc4, 0x72, 0x45, 0x1c, 0xb6, 0xb8, 0x69, 0xae, 0xf5, 0x4c, 0x08, + 0x39, 0x76, 0x7b, 0xda, 0xcb, 0xbf, 0x32, 0xeb, 0x73, 0x03, 0x2e, 0xb7, 0xa7, 0x8c, 0x5c, 0xe1, + 0x6f, 0x3e, 0x82, 0x29, 0x1d, 0x96, 0xea, 0x62, 0x51, 0xc9, 0xe7, 0xf5, 0x21, 0x93, 0x4f, 0x76, + 0xbf, 0x18, 0x76, 0xa9, 0x91, 0x2d, 0x99, 0x3b, 0x30, 0xa3, 0xfa, 0x13, 0xe7, 0x28, 0x46, 0x01, + 0x27, 0x5c, 0x75, 0xaf, 0x43, 0xf6, 0x29, 0xd3, 0x8a, 0xf7, 0x3d, 0xcd, 0x6a, 0xfd, 0x26, 0xb9, + 0x59, 0x94, 0xd1, 0x6d, 0x25, 0x40, 0xff, 0xd4, 0x72, 0x0d, 0x64, 0x47, 0xdc, 0x20, 0x9a, 0x59, + 0x77, 0xd1, 0xad, 0x8b, 0xa6, 0x0d, 0x25, 0x5f, 0xbc, 0x6a, 0x14, 0xd4, 0x71, 0x8e, 0x72, 0xb7, + 0x6b, 0x10, 0xc0, 0x4f, 0x57, 0xcc, 0x3a, 0x9c, 0xcb, 0x43, 0xab, 0x1b, 0x36, 0x99, 0x60, 0x4a, + 0x2b, 0x2b, 0xa3, 0x20, 0xac, 0x8c, 0xd4, 0x2a, 0x66, 0x1b, 0xed, 0x1f, 0xac, 0xaa, 0x2e, 0x8f, + 0xb6, 0x30, 0xde, 0x20, 0x4c, 0x7a, 0xe7, 0xbe, 0x5b, 0xc7, 0x5e, 0xec, 0x63, 0x73, 0x0b, 0x26, + 0x99, 0x7e, 0x1e, 0x50, 0xaf, 0x76, 0xe1, 0xb6, 0x53, 0x5e, 0xeb, 0x2b, 0x03, 0x96, 0xa5, 0x12, + 0xd1, 0x7f, 0x8b, 0xa4, 0x87, 0x1f, 0xa3, 0xc8, 0x5b, 0x47, 0x8d, 0x10, 0x91, 0x5a, 0xa0, 0x9d, + 0xf7, 0x11, 0x9c, 0x71, 0xf5, 0x8a, 0xba, 0x70, 0x94, 0xc6, 0x3b, 0x7d, 0x46, 0x25, 0x1d, 0xa2, + 0xc4, 0x9d, 0x62, 0x4f, 0xb9, 0xb9, 0x37, 0xf3, 0x43, 0x98, 0x4f, 0xc5, 0x46, 0x92, 0xd8, 0x09, + 0x29, 0xf5, 0x07, 0xb5, 0x9a, 0x89, 0x44, 0x25, 0x7f, 0x8f, 0x52, 0xdf, 0x3e, 0xe7, 0x76, 0xac, + 0x31, 0x2b, 0xd4, 0x09, 0xa4, 0xc5, 0x9c, 0x0d, 0xc2, 0x78, 0x44, 0xaa, 0x6a, 0x40, 0xf3, 0x00, + 0x66, 0x92, 0x6c, 0xa0, 0xf4, 0x27, 0x41, 0xd9, 0xab, 0x02, 0x5b, 0x55, 0xd4, 0x4a, 0x14, 0xb3, + 0xa7, 0x51, 0xcb, 0xbb, 0xf5, 0x7b, 0x03, 0xac, 0xa4, 0xa0, 0x5d, 0xa7, 0x81, 0x27, 0x1b, 0x1e, + 0x34, 0x9a, 0x63, 0x7f, 0xbf, 0xb5, 0x16, 0xbc, 0x31, 0xd0, 0xa1, 0x54, 0x0d, 0xaa, 0x98, 0x4c, + 0x13, 0xc6, 0xeb, 0x88, 0xd5, 0xa5, 0xa7, 0x4f, 0xd9, 0xf2, 0x59, 0xa8, 0x23, 0x49, 0xbd, 0x20, + 0xdd, 0x74, 0xd2, 0x9e, 0x24, 0xfa, 0xa6, 0xb7, 0x7e, 0x55, 0x80, 0xeb, 0xb9, 0x18, 0x3c, 0xa9, + 0xd5, 0xff, 0xbd, 0x70, 0x6c, 0xcf, 0x74, 0xe3, 0x2f, 0x24, 0xd3, 0x59, 0xff, 0x36, 0xe0, 0x86, + 0xc2, 0xa5, 0x27, 0x22, 0x0f, 0x23, 0x52, 0xab, 0x75, 0x03, 0x66, 0x2a, 0x07, 0xcc, 0x0d, 0x98, + 0xd6, 0x18, 0x68, 0x72, 0x8d, 0x4c, 0xdb, 0xaa, 0x68, 0xae, 0xb9, 0x7a, 0xc4, 0x9e, 0x4e, 0x2c, + 0xb9, 0x83, 0x34, 0xd3, 0x6f, 0x52, 0xf3, 0x7d, 0x71, 0xac, 0xb7, 0x61, 0x36, 0xf4, 0x91, 0xdb, + 0x4a, 0x3e, 0x2e, 0xc9, 0x67, 0xd4, 0x87, 0x8c, 0xb6, 0x0c, 0xe7, 0xda, 0xa5, 0xbb, 0xc4, 0x53, + 0xe5, 0x8c, 0x3d, 0xdb, 0x2a, 0x7c, 0x9d, 0x78, 0x96, 0x0f, 0xd3, 0x72, 0xf3, 0x72, 0x61, 0x0b, + 0x11, 0xdf, 0x5c, 0x80, 0x97, 0xb4, 0xb3, 0xeb, 0x2d, 0x26, 0xaf, 0xe6, 0x79, 0x98, 0x10, 0xaa, + 0xb1, 0x0a, 0xdb, 0x29, 0x5b, 0xbf, 0x99, 0x73, 0x70, 0xfa, 0xc0, 0x47, 0x35, 0xd5, 0x51, 0x9d, + 0xb1, 0xd5, 0x8b, 0x70, 0x50, 0x97, 0x78, 0x6a, 0xd8, 0x5a, 0xb4, 0xe5, 0xb3, 0xf5, 0xa9, 0x01, + 0xaf, 0xa9, 0x31, 0x01, 0xa7, 0x0d, 0xe2, 0xe6, 0x4e, 0x66, 0x0b, 0xe3, 0xdd, 0xd8, 0xe7, 0x24, + 0xf4, 0x09, 0x8e, 0x98, 0xca, 0x46, 0x9e, 0xf9, 0x53, 0x38, 0x9f, 0x0c, 0x20, 0x30, 0x76, 0x1a, + 0x19, 0x81, 0x8e, 0xde, 0x5e, 0x99, 0x50, 0x17, 0x97, 0x79, 0x99, 0xf6, 0x5c, 0xa3, 0x73, 0x91, + 0x59, 0x7f, 0x34, 0x74, 0x1b, 0x27, 0xad, 0xa8, 0x52, 0x7a, 0xa8, 0x33, 0xe1, 0x36, 0x4c, 0xb1, + 0x90, 0xb6, 0xdf, 0xe1, 0xbd, 0x82, 0xb4, 0x8d, 0xdb, 0x2e, 0x09, 0x5e, 0x7d, 0x85, 0x9b, 0x8f, + 0xc0, 0xf4, 0x52, 0x87, 0x4a, 0x05, 0x16, 0x46, 0x12, 0x38, 0x9b, 0x49, 0x48, 0x2a, 0x03, 0x17, + 0x66, 0xda, 0x8d, 0x3e, 0x0b, 0x63, 0x0c, 0x1f, 0xc9, 0x73, 0x1b, 0xb7, 0xc5, 0xa3, 0xf9, 0x43, + 0x28, 0xd2, 0x84, 0x48, 0x27, 0x9a, 0xe5, 0x41, 0x2a, 0xed, 0x8c, 0xc5, 0xfa, 0xad, 0x01, 0xc5, + 0xf4, 0x43, 0xff, 0x00, 0xf8, 0x9e, 0x6a, 0xd5, 0x7d, 0x7c, 0x8c, 0xd3, 0xcc, 0xfe, 0x72, 0x0f, + 0x5d, 0x3b, 0x82, 0x48, 0xf6, 0xe6, 0xf2, 0x89, 0x99, 0x3f, 0xd0, 0xbd, 0xb9, 0xe6, 0x1e, 0x1b, + 0x82, 0x5b, 0x36, 0xe3, 0x8a, 0xdd, 0x7a, 0xac, 0x2f, 0xd0, 0x7b, 0x11, 0x0a, 0xf8, 0x6a, 0xcc, + 0xeb, 0x34, 0x22, 0x3f, 0x93, 0xb3, 0x63, 0x26, 0x1c, 0xba, 0x26, 0x96, 0x75, 0x71, 0x54, 0xb4, + 0x93, 0x57, 0x73, 0x15, 0x26, 0xe4, 0xe3, 0xa0, 0x7b, 0xa8, 0x53, 0xaa, 0xad, 0x19, 0xad, 0x8f, + 0x13, 0xff, 0x51, 0x34, 0x82, 0x57, 0x8d, 0xac, 0x53, 0xad, 0xb8, 0x55, 0x2b, 0xce, 0xdb, 0x53, + 0x68, 0xb5, 0xe7, 0x3b, 0x2d, 0xe5, 0x68, 0x71, 0xed, 0x8a, 0xae, 0xb5, 0xe6, 0x3b, 0x6b, 0xad, + 0xed, 0x80, 0xa7, 0xc5, 0xe8, 0x3d, 0x98, 0x95, 0x26, 0x6c, 0x07, 0xc7, 0xc8, 0x27, 0x9e, 0xb4, + 0xe4, 0x24, 0xfa, 0xad, 0xdf, 0xb5, 0x04, 0x83, 0x4a, 0xe5, 0x32, 0x27, 0x8c, 0x3e, 0x7f, 0x2f, + 0xb6, 0xb5, 0x0f, 0x57, 0x00, 0xda, 0x72, 0x5d, 0x51, 0xbb, 0x99, 0x4c, 0x5b, 0x67, 0x61, 0x4c, + 0xa4, 0x29, 0x35, 0x97, 0x15, 0x8f, 0xe6, 0x32, 0x94, 0x3c, 0xcc, 0xdc, 0x88, 0xc8, 0xf1, 0x9b, + 0x4e, 0x60, 0xf9, 0x25, 0x91, 0xb8, 0x97, 0xdb, 0xa6, 0x6f, 0x6a, 0x34, 0xf3, 0xfe, 0xca, 0x2e, + 0xa9, 0x45, 0x43, 0xfc, 0x72, 0xf0, 0x13, 0x98, 0x4d, 0x87, 0x4b, 0x8e, 0x3a, 0xee, 0xc4, 0x15, + 0x2a, 0xc3, 0xdd, 0xc6, 0xef, 0xaf, 0xac, 0x2b, 0x36, 0x7b, 0x26, 0x99, 0x33, 0xe9, 0x05, 0xf3, + 0x43, 0x30, 0xb3, 0x69, 0x53, 0x2a, 0x7d, 0xec, 0x64, 0xd2, 0xcf, 0xa6, 0x83, 0x27, 0xbd, 0x62, + 0xfd, 0xa5, 0x00, 0x0b, 0xbd, 0xc8, 0x13, 0x38, 0x8d, 0x0c, 0xce, 0xa4, 0x5c, 0x28, 0xe4, 0xca, + 0x85, 0xbb, 0x60, 0x84, 0xa3, 0xfc, 0xda, 0x61, 0x84, 0x82, 0xe5, 0x68, 0x94, 0x1f, 0x2c, 0x8c, + 0x23, 0xc1, 0xd2, 0xc8, 0xb5, 0xd3, 0x83, 0x59, 0x1a, 0x82, 0xe5, 0x60, 0x61, 0x62, 0x04, 0x96, + 0x03, 0xf3, 0x4d, 0x28, 0xf0, 0x70, 0xe1, 0xa5, 0xe1, 0xbb, 0xf6, 0x02, 0x0f, 0xad, 0x7f, 0x19, + 0xba, 0x2d, 0xc9, 0xa6, 0xaa, 0x43, 0xfb, 0xce, 0xa3, 0xde, 0xbe, 0xf3, 0x6a, 0x9f, 0xc1, 0xdb, + 0x20, 0xaf, 0xf9, 0xa0, 0x8f, 0xd7, 0x8c, 0x20, 0xb7, 0xd3, 0x5f, 0x7e, 0x5e, 0x80, 0x5b, 0xba, + 0x48, 0x96, 0x35, 0x40, 0xae, 0xda, 0xc9, 0x5f, 0xc3, 0x88, 0xf8, 0x83, 0x7e, 0xa5, 0x19, 0x2a, + 0xde, 0x5b, 0xa7, 0x29, 0x23, 0x38, 0x59, 0x36, 0x4d, 0x69, 0xcb, 0x19, 0xaa, 0xe0, 0xc9, 0xe5, + 0x8c, 0x25, 0x28, 0xe9, 0x7a, 0xc6, 0xc1, 0x51, 0xa4, 0x33, 0x04, 0xe8, 0xa5, 0xcd, 0x28, 0x4a, + 0xa2, 0x60, 0x22, 0x8d, 0x02, 0xeb, 0xe3, 0x02, 0xdc, 0xec, 0x01, 0x42, 0x56, 0x7a, 0xfe, 0x9f, + 0x63, 0xf0, 0x49, 0x01, 0xcc, 0x4e, 0x8f, 0xf9, 0x5f, 0x4b, 0x19, 0x07, 0x23, 0xa5, 0x8c, 0x24, + 0xfe, 0x27, 0x46, 0x8b, 0xff, 0x43, 0xdd, 0xc4, 0x75, 0xfe, 0x5a, 0x9a, 0x4f, 0x03, 0x9b, 0x30, + 0x99, 0xfc, 0xbe, 0xa9, 0xdb, 0xe1, 0xc1, 0xbf, 0x71, 0xa7, 0x3f, 0x8d, 0xa6, 0xac, 0xd6, 0x33, + 0x43, 0x0f, 0xee, 0x93, 0x6f, 0xe9, 0x74, 0xab, 0xaf, 0xa7, 0xdd, 0x81, 0x39, 0x46, 0xe3, 0xc8, + 0xc5, 0x5d, 0x27, 0x5a, 0xa6, 0xfa, 0xd6, 0x32, 0xd4, 0xfa, 0x2e, 0x5c, 0xf4, 0x30, 0xe3, 0x24, + 0x90, 0xe6, 0xb7, 0xb1, 0xa9, 0x9b, 0xf7, 0x42, 0x8e, 0xa0, 0x85, 0xf7, 0x6d, 0x98, 0x4c, 0xe7, + 0x3d, 0x23, 0x9c, 0x59, 0xca, 0xb4, 0x76, 0xf8, 0xc5, 0xd3, 0x45, 0xe3, 0xcb, 0xa7, 0x8b, 0xc6, + 0x3f, 0x9f, 0x2e, 0x1a, 0xbf, 0x7c, 0xb6, 0x78, 0xea, 0xcb, 0x67, 0x8b, 0xa7, 0xbe, 0x7a, 0xb6, + 0x78, 0xea, 0xc7, 0xef, 0xd5, 0x08, 0xaf, 0xc7, 0xd5, 0xb2, 0x4b, 0x1b, 0x95, 0xed, 0x04, 0xbe, + 0x1d, 0x54, 0x65, 0x95, 0x14, 0xcc, 0x37, 0x5c, 0x1a, 0xe1, 0xfc, 0x6b, 0x1d, 0x91, 0xa0, 0xd2, + 0xa0, 0x5e, 0xec, 0x63, 0x96, 0xfd, 0xe7, 0x84, 0x37, 0x43, 0xcc, 0x2a, 0xc7, 0x2b, 0xd5, 0x09, + 0xf9, 0xa7, 0x93, 0x37, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0x93, 0xa2, 0xd7, 0x95, 0x7b, 0x23, + 0x00, 0x00, } func (m *EventBatchSpotExecution) Marshal() (dAtA []byte, err error) { @@ -3346,6 +3457,39 @@ func (m *EventBinaryOptionsMarketUpdate) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } +func (m *EventDerivativeMarketUpdate) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EventDerivativeMarketUpdate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventDerivativeMarketUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Market.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *EventNewSpotOrders) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -4333,20 +4477,20 @@ func (m *EventOrderFail) MarshalToSizedBuffer(dAtA []byte) (int, error) { } } if len(m.Flags) > 0 { - dAtA22 := make([]byte, len(m.Flags)*10) - var j21 int + dAtA23 := make([]byte, len(m.Flags)*10) + var j22 int for _, num := range m.Flags { for num >= 1<<7 { - dAtA22[j21] = uint8(uint64(num)&0x7f | 0x80) + dAtA23[j22] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j21++ + j22++ } - dAtA22[j21] = uint8(num) - j21++ + dAtA23[j22] = uint8(num) + j22++ } - i -= j21 - copy(dAtA[i:], dAtA22[:j21]) - i = encodeVarintEvents(dAtA, i, uint64(j21)) + i -= j22 + copy(dAtA[i:], dAtA23[:j22]) + i = encodeVarintEvents(dAtA, i, uint64(j22)) i-- dAtA[i] = 0x1a } @@ -5196,6 +5340,60 @@ func (m *EventDerivativePositionV2Migration) MarshalToSizedBuffer(dAtA []byte) ( return len(dAtA) - i, nil } +func (m *EventPositionTransfer) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EventPositionTransfer) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventPositionTransfer) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.Quantity.Size() + i -= size + if _, err := m.Quantity.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if len(m.DestinationSubaccountId) > 0 { + i -= len(m.DestinationSubaccountId) + copy(dAtA[i:], m.DestinationSubaccountId) + i = encodeVarintEvents(dAtA, i, uint64(len(m.DestinationSubaccountId))) + i-- + dAtA[i] = 0x1a + } + if len(m.SourceSubaccountId) > 0 { + i -= len(m.SourceSubaccountId) + copy(dAtA[i:], m.SourceSubaccountId) + i = encodeVarintEvents(dAtA, i, uint64(len(m.SourceSubaccountId))) + i-- + dAtA[i] = 0x12 + } + if len(m.MarketId) > 0 { + i -= len(m.MarketId) + copy(dAtA[i:], m.MarketId) + i = encodeVarintEvents(dAtA, i, uint64(len(m.MarketId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintEvents(dAtA []byte, offset int, v uint64) int { offset -= sovEvents(v) base := offset @@ -5416,6 +5614,17 @@ func (m *EventBinaryOptionsMarketUpdate) Size() (n int) { return n } +func (m *EventDerivativeMarketUpdate) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Market.Size() + n += 1 + l + sovEvents(uint64(l)) + return n +} + func (m *EventNewSpotOrders) Size() (n int) { if m == nil { return 0 @@ -6160,6 +6369,29 @@ func (m *EventDerivativePositionV2Migration) Size() (n int) { return n } +func (m *EventPositionTransfer) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.MarketId) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.SourceSubaccountId) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.DestinationSubaccountId) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = m.Quantity.Size() + n += 1 + l + sovEvents(uint64(l)) + return n +} + func sovEvents(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -7613,6 +7845,89 @@ func (m *EventBinaryOptionsMarketUpdate) Unmarshal(dAtA []byte) error { } return nil } +func (m *EventDerivativeMarketUpdate) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EventDerivativeMarketUpdate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventDerivativeMarketUpdate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Market", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Market.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *EventNewSpotOrders) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -12946,6 +13261,186 @@ func (m *EventDerivativePositionV2Migration) Unmarshal(dAtA []byte) error { } return nil } +func (m *EventPositionTransfer) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EventPositionTransfer: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventPositionTransfer: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MarketId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MarketId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SourceSubaccountId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SourceSubaccountId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DestinationSubaccountId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DestinationSubaccountId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Quantity", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Quantity.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipEvents(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/chain/exchange/types/v2/exchange.pb.go b/chain/exchange/types/v2/exchange.pb.go index ef79788f..f7442860 100644 --- a/chain/exchange/types/v2/exchange.pb.go +++ b/chain/exchange/types/v2/exchange.pb.go @@ -7,6 +7,7 @@ import ( cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" _ "github.com/InjectiveLabs/sdk-go/chain/oracle/types" + _ "github.com/cosmos/cosmos-proto" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/cosmos-sdk/types/tx/amino" @@ -39,6 +40,7 @@ const ( ExecutionType_MarketLiquidation ExecutionType = 5 ExecutionType_ExpiryMarketSettlement ExecutionType = 6 ExecutionType_OffsettingPosition ExecutionType = 7 + ExecutionType_Synthetic ExecutionType = 8 ) var ExecutionType_name = map[int32]string{ @@ -50,6 +52,7 @@ var ExecutionType_name = map[int32]string{ 5: "MarketLiquidation", 6: "ExpiryMarketSettlement", 7: "OffsettingPosition", + 8: "Synthetic", } var ExecutionType_value = map[string]int32{ @@ -61,6 +64,7 @@ var ExecutionType_value = map[string]int32{ "MarketLiquidation": 5, "ExpiryMarketSettlement": 6, "OffsettingPosition": 7, + "Synthetic": 8, } func (x ExecutionType) String() string { @@ -71,6 +75,63 @@ func (ExecutionType) EnumDescriptor() ([]byte, []int) { return fileDescriptor_0b5851fb01a33564, []int{0} } +// EnforcedRestrictionsContract defines a contract with its pause event +// signature +type EnforcedRestrictionsContract struct { + // EVM address of the contract + ContractAddress string `protobuf:"bytes,1,opt,name=contract_address,json=contractAddress,proto3" json:"contract_address,omitempty"` + // Pause event signature for the contract (e.g. "Pause()", or + // "Pause(address)"). If left empty, it will default to "Pause()". + PauseEventSignature string `protobuf:"bytes,2,opt,name=pause_event_signature,json=pauseEventSignature,proto3" json:"pause_event_signature,omitempty"` +} + +func (m *EnforcedRestrictionsContract) Reset() { *m = EnforcedRestrictionsContract{} } +func (m *EnforcedRestrictionsContract) String() string { return proto.CompactTextString(m) } +func (*EnforcedRestrictionsContract) ProtoMessage() {} +func (*EnforcedRestrictionsContract) Descriptor() ([]byte, []int) { + return fileDescriptor_0b5851fb01a33564, []int{0} +} +func (m *EnforcedRestrictionsContract) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EnforcedRestrictionsContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EnforcedRestrictionsContract.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *EnforcedRestrictionsContract) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnforcedRestrictionsContract.Merge(m, src) +} +func (m *EnforcedRestrictionsContract) XXX_Size() int { + return m.Size() +} +func (m *EnforcedRestrictionsContract) XXX_DiscardUnknown() { + xxx_messageInfo_EnforcedRestrictionsContract.DiscardUnknown(m) +} + +var xxx_messageInfo_EnforcedRestrictionsContract proto.InternalMessageInfo + +func (m *EnforcedRestrictionsContract) GetContractAddress() string { + if m != nil { + return m.ContractAddress + } + return "" +} + +func (m *EnforcedRestrictionsContract) GetPauseEventSignature() string { + if m != nil { + return m.PauseEventSignature + } + return "" +} + type Params struct { // spot_market_instant_listing_fee defines the expedited fee in INJ required // to create a spot market by bypassing governance @@ -171,13 +232,16 @@ type Params struct { // mode will be enabled after the downtime-detector module detects a chain // downtime PostOnlyModeBlocksAmountAfterDowntime uint64 `protobuf:"varint,35,opt,name=post_only_mode_blocks_amount_after_downtime,json=postOnlyModeBlocksAmountAfterDowntime,proto3" json:"post_only_mode_blocks_amount_after_downtime,omitempty"` + // Contracts that exchange will be listening to pause markets denominated in + // respective erc20: denoms, with their pause event signatures + EnforcedRestrictionsContracts []EnforcedRestrictionsContract `protobuf:"bytes,36,rep,name=enforced_restrictions_contracts,json=enforcedRestrictionsContracts,proto3" json:"enforced_restrictions_contracts"` } func (m *Params) Reset() { *m = Params{} } func (m *Params) String() string { return proto.CompactTextString(m) } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{0} + return fileDescriptor_0b5851fb01a33564, []int{1} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -325,6 +389,13 @@ func (m *Params) GetPostOnlyModeBlocksAmountAfterDowntime() uint64 { return 0 } +func (m *Params) GetEnforcedRestrictionsContracts() []EnforcedRestrictionsContract { + if m != nil { + return m.EnforcedRestrictionsContracts + } + return nil +} + type NextFundingTimestamp struct { NextTimestamp int64 `protobuf:"varint,1,opt,name=next_timestamp,json=nextTimestamp,proto3" json:"next_timestamp,omitempty"` } @@ -333,7 +404,7 @@ func (m *NextFundingTimestamp) Reset() { *m = NextFundingTimestamp{} } func (m *NextFundingTimestamp) String() string { return proto.CompactTextString(m) } func (*NextFundingTimestamp) ProtoMessage() {} func (*NextFundingTimestamp) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{1} + return fileDescriptor_0b5851fb01a33564, []int{2} } func (m *NextFundingTimestamp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -382,7 +453,7 @@ func (m *MidPriceAndTOB) Reset() { *m = MidPriceAndTOB{} } func (m *MidPriceAndTOB) String() string { return proto.CompactTextString(m) } func (*MidPriceAndTOB) ProtoMessage() {} func (*MidPriceAndTOB) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{2} + return fileDescriptor_0b5851fb01a33564, []int{3} } func (m *MidPriceAndTOB) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -423,7 +494,7 @@ func (m *Deposit) Reset() { *m = Deposit{} } func (m *Deposit) String() string { return proto.CompactTextString(m) } func (*Deposit) ProtoMessage() {} func (*Deposit) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{3} + return fileDescriptor_0b5851fb01a33564, []int{4} } func (m *Deposit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -460,7 +531,7 @@ func (m *SubaccountTradeNonce) Reset() { *m = SubaccountTradeNonce{} } func (m *SubaccountTradeNonce) String() string { return proto.CompactTextString(m) } func (*SubaccountTradeNonce) ProtoMessage() {} func (*SubaccountTradeNonce) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{4} + return fileDescriptor_0b5851fb01a33564, []int{5} } func (m *SubaccountTradeNonce) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -509,7 +580,7 @@ func (m *SubaccountOrder) Reset() { *m = SubaccountOrder{} } func (m *SubaccountOrder) String() string { return proto.CompactTextString(m) } func (*SubaccountOrder) ProtoMessage() {} func (*SubaccountOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{5} + return fileDescriptor_0b5851fb01a33564, []int{6} } func (m *SubaccountOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -561,7 +632,7 @@ func (m *SubaccountOrderData) Reset() { *m = SubaccountOrderData{} } func (m *SubaccountOrderData) String() string { return proto.CompactTextString(m) } func (*SubaccountOrderData) ProtoMessage() {} func (*SubaccountOrderData) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{6} + return fileDescriptor_0b5851fb01a33564, []int{7} } func (m *SubaccountOrderData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -621,7 +692,7 @@ func (m *Position) Reset() { *m = Position{} } func (m *Position) String() string { return proto.CompactTextString(m) } func (*Position) ProtoMessage() {} func (*Position) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{7} + return fileDescriptor_0b5851fb01a33564, []int{8} } func (m *Position) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -670,7 +741,7 @@ func (m *Balance) Reset() { *m = Balance{} } func (m *Balance) String() string { return proto.CompactTextString(m) } func (*Balance) ProtoMessage() {} func (*Balance) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{8} + return fileDescriptor_0b5851fb01a33564, []int{9} } func (m *Balance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -712,7 +783,7 @@ func (m *DerivativePosition) Reset() { *m = DerivativePosition{} } func (m *DerivativePosition) String() string { return proto.CompactTextString(m) } func (*DerivativePosition) ProtoMessage() {} func (*DerivativePosition) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{9} + return fileDescriptor_0b5851fb01a33564, []int{10} } func (m *DerivativePosition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -751,7 +822,7 @@ func (m *MarketOrderIndicator) Reset() { *m = MarketOrderIndicator{} } func (m *MarketOrderIndicator) String() string { return proto.CompactTextString(m) } func (*MarketOrderIndicator) ProtoMessage() {} func (*MarketOrderIndicator) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{10} + return fileDescriptor_0b5851fb01a33564, []int{11} } func (m *MarketOrderIndicator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -809,7 +880,7 @@ func (m *TradeLog) Reset() { *m = TradeLog{} } func (m *TradeLog) String() string { return proto.CompactTextString(m) } func (*TradeLog) ProtoMessage() {} func (*TradeLog) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{11} + return fileDescriptor_0b5851fb01a33564, []int{12} } func (m *TradeLog) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -877,7 +948,7 @@ func (m *PositionDelta) Reset() { *m = PositionDelta{} } func (m *PositionDelta) String() string { return proto.CompactTextString(m) } func (*PositionDelta) ProtoMessage() {} func (*PositionDelta) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{12} + return fileDescriptor_0b5851fb01a33564, []int{13} } func (m *PositionDelta) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -928,7 +999,7 @@ func (m *DerivativeTradeLog) Reset() { *m = DerivativeTradeLog{} } func (m *DerivativeTradeLog) String() string { return proto.CompactTextString(m) } func (*DerivativeTradeLog) ProtoMessage() {} func (*DerivativeTradeLog) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{13} + return fileDescriptor_0b5851fb01a33564, []int{14} } func (m *DerivativeTradeLog) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1001,7 +1072,7 @@ func (m *SubaccountPosition) Reset() { *m = SubaccountPosition{} } func (m *SubaccountPosition) String() string { return proto.CompactTextString(m) } func (*SubaccountPosition) ProtoMessage() {} func (*SubaccountPosition) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{14} + return fileDescriptor_0b5851fb01a33564, []int{15} } func (m *SubaccountPosition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1053,7 +1124,7 @@ func (m *SubaccountDeposit) Reset() { *m = SubaccountDeposit{} } func (m *SubaccountDeposit) String() string { return proto.CompactTextString(m) } func (*SubaccountDeposit) ProtoMessage() {} func (*SubaccountDeposit) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{15} + return fileDescriptor_0b5851fb01a33564, []int{16} } func (m *SubaccountDeposit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1105,7 +1176,7 @@ func (m *DepositUpdate) Reset() { *m = DepositUpdate{} } func (m *DepositUpdate) String() string { return proto.CompactTextString(m) } func (*DepositUpdate) ProtoMessage() {} func (*DepositUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{16} + return fileDescriptor_0b5851fb01a33564, []int{17} } func (m *DepositUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1157,7 +1228,7 @@ func (m *PointsMultiplier) Reset() { *m = PointsMultiplier{} } func (m *PointsMultiplier) String() string { return proto.CompactTextString(m) } func (*PointsMultiplier) ProtoMessage() {} func (*PointsMultiplier) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{17} + return fileDescriptor_0b5851fb01a33564, []int{18} } func (m *PointsMultiplier) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1197,7 +1268,7 @@ func (m *TradingRewardCampaignBoostInfo) Reset() { *m = TradingRewardCam func (m *TradingRewardCampaignBoostInfo) String() string { return proto.CompactTextString(m) } func (*TradingRewardCampaignBoostInfo) ProtoMessage() {} func (*TradingRewardCampaignBoostInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{18} + return fileDescriptor_0b5851fb01a33564, []int{19} } func (m *TradingRewardCampaignBoostInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1266,7 +1337,7 @@ func (m *CampaignRewardPool) Reset() { *m = CampaignRewardPool{} } func (m *CampaignRewardPool) String() string { return proto.CompactTextString(m) } func (*CampaignRewardPool) ProtoMessage() {} func (*CampaignRewardPool) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{19} + return fileDescriptor_0b5851fb01a33564, []int{20} } func (m *CampaignRewardPool) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1324,7 +1395,7 @@ func (m *TradingRewardCampaignInfo) Reset() { *m = TradingRewardCampaign func (m *TradingRewardCampaignInfo) String() string { return proto.CompactTextString(m) } func (*TradingRewardCampaignInfo) ProtoMessage() {} func (*TradingRewardCampaignInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{20} + return fileDescriptor_0b5851fb01a33564, []int{21} } func (m *TradingRewardCampaignInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1396,7 +1467,7 @@ func (m *FeeDiscountTierInfo) Reset() { *m = FeeDiscountTierInfo{} } func (m *FeeDiscountTierInfo) String() string { return proto.CompactTextString(m) } func (*FeeDiscountTierInfo) ProtoMessage() {} func (*FeeDiscountTierInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{21} + return fileDescriptor_0b5851fb01a33564, []int{22} } func (m *FeeDiscountTierInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1444,7 +1515,7 @@ func (m *FeeDiscountSchedule) Reset() { *m = FeeDiscountSchedule{} } func (m *FeeDiscountSchedule) String() string { return proto.CompactTextString(m) } func (*FeeDiscountSchedule) ProtoMessage() {} func (*FeeDiscountSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{22} + return fileDescriptor_0b5851fb01a33564, []int{23} } func (m *FeeDiscountSchedule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1519,7 +1590,7 @@ func (m *FeeDiscountTierTTL) Reset() { *m = FeeDiscountTierTTL{} } func (m *FeeDiscountTierTTL) String() string { return proto.CompactTextString(m) } func (*FeeDiscountTierTTL) ProtoMessage() {} func (*FeeDiscountTierTTL) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{23} + return fileDescriptor_0b5851fb01a33564, []int{24} } func (m *FeeDiscountTierTTL) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1571,7 +1642,7 @@ func (m *AccountRewards) Reset() { *m = AccountRewards{} } func (m *AccountRewards) String() string { return proto.CompactTextString(m) } func (*AccountRewards) ProtoMessage() {} func (*AccountRewards) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{24} + return fileDescriptor_0b5851fb01a33564, []int{25} } func (m *AccountRewards) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1623,7 +1694,7 @@ func (m *TradeRecords) Reset() { *m = TradeRecords{} } func (m *TradeRecords) String() string { return proto.CompactTextString(m) } func (*TradeRecords) ProtoMessage() {} func (*TradeRecords) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{25} + return fileDescriptor_0b5851fb01a33564, []int{26} } func (m *TradeRecords) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1674,7 +1745,7 @@ func (m *SubaccountIDs) Reset() { *m = SubaccountIDs{} } func (m *SubaccountIDs) String() string { return proto.CompactTextString(m) } func (*SubaccountIDs) ProtoMessage() {} func (*SubaccountIDs) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{26} + return fileDescriptor_0b5851fb01a33564, []int{27} } func (m *SubaccountIDs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1723,7 +1794,7 @@ func (m *TradeRecord) Reset() { *m = TradeRecord{} } func (m *TradeRecord) String() string { return proto.CompactTextString(m) } func (*TradeRecord) ProtoMessage() {} func (*TradeRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{27} + return fileDescriptor_0b5851fb01a33564, []int{28} } func (m *TradeRecord) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1770,7 +1841,7 @@ func (m *Level) Reset() { *m = Level{} } func (m *Level) String() string { return proto.CompactTextString(m) } func (*Level) ProtoMessage() {} func (*Level) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{28} + return fileDescriptor_0b5851fb01a33564, []int{29} } func (m *Level) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1810,7 +1881,7 @@ func (m *AggregateSubaccountVolumeRecord) Reset() { *m = AggregateSubacc func (m *AggregateSubaccountVolumeRecord) String() string { return proto.CompactTextString(m) } func (*AggregateSubaccountVolumeRecord) ProtoMessage() {} func (*AggregateSubaccountVolumeRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{29} + return fileDescriptor_0b5851fb01a33564, []int{30} } func (m *AggregateSubaccountVolumeRecord) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1864,7 +1935,7 @@ func (m *AggregateAccountVolumeRecord) Reset() { *m = AggregateAccountVo func (m *AggregateAccountVolumeRecord) String() string { return proto.CompactTextString(m) } func (*AggregateAccountVolumeRecord) ProtoMessage() {} func (*AggregateAccountVolumeRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{30} + return fileDescriptor_0b5851fb01a33564, []int{31} } func (m *AggregateAccountVolumeRecord) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1918,7 +1989,7 @@ func (m *DenomDecimals) Reset() { *m = DenomDecimals{} } func (m *DenomDecimals) String() string { return proto.CompactTextString(m) } func (*DenomDecimals) ProtoMessage() {} func (*DenomDecimals) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{31} + return fileDescriptor_0b5851fb01a33564, []int{32} } func (m *DenomDecimals) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1972,7 +2043,7 @@ func (m *GrantAuthorization) Reset() { *m = GrantAuthorization{} } func (m *GrantAuthorization) String() string { return proto.CompactTextString(m) } func (*GrantAuthorization) ProtoMessage() {} func (*GrantAuthorization) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{32} + return fileDescriptor_0b5851fb01a33564, []int{33} } func (m *GrantAuthorization) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2017,7 +2088,7 @@ func (m *ActiveGrant) Reset() { *m = ActiveGrant{} } func (m *ActiveGrant) String() string { return proto.CompactTextString(m) } func (*ActiveGrant) ProtoMessage() {} func (*ActiveGrant) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{33} + return fileDescriptor_0b5851fb01a33564, []int{34} } func (m *ActiveGrant) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2063,7 +2134,7 @@ func (m *EffectiveGrant) Reset() { *m = EffectiveGrant{} } func (m *EffectiveGrant) String() string { return proto.CompactTextString(m) } func (*EffectiveGrant) ProtoMessage() {} func (*EffectiveGrant) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{34} + return fileDescriptor_0b5851fb01a33564, []int{35} } func (m *EffectiveGrant) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2117,7 +2188,7 @@ func (m *DenomMinNotional) Reset() { *m = DenomMinNotional{} } func (m *DenomMinNotional) String() string { return proto.CompactTextString(m) } func (*DenomMinNotional) ProtoMessage() {} func (*DenomMinNotional) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{35} + return fileDescriptor_0b5851fb01a33564, []int{36} } func (m *DenomMinNotional) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2155,6 +2226,7 @@ func (m *DenomMinNotional) GetDenom() string { func init() { proto.RegisterEnum("injective.exchange.v2.ExecutionType", ExecutionType_name, ExecutionType_value) + proto.RegisterType((*EnforcedRestrictionsContract)(nil), "injective.exchange.v2.EnforcedRestrictionsContract") proto.RegisterType((*Params)(nil), "injective.exchange.v2.Params") proto.RegisterType((*NextFundingTimestamp)(nil), "injective.exchange.v2.NextFundingTimestamp") proto.RegisterType((*MidPriceAndTOB)(nil), "injective.exchange.v2.MidPriceAndTOB") @@ -2198,203 +2270,238 @@ func init() { } var fileDescriptor_0b5851fb01a33564 = []byte{ - // 3090 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcb, 0x6f, 0x5b, 0xc7, - 0xd5, 0xf7, 0xd5, 0x93, 0x3a, 0x12, 0x25, 0x6a, 0xf4, 0xa2, 0x2c, 0x5b, 0x92, 0xaf, 0xed, 0x58, - 0x71, 0x12, 0xe9, 0xb3, 0x03, 0x07, 0xf9, 0xec, 0xef, 0x51, 0xca, 0xb4, 0x6c, 0x26, 0x92, 0xad, - 0x5c, 0x29, 0x46, 0x91, 0xa0, 0xb9, 0x18, 0xde, 0x3b, 0x22, 0xc7, 0xba, 0x0f, 0xea, 0xce, 0x90, - 0x91, 0x5a, 0x74, 0x51, 0x20, 0x40, 0x8b, 0x74, 0x93, 0x16, 0xe8, 0xa6, 0x68, 0x81, 0x2c, 0x5a, - 0x14, 0xe8, 0xaa, 0x7f, 0x40, 0x17, 0x05, 0x8a, 0xa2, 0x59, 0xb4, 0x40, 0x96, 0x45, 0x17, 0x69, - 0x91, 0x2c, 0x1a, 0x74, 0xdd, 0x3f, 0xa0, 0x98, 0xc7, 0x7d, 0x90, 0x7a, 0x91, 0x4e, 0x0b, 0x74, - 0x63, 0xf3, 0xce, 0x9c, 0xf3, 0x3b, 0x67, 0xe6, 0x3c, 0x67, 0x46, 0x70, 0x8d, 0x06, 0xcf, 0x88, - 0xc3, 0x69, 0x8b, 0xac, 0x91, 0x43, 0xa7, 0x8e, 0x83, 0x1a, 0x59, 0x6b, 0xdd, 0x4e, 0x7e, 0xaf, - 0x36, 0xa2, 0x90, 0x87, 0x68, 0x26, 0xa1, 0x5a, 0x4d, 0x66, 0x5a, 0xb7, 0x2f, 0x4e, 0xd7, 0xc2, - 0x5a, 0x28, 0x29, 0xd6, 0xc4, 0x2f, 0x45, 0x7c, 0x71, 0x12, 0xfb, 0x34, 0x08, 0xd7, 0xe4, 0xbf, - 0x7a, 0x68, 0xd1, 0x09, 0x99, 0x1f, 0xb2, 0xb5, 0x2a, 0x66, 0x64, 0xad, 0x75, 0xab, 0x4a, 0x38, - 0xbe, 0xb5, 0xe6, 0x84, 0x34, 0xd0, 0xf3, 0xd7, 0x53, 0x2d, 0xc2, 0x08, 0x3b, 0x5e, 0x4a, 0xa4, - 0x3e, 0x35, 0x99, 0x79, 0xb2, 0xb2, 0x3e, 0x8e, 0xf6, 0x09, 0xd7, 0x34, 0x57, 0x4e, 0xa6, 0x09, - 0x23, 0x97, 0x44, 0x8a, 0xc4, 0xfc, 0xd1, 0x3c, 0x0c, 0x6d, 0xe3, 0x08, 0xfb, 0x0c, 0x11, 0x58, - 0x62, 0x8d, 0x90, 0xdb, 0x0a, 0xc2, 0xa6, 0x01, 0xe3, 0x38, 0xe0, 0xb6, 0x47, 0x19, 0xa7, 0x41, - 0xcd, 0xde, 0x23, 0xa4, 0x68, 0x2c, 0x1b, 0x2b, 0xa3, 0xb7, 0xe7, 0x57, 0xd5, 0x12, 0x56, 0xc5, - 0x12, 0x56, 0xb5, 0x76, 0xab, 0xf7, 0x43, 0x1a, 0xac, 0x0f, 0x7c, 0xf2, 0xd9, 0xd2, 0x05, 0x6b, - 0x41, 0xe0, 0x6c, 0x49, 0x98, 0x8a, 0x42, 0xd9, 0x54, 0x20, 0x1b, 0x84, 0xa0, 0x03, 0xb8, 0xee, - 0x92, 0x88, 0xb6, 0xb0, 0xd0, 0xeb, 0x2c, 0x61, 0x7d, 0xdd, 0x09, 0xbb, 0x92, 0xa2, 0x9d, 0x26, - 0x12, 0xc3, 0x82, 0x4b, 0xf6, 0x70, 0xd3, 0xe3, 0xb6, 0x5e, 0xe1, 0x3e, 0x89, 0x84, 0x0c, 0x3b, - 0xc2, 0x9c, 0x14, 0xfb, 0x97, 0x8d, 0x95, 0x91, 0xf5, 0xab, 0x02, 0xed, 0xcf, 0x9f, 0x2d, 0x2d, - 0x28, 0x79, 0xcc, 0xdd, 0x5f, 0xa5, 0xe1, 0x9a, 0x8f, 0x79, 0x7d, 0x75, 0x93, 0xd4, 0xb0, 0x73, - 0x54, 0x26, 0x8e, 0x35, 0xa7, 0x71, 0x76, 0xe4, 0x02, 0xf7, 0x49, 0xb4, 0x41, 0x88, 0x85, 0xf9, - 0x71, 0x11, 0xbc, 0x5d, 0xc4, 0xc0, 0xf3, 0x89, 0xd8, 0xcd, 0x8a, 0xf0, 0xe1, 0x4a, 0x2c, 0xa2, - 0x6d, 0x03, 0xdb, 0x04, 0x0d, 0x76, 0x2f, 0xe8, 0xb2, 0x46, 0x2b, 0x67, 0xf6, 0xef, 0x5c, 0x71, - 0x1d, 0xeb, 0x1a, 0xfa, 0x2a, 0xe2, 0xda, 0x56, 0xe7, 0xc2, 0xa5, 0x58, 0x1c, 0x0d, 0x28, 0xa7, - 0xd8, 0x13, 0xbe, 0x51, 0xa3, 0x81, 0x10, 0x44, 0xc3, 0xe2, 0x70, 0xf7, 0x92, 0xe6, 0x35, 0x50, - 0x45, 0xe1, 0x6c, 0x49, 0x18, 0x4b, 0xa0, 0x20, 0x0f, 0x96, 0x63, 0x29, 0x3e, 0xa6, 0x01, 0x27, - 0x01, 0x0e, 0x1c, 0xd2, 0x2e, 0x29, 0xd7, 0xfb, 0x9a, 0xb6, 0x52, 0xac, 0xac, 0xb4, 0xd7, 0xa1, - 0x18, 0x4b, 0xdb, 0x6b, 0x06, 0xae, 0x70, 0x6c, 0x41, 0x17, 0xb5, 0xb0, 0x57, 0x1c, 0x59, 0x36, - 0x56, 0xfa, 0xad, 0x59, 0x3d, 0xbf, 0xa1, 0xa6, 0x2b, 0x7a, 0x16, 0xbd, 0x08, 0x85, 0x98, 0xc3, - 0x6f, 0x7a, 0x9c, 0x36, 0x3c, 0x52, 0x04, 0xc9, 0x31, 0xa1, 0xc7, 0xb7, 0xf4, 0x30, 0xfa, 0x3a, - 0xcc, 0x46, 0xc4, 0xc3, 0x47, 0xda, 0x2c, 0xac, 0x8e, 0x23, 0x6d, 0x9c, 0xd1, 0xee, 0x17, 0x32, - 0xa5, 0x21, 0x36, 0x08, 0xd9, 0x11, 0x00, 0xd2, 0x24, 0x14, 0x96, 0x62, 0xf5, 0xeb, 0x61, 0x33, - 0xf2, 0x8e, 0x92, 0x55, 0x08, 0x78, 0xdb, 0xc1, 0x8d, 0xe2, 0x58, 0xf7, 0x22, 0xe2, 0xf8, 0x78, - 0x24, 0xa1, 0xf4, 0x82, 0x85, 0x9c, 0xfb, 0xb8, 0x91, 0xb5, 0xbe, 0x16, 0x25, 0x37, 0x8a, 0x30, - 0xae, 0x96, 0x92, 0xef, 0xdd, 0xfa, 0x4a, 0x4e, 0x45, 0xc3, 0xc8, 0x05, 0x95, 0x61, 0xc9, 0xc7, - 0x87, 0x59, 0x77, 0x96, 0xa9, 0xd0, 0x66, 0xd4, 0x25, 0xb6, 0x13, 0x36, 0x03, 0x5e, 0x1c, 0x5f, - 0x36, 0x56, 0xf2, 0xd6, 0x82, 0x8f, 0x0f, 0x53, 0x3f, 0x7d, 0x22, 0x88, 0x76, 0xa8, 0x4b, 0xee, - 0x0b, 0x12, 0xc4, 0xe0, 0x06, 0x0d, 0x9e, 0xd9, 0x11, 0x79, 0x1f, 0x47, 0xae, 0xcd, 0x44, 0x44, - 0xb8, 0x76, 0x44, 0x0e, 0x9a, 0x34, 0x22, 0x3e, 0x09, 0xb8, 0xcd, 0xeb, 0x11, 0x61, 0xf5, 0xd0, - 0x73, 0x8b, 0x13, 0x52, 0xed, 0xcb, 0x5a, 0xed, 0x99, 0xe3, 0x6a, 0x57, 0x02, 0x6e, 0x5d, 0xa5, - 0xc1, 0x33, 0x4b, 0x82, 0xed, 0x48, 0x2c, 0x2b, 0x85, 0xda, 0x8d, 0x91, 0xd0, 0x43, 0x58, 0xe6, - 0x11, 0x56, 0x9b, 0x2f, 0x69, 0x99, 0xdd, 0x22, 0x2a, 0x57, 0xba, 0x4d, 0xe9, 0xb7, 0x41, 0xb1, - 0x20, 0x1d, 0xe4, 0xb2, 0xa6, 0x53, 0x90, 0xec, 0xa9, 0xa2, 0x2a, 0x6b, 0x22, 0xb1, 0xd3, 0x1e, - 0x3d, 0x68, 0x52, 0x17, 0xf3, 0x30, 0x4a, 0x16, 0x91, 0x3a, 0xcd, 0x64, 0x0f, 0x3b, 0x9d, 0x02, - 0x69, 0xfd, 0x13, 0xd7, 0x39, 0x84, 0x17, 0xab, 0x34, 0xc0, 0xd1, 0x91, 0x1d, 0x36, 0x84, 0x58, - 0x76, 0x56, 0xa2, 0x47, 0xdd, 0x25, 0xfa, 0x6b, 0x0a, 0xf1, 0x89, 0x02, 0x3c, 0x2d, 0xd7, 0x7f, - 0x0b, 0x96, 0x31, 0x0f, 0x7d, 0xea, 0xc4, 0x12, 0x95, 0x89, 0xb1, 0xe3, 0x10, 0xc6, 0x6c, 0x8f, - 0xb4, 0x88, 0x57, 0x9c, 0x5a, 0x36, 0x56, 0xc6, 0x6f, 0xbf, 0xba, 0x7a, 0x62, 0x25, 0x5f, 0x2d, - 0x49, 0x76, 0x85, 0x2f, 0x4d, 0x5f, 0x92, 0xbc, 0x9b, 0x82, 0xd5, 0xba, 0x84, 0xcf, 0x98, 0x45, - 0x87, 0x70, 0x43, 0x66, 0xff, 0x93, 0x34, 0x10, 0xc1, 0xa9, 0x63, 0x99, 0x92, 0xa8, 0x38, 0xdd, - 0xfd, 0x3e, 0x9b, 0x02, 0xf3, 0x98, 0x56, 0x1b, 0x84, 0x6c, 0x25, 0x70, 0xe8, 0x03, 0x03, 0x5e, - 0xc9, 0xf8, 0x75, 0x17, 0x0a, 0xcc, 0x74, 0xaf, 0xc0, 0x4a, 0x8a, 0x7c, 0x8e, 0x1a, 0xdf, 0x37, - 0xe0, 0x56, 0x87, 0xe1, 0xbb, 0x50, 0x65, 0xb6, 0x7b, 0x55, 0x5e, 0x6a, 0x73, 0x82, 0x73, 0xb4, - 0x79, 0x0f, 0xe6, 0x7d, 0x1a, 0x50, 0x1f, 0x7b, 0xb6, 0xec, 0x76, 0x9c, 0xd0, 0x4b, 0x4b, 0xd7, - 0x5c, 0xf7, 0x42, 0x67, 0x35, 0xca, 0xb6, 0x06, 0x89, 0x6b, 0xd6, 0xbb, 0xf0, 0x12, 0x65, 0x89, - 0x4b, 0x1f, 0xef, 0x6a, 0x3c, 0xdc, 0x0c, 0x9c, 0xba, 0x4d, 0x02, 0x5c, 0xf5, 0x88, 0x5b, 0x2c, - 0x2e, 0x1b, 0x2b, 0x39, 0xeb, 0x05, 0xca, 0xb4, 0xd7, 0x96, 0x3b, 0x1a, 0x97, 0x4d, 0x49, 0xfe, - 0x40, 0x51, 0x8b, 0x64, 0xd5, 0x08, 0x19, 0xb7, 0xc3, 0xc0, 0x3b, 0xb2, 0xfd, 0xd0, 0x25, 0x76, - 0x9d, 0xd0, 0x5a, 0x3d, 0x9b, 0x5e, 0xe6, 0x65, 0xc0, 0x2f, 0x08, 0xb2, 0x27, 0x81, 0x77, 0xb4, - 0x15, 0xba, 0xe4, 0x91, 0xa4, 0x49, 0xf3, 0x46, 0x0d, 0x6e, 0xe9, 0xe2, 0xe6, 0x12, 0x27, 0x22, - 0x98, 0x11, 0xbb, 0x11, 0x51, 0x87, 0xd8, 0x9c, 0xfa, 0x84, 0x71, 0xec, 0x37, 0x52, 0x3c, 0x9b, - 0x11, 0x27, 0x0c, 0x5c, 0x56, 0xbc, 0x28, 0x71, 0x5f, 0x56, 0x8c, 0x65, 0xcd, 0xb7, 0x2d, 0xd8, - 0x76, 0x63, 0xae, 0x44, 0xc2, 0x8e, 0xe2, 0x41, 0x37, 0x60, 0x22, 0x0e, 0x22, 0x1b, 0xbb, 0x3e, - 0x0d, 0x58, 0x71, 0x61, 0xb9, 0x7f, 0x65, 0xc4, 0x1a, 0x8f, 0x87, 0x4b, 0x72, 0x14, 0x6d, 0xc2, - 0x94, 0x48, 0x9f, 0xb8, 0xe9, 0x08, 0x13, 0xda, 0x22, 0x21, 0x8b, 0x4a, 0x72, 0xa9, 0x9b, 0x54, - 0x59, 0xa0, 0xc1, 0xb3, 0x92, 0x62, 0xdc, 0xc2, 0x87, 0xa2, 0x70, 0xdc, 0x84, 0xc9, 0x3d, 0x7a, - 0x48, 0x5c, 0xbb, 0x86, 0x59, 0xb2, 0xd1, 0x97, 0xe5, 0x46, 0x4f, 0xc8, 0x89, 0x87, 0x98, 0xc5, - 0x3b, 0x7a, 0x0f, 0x2e, 0x12, 0x9f, 0x72, 0xdb, 0x93, 0x86, 0xb5, 0x5b, 0x24, 0x62, 0x42, 0x03, - 0xd2, 0x22, 0x01, 0x67, 0xc5, 0x45, 0xc9, 0x34, 0x27, 0x28, 0x94, 0xe5, 0x9f, 0xaa, 0xf9, 0x07, - 0x72, 0x1a, 0x55, 0xd3, 0x06, 0x2f, 0x22, 0x6e, 0xb3, 0xb3, 0x69, 0x58, 0xea, 0xde, 0x9b, 0xe2, - 0x9e, 0xc0, 0x92, 0x30, 0xd9, 0x7e, 0xe1, 0xff, 0xe0, 0x52, 0x87, 0xc9, 0xab, 0x5e, 0xe8, 0xec, - 0x33, 0x1b, 0xfb, 0xb2, 0x38, 0x5d, 0x59, 0x36, 0x56, 0x06, 0xac, 0x62, 0xd6, 0xde, 0xeb, 0x92, - 0xa0, 0x24, 0xe7, 0xd1, 0x16, 0x5c, 0xf3, 0x69, 0x60, 0x77, 0x60, 0xb8, 0xe1, 0xfb, 0x81, 0xb0, - 0x76, 0x5a, 0x28, 0x4c, 0xa1, 0xac, 0xb5, 0xe4, 0xd3, 0x60, 0x3b, 0x03, 0x55, 0xd6, 0x74, 0x49, - 0xa9, 0x78, 0x07, 0x5e, 0x3a, 0x4b, 0x1d, 0x1b, 0xef, 0x71, 0x12, 0x25, 0xf0, 0xc5, 0xab, 0x52, - 0xbb, 0xeb, 0xa7, 0x69, 0x57, 0x12, 0xd4, 0xb1, 0x8c, 0xbb, 0xc5, 0x2f, 0x3f, 0x5e, 0x32, 0x3e, - 0xfc, 0xdb, 0xaf, 0x6e, 0x26, 0x5e, 0xb3, 0xa6, 0x8e, 0x21, 0x6f, 0x0c, 0xe4, 0x96, 0x0b, 0x57, - 0xcc, 0xff, 0x85, 0xe9, 0xc7, 0xe4, 0x30, 0xee, 0x8b, 0x12, 0xb7, 0x43, 0xd7, 0x61, 0x3c, 0x20, - 0x87, 0x3c, 0x75, 0x5f, 0x79, 0x26, 0xe9, 0xb7, 0xf2, 0x62, 0x34, 0x21, 0x33, 0xff, 0x6e, 0xc0, - 0xf8, 0x16, 0x75, 0xa5, 0xcf, 0x96, 0x02, 0x77, 0xf7, 0xc9, 0x3a, 0xfa, 0x1a, 0x8c, 0xf8, 0xd4, - 0x55, 0xde, 0x2f, 0x99, 0x94, 0xb9, 0x8c, 0xf3, 0xcc, 0x95, 0xf3, 0x35, 0x0e, 0xaa, 0xc0, 0x78, - 0x55, 0x74, 0x24, 0xd5, 0xe6, 0x91, 0x86, 0xe9, 0xeb, 0x1e, 0x66, 0x4c, 0xb0, 0xae, 0x37, 0x8f, - 0x14, 0xd4, 0x9b, 0x30, 0x21, 0xa1, 0x18, 0xf1, 0x3c, 0x8d, 0xd5, 0xdf, 0x3d, 0x56, 0x5e, 0xf0, - 0xee, 0x10, 0xcf, 0x93, 0x60, 0xe6, 0xcf, 0x0d, 0x18, 0x2e, 0x93, 0x46, 0xc8, 0x28, 0x47, 0xdb, - 0x30, 0x89, 0x5b, 0x98, 0x7a, 0xc2, 0xe3, 0xed, 0x2a, 0xf6, 0x44, 0x4b, 0x9a, 0x59, 0xed, 0xb9, - 0xce, 0x59, 0x48, 0xb8, 0xd7, 0x15, 0x33, 0x7a, 0x04, 0x79, 0x1e, 0x72, 0xec, 0x25, 0x68, 0x7d, - 0xdd, 0xa3, 0x8d, 0x49, 0x4e, 0x8d, 0x64, 0xbe, 0x0c, 0xd3, 0x3b, 0xcd, 0x2a, 0x76, 0x64, 0xa7, - 0xb5, 0x1b, 0x61, 0x97, 0x3c, 0x0e, 0x85, 0x84, 0x69, 0x18, 0x0c, 0xc2, 0x58, 0xcf, 0xbc, 0xa5, - 0x3e, 0xcc, 0xdf, 0x1a, 0x30, 0x91, 0x92, 0xcb, 0xec, 0x8e, 0xfe, 0x1b, 0x06, 0x3b, 0xed, 0x77, - 0xae, 0x0e, 0x8a, 0x03, 0xfd, 0x3f, 0xe4, 0x0e, 0x9a, 0x38, 0xe0, 0x94, 0x1f, 0xf5, 0xb2, 0x82, - 0x84, 0x09, 0x99, 0x30, 0x46, 0x99, 0x8a, 0x59, 0xe1, 0xde, 0xd2, 0x5e, 0x39, 0xab, 0x6d, 0x0c, - 0x15, 0xa0, 0xdf, 0xa1, 0xae, 0x3a, 0xed, 0x59, 0xe2, 0xa7, 0x19, 0xc1, 0x54, 0xc7, 0x22, 0xca, - 0x98, 0x63, 0xf4, 0x3f, 0x30, 0x28, 0x2b, 0xa1, 0x3e, 0x51, 0xbf, 0x70, 0x4a, 0x2b, 0xd2, 0xc1, - 0x6a, 0x29, 0x26, 0x74, 0x19, 0x40, 0xd5, 0xd1, 0x3a, 0x66, 0x75, 0xb9, 0x9a, 0x31, 0x6b, 0x44, - 0x8e, 0x3c, 0xc2, 0xac, 0x6e, 0xfe, 0xae, 0x0f, 0x72, 0xdb, 0xc2, 0x1b, 0x44, 0x10, 0xcf, 0xc2, - 0x10, 0x65, 0x9b, 0x61, 0x50, 0x93, 0xa2, 0x72, 0x96, 0xfe, 0xfa, 0xea, 0xfb, 0x51, 0x86, 0x51, - 0x12, 0xf0, 0xe8, 0xe8, 0x98, 0xfb, 0x9e, 0x8b, 0x01, 0x92, 0x4f, 0x05, 0xc2, 0x3d, 0x18, 0x52, - 0x79, 0xb4, 0x97, 0x23, 0xb2, 0x66, 0x41, 0xdf, 0x80, 0xa2, 0xd3, 0xf4, 0x9b, 0x9e, 0x2a, 0xba, - 0xf1, 0xe1, 0x44, 0xa2, 0xf7, 0x72, 0x10, 0x9e, 0x4d, 0x41, 0x74, 0xbe, 0x79, 0x20, 0x20, 0xcc, - 0x0f, 0x0d, 0x18, 0x8e, 0xa3, 0xe0, 0x2a, 0xe4, 0x59, 0x62, 0x0c, 0x9b, 0xba, 0xca, 0x03, 0xad, - 0xb1, 0x74, 0xb0, 0xe2, 0x0a, 0x47, 0x76, 0x49, 0x10, 0xfa, 0x6a, 0x43, 0x2d, 0xf5, 0x81, 0xee, - 0x42, 0xce, 0x55, 0xd1, 0xc9, 0xe4, 0x2e, 0x8d, 0xde, 0x5e, 0x3c, 0xc5, 0xdc, 0x3a, 0x88, 0xad, - 0x84, 0xfe, 0x6e, 0xee, 0x7b, 0x1f, 0x2f, 0x5d, 0xf8, 0xf2, 0xe3, 0xa5, 0x0b, 0xe6, 0x4f, 0x0d, - 0x40, 0x69, 0xc3, 0x90, 0x98, 0xb7, 0x2b, 0xbd, 0x16, 0x60, 0x24, 0x6e, 0xbf, 0x5d, 0xad, 0x5b, - 0x4e, 0x0d, 0x54, 0x44, 0x55, 0xcc, 0x35, 0x34, 0x9a, 0x56, 0x6f, 0xe9, 0x14, 0xf5, 0x62, 0xa1, - 0x56, 0xc2, 0x90, 0xd1, 0xaf, 0x02, 0xd3, 0x99, 0x3e, 0xac, 0x12, 0xb8, 0xd4, 0x11, 0x07, 0x83, - 0x76, 0xd9, 0x46, 0x87, 0xec, 0x69, 0x18, 0xa4, 0x6c, 0xbd, 0xa9, 0x3c, 0x30, 0x67, 0xa9, 0x0f, - 0xf3, 0x8f, 0x7d, 0x90, 0x93, 0xe9, 0x61, 0x33, 0x6c, 0xf7, 0x53, 0xe3, 0x79, 0xfc, 0x34, 0xc9, - 0x19, 0x7d, 0x3d, 0xe7, 0x8c, 0x63, 0x9b, 0xdb, 0x2f, 0x43, 0xad, 0x7d, 0x73, 0xef, 0x40, 0xbf, - 0x38, 0xc4, 0xf4, 0xe0, 0xbe, 0x82, 0xbe, 0x23, 0x86, 0x07, 0x3b, 0x62, 0x18, 0xbd, 0x0e, 0x33, - 0xb2, 0x53, 0x25, 0x0e, 0x6d, 0x50, 0x71, 0xa8, 0xc4, 0xae, 0x1b, 0x11, 0xc6, 0xe4, 0x8d, 0xcb, - 0x98, 0x3c, 0x11, 0x19, 0xd6, 0xd4, 0x1e, 0x21, 0x56, 0x4c, 0x51, 0x52, 0x04, 0x71, 0x0e, 0x1a, - 0x4e, 0x73, 0xd0, 0x8f, 0xfb, 0x20, 0x1f, 0xdb, 0xae, 0x4c, 0x3c, 0x8e, 0xd1, 0x1c, 0x0c, 0x53, - 0x66, 0x7b, 0xc7, 0xb3, 0x82, 0x05, 0x88, 0x1c, 0x12, 0xa7, 0x29, 0x5b, 0xb3, 0xe7, 0xc9, 0x0f, - 0x93, 0x09, 0xfb, 0x5b, 0xb1, 0x01, 0x1e, 0x43, 0x21, 0xc5, 0xd4, 0xc1, 0xde, 0x43, 0xb6, 0x98, - 0x48, 0x98, 0x55, 0xab, 0x84, 0x36, 0x21, 0x1d, 0xd2, 0xc9, 0xa7, 0x87, 0xcd, 0x1f, 0x4f, 0x78, - 0x55, 0xf1, 0xfc, 0x49, 0x7f, 0x36, 0xae, 0x12, 0xb7, 0x3b, 0x31, 0xae, 0x3a, 0x4d, 0xff, 0x26, - 0x8c, 0xc7, 0x91, 0x60, 0xbb, 0x62, 0x63, 0xf5, 0x9d, 0xe5, 0xb5, 0x73, 0x02, 0x48, 0x1a, 0xc1, - 0xca, 0x37, 0xda, 0x6c, 0x72, 0x0f, 0x86, 0x1a, 0xf8, 0x28, 0x6c, 0xf2, 0x5e, 0x36, 0x47, 0xb3, - 0xfc, 0xe7, 0x3b, 0xa1, 0xd0, 0xb0, 0x11, 0x78, 0xbd, 0x5c, 0xae, 0x09, 0x7a, 0xb3, 0x05, 0x28, - 0x2d, 0x82, 0x49, 0xd6, 0xcb, 0xe6, 0x2c, 0xa3, 0xc7, 0x9c, 0x75, 0xdc, 0xb4, 0x7d, 0xc7, 0x4d, - 0x6b, 0x46, 0x30, 0x99, 0xca, 0x8d, 0x9b, 0xab, 0xae, 0x9c, 0xe2, 0x75, 0x18, 0xd6, 0xe9, 0x5b, - 0x7b, 0xc3, 0x79, 0xd9, 0x3e, 0x26, 0x37, 0xf7, 0x21, 0xaf, 0xc7, 0xde, 0x6e, 0xb8, 0xe2, 0x7c, - 0x99, 0xd4, 0x13, 0x23, 0x5b, 0x4f, 0xca, 0x99, 0x7a, 0xd2, 0xb7, 0xdc, 0xbf, 0x32, 0x7a, 0x7b, - 0xe5, 0xdc, 0xf6, 0xe1, 0x58, 0x65, 0x31, 0xff, 0x60, 0x40, 0x61, 0x3b, 0xa4, 0x01, 0x67, 0x99, - 0x03, 0xf3, 0xbb, 0x30, 0xa7, 0xee, 0x93, 0x1b, 0x72, 0x26, 0x7b, 0x46, 0xef, 0x21, 0xf7, 0xce, - 0x48, 0x8c, 0x93, 0xc0, 0xf9, 0x29, 0xe0, 0x3d, 0x24, 0x98, 0x19, 0x7e, 0x12, 0xb8, 0xf9, 0x8f, - 0x3e, 0x58, 0xdc, 0xcd, 0x5e, 0x7c, 0xdd, 0xc7, 0x7e, 0x03, 0xd3, 0x5a, 0xb0, 0x1e, 0x86, 0x8c, - 0x57, 0x82, 0xbd, 0x10, 0xdd, 0x81, 0xb9, 0xaa, 0xf8, 0x20, 0xae, 0xdd, 0xf6, 0xce, 0xe1, 0xb2, - 0xa2, 0x21, 0x4f, 0xaa, 0xd3, 0x7a, 0x7a, 0x27, 0x7d, 0xbd, 0x70, 0x19, 0x22, 0x30, 0x97, 0x25, - 0x4f, 0xb5, 0x8e, 0x77, 0xff, 0xc6, 0xa9, 0xae, 0xd7, 0xae, 0xa3, 0xbe, 0xc6, 0x9a, 0x49, 0x1f, - 0x47, 0xd2, 0x39, 0x86, 0x4a, 0x70, 0x39, 0xd6, 0xee, 0x84, 0xe7, 0x11, 0x57, 0xb4, 0x0e, 0x42, - 0xc7, 0x8b, 0x9a, 0xa8, 0xf3, 0xee, 0x40, 0x68, 0x7a, 0x00, 0x97, 0x8f, 0xb3, 0x66, 0xf5, 0x1d, - 0x78, 0x1e, 0x7d, 0x17, 0x3a, 0xdf, 0x57, 0x32, 0x5a, 0x9b, 0xbf, 0x36, 0x00, 0xc5, 0x3b, 0xad, - 0xf6, 0x7d, 0x3b, 0x0c, 0x3d, 0x74, 0x03, 0x26, 0x18, 0xc7, 0xd1, 0xf1, 0x63, 0xda, 0xb8, 0x1c, - 0x4e, 0x8f, 0x73, 0xdf, 0x86, 0x69, 0x75, 0x01, 0xa0, 0x20, 0xe2, 0xbb, 0x4d, 0xbd, 0xb3, 0x67, - 0x5c, 0x09, 0xfe, 0x97, 0xd0, 0xed, 0x97, 0x7f, 0x59, 0x5a, 0xa9, 0x51, 0x5e, 0x6f, 0x56, 0x57, - 0x9d, 0xd0, 0x5f, 0xd3, 0x0f, 0x6b, 0xea, 0xbf, 0x57, 0x98, 0xbb, 0xbf, 0xc6, 0x8f, 0x1a, 0x84, - 0x49, 0x06, 0x66, 0x21, 0x1f, 0x1f, 0xb6, 0xab, 0xca, 0xcc, 0x9f, 0xf5, 0xc1, 0xfc, 0x89, 0x5e, - 0x23, 0x1d, 0xe6, 0x2e, 0xcc, 0x27, 0x8a, 0xc5, 0x67, 0xe7, 0xe4, 0x8e, 0x44, 0xad, 0x67, 0x2e, - 0x26, 0x88, 0x0f, 0xcd, 0xf1, 0x75, 0xc8, 0x15, 0x18, 0x3b, 0x68, 0x86, 0x9c, 0xd8, 0x32, 0x66, - 0xd5, 0x82, 0x46, 0xac, 0x51, 0x39, 0x56, 0x96, 0x43, 0xa8, 0x01, 0xf3, 0xed, 0x57, 0xba, 0xb6, - 0xb4, 0xad, 0x4d, 0x83, 0xbd, 0x50, 0x77, 0x62, 0x77, 0x4e, 0x31, 0xd5, 0xd9, 0x9e, 0x6e, 0xcd, - 0xb6, 0x5d, 0x01, 0xa7, 0x11, 0xf0, 0x1a, 0xcc, 0xb9, 0x94, 0x1d, 0x34, 0xb1, 0x47, 0xf7, 0x28, - 0x71, 0xb3, 0xde, 0x35, 0x20, 0xf5, 0x9b, 0xc9, 0x4e, 0x27, 0x8e, 0x65, 0xfe, 0xa6, 0x0f, 0xa6, - 0x36, 0x08, 0x29, 0x53, 0xa6, 0x8e, 0x6e, 0x54, 0x34, 0x78, 0x7b, 0x21, 0xda, 0x81, 0x29, 0x95, - 0x2e, 0x5c, 0x3d, 0xa3, 0x6e, 0xd6, 0x7a, 0x48, 0x15, 0x93, 0x92, 0x3f, 0x06, 0x96, 0x97, 0x6a, - 0x3b, 0x30, 0xc5, 0x4f, 0x00, 0xed, 0xa5, 0x07, 0xe1, 0xc7, 0x40, 0xd7, 0x21, 0xaf, 0x2f, 0xea, - 0xf5, 0x55, 0x4a, 0x7f, 0x37, 0xd7, 0x4d, 0x63, 0x8a, 0x47, 0xdf, 0xae, 0xdc, 0x83, 0xa1, 0x56, - 0xe8, 0x35, 0xfd, 0x9e, 0xca, 0xac, 0x66, 0x31, 0xbf, 0xdb, 0xbe, 0x85, 0x3b, 0x4e, 0x9d, 0xb8, - 0x4d, 0x8f, 0x08, 0x3f, 0xa9, 0x36, 0x1d, 0x61, 0x05, 0xf5, 0xfe, 0x60, 0xc8, 0x4b, 0x94, 0x51, - 0x35, 0xa6, 0xde, 0x1b, 0x6e, 0xc0, 0x84, 0x26, 0x49, 0x2e, 0x70, 0xfa, 0x54, 0x30, 0xa9, 0xe1, - 0xe4, 0xbe, 0xa6, 0xd3, 0xe7, 0xfa, 0x8f, 0xfb, 0x5c, 0x05, 0x80, 0x53, 0x12, 0x49, 0x1f, 0x8b, - 0xf3, 0xc1, 0xcd, 0x53, 0x9c, 0xec, 0x04, 0x8b, 0x5b, 0x23, 0x5c, 0xff, 0x62, 0x67, 0x39, 0xd3, - 0xe0, 0x59, 0xce, 0xb4, 0x05, 0xa8, 0x03, 0x79, 0x77, 0x77, 0x13, 0x21, 0x18, 0xe0, 0x71, 0x99, - 0x19, 0xb0, 0xe4, 0x6f, 0x51, 0x6e, 0x39, 0xf7, 0x32, 0x39, 0x44, 0x2d, 0x7b, 0x8c, 0x73, 0x2f, - 0xbd, 0xe9, 0xf9, 0x81, 0x01, 0xe3, 0x25, 0x55, 0xe4, 0x74, 0x54, 0xa3, 0x22, 0x0c, 0xeb, 0xb2, - 0xa7, 0x0b, 0x67, 0xfc, 0x89, 0x08, 0x0c, 0xff, 0x1b, 0x33, 0x4c, 0x8c, 0x6d, 0x7e, 0xc7, 0x80, - 0x31, 0xd9, 0x49, 0x5a, 0xc4, 0x09, 0x85, 0x46, 0x67, 0x1e, 0x82, 0x76, 0x61, 0xda, 0xc3, 0x9c, - 0x30, 0x6e, 0x8b, 0xb0, 0x95, 0xed, 0x56, 0x98, 0x6a, 0x68, 0x9e, 0x91, 0x02, 0x34, 0xbe, 0x85, - 0x14, 0x7f, 0x56, 0xa4, 0xf9, 0x1a, 0xe4, 0xd3, 0xf2, 0x5f, 0x29, 0x33, 0x74, 0x1d, 0xc6, 0xdb, - 0x9a, 0x17, 0x55, 0xf5, 0xc6, 0xac, 0x7c, 0xb6, 0x7b, 0x61, 0xe6, 0x2f, 0x0c, 0x18, 0xcd, 0x00, - 0xa1, 0x4b, 0x30, 0xd2, 0x99, 0xc4, 0xd3, 0x81, 0xaf, 0x72, 0xb8, 0xca, 0x1e, 0xec, 0xfa, 0x9f, - 0xe3, 0x60, 0x67, 0xfa, 0x30, 0xa8, 0x5e, 0x5d, 0x6e, 0x81, 0xd1, 0xe8, 0x25, 0xe9, 0x18, 0x0d, - 0xc1, 0x72, 0xd0, 0x8b, 0xce, 0xc6, 0x81, 0xf9, 0x43, 0x03, 0x96, 0x4a, 0xb5, 0x5a, 0x44, 0x6a, - 0x98, 0x93, 0x74, 0x6b, 0x9f, 0xca, 0xf8, 0xd6, 0x9b, 0xd5, 0xd5, 0x69, 0xfc, 0x0d, 0x18, 0xd7, - 0xce, 0xa0, 0x72, 0x43, 0x6c, 0xe9, 0xab, 0xa7, 0x58, 0x5a, 0x85, 0x8e, 0x96, 0x93, 0xf7, 0x33, - 0x5f, 0xcc, 0xfc, 0xc0, 0x80, 0x4b, 0x89, 0x52, 0xa5, 0x13, 0x34, 0x3a, 0x3d, 0x16, 0xfe, 0x95, - 0x6a, 0x94, 0x44, 0xe7, 0x1a, 0x84, 0x7e, 0x99, 0x38, 0xd4, 0xc7, 0x1e, 0x3b, 0xa5, 0x73, 0xbd, - 0x28, 0x3a, 0x57, 0x45, 0x21, 0x37, 0x7f, 0xc0, 0x4a, 0xbe, 0x4d, 0x02, 0xe8, 0x61, 0x84, 0x03, - 0x5e, 0x6a, 0xf2, 0x7a, 0x18, 0xd1, 0x6f, 0xaa, 0x94, 0x56, 0x84, 0xe1, 0x9a, 0x18, 0xd5, 0x7f, - 0x7b, 0x32, 0x62, 0xc5, 0x9f, 0xe8, 0x0e, 0x0c, 0xe9, 0x54, 0xde, 0xd7, 0x4d, 0x2a, 0xd7, 0xc4, - 0xe6, 0x7b, 0x30, 0x5a, 0x92, 0x6b, 0x93, 0xc2, 0x52, 0xfc, 0xa8, 0x1d, 0x3f, 0x7a, 0x5e, 0xfc, - 0x8f, 0x0c, 0x18, 0x7f, 0xb0, 0xb7, 0x47, 0xba, 0x92, 0x51, 0x81, 0xc9, 0x80, 0x70, 0x5b, 0x7d, - 0xea, 0xa7, 0xe4, 0xee, 0xc4, 0x4d, 0x04, 0x84, 0x3f, 0x54, 0x6c, 0xf2, 0xd1, 0x18, 0xcd, 0x43, - 0x8e, 0x32, 0xbb, 0x85, 0x3d, 0x7d, 0x4b, 0x91, 0xb3, 0x86, 0x29, 0x7b, 0x2a, 0x3e, 0xcd, 0x06, - 0x14, 0xa4, 0x71, 0xb6, 0x68, 0xf0, 0x38, 0x14, 0xbb, 0x8a, 0xbd, 0x53, 0xec, 0xb3, 0x01, 0x63, - 0x3e, 0x0d, 0xec, 0x40, 0x53, 0xf5, 0x12, 0x20, 0xa3, 0x7e, 0x8a, 0x7e, 0xf3, 0xf7, 0x06, 0xe4, - 0x1f, 0xc4, 0xc7, 0xec, 0xdd, 0xa3, 0x06, 0x41, 0x97, 0xa0, 0xf8, 0x76, 0xc0, 0x1a, 0xc4, 0x91, - 0xc5, 0xa0, 0x6d, 0xae, 0x70, 0x01, 0x01, 0x0c, 0x29, 0xef, 0x2a, 0x18, 0x28, 0x0f, 0x23, 0x9b, - 0xd4, 0xa7, 0x7c, 0x83, 0x7a, 0x5e, 0xa1, 0x0f, 0x5d, 0x84, 0x59, 0xf9, 0xb9, 0x85, 0xb9, 0x53, - 0xb7, 0xd4, 0x5b, 0xb6, 0xbc, 0x61, 0x2a, 0xf4, 0xa3, 0x59, 0x40, 0xe9, 0xdc, 0x63, 0xf2, 0xbe, - 0x1a, 0x1f, 0x40, 0x33, 0x30, 0xa9, 0x1f, 0xd4, 0xf4, 0xfb, 0x34, 0x0d, 0x83, 0xc2, 0xa0, 0x80, - 0x7a, 0x70, 0xd8, 0xa0, 0xd1, 0x91, 0x9a, 0xdc, 0x21, 0x9c, 0x7b, 0xf2, 0x95, 0xbd, 0x30, 0x24, - 0xa0, 0x9e, 0xec, 0xed, 0x31, 0xc2, 0x05, 0x7e, 0x7c, 0x66, 0x2c, 0x0c, 0xaf, 0xef, 0x7f, 0xf2, - 0xf9, 0xa2, 0xf1, 0xe9, 0xe7, 0x8b, 0xc6, 0x5f, 0x3f, 0x5f, 0x34, 0x3e, 0xfa, 0x62, 0xf1, 0xc2, - 0xa7, 0x5f, 0x2c, 0x5e, 0xf8, 0xd3, 0x17, 0x8b, 0x17, 0xde, 0x79, 0x2b, 0x53, 0x16, 0x2a, 0x71, - 0xc0, 0x6c, 0xe2, 0x2a, 0x5b, 0x4b, 0xc2, 0xe7, 0x15, 0x27, 0x8c, 0x48, 0xf6, 0xb3, 0x8e, 0x69, - 0xb0, 0xe6, 0x87, 0xa2, 0xf0, 0xb3, 0xf4, 0x2f, 0xb2, 0x64, 0x09, 0x59, 0x6b, 0xdd, 0xae, 0x0e, - 0xc9, 0x47, 0xca, 0x57, 0xff, 0x19, 0x00, 0x00, 0xff, 0xff, 0x58, 0x3c, 0x91, 0x3c, 0x88, 0x26, - 0x00, 0x00, -} + // 3229 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xc9, 0x6f, 0x1c, 0xc7, + 0xb9, 0x57, 0x0f, 0xb7, 0xe1, 0x47, 0x0e, 0x39, 0x2c, 0x6e, 0xc3, 0x9d, 0x6a, 0x49, 0x16, 0x2d, + 0x5b, 0xe4, 0x93, 0x0c, 0x19, 0x7e, 0xd2, 0xdb, 0x48, 0x8d, 0x28, 0xd1, 0x26, 0x25, 0xba, 0x49, + 0x0b, 0x0f, 0x36, 0x9e, 0x1b, 0xc5, 0xee, 0xe2, 0x4c, 0x89, 0xbd, 0x0c, 0xbb, 0x6a, 0x68, 0xf2, + 0x05, 0x39, 0x18, 0x30, 0x90, 0xc0, 0xb9, 0x38, 0xb9, 0x25, 0x88, 0x01, 0x1f, 0x12, 0x04, 0xc8, + 0x29, 0x87, 0x1c, 0x73, 0x08, 0x10, 0x04, 0xf0, 0x21, 0x01, 0x8c, 0x1c, 0x82, 0x20, 0x07, 0x27, + 0xb0, 0x0f, 0x31, 0x72, 0xce, 0x1f, 0x10, 0xd4, 0xd2, 0xcb, 0x0c, 0x39, 0xe4, 0x8c, 0x9c, 0x00, + 0xb9, 0x48, 0xd3, 0x55, 0xdf, 0xf7, 0xfb, 0xbe, 0xaa, 0xfa, 0xd6, 0x2a, 0xc2, 0x55, 0x1a, 0x3c, + 0x23, 0x0e, 0xa7, 0x47, 0x64, 0x85, 0x1c, 0x3b, 0x55, 0x1c, 0x54, 0xc8, 0xca, 0xd1, 0xed, 0xe4, + 0xf7, 0x72, 0x2d, 0x0a, 0x79, 0x88, 0xc6, 0x13, 0xaa, 0xe5, 0x64, 0xe6, 0xe8, 0xf6, 0xf4, 0x58, + 0x25, 0xac, 0x84, 0x92, 0x62, 0x45, 0xfc, 0x52, 0xc4, 0xd3, 0x23, 0xd8, 0xa7, 0x41, 0xb8, 0x22, + 0xff, 0xd5, 0x43, 0xf3, 0x4e, 0xc8, 0xfc, 0x90, 0xad, 0xec, 0x61, 0x46, 0x56, 0x8e, 0x6e, 0xed, + 0x11, 0x8e, 0x6f, 0xad, 0x38, 0x21, 0x0d, 0xf4, 0xfc, 0x94, 0x9a, 0xb7, 0x15, 0x96, 0xfa, 0xd0, + 0x53, 0xd7, 0x52, 0x05, 0xc3, 0x08, 0x3b, 0x5e, 0xca, 0xaf, 0x3e, 0x35, 0x99, 0x79, 0xf6, 0x3a, + 0x7c, 0x1c, 0x1d, 0x10, 0xae, 0x69, 0x2e, 0x9f, 0x4d, 0x13, 0x46, 0x2e, 0x89, 0x14, 0x89, 0xf9, + 0xb1, 0x01, 0xb3, 0x0f, 0x82, 0xfd, 0x30, 0x72, 0x88, 0x6b, 0x11, 0xc6, 0x23, 0xea, 0x70, 0x1a, + 0x06, 0xec, 0x7e, 0x18, 0xf0, 0x08, 0x3b, 0x1c, 0xdd, 0x87, 0xa2, 0xa3, 0x7f, 0xdb, 0xd8, 0x75, + 0x23, 0xc2, 0x58, 0xc9, 0x58, 0x34, 0x96, 0xfa, 0xd7, 0x4a, 0xbf, 0xfb, 0xf9, 0xcd, 0x31, 0xad, + 0xfa, 0xaa, 0x9a, 0xd9, 0xe1, 0x11, 0x0d, 0x2a, 0xd6, 0x70, 0xcc, 0xa1, 0x87, 0xd1, 0x6d, 0x18, + 0xaf, 0xe1, 0x3a, 0x23, 0x36, 0x39, 0x22, 0x01, 0xb7, 0x19, 0xad, 0x04, 0x98, 0xd7, 0x23, 0x52, + 0xca, 0x09, 0x24, 0x6b, 0x54, 0x4e, 0x3e, 0x10, 0x73, 0x3b, 0xf1, 0xd4, 0xdd, 0xee, 0xaf, 0x3e, + 0x59, 0x30, 0xcc, 0xef, 0x4f, 0x43, 0xef, 0x36, 0x8e, 0xb0, 0xcf, 0x10, 0x81, 0x05, 0x56, 0x0b, + 0xb9, 0xad, 0x96, 0x68, 0xd3, 0x80, 0x71, 0x1c, 0x70, 0xdb, 0xa3, 0x8c, 0xd3, 0xa0, 0x62, 0xef, + 0x13, 0x22, 0x15, 0x1b, 0xb8, 0x3d, 0xb5, 0xac, 0xb5, 0x12, 0xbb, 0xbf, 0xac, 0x77, 0x6f, 0xf9, + 0x7e, 0x48, 0x83, 0xb5, 0xee, 0x4f, 0x3f, 0x5f, 0xb8, 0x64, 0xcd, 0x08, 0x9c, 0x2d, 0x09, 0xb3, + 0xa1, 0x50, 0x36, 0x15, 0xc8, 0x3a, 0x21, 0xe8, 0x10, 0xae, 0xb9, 0x24, 0xa2, 0x47, 0x58, 0xec, + 0xdb, 0x79, 0xc2, 0x72, 0xed, 0x09, 0xbb, 0x9c, 0xa2, 0xb5, 0x12, 0x89, 0x61, 0xc6, 0x25, 0xfb, + 0xb8, 0xee, 0x71, 0x5b, 0xaf, 0xf0, 0x80, 0x44, 0x42, 0x86, 0x1d, 0x61, 0x4e, 0x4a, 0x5d, 0x72, + 0xbb, 0xaf, 0x08, 0xb4, 0x3f, 0x7e, 0xbe, 0x30, 0xa3, 0xe4, 0x31, 0xf7, 0x60, 0x99, 0x86, 0x2b, + 0x3e, 0xe6, 0xd5, 0xe5, 0x4d, 0x52, 0xc1, 0xce, 0x49, 0x99, 0x38, 0xd6, 0xa4, 0xc6, 0xd9, 0x91, + 0x0b, 0x3c, 0x20, 0xd1, 0x3a, 0x21, 0x16, 0xe6, 0xa7, 0x45, 0xf0, 0x46, 0x11, 0xdd, 0xcf, 0x27, + 0x62, 0x37, 0x2b, 0xc2, 0x87, 0xcb, 0xb1, 0x88, 0x86, 0x0d, 0x6c, 0x10, 0xd4, 0xd3, 0xbe, 0xa0, + 0x39, 0x8d, 0x56, 0xce, 0xec, 0xdf, 0x85, 0xe2, 0x9a, 0xd6, 0xd5, 0xfb, 0x75, 0xc4, 0x35, 0xac, + 0xce, 0x85, 0xd9, 0x58, 0x1c, 0x0d, 0x28, 0xa7, 0xd8, 0x13, 0xb6, 0x51, 0xa1, 0x81, 0x10, 0x44, + 0xc3, 0x52, 0x5f, 0xfb, 0x92, 0xa6, 0x34, 0xd0, 0x86, 0xc2, 0xd9, 0x92, 0x30, 0x96, 0x40, 0x41, + 0x1e, 0x2c, 0xc6, 0x52, 0x7c, 0x4c, 0x03, 0x4e, 0x02, 0x1c, 0x38, 0xa4, 0x51, 0x52, 0xbe, 0xf3, + 0x35, 0x6d, 0xa5, 0x58, 0x59, 0x69, 0xaf, 0x41, 0x29, 0x96, 0xb6, 0x5f, 0x0f, 0x5c, 0x61, 0xd8, + 0x82, 0x2e, 0x3a, 0xc2, 0x5e, 0xa9, 0x7f, 0xd1, 0x58, 0xea, 0xb2, 0x26, 0xf4, 0xfc, 0xba, 0x9a, + 0xde, 0xd0, 0xb3, 0xe8, 0x45, 0x28, 0xc6, 0x1c, 0x7e, 0xdd, 0xe3, 0xb4, 0xe6, 0x91, 0x12, 0x48, + 0x8e, 0x61, 0x3d, 0xbe, 0xa5, 0x87, 0xd1, 0xff, 0xc2, 0x44, 0x44, 0x3c, 0x7c, 0xa2, 0x8f, 0x85, + 0x55, 0x71, 0xa4, 0x0f, 0x67, 0xa0, 0xfd, 0x85, 0x8c, 0x6a, 0x88, 0x75, 0x42, 0x76, 0x04, 0x80, + 0x3c, 0x12, 0x0a, 0x0b, 0xb1, 0xfa, 0xd5, 0xb0, 0x1e, 0x79, 0x27, 0xc9, 0x2a, 0x04, 0xbc, 0xed, + 0xe0, 0x5a, 0x69, 0xb0, 0x7d, 0x11, 0xb1, 0x7f, 0x3c, 0x92, 0x50, 0x7a, 0xc1, 0x42, 0xce, 0x7d, + 0x5c, 0xcb, 0x9e, 0xbe, 0x16, 0x25, 0x37, 0x8a, 0x30, 0xae, 0x96, 0x52, 0xe8, 0xfc, 0xf4, 0x95, + 0x9c, 0x0d, 0x0d, 0x23, 0x17, 0x54, 0x86, 0x05, 0x1f, 0x1f, 0x67, 0xcd, 0x59, 0x86, 0x6a, 0x9b, + 0x51, 0x97, 0xd8, 0x4e, 0x58, 0x0f, 0x78, 0x69, 0x68, 0xd1, 0x58, 0x2a, 0x58, 0x33, 0x3e, 0x3e, + 0x4e, 0xed, 0xf4, 0x89, 0x20, 0xda, 0xa1, 0x2e, 0xb9, 0x2f, 0x48, 0x10, 0x83, 0xeb, 0x34, 0x78, + 0x66, 0x47, 0xe4, 0x3d, 0x1c, 0xb9, 0x36, 0x13, 0x1e, 0xe1, 0xda, 0x11, 0x39, 0xac, 0xd3, 0x88, + 0xf8, 0x22, 0xfc, 0xf2, 0x6a, 0x44, 0x58, 0x35, 0xf4, 0xdc, 0xd2, 0xb0, 0x54, 0x7b, 0x4e, 0xab, + 0x3d, 0x7e, 0x5a, 0xed, 0x8d, 0x80, 0x5b, 0x57, 0x68, 0xf0, 0xcc, 0x92, 0x60, 0x3b, 0x12, 0xcb, + 0x4a, 0xa1, 0x76, 0x63, 0x24, 0xf4, 0x10, 0x16, 0x79, 0x84, 0xd5, 0xe6, 0x4b, 0x5a, 0x66, 0x1f, + 0x11, 0x15, 0x2b, 0xdd, 0xba, 0xb4, 0xdb, 0xa0, 0x54, 0x94, 0x06, 0x32, 0xa7, 0xe9, 0x14, 0x24, + 0x7b, 0xaa, 0xa8, 0xca, 0x9a, 0x48, 0xec, 0xb4, 0x47, 0x0f, 0xeb, 0xd4, 0xc5, 0x3c, 0x8c, 0x92, + 0x45, 0xa4, 0x46, 0x33, 0xd2, 0xc1, 0x4e, 0xa7, 0x40, 0x5a, 0xff, 0xc4, 0x74, 0x8e, 0xe1, 0xc5, + 0x3d, 0x1a, 0xe0, 0xe8, 0xc4, 0x0e, 0x6b, 0x32, 0xdf, 0x9d, 0x17, 0xe8, 0x51, 0x7b, 0x81, 0xfe, + 0xaa, 0x42, 0x7c, 0xa2, 0x00, 0x5b, 0xc5, 0xfa, 0x6f, 0xc0, 0x22, 0xe6, 0xa1, 0x4f, 0x9d, 0x58, + 0xa2, 0x3a, 0x62, 0xec, 0x38, 0x84, 0x31, 0xdb, 0x23, 0x47, 0xc4, 0x2b, 0x8d, 0x2e, 0x1a, 0x4b, + 0x43, 0xb7, 0x5f, 0x59, 0x3e, 0xb3, 0x08, 0x59, 0x5e, 0x95, 0xec, 0x0a, 0x5f, 0x1e, 0xfd, 0xaa, + 0xe4, 0xdd, 0x14, 0xac, 0xd6, 0x2c, 0x3e, 0x67, 0x16, 0x1d, 0xc3, 0x75, 0x19, 0xfd, 0xcf, 0xd2, + 0x40, 0x38, 0xa7, 0xf6, 0x65, 0x4a, 0xa2, 0xd2, 0x58, 0xfb, 0xfb, 0x6c, 0x0a, 0xcc, 0x53, 0x5a, + 0xad, 0x13, 0xb2, 0x95, 0xc0, 0xa1, 0x0f, 0x0c, 0xb8, 0x99, 0xb1, 0xeb, 0x36, 0x14, 0x18, 0x6f, + 0x5f, 0x81, 0xa5, 0x14, 0xf9, 0x02, 0x35, 0xbe, 0x63, 0xc0, 0xad, 0xa6, 0x83, 0x6f, 0x43, 0x95, + 0x89, 0xf6, 0x55, 0x79, 0xa9, 0xc1, 0x08, 0x2e, 0xd0, 0xe6, 0x5d, 0x98, 0xf2, 0x69, 0x40, 0x7d, + 0xec, 0xa9, 0x42, 0xd0, 0x09, 0xbd, 0x34, 0x75, 0x4d, 0xb6, 0x2f, 0x74, 0x42, 0xa3, 0x6c, 0x6b, + 0x90, 0x38, 0x67, 0xbd, 0x03, 0x2f, 0x51, 0x96, 0x98, 0xf4, 0xe9, 0xaa, 0xc6, 0xc3, 0xf5, 0xc0, + 0xa9, 0xda, 0x24, 0xc0, 0x7b, 0x1e, 0x71, 0x4b, 0xa5, 0x45, 0x63, 0x29, 0x6f, 0xbd, 0x40, 0x99, + 0xb6, 0xda, 0x72, 0x53, 0xe1, 0xb2, 0x29, 0xc9, 0x1f, 0x28, 0x6a, 0x11, 0xac, 0x6a, 0x21, 0xe3, + 0x76, 0x18, 0x78, 0x27, 0xb6, 0x1f, 0xba, 0xc4, 0xae, 0x12, 0x5a, 0xa9, 0x66, 0xc3, 0xcb, 0x94, + 0x74, 0xf8, 0x19, 0x41, 0xf6, 0x24, 0xf0, 0x4e, 0xb6, 0x42, 0x97, 0x3c, 0x92, 0x34, 0x69, 0xdc, + 0xa8, 0xc0, 0x2d, 0x9d, 0xdc, 0x5c, 0xe2, 0x44, 0x04, 0x33, 0x62, 0xd7, 0x22, 0xea, 0x10, 0x9b, + 0x53, 0x9f, 0x30, 0x8e, 0xfd, 0x5a, 0x8a, 0x67, 0x33, 0xe2, 0x84, 0x81, 0xcb, 0x4a, 0xd3, 0x12, + 0xf7, 0x65, 0xc5, 0x58, 0xd6, 0x7c, 0xdb, 0x82, 0x6d, 0x37, 0xe6, 0x4a, 0x24, 0xec, 0x28, 0x1e, + 0x74, 0x1d, 0x86, 0x63, 0x27, 0xb2, 0xb1, 0xeb, 0xd3, 0x80, 0x95, 0x66, 0x16, 0xbb, 0x96, 0xfa, + 0xad, 0xa1, 0x78, 0x78, 0x55, 0x8e, 0xa2, 0x4d, 0x18, 0x15, 0xe1, 0x13, 0xd7, 0x65, 0x21, 0x6c, + 0x8b, 0x80, 0x2c, 0x32, 0xc9, 0x6c, 0x3b, 0xa1, 0xb2, 0x48, 0x83, 0x67, 0xab, 0x8a, 0x71, 0x0b, + 0x1f, 0x8b, 0xc4, 0x71, 0x03, 0x46, 0xf6, 0xe9, 0x31, 0x71, 0xed, 0x0a, 0x66, 0xc9, 0x46, 0xcf, + 0xc9, 0x8d, 0x1e, 0x96, 0x13, 0x0f, 0x31, 0x8b, 0x77, 0xf4, 0x1e, 0x4c, 0x13, 0x9f, 0x72, 0xdb, + 0x93, 0x07, 0x6b, 0x1f, 0x91, 0x88, 0x09, 0x0d, 0x64, 0xcd, 0xcc, 0x4a, 0xf3, 0x92, 0x69, 0x52, + 0x50, 0xa8, 0x93, 0x7f, 0xaa, 0xe6, 0x65, 0xd9, 0xcc, 0xd0, 0x5e, 0x5a, 0xe0, 0x45, 0xc4, 0xad, + 0x37, 0x17, 0x0d, 0x0b, 0xed, 0x5b, 0x53, 0x5c, 0x13, 0x58, 0x12, 0x26, 0x5b, 0x2f, 0xfc, 0x17, + 0xcc, 0x36, 0x1d, 0xf9, 0x9e, 0x17, 0x3a, 0x07, 0xcc, 0xc6, 0xbe, 0x4c, 0x4e, 0x97, 0x17, 0x8d, + 0xa5, 0x6e, 0xab, 0x94, 0x3d, 0xef, 0x35, 0x49, 0xb0, 0x2a, 0xe7, 0xd1, 0x16, 0x5c, 0xf5, 0x69, + 0x60, 0x37, 0x61, 0xb8, 0xe1, 0x7b, 0x81, 0x38, 0xed, 0x34, 0x51, 0x98, 0xb2, 0x2b, 0x58, 0xf0, + 0x69, 0xb0, 0x9d, 0x81, 0x2a, 0x6b, 0xba, 0x24, 0x55, 0xbc, 0x0d, 0x2f, 0x9d, 0xa7, 0x8e, 0x8d, + 0xf7, 0x39, 0x89, 0x12, 0xf8, 0xd2, 0x15, 0xa9, 0xdd, 0xb5, 0x56, 0xda, 0xad, 0x0a, 0xea, 0x58, + 0x06, 0x7a, 0xdf, 0x80, 0x05, 0xa2, 0xfb, 0x22, 0x3b, 0xca, 0x34, 0x46, 0x76, 0xdc, 0xdb, 0xb0, + 0xd2, 0xd5, 0xc5, 0xae, 0xa5, 0x81, 0x96, 0x61, 0xfa, 0xbc, 0xae, 0x4a, 0x67, 0x8c, 0x39, 0x72, + 0x0e, 0x0d, 0xbb, 0x5b, 0x12, 0x1d, 0xd0, 0x87, 0x7f, 0xf9, 0xd9, 0x8d, 0xc4, 0x72, 0x57, 0x54, + 0x2b, 0xf4, 0x7a, 0x77, 0x7e, 0xb1, 0x78, 0xd9, 0xfc, 0x4f, 0x18, 0x7b, 0x4c, 0x8e, 0xe3, 0xda, + 0x2c, 0x31, 0x7d, 0x74, 0x0d, 0x86, 0x02, 0x72, 0xcc, 0x53, 0x17, 0x92, 0x7d, 0x51, 0x97, 0x55, + 0x10, 0xa3, 0x09, 0x99, 0xf9, 0x57, 0x03, 0x86, 0xb6, 0xa8, 0x2b, 0xfd, 0x66, 0x35, 0x70, 0x77, + 0x9f, 0xac, 0xa1, 0xff, 0x81, 0x7e, 0x9f, 0xba, 0xca, 0x03, 0x75, 0x97, 0x27, 0x4c, 0xc6, 0xb8, + 0xc8, 0x64, 0xf2, 0xbe, 0xc6, 0x41, 0x1b, 0x30, 0xb4, 0x27, 0xaa, 0xa2, 0xbd, 0xfa, 0x89, 0x86, + 0xc9, 0xb5, 0x0f, 0x33, 0x28, 0x58, 0xd7, 0xea, 0x27, 0x0a, 0xea, 0x0d, 0x18, 0x96, 0x50, 0x8c, + 0x78, 0x9e, 0xc6, 0xea, 0x6a, 0x1f, 0xab, 0x20, 0x78, 0x77, 0x88, 0xe7, 0x49, 0x30, 0xf3, 0xc7, + 0x06, 0xf4, 0x95, 0x49, 0x2d, 0x64, 0x94, 0xa3, 0x6d, 0x18, 0xc1, 0x47, 0x98, 0x7a, 0xc2, 0xeb, + 0xec, 0x3d, 0xec, 0x89, 0xb2, 0x38, 0xb3, 0xda, 0x0b, 0x1d, 0xa4, 0x98, 0x70, 0xaf, 0x29, 0x66, + 0xf4, 0x08, 0x0a, 0x3c, 0xe4, 0xd8, 0x4b, 0xd0, 0x72, 0xed, 0xa3, 0x0d, 0x4a, 0x4e, 0x8d, 0x64, + 0xbe, 0x0c, 0x63, 0x3b, 0xf5, 0x3d, 0xec, 0xc8, 0x6a, 0x6f, 0x37, 0xc2, 0x2e, 0x79, 0x1c, 0x0a, + 0x09, 0x63, 0xd0, 0x13, 0x84, 0xb1, 0x9e, 0x05, 0x4b, 0x7d, 0x98, 0xbf, 0x32, 0x60, 0x38, 0x25, + 0x97, 0x19, 0x06, 0xfd, 0x3b, 0xf4, 0x34, 0x9f, 0xdf, 0x85, 0x3a, 0x28, 0x0e, 0xf4, 0xdf, 0x90, + 0x3f, 0xac, 0xe3, 0x80, 0x53, 0x7e, 0xd2, 0xc9, 0x0a, 0x12, 0x26, 0x64, 0xc2, 0x20, 0x65, 0x2a, + 0x6e, 0x08, 0x17, 0x93, 0xe7, 0x95, 0xb7, 0x1a, 0xc6, 0x50, 0x11, 0xba, 0x1c, 0xea, 0xaa, 0x8e, + 0xd3, 0x12, 0x3f, 0xcd, 0x08, 0x46, 0x9b, 0x16, 0x51, 0xc6, 0x1c, 0xa3, 0xff, 0x80, 0x1e, 0x99, + 0x8d, 0x75, 0x57, 0xff, 0x42, 0x0b, 0x3f, 0x6b, 0x62, 0xb5, 0x14, 0x13, 0x9a, 0x03, 0x50, 0xb9, + 0xbc, 0x8a, 0x59, 0x55, 0xae, 0x66, 0xd0, 0xea, 0x97, 0x23, 0x8f, 0x30, 0xab, 0x9a, 0xbf, 0xce, + 0x41, 0x7e, 0x5b, 0x58, 0x83, 0x08, 0x24, 0x13, 0xd0, 0x4b, 0xd9, 0x66, 0x18, 0x54, 0xa4, 0xa8, + 0xbc, 0xa5, 0xbf, 0xbe, 0xfe, 0x7e, 0x94, 0x61, 0x80, 0x04, 0x3c, 0x3a, 0x39, 0x65, 0xbe, 0x17, + 0x62, 0x80, 0xe4, 0x53, 0x8e, 0x70, 0x0f, 0x7a, 0x55, 0x2c, 0xef, 0xa4, 0x4d, 0xd7, 0x2c, 0xe8, + 0xff, 0xa0, 0xe4, 0xd4, 0xfd, 0xba, 0xa7, 0x12, 0x7f, 0xdc, 0x20, 0x49, 0xf4, 0x4e, 0x9a, 0xf1, + 0x89, 0x14, 0x44, 0xc7, 0x9b, 0x07, 0x02, 0xc2, 0xfc, 0xd0, 0x80, 0xbe, 0xd8, 0x0b, 0xae, 0x40, + 0x81, 0x25, 0x87, 0x61, 0x53, 0x57, 0x59, 0xa0, 0x35, 0x98, 0x0e, 0x6e, 0xb8, 0xc2, 0x90, 0x5d, + 0x12, 0x84, 0xbe, 0xbe, 0xfa, 0x51, 0x1f, 0xe8, 0x2e, 0xe4, 0x5d, 0xe5, 0x9d, 0x4c, 0xee, 0xd2, + 0xc0, 0xed, 0xf9, 0x16, 0xc7, 0xad, 0x9d, 0xd8, 0x4a, 0xe8, 0xef, 0xe6, 0xbf, 0xfd, 0xc9, 0xc2, + 0xa5, 0xaf, 0x3e, 0x59, 0xb8, 0x64, 0x7e, 0x6c, 0x00, 0x4a, 0x8b, 0x96, 0xe4, 0x78, 0xdb, 0xd2, + 0x6b, 0x06, 0xfa, 0xe3, 0x16, 0xc0, 0xd5, 0xba, 0xe5, 0xd5, 0xc0, 0x86, 0xc8, 0xcc, 0xf9, 0x9a, + 0x46, 0xd3, 0xea, 0x2d, 0xb4, 0x50, 0x2f, 0x16, 0x6a, 0x25, 0x0c, 0x19, 0xfd, 0x36, 0x60, 0x2c, + 0x53, 0x0b, 0x6e, 0x04, 0x2e, 0x75, 0x44, 0x73, 0xd2, 0x28, 0xdb, 0x68, 0x92, 0x3d, 0x06, 0x3d, + 0x94, 0xad, 0xd5, 0x95, 0x05, 0xe6, 0x2d, 0xf5, 0x61, 0xfe, 0x36, 0x07, 0x79, 0x19, 0x1e, 0x36, + 0xc3, 0x46, 0x3b, 0x35, 0x9e, 0xc7, 0x4e, 0x93, 0x98, 0x91, 0xeb, 0x38, 0x66, 0x9c, 0xda, 0xdc, + 0x2e, 0xe9, 0x6a, 0x8d, 0x9b, 0x7b, 0x07, 0xba, 0x44, 0x23, 0xd5, 0x81, 0xf9, 0x0a, 0xfa, 0x26, + 0x1f, 0xee, 0x69, 0xf2, 0x61, 0xf4, 0x1a, 0x8c, 0xcb, 0x6a, 0x99, 0x38, 0xb4, 0x46, 0x45, 0x63, + 0x1b, 0xdf, 0x4f, 0xf6, 0x0a, 0x4a, 0x99, 0x63, 0x0d, 0x6b, 0x74, 0x9f, 0x10, 0x2b, 0xa6, 0x88, + 0xef, 0x23, 0x75, 0x0c, 0xea, 0x4b, 0x63, 0xd0, 0x0f, 0x72, 0x50, 0x88, 0xcf, 0xae, 0x4c, 0x3c, + 0x8e, 0xd1, 0x24, 0xf4, 0x51, 0x66, 0x7b, 0xa7, 0xa3, 0x82, 0x05, 0x88, 0x1c, 0x13, 0xa7, 0x2e, + 0xcb, 0xc3, 0xe7, 0x89, 0x0f, 0x23, 0x09, 0xfb, 0x9b, 0xf1, 0x01, 0x3c, 0x86, 0x62, 0x8a, 0xa9, + 0x9d, 0xbd, 0x83, 0x68, 0x31, 0x9c, 0x30, 0xab, 0x72, 0x0d, 0x6d, 0x42, 0x3a, 0xa4, 0x83, 0x4f, + 0x07, 0x9b, 0x3f, 0x94, 0xf0, 0xaa, 0xe4, 0xf9, 0xc3, 0xae, 0xac, 0x5f, 0x25, 0x66, 0x77, 0xa6, + 0x5f, 0x35, 0x1f, 0xfd, 0x1b, 0x30, 0x14, 0x7b, 0x82, 0xed, 0x8a, 0x8d, 0xd5, 0xf7, 0xa6, 0x57, + 0x2f, 0x70, 0x20, 0x79, 0x08, 0x56, 0xa1, 0xd6, 0x70, 0x26, 0xf7, 0xa0, 0xb7, 0x86, 0x4f, 0xc2, + 0x3a, 0xef, 0x64, 0x73, 0x34, 0xcb, 0xbf, 0xbe, 0x11, 0x0a, 0x0d, 0x6b, 0x81, 0xd7, 0xc9, 0x05, + 0x9f, 0xa0, 0x37, 0x8f, 0x00, 0xa5, 0x49, 0x30, 0x89, 0x7a, 0xd9, 0x98, 0x65, 0x74, 0x18, 0xb3, + 0x4e, 0x1f, 0x6d, 0xee, 0xf4, 0xd1, 0x9a, 0x11, 0x8c, 0xa4, 0x72, 0xe3, 0xe2, 0xaa, 0x2d, 0xa3, + 0x78, 0x0d, 0xfa, 0x74, 0xf8, 0xd6, 0xd6, 0x70, 0x51, 0xb4, 0x8f, 0xc9, 0xcd, 0x03, 0x28, 0xe8, + 0xb1, 0xb7, 0x6a, 0xae, 0xe8, 0x71, 0x93, 0x7c, 0x62, 0x64, 0xf3, 0x49, 0x39, 0x93, 0x4f, 0x72, + 0xb2, 0x4c, 0x5f, 0xba, 0xb0, 0x7c, 0x38, 0x95, 0x59, 0xcc, 0xdf, 0x18, 0x50, 0xdc, 0x0e, 0x69, + 0xc0, 0x59, 0xa6, 0x69, 0x7f, 0x07, 0x26, 0xd5, 0x9d, 0x76, 0x4d, 0xce, 0x64, 0xef, 0x09, 0x3a, + 0x88, 0xbd, 0xe3, 0x12, 0xe3, 0x2c, 0x70, 0xde, 0x02, 0xbc, 0x83, 0x00, 0x33, 0xce, 0xcf, 0x02, + 0x37, 0xff, 0x96, 0x83, 0xf9, 0xdd, 0xec, 0xe5, 0xdb, 0x7d, 0xec, 0xd7, 0x30, 0xad, 0x04, 0x6b, + 0x61, 0xc8, 0xf8, 0x46, 0xb0, 0x1f, 0xa2, 0x3b, 0x30, 0xb9, 0x27, 0x3e, 0x88, 0x6b, 0x37, 0xbc, + 0xb5, 0xb8, 0xac, 0x64, 0xc8, 0x6e, 0x79, 0x4c, 0x4f, 0xef, 0xa4, 0x2f, 0x28, 0x2e, 0x43, 0x04, + 0x26, 0xb3, 0xe4, 0xa9, 0xd6, 0xf1, 0xee, 0x5f, 0x6f, 0x69, 0x7a, 0x8d, 0x3a, 0xea, 0xc6, 0x68, + 0x3c, 0x7d, 0xa0, 0x49, 0xe7, 0x18, 0x5a, 0x85, 0xb9, 0x58, 0xbb, 0x33, 0x9e, 0x68, 0x5c, 0x51, + 0x3a, 0x08, 0x1d, 0xa7, 0x35, 0x51, 0xf3, 0xfd, 0x85, 0xd0, 0xf4, 0x10, 0xe6, 0x4e, 0xb3, 0x66, + 0xf5, 0xed, 0x7e, 0x1e, 0x7d, 0x67, 0x9a, 0xdf, 0x78, 0x32, 0x5a, 0x9b, 0xbf, 0x30, 0x00, 0xc5, + 0x3b, 0xad, 0xf6, 0x7d, 0x3b, 0x0c, 0x3d, 0x74, 0x1d, 0x86, 0x19, 0xc7, 0xd1, 0xe9, 0x36, 0x6d, + 0x48, 0x0e, 0xa7, 0xed, 0xdc, 0x37, 0x61, 0x4c, 0x5d, 0x42, 0x28, 0x88, 0xf8, 0x7e, 0x55, 0xef, + 0xec, 0x39, 0xd7, 0x92, 0xff, 0x26, 0x74, 0xfb, 0xe9, 0x9f, 0x16, 0x96, 0x2a, 0x94, 0x57, 0xeb, + 0x7b, 0xcb, 0x4e, 0xe8, 0xeb, 0xa7, 0x46, 0xfd, 0xdf, 0x4d, 0xe6, 0x1e, 0xac, 0xf0, 0x93, 0x1a, + 0x61, 0x92, 0x81, 0x59, 0xc8, 0xc7, 0xc7, 0x8d, 0xaa, 0x32, 0xf3, 0x47, 0x39, 0x98, 0x3a, 0xd3, + 0x6a, 0xa4, 0xc1, 0xdc, 0x85, 0xa9, 0x44, 0xb1, 0xb8, 0x7f, 0x4f, 0xee, 0x69, 0xd4, 0x7a, 0x26, + 0x63, 0x82, 0xb8, 0x71, 0x8f, 0xaf, 0x64, 0x2e, 0xc3, 0xe0, 0x61, 0x3d, 0xe4, 0xc4, 0x96, 0x3e, + 0xab, 0x16, 0xd4, 0x6f, 0x0d, 0xc8, 0xb1, 0xb2, 0x1c, 0x42, 0x35, 0x98, 0x6a, 0xbc, 0x56, 0xb6, + 0xe5, 0xd9, 0xda, 0x34, 0xd8, 0x0f, 0x75, 0x25, 0x76, 0xa7, 0xc5, 0x51, 0x9d, 0x6f, 0xe9, 0xd6, + 0x44, 0xc3, 0x35, 0x74, 0xea, 0x01, 0xaf, 0xc2, 0xa4, 0x4b, 0xd9, 0x61, 0x1d, 0x7b, 0x74, 0x9f, + 0x12, 0x37, 0x6b, 0x5d, 0xdd, 0x52, 0xbf, 0xf1, 0xec, 0x74, 0x62, 0x58, 0xe6, 0x2f, 0x73, 0x30, + 0xba, 0x4e, 0x48, 0x99, 0x32, 0xd5, 0xba, 0x51, 0x51, 0xe0, 0xed, 0x87, 0x68, 0x07, 0x46, 0x55, + 0xb8, 0x70, 0xf5, 0x8c, 0xba, 0xdd, 0xeb, 0x20, 0x54, 0x8c, 0x48, 0xfe, 0x18, 0x58, 0x5e, 0xec, + 0xed, 0xc0, 0x28, 0x3f, 0x03, 0xb4, 0x93, 0x1a, 0x84, 0x9f, 0x02, 0x5d, 0x83, 0x82, 0x7e, 0x2c, + 0xd0, 0xd7, 0x39, 0x5d, 0xed, 0x5c, 0x79, 0x0d, 0x2a, 0x1e, 0x7d, 0xc3, 0x73, 0x0f, 0x7a, 0x8f, + 0x42, 0xaf, 0xee, 0x77, 0x94, 0x66, 0x35, 0x8b, 0xf9, 0xad, 0xc6, 0x2d, 0xdc, 0x71, 0xaa, 0xc4, + 0xad, 0x7b, 0x44, 0xd8, 0xc9, 0x5e, 0xdd, 0x11, 0xa7, 0xa0, 0xde, 0x40, 0x0c, 0x79, 0x91, 0x33, + 0xa0, 0xc6, 0xd4, 0x9b, 0xc7, 0x75, 0x18, 0xd6, 0x24, 0xc9, 0x25, 0x52, 0x4e, 0x39, 0x93, 0x1a, + 0x4e, 0xee, 0x8c, 0x9a, 0x6d, 0xae, 0xeb, 0xb4, 0xcd, 0x6d, 0x00, 0x70, 0x4a, 0x22, 0x69, 0x63, + 0x71, 0x3c, 0xb8, 0xd1, 0xc2, 0xc8, 0xce, 0x38, 0x71, 0xab, 0x9f, 0xeb, 0x5f, 0xec, 0x3c, 0x63, + 0xea, 0x39, 0xcf, 0x98, 0xb6, 0x00, 0x35, 0x21, 0xef, 0xee, 0x6e, 0x22, 0x04, 0xdd, 0x3c, 0x4e, + 0x33, 0xdd, 0x96, 0xfc, 0x2d, 0xd2, 0x2d, 0xe7, 0x5e, 0x26, 0x86, 0xa8, 0x65, 0x0f, 0x72, 0xee, + 0xa5, 0x37, 0x3d, 0xdf, 0x35, 0x60, 0x68, 0x55, 0x25, 0x39, 0xed, 0xd5, 0xa8, 0x04, 0x7d, 0x3a, + 0xed, 0xe9, 0xc4, 0x19, 0x7f, 0x22, 0x02, 0x7d, 0xff, 0xc4, 0x08, 0x13, 0x63, 0x9b, 0xef, 0x1b, + 0x30, 0x28, 0x2b, 0x49, 0x8b, 0x38, 0xa1, 0xd0, 0xe8, 0xdc, 0x26, 0x68, 0x17, 0xc6, 0x3c, 0xcc, + 0x09, 0xe3, 0xb6, 0x70, 0x5b, 0x59, 0x6e, 0x85, 0xa9, 0x86, 0xe6, 0x39, 0x21, 0x40, 0xe3, 0x5b, + 0x48, 0xf1, 0x67, 0x45, 0x9a, 0xaf, 0x42, 0x21, 0x4d, 0xff, 0x1b, 0x65, 0x86, 0xae, 0xc1, 0x50, + 0x43, 0xf1, 0xa2, 0xb2, 0xde, 0xa0, 0x55, 0xc8, 0x56, 0x2f, 0xcc, 0xfc, 0x89, 0x01, 0x03, 0x19, + 0x20, 0x34, 0x0b, 0xfd, 0xcd, 0x41, 0x3c, 0x1d, 0xf8, 0x3a, 0xcd, 0x55, 0xb6, 0xb1, 0xeb, 0x7a, + 0x8e, 0xc6, 0xce, 0xf4, 0xa1, 0x47, 0xbd, 0xfc, 0xdc, 0x02, 0xa3, 0xd6, 0x49, 0xd0, 0x31, 0x6a, + 0x82, 0xe5, 0xb0, 0x13, 0x9d, 0x8d, 0x43, 0xf3, 0x7b, 0x06, 0x2c, 0xac, 0x56, 0x2a, 0x11, 0xa9, + 0x60, 0x4e, 0xd2, 0xad, 0x7d, 0x2a, 0xfd, 0x5b, 0x6f, 0x56, 0x5b, 0xdd, 0xf8, 0xeb, 0x30, 0xa4, + 0x8d, 0x41, 0xc5, 0x86, 0xf8, 0xa4, 0xaf, 0xb4, 0x38, 0x69, 0xe5, 0x3a, 0x5a, 0x4e, 0xc1, 0xcf, + 0x7c, 0x31, 0xf3, 0x03, 0x03, 0x66, 0x13, 0xa5, 0x56, 0xcf, 0xd0, 0xa8, 0xb5, 0x2f, 0xfc, 0x23, + 0xd5, 0x58, 0x15, 0x95, 0x6b, 0x10, 0xfa, 0x65, 0xe2, 0x50, 0x1f, 0x7b, 0xac, 0x45, 0xe5, 0x3a, + 0x2d, 0x2a, 0x57, 0x45, 0x21, 0x37, 0xbf, 0xdb, 0x4a, 0xbe, 0x4d, 0x02, 0xe8, 0x61, 0x84, 0x03, + 0xbe, 0x5a, 0xe7, 0xd5, 0x30, 0xa2, 0xff, 0xaf, 0x42, 0x5a, 0x09, 0xfa, 0x2a, 0x62, 0x54, 0xff, + 0xfd, 0x4b, 0xbf, 0x15, 0x7f, 0xa2, 0x3b, 0xd0, 0xab, 0x43, 0x79, 0xae, 0x9d, 0x50, 0xae, 0x89, + 0xcd, 0x77, 0x61, 0x60, 0x55, 0xae, 0x4d, 0x0a, 0x4b, 0xf1, 0xa3, 0x46, 0xfc, 0xe8, 0x79, 0xf1, + 0x3f, 0x32, 0x60, 0xe8, 0xc1, 0xfe, 0x3e, 0x69, 0x4b, 0xc6, 0x06, 0x8c, 0x04, 0x84, 0xdb, 0xea, + 0x53, 0x3f, 0x67, 0xb7, 0x27, 0x6e, 0x38, 0x20, 0xfc, 0xa1, 0x62, 0x93, 0x0f, 0xd7, 0x68, 0x0a, + 0xf2, 0x94, 0xd9, 0x47, 0xd8, 0xd3, 0xb7, 0x14, 0x79, 0xab, 0x8f, 0xb2, 0xa7, 0xe2, 0xd3, 0xac, + 0x41, 0x51, 0x1e, 0xce, 0x16, 0x0d, 0x1e, 0x87, 0x62, 0x57, 0xb1, 0xd7, 0xe2, 0x7c, 0xd6, 0x61, + 0xd0, 0xa7, 0x81, 0x1d, 0x68, 0xaa, 0x4e, 0x1c, 0x64, 0xc0, 0x4f, 0xd1, 0x6f, 0xfc, 0xde, 0x80, + 0xc2, 0x83, 0xb8, 0xcd, 0xde, 0x3d, 0xa9, 0x11, 0x34, 0x0b, 0xa5, 0xb7, 0x02, 0x56, 0x23, 0x8e, + 0x4c, 0x06, 0x0d, 0x73, 0xc5, 0x4b, 0x08, 0xa0, 0x57, 0x59, 0x57, 0xd1, 0x40, 0x05, 0xe8, 0xdf, + 0xa4, 0x3e, 0xe5, 0xeb, 0xd4, 0xf3, 0x8a, 0x39, 0x34, 0x0d, 0x13, 0xf2, 0x73, 0x0b, 0x73, 0xa7, + 0x6a, 0xa9, 0xf7, 0x74, 0x79, 0xc3, 0x54, 0xec, 0x42, 0x13, 0x80, 0xd2, 0xb9, 0xc7, 0xe4, 0x3d, + 0x35, 0xde, 0x8d, 0xc6, 0x61, 0x44, 0x3f, 0xea, 0xe9, 0x37, 0x72, 0x1a, 0x06, 0xc5, 0x1e, 0x01, + 0xf5, 0xe0, 0xb8, 0x46, 0xa3, 0x13, 0x35, 0xb9, 0x43, 0x38, 0xf7, 0xe4, 0x4b, 0x7f, 0xb1, 0x57, + 0x40, 0x3d, 0xd9, 0xdf, 0x67, 0x84, 0x0b, 0xfc, 0xb8, 0x67, 0x2c, 0xf6, 0x09, 0x6d, 0x76, 0x4e, + 0x02, 0x5e, 0x25, 0x9c, 0x3a, 0xc5, 0xfc, 0xda, 0xc1, 0xa7, 0x5f, 0xcc, 0x1b, 0x9f, 0x7d, 0x31, + 0x6f, 0xfc, 0xf9, 0x8b, 0x79, 0xe3, 0xa3, 0x2f, 0xe7, 0x2f, 0x7d, 0xf6, 0xe5, 0xfc, 0xa5, 0x3f, + 0x7c, 0x39, 0x7f, 0xe9, 0xed, 0x37, 0x33, 0x59, 0x62, 0x23, 0xf6, 0x9f, 0x4d, 0xbc, 0xc7, 0x56, + 0x12, 0x6f, 0xba, 0xe9, 0x84, 0x11, 0xc9, 0x7e, 0x56, 0x31, 0x0d, 0x56, 0xfc, 0x50, 0xd4, 0x01, + 0x2c, 0xfd, 0x23, 0x36, 0x99, 0x51, 0x56, 0x8e, 0x6e, 0xef, 0xf5, 0xca, 0x77, 0xd3, 0x57, 0xfe, + 0x1e, 0x00, 0x00, 0xff, 0xff, 0xeb, 0xbc, 0x0b, 0xdd, 0xd6, 0x27, 0x00, 0x00, +} + +func (this *EnforcedRestrictionsContract) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + that1, ok := that.(*EnforcedRestrictionsContract) + if !ok { + that2, ok := that.(EnforcedRestrictionsContract) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.ContractAddress != that1.ContractAddress { + return false + } + if this.PauseEventSignature != that1.PauseEventSignature { + return false + } + return true +} func (this *Params) Equal(that interface{}) bool { if that == nil { return this == nil @@ -2521,8 +2628,53 @@ func (this *Params) Equal(that interface{}) bool { if this.PostOnlyModeBlocksAmountAfterDowntime != that1.PostOnlyModeBlocksAmountAfterDowntime { return false } + if len(this.EnforcedRestrictionsContracts) != len(that1.EnforcedRestrictionsContracts) { + return false + } + for i := range this.EnforcedRestrictionsContracts { + if !this.EnforcedRestrictionsContracts[i].Equal(&that1.EnforcedRestrictionsContracts[i]) { + return false + } + } return true } +func (m *EnforcedRestrictionsContract) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EnforcedRestrictionsContract) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EnforcedRestrictionsContract) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.PauseEventSignature) > 0 { + i -= len(m.PauseEventSignature) + copy(dAtA[i:], m.PauseEventSignature) + i = encodeVarintExchange(dAtA, i, uint64(len(m.PauseEventSignature))) + i-- + dAtA[i] = 0x12 + } + if len(m.ContractAddress) > 0 { + i -= len(m.ContractAddress) + copy(dAtA[i:], m.ContractAddress) + i = encodeVarintExchange(dAtA, i, uint64(len(m.ContractAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *Params) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2543,6 +2695,22 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.EnforcedRestrictionsContracts) > 0 { + for iNdEx := len(m.EnforcedRestrictionsContracts) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.EnforcedRestrictionsContracts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintExchange(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0xa2 + } + } if m.PostOnlyModeBlocksAmountAfterDowntime != 0 { i = encodeVarintExchange(dAtA, i, uint64(m.PostOnlyModeBlocksAmountAfterDowntime)) i-- @@ -4599,6 +4767,23 @@ func encodeVarintExchange(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } +func (m *EnforcedRestrictionsContract) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ContractAddress) + if l > 0 { + n += 1 + l + sovExchange(uint64(l)) + } + l = len(m.PauseEventSignature) + if l > 0 { + n += 1 + l + sovExchange(uint64(l)) + } + return n +} + func (m *Params) Size() (n int) { if m == nil { return 0 @@ -4691,6 +4876,12 @@ func (m *Params) Size() (n int) { if m.PostOnlyModeBlocksAmountAfterDowntime != 0 { n += 2 + sovExchange(uint64(m.PostOnlyModeBlocksAmountAfterDowntime)) } + if len(m.EnforcedRestrictionsContracts) > 0 { + for _, e := range m.EnforcedRestrictionsContracts { + l = e.Size() + n += 2 + l + sovExchange(uint64(l)) + } + } return n } @@ -5366,6 +5557,120 @@ func sovExchange(x uint64) (n int) { func sozExchange(x uint64) (n int) { return sovExchange(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (m *EnforcedRestrictionsContract) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExchange + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EnforcedRestrictionsContract: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EnforcedRestrictionsContract: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContractAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExchange + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthExchange + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthExchange + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContractAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PauseEventSignature", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExchange + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthExchange + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthExchange + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PauseEventSignature = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipExchange(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthExchange + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Params) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -6367,6 +6672,40 @@ func (m *Params) Unmarshal(dAtA []byte) error { break } } + case 36: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EnforcedRestrictionsContracts", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExchange + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthExchange + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthExchange + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EnforcedRestrictionsContracts = append(m.EnforcedRestrictionsContracts, EnforcedRestrictionsContract{}) + if err := m.EnforcedRestrictionsContracts[len(m.EnforcedRestrictionsContracts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipExchange(dAtA[iNdEx:]) diff --git a/chain/exchange/types/v2/fee_discounts.go b/chain/exchange/types/v2/fee_discounts.go index 1b5e37b8..407f3c4c 100644 --- a/chain/exchange/types/v2/fee_discounts.go +++ b/chain/exchange/types/v2/fee_discounts.go @@ -1,7 +1,14 @@ package v2 import ( + "bytes" + "sort" + "sync" + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/ethereum/go-ethereum/common" "github.com/InjectiveLabs/sdk-go/chain/exchange/types" ) @@ -74,3 +81,303 @@ func NewFeeDiscountTierTTL(tier uint64, ttlTimestamp int64) *FeeDiscountTierTTL TtlTimestamp: ttlTimestamp, } } + +type ValidatorCache map[string]stakingtypes.ValidatorI + +func NewFeeDiscountConfig(isQualified bool, stakingInfo *FeeDiscountStakingInfo) *FeeDiscountConfig { + if stakingInfo == nil { + isQualified = false + } + return &FeeDiscountConfig{ + IsMarketQualified: isQualified, + FeeDiscountStakingInfo: stakingInfo, + } +} + +type FeeDiscountConfig struct { + IsMarketQualified bool + *FeeDiscountStakingInfo +} + +func (c *FeeDiscountConfig) GetFeeDiscountRate(account sdk.AccAddress, isMaker bool) *math.LegacyDec { // nolint:revive // ok + if c == nil { + return nil + } + + c.AccountFeeTiersMux.RLock() + defer c.AccountFeeTiersMux.RUnlock() + + tier, ok := c.AccountFeeTiers[types.SdkAccAddressToAccount(account)] + if !ok { + // should never happen but just in case + return nil + } + + if isMaker { + return &tier.MakerDiscountRate + } + + return &tier.TakerDiscountRate +} + +func (c *FeeDiscountConfig) IncrementAccountVolumeContribution( + subaccountID common.Hash, + marketID common.Hash, + amount math.LegacyDec, + isMaker bool, +) { + // defensive programming: should never happen + if amount.IsNegative() { + return + } + + shouldIncrementAccountVolumeContributions := c.IsMarketQualified + account := types.SubaccountIDToAccount(subaccountID) + + c.AccountVolumesMux.Lock() + defer c.AccountVolumesMux.Unlock() + + // skip account volume contributions if the market isn't qualified for fee discounts + if shouldIncrementAccountVolumeContributions { + if v, ok := c.AccountVolumeContributions[account]; !ok { + c.AccountVolumeContributions[account] = amount + } else { + c.AccountVolumeContributions[account] = v.Add(amount) + } + } + + newVolume := NewVolumeWithSingleType(amount, isMaker) + // the SubaccountMarketVolumeContributions is still fine to update though since volumes are recorded on a per-market level + if innerMap, ok := c.SubaccountMarketVolumeContributions[subaccountID]; !ok { + c.SubaccountMarketVolumeContributions[subaccountID] = map[common.Hash]VolumeRecord{ + marketID: newVolume, + } + } else { + if v, ok := innerMap[marketID]; !ok { + c.SubaccountMarketVolumeContributions[subaccountID][marketID] = newVolume + } else { + c.SubaccountMarketVolumeContributions[subaccountID][marketID] = v.Add(newVolume) + } + } +} + +func NewFeeDiscountStakingInfo( + schedule *FeeDiscountSchedule, + currBucketStartTimestamp, oldestBucketStartTimestamp int64, + maxTTLTimestamp int64, + nextTTLTimestamp int64, + isFirstFeeCycleFinished bool, +) *FeeDiscountStakingInfo { + return &FeeDiscountStakingInfo{ + SubaccountMarketVolumeContributions: make(map[common.Hash]map[common.Hash]VolumeRecord), + AccountVolumeContributions: make(map[types.Account]math.LegacyDec), + AccountFeeTiers: make(map[types.Account]*types.FeeDiscountRates), + Validators: make(ValidatorCache), + NewAccounts: make(map[types.Account]*FeeDiscountTierTTL), + GrantCheckpoints: make(map[string]struct{}), + InvalidGrants: make(map[string]string), + AccountFeeTiersMux: new(sync.RWMutex), + AccountVolumesMux: new(sync.RWMutex), + ValidatorsMux: new(sync.RWMutex), + NewAccountsMux: new(sync.RWMutex), + GrantsMux: new(sync.RWMutex), + Schedule: schedule, + CurrBucketStartTimestamp: currBucketStartTimestamp, + OldestBucketStartTimestamp: oldestBucketStartTimestamp, + MaxTTLTimestamp: maxTTLTimestamp, + NextTTLTimestamp: nextTTLTimestamp, + FeeDiscountRatesCache: schedule.GetFeeDiscountRatesMap(), + IsFirstFeeCycleFinished: isFirstFeeCycleFinished, + } +} + +type FeeDiscountStakingInfo struct { + // subaccountID => marketID => volume + SubaccountMarketVolumeContributions map[common.Hash]map[common.Hash]VolumeRecord + AccountVolumeContributions map[types.Account]math.LegacyDec + AccountFeeTiers map[types.Account]*types.FeeDiscountRates + Validators ValidatorCache + NewAccounts map[types.Account]*FeeDiscountTierTTL + GrantCheckpoints map[string]struct{} + InvalidGrants map[string]string // grantee => granter + + AccountFeeTiersMux *sync.RWMutex + AccountVolumesMux *sync.RWMutex + ValidatorsMux *sync.RWMutex + NewAccountsMux *sync.RWMutex + GrantsMux *sync.RWMutex + + Schedule *FeeDiscountSchedule + CurrBucketStartTimestamp int64 + OldestBucketStartTimestamp int64 + MaxTTLTimestamp int64 + NextTTLTimestamp int64 + FeeDiscountRatesCache types.FeeDiscountRatesMap + IsFirstFeeCycleFinished bool +} + +type AccountTierTTL struct { + Account sdk.AccAddress + TierTTL *FeeDiscountTierTTL +} + +type AccountContribution struct { + Account sdk.AccAddress + Amount math.LegacyDec +} + +type SubaccountVolumeContribution struct { + SubaccountID common.Hash + MarketID common.Hash + Volume VolumeRecord +} + +type MarketVolumeContribution struct { + MarketID common.Hash + Volume VolumeRecord +} + +func (info *FeeDiscountStakingInfo) GetSortedNewFeeDiscountAccountTiers() []*AccountTierTTL { + accountTiers := make([]*AccountTierTTL, 0, len(info.AccountFeeTiers)) + info.NewAccountsMux.RLock() + for k, v := range info.NewAccounts { + accountTiers = append(accountTiers, &AccountTierTTL{ + Account: sdk.AccAddress([]byte(string(k[:]))), + TierTTL: v, + }) + } + info.NewAccountsMux.RUnlock() + sort.SliceStable(accountTiers, func(i, j int) bool { + return bytes.Compare(accountTiers[i].Account.Bytes(), accountTiers[j].Account.Bytes()) < 0 + }) + return accountTiers +} + +func (info *FeeDiscountStakingInfo) GetSortedAccountVolumeContributions() []*AccountContribution { + accountContributions := make([]*AccountContribution, 0, len(info.AccountFeeTiers)) + info.AccountVolumesMux.RLock() + for k, v := range info.AccountVolumeContributions { + accountContributions = append(accountContributions, &AccountContribution{ + // use copy of value in closure, since the memory is not copied, it's reused. + // So if your closure captures it, instead of copying via call args, you'll get same index in all goroutines + Account: sdk.AccAddress([]byte(string(k[:]))), + Amount: v, + }) + } + info.AccountVolumesMux.RUnlock() + sort.SliceStable(accountContributions, func(i, j int) bool { + return bytes.Compare(accountContributions[i].Account.Bytes(), accountContributions[j].Account.Bytes()) < 0 + }) + return accountContributions +} + +func (info *FeeDiscountStakingInfo) GetSortedSubaccountAndMarketVolumes() ( + []*SubaccountVolumeContribution, + []*MarketVolumeContribution, +) { + subaccountVolumes := make([]*SubaccountVolumeContribution, 0, len(info.AccountFeeTiers)) + marketVolumeTracker := make(map[common.Hash]VolumeRecord) + + info.AccountVolumesMux.RLock() + for subaccountID, innerMap := range info.SubaccountMarketVolumeContributions { + for marketID, volume := range innerMap { + subaccountVolumes = append(subaccountVolumes, &SubaccountVolumeContribution{ + // use copy of value in closure, since the memory is not copied, it's reused. + // So if your closure captures it, instead of copying via call args, you'll get same index in all goroutines + SubaccountID: common.BytesToHash(subaccountID.Bytes()), + MarketID: common.BytesToHash(marketID.Bytes()), + Volume: volume, + }) + + if prevVolume, ok := marketVolumeTracker[marketID]; ok { + marketVolumeTracker[marketID] = prevVolume.Add(volume) + } else { + marketVolumeTracker[marketID] = volume + } + } + } + info.AccountVolumesMux.RUnlock() + + sort.SliceStable(subaccountVolumes, func(i, j int) bool { + return bytes.Compare( + append(subaccountVolumes[i].SubaccountID.Bytes(), subaccountVolumes[i].MarketID.Bytes()...), + append(subaccountVolumes[j].SubaccountID.Bytes(), subaccountVolumes[j].MarketID.Bytes()...), + ) < 0 + }) + + marketVolumes := make([]*MarketVolumeContribution, 0, len(marketVolumeTracker)) + for k, v := range marketVolumeTracker { + marketVolumes = append(marketVolumes, &MarketVolumeContribution{ + MarketID: common.BytesToHash(k.Bytes()), + Volume: v, + }) + } + + sort.SliceStable(marketVolumes, func(i, j int) bool { + return bytes.Compare(marketVolumes[i].MarketID.Bytes(), marketVolumes[j].MarketID.Bytes()) < 0 + }) + + return subaccountVolumes, marketVolumes +} + +func (info *FeeDiscountStakingInfo) GetSortedGrantCheckpointGrantersAndInvalidGrants() ( + granters []string, + invalidGrants []*EventInvalidGrant, +) { + info.GrantsMux.RLock() + defer info.GrantsMux.RUnlock() + + granters = make([]string, 0, len(info.GrantCheckpoints)) + invalidGrants = make([]*EventInvalidGrant, 0, len(info.InvalidGrants)) + + for k := range info.GrantCheckpoints { + granters = append(granters, k) + } + + sort.SliceStable(granters, func(i, j int) bool { + return granters[i] < granters[j] + }) + + for k, v := range info.InvalidGrants { + invalidGrants = append(invalidGrants, &EventInvalidGrant{ + Grantee: k, + Granter: v, + }) + } + + sort.SliceStable(invalidGrants, func(i, j int) bool { + return invalidGrants[i].Grantee < invalidGrants[j].Grantee + }) + return granters, invalidGrants +} + +func (info *FeeDiscountStakingInfo) SetAccountTierInfo(accAddress sdk.AccAddress, discountRates *types.FeeDiscountRates) { + info.AccountFeeTiersMux.Lock() + info.AccountFeeTiers[types.SdkAccAddressToAccount(accAddress)] = discountRates + info.AccountFeeTiersMux.Unlock() +} + +func (info *FeeDiscountStakingInfo) SetNewAccountTierTTL(accAddress sdk.AccAddress, tier uint64) { + info.NewAccountsMux.Lock() + info.NewAccounts[types.SdkAccAddressToAccount(accAddress)] = &FeeDiscountTierTTL{ + Tier: tier, + TtlTimestamp: info.NextTTLTimestamp, + } + info.NewAccountsMux.Unlock() +} + +func (info *FeeDiscountStakingInfo) GetIsPastTradingFeesCheckRequired() bool { + return info.IsFirstFeeCycleFinished +} + +func (info *FeeDiscountStakingInfo) AddCheckpoint(granter string) { + info.GrantsMux.Lock() + info.GrantCheckpoints[granter] = struct{}{} + info.GrantsMux.Unlock() +} + +func (info *FeeDiscountStakingInfo) AddInvalidGrant(grantee, granter string) { + info.GrantsMux.Lock() + info.InvalidGrants[grantee] = granter + info.GrantsMux.Unlock() +} diff --git a/chain/exchange/types/v2/market.go b/chain/exchange/types/v2/market.go index 01678d46..d2d73f46 100644 --- a/chain/exchange/types/v2/market.go +++ b/chain/exchange/types/v2/market.go @@ -9,6 +9,12 @@ import ( var BinaryOptionsMarketRefundFlagPrice = math.LegacyNewDec(-1) +type MarketIDQuoteDenomMakerFee struct { + MarketID common.Hash + QuoteDenom string + MakerFee math.LegacyDec +} + type DerivativeMarketInfo struct { Market *DerivativeMarket MarkPrice math.LegacyDec @@ -66,6 +72,10 @@ func (m *SpotMarket) GetMarketStatus() MarketStatus { return m.Status } +func (m *SpotMarket) GetDisabledMinimalProtocolFee() bool { + return m.HasDisabledMinimalProtocolFee +} + func (m *SpotMarket) PriceFromChainFormat(price math.LegacyDec) math.LegacyDec { return types.PriceFromChainFormat(price, m.BaseDecimals, m.QuoteDecimals) } @@ -95,7 +105,8 @@ func (m *ExpiryFuturesMarketInfo) IsPremature(currBlockTime int64) bool { } func (m *ExpiryFuturesMarketInfo) IsStartingMaturation(currBlockTime int64) bool { - return currBlockTime >= m.TwapStartTimestamp && (m.ExpirationTwapStartPriceCumulative.IsNil() || m.ExpirationTwapStartPriceCumulative.IsZero()) + return currBlockTime >= m.TwapStartTimestamp && + (m.ExpirationTwapStartBaseCumulativePrice.IsNil() || m.ExpirationTwapStartBaseCumulativePrice.IsZero()) } func (m *ExpiryFuturesMarketInfo) IsMatured(currBlockTime int64) bool { @@ -181,6 +192,10 @@ func (m *DerivativeMarket) GetMarketStatus() MarketStatus { return m.Status } +func (m *DerivativeMarket) GetDisabledMinimalProtocolFee() bool { + return m.HasDisabledMinimalProtocolFee +} + func (m *DerivativeMarket) GetQuoteDecimals() uint32 { return m.QuoteDecimals } @@ -286,6 +301,10 @@ func (m *BinaryOptionsMarket) GetMarketStatus() MarketStatus { return m.Status } +func (m *BinaryOptionsMarket) GetDisabledMinimalProtocolFee() bool { + return m.HasDisabledMinimalProtocolFee +} + func (m *BinaryOptionsMarket) GetQuoteDecimals() uint32 { return m.QuoteDecimals } @@ -317,3 +336,59 @@ func (m *BinaryOptionsMarket) QuantityToChainFormat(humanReadableValue math.Lega func (m *BinaryOptionsMarket) NotionalToChainFormat(humanReadableValue math.LegacyDec) math.LegacyDec { return types.NotionalToChainFormat(humanReadableValue, m.QuoteDecimals) } + +type MarketI interface { + MarketID() common.Hash + GetMarketType() types.MarketType + GetMinPriceTickSize() math.LegacyDec + GetMinQuantityTickSize() math.LegacyDec + GetMinNotional() math.LegacyDec + GetTicker() string + GetMakerFeeRate() math.LegacyDec + GetTakerFeeRate() math.LegacyDec + GetRelayerFeeShareRate() math.LegacyDec + GetQuoteDenom() string + StatusSupportsOrderCancellations() bool + GetDisabledMinimalProtocolFee() bool + GetMarketStatus() MarketStatus + PriceFromChainFormat(price math.LegacyDec) math.LegacyDec + QuantityFromChainFormat(quantity math.LegacyDec) math.LegacyDec + NotionalFromChainFormat(notional math.LegacyDec) math.LegacyDec + PriceToChainFormat(humanReadableValue math.LegacyDec) math.LegacyDec + QuantityToChainFormat(humanReadableValue math.LegacyDec) math.LegacyDec + NotionalToChainFormat(humanReadableValue math.LegacyDec) math.LegacyDec +} + +type DerivativeMarketI interface { + MarketI + GetIsPerpetual() bool + GetInitialMarginRatio() math.LegacyDec + GetOracleScaleFactor() uint32 + GetQuoteDecimals() uint32 + GetOpenNotionalCap() OpenNotionalCap +} + +func IsMarketSolvent(availableMarketFunds, marketBalanceDelta math.LegacyDec) bool { + return availableMarketFunds.Add(marketBalanceDelta).GTE(math.LegacyZeroDec()) +} + +// nolint // ok +func GetMarketBalanceDelta( + payout, + collateralizationMargin, + tradeFee math.LegacyDec, + isReduceOnly bool, +) math.LegacyDec { + if payout.IsNegative() { + // if payout is negative, don't just add these to the market balance, + // instead try to adjust market balance later when insurance fund is tapped + payout = math.LegacyZeroDec() + } + + if isReduceOnly { + // trade fee is removed from payout for RO, but still should be removed from market balance + payout = payout.Add(tradeFee) + } + + return collateralizationMargin.Sub(payout) +} diff --git a/chain/exchange/types/v2/market.pb.go b/chain/exchange/types/v2/market.pb.go index 0abd7e1b..06f47129 100644 --- a/chain/exchange/types/v2/market.pb.go +++ b/chain/exchange/types/v2/market.pb.go @@ -34,6 +34,7 @@ const ( MarketStatus_Paused MarketStatus = 2 MarketStatus_Demolished MarketStatus = 3 MarketStatus_Expired MarketStatus = 4 + MarketStatus_ForcePaused MarketStatus = 5 ) var MarketStatus_name = map[int32]string{ @@ -42,6 +43,7 @@ var MarketStatus_name = map[int32]string{ 2: "Paused", 3: "Demolished", 4: "Expired", + 5: "ForcePaused", } var MarketStatus_value = map[string]int32{ @@ -50,6 +52,7 @@ var MarketStatus_value = map[string]int32{ "Paused": 2, "Demolished": 3, "Expired": 4, + "ForcePaused": 5, } func (x MarketStatus) String() string { @@ -60,6 +63,73 @@ func (MarketStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor_c255fc568a8e9667, []int{0} } +type ForcePausedReason int32 + +const ( + ForcePausedReason_QuoteDenomPaused ForcePausedReason = 0 +) + +var ForcePausedReason_name = map[int32]string{ + 0: "QuoteDenomPaused", +} + +var ForcePausedReason_value = map[string]int32{ + "QuoteDenomPaused": 0, +} + +func (x ForcePausedReason) String() string { + return proto.EnumName(ForcePausedReason_name, int32(x)) +} + +func (ForcePausedReason) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_c255fc568a8e9667, []int{1} +} + +type ForcePausedInfo struct { + Reason ForcePausedReason `protobuf:"varint,1,opt,name=reason,proto3,enum=injective.exchange.v2.ForcePausedReason" json:"reason,omitempty"` + MarkPriceAtPausing *cosmossdk_io_math.LegacyDec `protobuf:"bytes,2,opt,name=mark_price_at_pausing,json=markPriceAtPausing,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"mark_price_at_pausing,omitempty"` +} + +func (m *ForcePausedInfo) Reset() { *m = ForcePausedInfo{} } +func (m *ForcePausedInfo) String() string { return proto.CompactTextString(m) } +func (*ForcePausedInfo) ProtoMessage() {} +func (*ForcePausedInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_c255fc568a8e9667, []int{0} +} +func (m *ForcePausedInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ForcePausedInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ForcePausedInfo.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ForcePausedInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_ForcePausedInfo.Merge(m, src) +} +func (m *ForcePausedInfo) XXX_Size() int { + return m.Size() +} +func (m *ForcePausedInfo) XXX_DiscardUnknown() { + xxx_messageInfo_ForcePausedInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_ForcePausedInfo proto.InternalMessageInfo + +func (m *ForcePausedInfo) GetReason() ForcePausedReason { + if m != nil { + return m.Reason + } + return ForcePausedReason_QuoteDenomPaused +} + type OpenNotionalCap struct { // Types that are valid to be assigned to Cap: // *OpenNotionalCap_Uncapped @@ -71,7 +141,7 @@ func (m *OpenNotionalCap) Reset() { *m = OpenNotionalCap{} } func (m *OpenNotionalCap) String() string { return proto.CompactTextString(m) } func (*OpenNotionalCap) ProtoMessage() {} func (*OpenNotionalCap) Descriptor() ([]byte, []int) { - return fileDescriptor_c255fc568a8e9667, []int{0} + return fileDescriptor_c255fc568a8e9667, []int{1} } func (m *OpenNotionalCap) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -152,7 +222,7 @@ func (m *OpenNotionalCapUncapped) Reset() { *m = OpenNotionalCapUncapped func (m *OpenNotionalCapUncapped) String() string { return proto.CompactTextString(m) } func (*OpenNotionalCapUncapped) ProtoMessage() {} func (*OpenNotionalCapUncapped) Descriptor() ([]byte, []int) { - return fileDescriptor_c255fc568a8e9667, []int{1} + return fileDescriptor_c255fc568a8e9667, []int{2} } func (m *OpenNotionalCapUncapped) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -189,7 +259,7 @@ func (m *OpenNotionalCapCapped) Reset() { *m = OpenNotionalCapCapped{} } func (m *OpenNotionalCapCapped) String() string { return proto.CompactTextString(m) } func (*OpenNotionalCapCapped) ProtoMessage() {} func (*OpenNotionalCapCapped) Descriptor() ([]byte, []int) { - return fileDescriptor_c255fc568a8e9667, []int{2} + return fileDescriptor_c255fc568a8e9667, []int{3} } func (m *OpenNotionalCapCapped) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -227,7 +297,7 @@ func (m *MarketFeeMultiplier) Reset() { *m = MarketFeeMultiplier{} } func (m *MarketFeeMultiplier) String() string { return proto.CompactTextString(m) } func (*MarketFeeMultiplier) ProtoMessage() {} func (*MarketFeeMultiplier) Descriptor() ([]byte, []int) { - return fileDescriptor_c255fc568a8e9667, []int{3} + return fileDescriptor_c255fc568a8e9667, []int{4} } func (m *MarketFeeMultiplier) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -293,13 +363,16 @@ type SpotMarket struct { BaseDecimals uint32 `protobuf:"varint,14,opt,name=base_decimals,json=baseDecimals,proto3" json:"base_decimals,omitempty"` // quote token decimals QuoteDecimals uint32 `protobuf:"varint,15,opt,name=quote_decimals,json=quoteDecimals,proto3" json:"quote_decimals,omitempty"` + // has_disabled_minimal_protocol_fee indicates whether the minimal protocol + // fee is disabled for the market + HasDisabledMinimalProtocolFee bool `protobuf:"varint,16,opt,name=has_disabled_minimal_protocol_fee,json=hasDisabledMinimalProtocolFee,proto3" json:"has_disabled_minimal_protocol_fee,omitempty"` } func (m *SpotMarket) Reset() { *m = SpotMarket{} } func (m *SpotMarket) String() string { return proto.CompactTextString(m) } func (*SpotMarket) ProtoMessage() {} func (*SpotMarket) Descriptor() ([]byte, []int) { - return fileDescriptor_c255fc568a8e9667, []int{4} + return fileDescriptor_c255fc568a8e9667, []int{5} } func (m *SpotMarket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -391,6 +464,13 @@ func (m *SpotMarket) GetQuoteDecimals() uint32 { return 0 } +func (m *SpotMarket) GetHasDisabledMinimalProtocolFee() bool { + if m != nil { + return m.HasDisabledMinimalProtocolFee + } + return false +} + // An object describing a binary options market in Injective Protocol. type BinaryOptionsMarket struct { // Ticker for the derivative contract. @@ -440,13 +520,19 @@ type BinaryOptionsMarket struct { QuoteDecimals uint32 `protobuf:"varint,20,opt,name=quote_decimals,json=quoteDecimals,proto3" json:"quote_decimals,omitempty"` // open_notional_cap defines the maximum open notional for the market OpenNotionalCap OpenNotionalCap `protobuf:"bytes,21,opt,name=open_notional_cap,json=openNotionalCap,proto3" json:"open_notional_cap"` + // has_disabled_minimal_protocol_fee indicates whether the minimal protocol + // fee is disabled for the market + HasDisabledMinimalProtocolFee bool `protobuf:"varint,22,opt,name=has_disabled_minimal_protocol_fee,json=hasDisabledMinimalProtocolFee,proto3" json:"has_disabled_minimal_protocol_fee,omitempty"` + // force_paused_info defines additional info for force paused markets, only + // set when status == ForcePaused + ForcePausedInfo *ForcePausedInfo `protobuf:"bytes,23,opt,name=force_paused_info,json=forcePausedInfo,proto3" json:"force_paused_info,omitempty"` } func (m *BinaryOptionsMarket) Reset() { *m = BinaryOptionsMarket{} } func (m *BinaryOptionsMarket) String() string { return proto.CompactTextString(m) } func (*BinaryOptionsMarket) ProtoMessage() {} func (*BinaryOptionsMarket) Descriptor() ([]byte, []int) { - return fileDescriptor_c255fc568a8e9667, []int{5} + return fileDescriptor_c255fc568a8e9667, []int{6} } func (m *BinaryOptionsMarket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -528,13 +614,19 @@ type DerivativeMarket struct { ReduceMarginRatio cosmossdk_io_math.LegacyDec `protobuf:"bytes,21,opt,name=reduce_margin_ratio,json=reduceMarginRatio,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"reduce_margin_ratio"` // open_notional_cap defines the maximum open notional for the market OpenNotionalCap OpenNotionalCap `protobuf:"bytes,22,opt,name=open_notional_cap,json=openNotionalCap,proto3" json:"open_notional_cap"` + // has_disabled_minimal_protocol_fee indicates whether the minimal protocol + // fee is disabled for the market + HasDisabledMinimalProtocolFee bool `protobuf:"varint,23,opt,name=has_disabled_minimal_protocol_fee,json=hasDisabledMinimalProtocolFee,proto3" json:"has_disabled_minimal_protocol_fee,omitempty"` + // force_paused_info defines additional info for force paused markets, only + // set when status == ForcePaused + ForcePausedInfo *ForcePausedInfo `protobuf:"bytes,24,opt,name=force_paused_info,json=forcePausedInfo,proto3" json:"force_paused_info,omitempty"` } func (m *DerivativeMarket) Reset() { *m = DerivativeMarket{} } func (m *DerivativeMarket) String() string { return proto.CompactTextString(m) } func (*DerivativeMarket) ProtoMessage() {} func (*DerivativeMarket) Descriptor() ([]byte, []int) { - return fileDescriptor_c255fc568a8e9667, []int{6} + return fileDescriptor_c255fc568a8e9667, []int{7} } func (m *DerivativeMarket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -574,7 +666,7 @@ func (m *DerivativeMarketSettlementInfo) Reset() { *m = DerivativeMarket func (m *DerivativeMarketSettlementInfo) String() string { return proto.CompactTextString(m) } func (*DerivativeMarketSettlementInfo) ProtoMessage() {} func (*DerivativeMarketSettlementInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_c255fc568a8e9667, []int{7} + return fileDescriptor_c255fc568a8e9667, []int{8} } func (m *DerivativeMarketSettlementInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -621,7 +713,7 @@ func (m *MarketVolume) Reset() { *m = MarketVolume{} } func (m *MarketVolume) String() string { return proto.CompactTextString(m) } func (*MarketVolume) ProtoMessage() {} func (*MarketVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_c255fc568a8e9667, []int{8} + return fileDescriptor_c255fc568a8e9667, []int{9} } func (m *MarketVolume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -675,7 +767,7 @@ func (m *VolumeRecord) Reset() { *m = VolumeRecord{} } func (m *VolumeRecord) String() string { return proto.CompactTextString(m) } func (*VolumeRecord) ProtoMessage() {} func (*VolumeRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_c255fc568a8e9667, []int{9} + return fileDescriptor_c255fc568a8e9667, []int{10} } func (m *VolumeRecord) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -713,7 +805,7 @@ func (m *ExpiryFuturesMarketInfoState) Reset() { *m = ExpiryFuturesMarke func (m *ExpiryFuturesMarketInfoState) String() string { return proto.CompactTextString(m) } func (*ExpiryFuturesMarketInfoState) ProtoMessage() {} func (*ExpiryFuturesMarketInfoState) Descriptor() ([]byte, []int) { - return fileDescriptor_c255fc568a8e9667, []int{10} + return fileDescriptor_c255fc568a8e9667, []int{11} } func (m *ExpiryFuturesMarketInfoState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -765,7 +857,7 @@ func (m *PerpetualMarketFundingState) Reset() { *m = PerpetualMarketFund func (m *PerpetualMarketFundingState) String() string { return proto.CompactTextString(m) } func (*PerpetualMarketFundingState) ProtoMessage() {} func (*PerpetualMarketFundingState) Descriptor() ([]byte, []int) { - return fileDescriptor_c255fc568a8e9667, []int{11} + return fileDescriptor_c255fc568a8e9667, []int{12} } func (m *PerpetualMarketFundingState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -819,17 +911,30 @@ type ExpiryFuturesMarketInfo struct { TwapStartTimestamp int64 `protobuf:"varint,3,opt,name=twap_start_timestamp,json=twapStartTimestamp,proto3" json:"twap_start_timestamp,omitempty"` // expiration_twap_start_price_cumulative defines the cumulative price for the // start of the TWAP window (in human readable format) - ExpirationTwapStartPriceCumulative cosmossdk_io_math.LegacyDec `protobuf:"bytes,4,opt,name=expiration_twap_start_price_cumulative,json=expirationTwapStartPriceCumulative,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"expiration_twap_start_price_cumulative"` + // Deprecated: For correctly calculating the expiration price using TWAP, we + // need to keep the cumulative price at the start of TWAP calculation + // separately for the base asset and the quote asset. Use + // expiration_twap_start_base_cumulative_price and + // expiration_twap_start_quote_cumulative_price instead. + ExpirationTwapStartPriceCumulative cosmossdk_io_math.LegacyDec `protobuf:"bytes,4,opt,name=expiration_twap_start_price_cumulative,json=expirationTwapStartPriceCumulative,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"expiration_twap_start_price_cumulative"` // Deprecated: Do not use. // settlement_price defines the settlement price for a time expiry futures // market (in human readable format) SettlementPrice cosmossdk_io_math.LegacyDec `protobuf:"bytes,5,opt,name=settlement_price,json=settlementPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"settlement_price"` + // expiration_twap_start_base_cumulative_price defines the cumulative price + // for the base asset at the start of the TWAP calculation window (in human + // readable format) + ExpirationTwapStartBaseCumulativePrice cosmossdk_io_math.LegacyDec `protobuf:"bytes,6,opt,name=expiration_twap_start_base_cumulative_price,json=expirationTwapStartBaseCumulativePrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"expiration_twap_start_base_cumulative_price"` + // expiration_twap_start_quote_cumulative_price defines the cumulative price + // for the quote asset at the start of the TWAP calculation window (in human + // readable format) + ExpirationTwapStartQuoteCumulativePrice cosmossdk_io_math.LegacyDec `protobuf:"bytes,7,opt,name=expiration_twap_start_quote_cumulative_price,json=expirationTwapStartQuoteCumulativePrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"expiration_twap_start_quote_cumulative_price"` } func (m *ExpiryFuturesMarketInfo) Reset() { *m = ExpiryFuturesMarketInfo{} } func (m *ExpiryFuturesMarketInfo) String() string { return proto.CompactTextString(m) } func (*ExpiryFuturesMarketInfo) ProtoMessage() {} func (*ExpiryFuturesMarketInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_c255fc568a8e9667, []int{12} + return fileDescriptor_c255fc568a8e9667, []int{13} } func (m *ExpiryFuturesMarketInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -899,7 +1004,7 @@ func (m *PerpetualMarketInfo) Reset() { *m = PerpetualMarketInfo{} } func (m *PerpetualMarketInfo) String() string { return proto.CompactTextString(m) } func (*PerpetualMarketInfo) ProtoMessage() {} func (*PerpetualMarketInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_c255fc568a8e9667, []int{13} + return fileDescriptor_c255fc568a8e9667, []int{14} } func (m *PerpetualMarketInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -964,7 +1069,7 @@ func (m *PerpetualMarketFunding) Reset() { *m = PerpetualMarketFunding{} func (m *PerpetualMarketFunding) String() string { return proto.CompactTextString(m) } func (*PerpetualMarketFunding) ProtoMessage() {} func (*PerpetualMarketFunding) Descriptor() ([]byte, []int) { - return fileDescriptor_c255fc568a8e9667, []int{14} + return fileDescriptor_c255fc568a8e9667, []int{15} } func (m *PerpetualMarketFunding) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1002,6 +1107,8 @@ func (m *PerpetualMarketFunding) GetLastTimestamp() int64 { func init() { proto.RegisterEnum("injective.exchange.v2.MarketStatus", MarketStatus_name, MarketStatus_value) + proto.RegisterEnum("injective.exchange.v2.ForcePausedReason", ForcePausedReason_name, ForcePausedReason_value) + proto.RegisterType((*ForcePausedInfo)(nil), "injective.exchange.v2.ForcePausedInfo") proto.RegisterType((*OpenNotionalCap)(nil), "injective.exchange.v2.OpenNotionalCap") proto.RegisterType((*OpenNotionalCapUncapped)(nil), "injective.exchange.v2.OpenNotionalCapUncapped") proto.RegisterType((*OpenNotionalCapCapped)(nil), "injective.exchange.v2.OpenNotionalCapCapped") @@ -1024,109 +1131,164 @@ func init() { } var fileDescriptor_c255fc568a8e9667 = []byte{ - // 1626 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0xcd, 0x6f, 0x1b, 0xc7, - 0x15, 0xd7, 0xea, 0x83, 0x92, 0x1e, 0xbf, 0x87, 0x94, 0x4c, 0xd8, 0xad, 0xa4, 0x52, 0x95, 0xeb, - 0xca, 0x35, 0x69, 0xab, 0xbd, 0x54, 0x3d, 0x59, 0x92, 0xd5, 0xaa, 0xb0, 0x2c, 0x79, 0x29, 0x17, - 0x86, 0x8b, 0x62, 0x31, 0x5a, 0x8e, 0xa4, 0xa9, 0xf6, 0xcb, 0xbb, 0xb3, 0xb4, 0xe9, 0x6b, 0x7b, - 0x28, 0x8a, 0x16, 0xc8, 0x5f, 0x10, 0xe4, 0x4f, 0x30, 0x92, 0x73, 0xae, 0x81, 0x8f, 0x06, 0x72, - 0x09, 0x72, 0x30, 0x02, 0x2b, 0x80, 0xff, 0x83, 0x9c, 0x83, 0xf9, 0xe0, 0xee, 0x8a, 0x22, 0x25, - 0x32, 0x52, 0x90, 0x43, 0x2e, 0xc4, 0xee, 0x9b, 0xf7, 0x7e, 0xf3, 0xe3, 0xbc, 0xf7, 0x7e, 0x33, - 0xb3, 0x50, 0xa5, 0xce, 0x3f, 0x89, 0xc9, 0x68, 0x8b, 0xd4, 0xc9, 0x4b, 0xf3, 0x08, 0x3b, 0x87, - 0xa4, 0xde, 0x5a, 0xa9, 0xdb, 0xd8, 0x3f, 0x26, 0xac, 0xe6, 0xf9, 0x2e, 0x73, 0xd1, 0x4c, 0xe4, - 0x53, 0xeb, 0xf8, 0xd4, 0x5a, 0x2b, 0xd7, 0xcb, 0x87, 0xee, 0xa1, 0x2b, 0x3c, 0xea, 0xfc, 0x49, - 0x3a, 0x5f, 0x5f, 0x8a, 0x01, 0x5d, 0x1f, 0x9b, 0x16, 0xa9, 0xb7, 0xee, 0xed, 0x13, 0x86, 0xef, - 0xa9, 0x57, 0xe5, 0x56, 0xc4, 0x36, 0x75, 0xdc, 0xba, 0xf8, 0x95, 0xa6, 0xea, 0x77, 0x1a, 0xe4, - 0x77, 0x3c, 0xe2, 0x3c, 0x72, 0x19, 0x75, 0x1d, 0x6c, 0xad, 0x63, 0x0f, 0xfd, 0x1d, 0xa6, 0x42, - 0xc7, 0xc4, 0x9e, 0x47, 0x9a, 0x15, 0x6d, 0x41, 0xbb, 0x95, 0x5e, 0xa9, 0xd5, 0x7a, 0xb2, 0xa9, - 0x75, 0x45, 0x3e, 0x51, 0x51, 0x6b, 0xd9, 0x4f, 0x3f, 0xbc, 0x5e, 0x8e, 0x40, 0xfe, 0x32, 0xa2, - 0x47, 0xcf, 0xa8, 0x01, 0x29, 0x05, 0x3d, 0x2a, 0xa0, 0x7f, 0x37, 0x18, 0xf4, 0xba, 0x04, 0x4e, - 0x73, 0xe0, 0x54, 0x04, 0xab, 0x9e, 0x56, 0x97, 0xff, 0xfb, 0xe1, 0xf5, 0xf2, 0xd2, 0x40, 0x40, - 0x6b, 0x13, 0x30, 0x66, 0x62, 0xaf, 0xba, 0x0d, 0xd7, 0xfa, 0xb0, 0x5f, 0x5d, 0xe1, 0x68, 0x77, - 0x86, 0xfa, 0xc7, 0xd5, 0x7f, 0x6b, 0x30, 0xd3, 0x93, 0x32, 0xfa, 0x23, 0x4c, 0xb4, 0xb0, 0x15, - 0x12, 0xb1, 0x94, 0xd3, 0x6b, 0x8b, 0x6f, 0xde, 0xcd, 0x8f, 0x7c, 0xfd, 0x6e, 0xfe, 0x86, 0xe9, - 0x06, 0xb6, 0x1b, 0x04, 0xcd, 0xe3, 0x1a, 0x75, 0xeb, 0x36, 0x66, 0x47, 0xb5, 0x87, 0xe4, 0x10, - 0x9b, 0xed, 0x0d, 0x62, 0xea, 0x32, 0x62, 0xf5, 0x2e, 0x27, 0x72, 0x7b, 0x88, 0xf5, 0xe1, 0x34, - 0x4a, 0xdb, 0xa2, 0x8c, 0x36, 0x09, 0xd9, 0x0e, 0x2d, 0x46, 0x3d, 0x8b, 0x12, 0x1f, 0xdd, 0x80, - 0x69, 0x59, 0x5d, 0x06, 0x95, 0x39, 0x9d, 0xd6, 0xa7, 0xa4, 0x61, 0xab, 0x89, 0xfe, 0x0a, 0xb9, - 0x03, 0x42, 0x0c, 0x3b, 0x72, 0x17, 0xa9, 0x19, 0x90, 0x6a, 0xf6, 0x20, 0x39, 0xd1, 0xea, 0xf8, - 0x7f, 0x3e, 0x99, 0x1f, 0xa9, 0x7e, 0x96, 0x02, 0x68, 0x78, 0x2e, 0x93, 0x54, 0xd0, 0x2c, 0xa4, - 0x18, 0x35, 0x8f, 0x89, 0xaf, 0xa6, 0x56, 0x6f, 0xe8, 0x97, 0x00, 0xfb, 0x38, 0x20, 0x46, 0x93, - 0x38, 0xae, 0x2d, 0x27, 0xd5, 0xa7, 0xb9, 0x65, 0x83, 0x1b, 0xd0, 0x3c, 0xa4, 0x9f, 0x87, 0x2e, - 0xeb, 0x8c, 0x8f, 0x89, 0x71, 0x10, 0x26, 0xe9, 0xb0, 0x05, 0x39, 0x1b, 0x1f, 0x13, 0xdf, 0xe0, - 0xf4, 0x7d, 0xcc, 0x48, 0x65, 0x7c, 0x70, 0xe2, 0x19, 0x11, 0xba, 0x49, 0x88, 0x8e, 0x19, 0xe1, - 0x50, 0xec, 0x34, 0xd4, 0xc4, 0x10, 0x50, 0x2c, 0x09, 0xf5, 0x14, 0x66, 0x7d, 0x62, 0xe1, 0xb6, - 0x02, 0x0b, 0x8e, 0xb0, 0xaf, 0x20, 0x53, 0x83, 0x43, 0x96, 0x14, 0xc4, 0x26, 0x21, 0x0d, 0x0e, - 0x20, 0x90, 0x4f, 0x65, 0x71, 0xb2, 0x2b, 0x8b, 0x7f, 0x82, 0x54, 0xc0, 0x30, 0x0b, 0x83, 0xca, - 0xd4, 0x82, 0x76, 0x2b, 0xb7, 0xb2, 0xd8, 0xa7, 0xb1, 0x64, 0x4e, 0x1a, 0xc2, 0x55, 0x57, 0x21, - 0x48, 0x87, 0x92, 0x4d, 0x1d, 0xc3, 0xf3, 0xa9, 0x49, 0x0c, 0x9e, 0x1d, 0x23, 0xa0, 0xaf, 0x48, - 0x65, 0x7a, 0x70, 0xc2, 0x05, 0x9b, 0x3a, 0xbb, 0x3c, 0x7c, 0x8f, 0x9a, 0xc7, 0x0d, 0xfa, 0x4a, - 0xac, 0x03, 0xc7, 0x7c, 0x1e, 0x62, 0x87, 0x51, 0xd6, 0x4e, 0xc0, 0xc2, 0x10, 0xeb, 0x60, 0x53, - 0xe7, 0xb1, 0x42, 0x88, 0x90, 0x37, 0x21, 0xc3, 0x91, 0x1d, 0x55, 0xfe, 0x95, 0xf4, 0xe0, 0x78, - 0x69, 0x9b, 0x46, 0x6d, 0x83, 0xca, 0x30, 0x81, 0x9b, 0x36, 0x75, 0x2a, 0x19, 0xb1, 0x96, 0xf2, - 0x05, 0xdd, 0x86, 0xa2, 0x78, 0x30, 0x3c, 0xe2, 0xdb, 0x34, 0x08, 0xa8, 0xeb, 0x04, 0x95, 0xec, - 0x82, 0x76, 0x2b, 0xab, 0x17, 0xc4, 0xc0, 0x6e, 0x6c, 0x47, 0x8b, 0x90, 0x55, 0x25, 0x6c, 0x52, - 0x1b, 0x5b, 0x41, 0x25, 0x27, 0x1c, 0x33, 0xb2, 0x8a, 0xa5, 0x0d, 0x2d, 0x41, 0xae, 0x53, 0xc8, - 0xca, 0x2b, 0x2f, 0xbc, 0xb2, 0xaa, 0x96, 0xa5, 0xb1, 0xfa, 0xe5, 0x34, 0x94, 0xd6, 0xa8, 0x83, - 0xfd, 0xf6, 0x8e, 0xc7, 0x19, 0x06, 0x17, 0xb4, 0xcf, 0x22, 0x64, 0xa5, 0xbc, 0x1b, 0x41, 0xdb, - 0xde, 0x77, 0x2d, 0xd5, 0x41, 0x19, 0x69, 0x6c, 0x08, 0x1b, 0xfa, 0x0d, 0xe4, 0x95, 0x93, 0xe7, - 0xbb, 0x2d, 0xda, 0x24, 0xbe, 0x6a, 0xa4, 0x9c, 0x34, 0xef, 0x2a, 0x2b, 0x7a, 0x00, 0x69, 0xe5, - 0xc8, 0xda, 0x9e, 0xec, 0xa4, 0xdc, 0xca, 0xaf, 0x13, 0x45, 0xa4, 0xb6, 0x12, 0xb5, 0xb3, 0xd4, - 0x76, 0xc4, 0xeb, 0x5e, 0xdb, 0x23, 0x3a, 0xb8, 0xd1, 0x33, 0xaa, 0x41, 0xa9, 0x43, 0xca, 0xc4, - 0x16, 0x31, 0x0e, 0xb0, 0xc9, 0x5c, 0x5f, 0x74, 0x53, 0x56, 0x2f, 0x2a, 0x6a, 0x7c, 0x64, 0x53, - 0x0c, 0xa0, 0x7b, 0x50, 0x26, 0x2f, 0x3d, 0xea, 0x63, 0xfe, 0x8f, 0x0d, 0x46, 0x6d, 0x12, 0x30, - 0x6c, 0x7b, 0xa2, 0x57, 0xc6, 0xf4, 0x52, 0x3c, 0xb6, 0xd7, 0x19, 0xe2, 0x21, 0x01, 0x61, 0xcc, - 0x22, 0x36, 0x71, 0x58, 0x22, 0x64, 0x52, 0x86, 0xc4, 0x63, 0x71, 0x48, 0x94, 0xe9, 0xa9, 0x64, - 0xa6, 0xbb, 0x04, 0x66, 0xfa, 0x8c, 0xc0, 0x9c, 0x6a, 0x38, 0xe8, 0x6a, 0xb8, 0xb3, 0xea, 0x93, - 0xbe, 0x3a, 0xf5, 0xc9, 0x5c, 0xbd, 0xfa, 0x64, 0x2f, 0xa9, 0x3e, 0xb1, 0xc0, 0xe4, 0xae, 0x4c, - 0x60, 0xf2, 0x3f, 0x8e, 0xc0, 0x14, 0x2e, 0x29, 0x30, 0x8f, 0xa0, 0x90, 0xa8, 0x30, 0x41, 0xba, - 0x52, 0x8c, 0x30, 0xb5, 0x8b, 0x30, 0xf3, 0x71, 0xb0, 0x60, 0x7c, 0x46, 0xb0, 0xd0, 0x0f, 0x14, - 0xac, 0x9e, 0xd2, 0x54, 0xea, 0x23, 0x4d, 0x67, 0x55, 0xa7, 0xdc, 0x43, 0x75, 0xd0, 0x53, 0x28, - 0xba, 0x1e, 0x89, 0xc9, 0x19, 0x26, 0xf6, 0x2a, 0x33, 0xe2, 0x6c, 0x76, 0x73, 0xb0, 0xb3, 0xd9, - 0xda, 0x38, 0xff, 0x23, 0x7a, 0xde, 0x3d, 0x6d, 0x56, 0x67, 0x81, 0xcf, 0x01, 0x0a, 0x1b, 0xc4, - 0xa7, 0x2d, 0xcc, 0x71, 0x2e, 0x90, 0xb4, 0xf9, 0x48, 0x84, 0xb8, 0x80, 0x2a, 0x41, 0x53, 0xf2, - 0xb2, 0x86, 0x03, 0x82, 0x7e, 0x05, 0x4a, 0xde, 0x0c, 0xf1, 0x2f, 0x94, 0x96, 0xa9, 0xa0, 0xc7, - 0xdc, 0xf4, 0x53, 0x09, 0x59, 0x97, 0x98, 0xa4, 0xce, 0x17, 0x93, 0xee, 0xdd, 0xfb, 0x09, 0x94, - 0xa9, 0x43, 0x19, 0xc5, 0x96, 0x61, 0x63, 0xff, 0x90, 0x3a, 0x86, 0x50, 0x3d, 0xa9, 0x57, 0x83, - 0x55, 0x0a, 0x52, 0x00, 0xdb, 0x22, 0x5e, 0xe7, 0xe1, 0xe8, 0x1f, 0x50, 0xb1, 0x31, 0x75, 0x18, - 0x71, 0xb0, 0x63, 0x92, 0xd3, 0xd0, 0x43, 0x6c, 0xee, 0xb3, 0x09, 0x90, 0x24, 0xfc, 0x59, 0x09, - 0x84, 0xab, 0x93, 0xc0, 0xf4, 0xd5, 0x4b, 0x60, 0xe6, 0x92, 0x12, 0xb8, 0x00, 0x69, 0x1a, 0xec, - 0x12, 0xdf, 0x23, 0x2c, 0xc4, 0x96, 0x50, 0xd4, 0x29, 0x3d, 0x69, 0xfa, 0x39, 0x89, 0x64, 0xb7, - 0xa8, 0x15, 0x2f, 0x7b, 0x0a, 0x43, 0x17, 0x9e, 0xc2, 0x2e, 0x29, 0x75, 0x0d, 0x28, 0xf9, 0xa4, - 0x19, 0x76, 0x37, 0xc2, 0xcc, 0xe0, 0xc4, 0x8b, 0x32, 0x3e, 0xd9, 0x03, 0x3d, 0xf5, 0x73, 0xf6, - 0xea, 0xf4, 0xf3, 0xff, 0x1a, 0xcc, 0x75, 0xeb, 0x67, 0x23, 0xda, 0x5f, 0xb6, 0x9c, 0x03, 0xf7, - 0xfc, 0xdb, 0x5d, 0xaf, 0xbd, 0x6c, 0x88, 0xfb, 0x5d, 0xf7, 0x5e, 0x56, 0x75, 0x20, 0x23, 0x49, - 0xfc, 0xcd, 0xb5, 0x42, 0x9b, 0x9c, 0x3f, 0xf9, 0x7d, 0x48, 0xb5, 0x84, 0x9b, 0xba, 0xed, 0xf7, - 0x6b, 0x07, 0x89, 0xa5, 0x13, 0xd3, 0xf5, 0x9b, 0x6a, 0x39, 0x54, 0x60, 0xf5, 0x63, 0x0d, 0x32, - 0xc9, 0x61, 0x51, 0x77, 0x42, 0x29, 0x14, 0xb2, 0x36, 0x4c, 0xdd, 0xf1, 0x40, 0x45, 0x7c, 0x13, - 0xa4, 0x6c, 0x18, 0x09, 0x86, 0x83, 0xe2, 0xb0, 0x18, 0xa7, 0xfa, 0x3f, 0x0d, 0x7e, 0xf1, 0x80, - 0x1f, 0x53, 0xdb, 0x9b, 0x21, 0x0b, 0x7d, 0xa2, 0x8e, 0xed, 0x3c, 0x33, 0xbc, 0xbf, 0x2f, 0x58, - 0xa1, 0x1d, 0x48, 0x77, 0x06, 0x9d, 0x03, 0x57, 0x2d, 0x53, 0xbf, 0xef, 0x2d, 0x7d, 0xa6, 0xd1, - 0xc1, 0x8e, 0x9e, 0xab, 0xff, 0xd2, 0xe0, 0x46, 0xa4, 0x47, 0xea, 0x5b, 0x40, 0xe8, 0x34, 0xa9, - 0x73, 0x38, 0x00, 0x9b, 0x3f, 0xc3, 0xe4, 0x81, 0x74, 0x56, 0x4c, 0xee, 0xf4, 0x61, 0xd2, 0x7b, - 0x06, 0xbd, 0x13, 0x5d, 0xfd, 0x76, 0x14, 0xae, 0xf5, 0x61, 0x7b, 0x3e, 0x83, 0x7e, 0xf7, 0x81, - 0xd1, 0xfe, 0xf7, 0x81, 0xbb, 0x50, 0x66, 0x2f, 0xb0, 0x67, 0x04, 0x0c, 0xfb, 0xc9, 0xfb, 0xc0, - 0x98, 0x08, 0x41, 0x7c, 0xac, 0xc1, 0x87, 0xe2, 0x88, 0x17, 0x70, 0x33, 0x39, 0x49, 0x1c, 0x2c, - 0xa5, 0xd7, 0x0c, 0xed, 0xd0, 0x12, 0xed, 0x36, 0xcc, 0x07, 0x85, 0x6a, 0x82, 0x5b, 0x67, 0x4a, - 0xd1, 0x32, 0xeb, 0x11, 0x5c, 0xcf, 0x66, 0x9c, 0xb8, 0x44, 0x33, 0x7e, 0x31, 0x0a, 0xa5, 0xae, - 0x54, 0x5c, 0xbc, 0xc4, 0xcf, 0xe0, 0xda, 0x91, 0x1b, 0xfa, 0x56, 0xdb, 0x50, 0xd9, 0x12, 0x9b, - 0xa3, 0xd0, 0xad, 0x21, 0x7a, 0xa0, 0x2c, 0x31, 0x3a, 0x99, 0xc7, 0x8c, 0xac, 0x63, 0x8f, 0x9f, - 0x63, 0x14, 0x36, 0x3f, 0x30, 0xf8, 0x24, 0x60, 0x72, 0xe7, 0x1d, 0x1b, 0xe2, 0x1c, 0x23, 0x01, - 0xb6, 0x54, 0xbc, 0xd8, 0x78, 0xff, 0x00, 0xb3, 0x0e, 0x79, 0xc9, 0x22, 0xc2, 0x71, 0x92, 0xc7, - 0x45, 0x92, 0xcb, 0x7c, 0x54, 0x51, 0x89, 0xd3, 0xfc, 0x5b, 0x28, 0x74, 0x02, 0x04, 0x9b, 0x16, - 0xb6, 0xc4, 0x6a, 0x8f, 0xe9, 0x79, 0x65, 0xdf, 0x52, 0xe6, 0xea, 0x89, 0x06, 0xb3, 0xbd, 0x6b, - 0x1a, 0xe9, 0x80, 0xe2, 0x82, 0xe8, 0x30, 0x18, 0x46, 0x75, 0x8a, 0x71, 0x78, 0x07, 0xf3, 0x11, - 0x14, 0x12, 0x98, 0xc3, 0x8b, 0x72, 0x1c, 0x2c, 0x2f, 0x18, 0x4b, 0x90, 0xb3, 0x70, 0x70, 0xb6, - 0xf8, 0xb3, 0xdc, 0x1a, 0x2d, 0xc8, 0xf2, 0x5e, 0x47, 0xbb, 0xe5, 0xc1, 0x03, 0xe5, 0x21, 0xfd, - 0xc4, 0x09, 0x3c, 0x62, 0xd2, 0x03, 0x4a, 0x9a, 0x85, 0x11, 0x04, 0x90, 0xba, 0x2f, 0x9a, 0xbd, - 0xa0, 0xf1, 0xe7, 0x5d, 0x1c, 0x06, 0xa4, 0x59, 0x18, 0x45, 0x39, 0x80, 0x0d, 0x62, 0xbb, 0x16, - 0x0d, 0x8e, 0x48, 0xb3, 0x30, 0x86, 0xd2, 0x30, 0x29, 0xba, 0x9b, 0x34, 0x0b, 0xe3, 0x6b, 0xc7, - 0x6f, 0xde, 0xcf, 0x69, 0x6f, 0xdf, 0xcf, 0x69, 0xdf, 0xbc, 0x9f, 0xd3, 0x3e, 0x3a, 0x99, 0x1b, - 0x79, 0x7b, 0x32, 0x37, 0xf2, 0xd5, 0xc9, 0xdc, 0xc8, 0xb3, 0xc7, 0x87, 0x94, 0x1d, 0x85, 0xfb, - 0x35, 0xd3, 0xb5, 0xeb, 0x5b, 0x1d, 0x1d, 0x79, 0x88, 0xf7, 0x83, 0x7a, 0xa4, 0x2a, 0x77, 0x4c, - 0xd7, 0x27, 0xc9, 0xd7, 0x23, 0x4c, 0x9d, 0xba, 0xed, 0x36, 0x43, 0x8b, 0x04, 0xf1, 0xe7, 0x71, - 0x7e, 0x94, 0x0f, 0xea, 0xad, 0x95, 0xfd, 0x94, 0xf8, 0x6e, 0xfd, 0xfb, 0xef, 0x03, 0x00, 0x00, - 0xff, 0xff, 0x9a, 0x9c, 0x7f, 0x82, 0x44, 0x17, 0x00, 0x00, + // 1863 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0xcb, 0x6f, 0x1b, 0xc7, + 0x19, 0xe7, 0xea, 0x41, 0x49, 0x1f, 0xdf, 0x43, 0x4a, 0x22, 0xe2, 0x46, 0x52, 0xe8, 0xca, 0x51, + 0xe4, 0x98, 0xb4, 0xd5, 0x5e, 0xea, 0x5e, 0x6a, 0x59, 0x61, 0xad, 0x22, 0xb2, 0xe5, 0x95, 0x1d, + 0x04, 0x01, 0x8a, 0xc5, 0x68, 0x77, 0x48, 0x4e, 0xb5, 0xaf, 0xec, 0xce, 0xb2, 0x66, 0x4e, 0x41, + 0xdb, 0x43, 0x61, 0xb4, 0x40, 0xff, 0x82, 0xa2, 0xf7, 0x5e, 0x82, 0xfe, 0x07, 0xbd, 0x14, 0x39, + 0xe6, 0x58, 0xb4, 0x40, 0x50, 0xd8, 0x87, 0xdc, 0x0a, 0xf4, 0x0f, 0x28, 0x50, 0xcc, 0x83, 0xdc, + 0x15, 0x1f, 0x12, 0x69, 0xa9, 0xed, 0x21, 0x17, 0x62, 0xf7, 0x9b, 0xef, 0xf1, 0x9b, 0x99, 0xef, + 0xfb, 0xcd, 0x37, 0x4b, 0xa8, 0x51, 0xf7, 0x67, 0xc4, 0x64, 0xb4, 0x4b, 0x1a, 0xe4, 0x85, 0xd9, + 0xc1, 0x6e, 0x9b, 0x34, 0xba, 0x7b, 0x0d, 0x07, 0x07, 0x67, 0x84, 0xd5, 0xfd, 0xc0, 0x63, 0x1e, + 0x5a, 0x1d, 0xe8, 0xd4, 0xfb, 0x3a, 0xf5, 0xee, 0xde, 0x5b, 0x95, 0xb6, 0xd7, 0xf6, 0x84, 0x46, + 0x83, 0x3f, 0x49, 0xe5, 0xb7, 0x4a, 0xd8, 0xa1, 0xae, 0xd7, 0x10, 0xbf, 0x4a, 0xb4, 0x1d, 0xc7, + 0xf0, 0x02, 0x6c, 0xda, 0xa4, 0xd1, 0xbd, 0x77, 0x4a, 0x18, 0xbe, 0xa7, 0x5e, 0xa5, 0x5a, 0xed, + 0x8f, 0x1a, 0x14, 0x9a, 0x5e, 0x60, 0x92, 0x63, 0x1c, 0x85, 0xc4, 0x3a, 0x74, 0x5b, 0x1e, 0xfa, + 0x11, 0xa4, 0x03, 0x82, 0x43, 0xcf, 0xad, 0x6a, 0x5b, 0xda, 0x4e, 0x7e, 0x6f, 0xa7, 0x3e, 0x16, + 0x4b, 0x3d, 0x61, 0xa7, 0x0b, 0x7d, 0x5d, 0xd9, 0xa1, 0x8f, 0x60, 0x95, 0x4f, 0xc6, 0xf0, 0x03, + 0x6a, 0x12, 0x03, 0x33, 0xc3, 0xc7, 0x51, 0x48, 0xdd, 0x76, 0x75, 0x6e, 0x4b, 0xdb, 0x59, 0xd9, + 0xbf, 0xf9, 0xe5, 0xd7, 0x9b, 0xda, 0xdf, 0xbe, 0xde, 0xbc, 0x61, 0x7a, 0xa1, 0xe3, 0x85, 0xa1, + 0x75, 0x56, 0xa7, 0x5e, 0xc3, 0xc1, 0xac, 0x53, 0xff, 0x90, 0xb4, 0xb1, 0xd9, 0x3b, 0x20, 0xa6, + 0x8e, 0xb8, 0x87, 0x63, 0xee, 0xe0, 0x01, 0x3b, 0x96, 0xe6, 0xb5, 0x3f, 0xcf, 0x41, 0xe1, 0x89, + 0x4f, 0xdc, 0xc7, 0x1e, 0xa3, 0x9e, 0x8b, 0xed, 0x87, 0xd8, 0x47, 0x9f, 0x6b, 0xb0, 0x1c, 0xb9, + 0x26, 0xf6, 0x7d, 0x62, 0x09, 0xc0, 0x99, 0xbd, 0xfa, 0x04, 0xc0, 0x43, 0xa6, 0xcf, 0x95, 0xd5, + 0xfe, 0xde, 0x9f, 0xbe, 0xf9, 0x62, 0xf7, 0xce, 0x4c, 0x36, 0x8f, 0x52, 0xfa, 0x20, 0x2a, 0x7a, + 0x01, 0x69, 0x15, 0x7f, 0x4e, 0xc4, 0x7f, 0x7f, 0xba, 0xf8, 0x0f, 0x65, 0xf4, 0xbb, 0x3c, 0xfa, + 0xed, 0x19, 0x2c, 0x1e, 0xa5, 0x74, 0x15, 0xef, 0xfe, 0xee, 0xcb, 0x6f, 0xbe, 0xd8, 0xdd, 0x9e, + 0xca, 0x76, 0x7f, 0x11, 0xe6, 0x4d, 0xec, 0xd7, 0x8e, 0x60, 0x7d, 0xc2, 0x9c, 0xee, 0xef, 0xbd, + 0x9c, 0x79, 0x1d, 0x6a, 0xbf, 0xd2, 0x60, 0x75, 0x2c, 0x4a, 0xf4, 0x03, 0x58, 0xec, 0x62, 0x3b, + 0x22, 0x62, 0x53, 0xe4, 0xa6, 0xa7, 0x2e, 0xdb, 0x74, 0x69, 0x71, 0xff, 0xee, 0xcb, 0x19, 0x97, + 0x84, 0xc3, 0x28, 0x1f, 0x89, 0xfa, 0x69, 0x12, 0x72, 0x14, 0xd9, 0x8c, 0xfa, 0x36, 0x25, 0x01, + 0xba, 0x01, 0x2b, 0xb2, 0xac, 0x0c, 0x2a, 0xb3, 0x63, 0x45, 0x5f, 0x96, 0x82, 0x43, 0x0b, 0xfd, + 0x04, 0xf2, 0x2d, 0x42, 0x0c, 0x67, 0xa0, 0x9e, 0xc8, 0xcf, 0x4b, 0xa1, 0xe6, 0x5a, 0xc9, 0x40, + 0xf7, 0x17, 0x7e, 0xfd, 0x87, 0xcd, 0x54, 0xed, 0xdf, 0x69, 0x80, 0x13, 0xdf, 0x63, 0x12, 0x0a, + 0x5a, 0x83, 0x34, 0xa3, 0xe6, 0x19, 0x09, 0x54, 0x68, 0xf5, 0x86, 0xde, 0x06, 0x38, 0xc5, 0x21, + 0x31, 0x2c, 0xe2, 0x7a, 0x8e, 0x0c, 0xaa, 0xaf, 0x70, 0xc9, 0x01, 0x17, 0xa0, 0x4d, 0xc8, 0x7c, + 0x1a, 0x79, 0xac, 0x3f, 0x3e, 0x2f, 0xc6, 0x41, 0x88, 0xa4, 0xc2, 0x21, 0xe4, 0x1d, 0x7c, 0x46, + 0x02, 0x83, 0xc3, 0x0f, 0x30, 0x23, 0xd5, 0x85, 0xe9, 0x81, 0x67, 0x85, 0x69, 0x93, 0x10, 0x1d, + 0x33, 0xc2, 0x5d, 0xb1, 0xf3, 0xae, 0x16, 0x67, 0x70, 0xc5, 0x92, 0xae, 0x3e, 0x86, 0xb5, 0x80, + 0xd8, 0xb8, 0xa7, 0x9c, 0x85, 0x1d, 0x1c, 0x28, 0x97, 0xe9, 0xe9, 0x5d, 0x96, 0x95, 0x8b, 0x26, + 0x21, 0x27, 0xdc, 0x81, 0xf0, 0x7c, 0x6e, 0x17, 0x97, 0x86, 0x76, 0xf1, 0x87, 0x90, 0x0e, 0x19, + 0x66, 0x51, 0x58, 0x5d, 0x16, 0x74, 0x75, 0x73, 0x42, 0xf5, 0xc9, 0x3d, 0x39, 0x11, 0xaa, 0xba, + 0x32, 0x41, 0x3a, 0x94, 0x1d, 0xea, 0x2a, 0xa2, 0xe2, 0xbb, 0x63, 0x84, 0xf4, 0x33, 0x52, 0x5d, + 0x99, 0x1e, 0x70, 0xd1, 0xa1, 0xae, 0xa0, 0xa9, 0x67, 0xd4, 0x3c, 0x3b, 0xa1, 0x9f, 0x89, 0x75, + 0xe0, 0x3e, 0x3f, 0x8d, 0xb0, 0xcb, 0x28, 0xeb, 0x25, 0xdc, 0xc2, 0x0c, 0xeb, 0xe0, 0x50, 0xf7, + 0xa9, 0xf2, 0x30, 0xf0, 0xdc, 0x84, 0x2c, 0xf7, 0xec, 0xaa, 0xf4, 0xaf, 0x66, 0xa6, 0xf7, 0x97, + 0x71, 0xe8, 0xa0, 0x6c, 0x50, 0x05, 0x16, 0xb1, 0xe5, 0x50, 0xb7, 0x9a, 0x15, 0x6b, 0x29, 0x5f, + 0xd0, 0x6d, 0x28, 0x89, 0x07, 0xc3, 0x27, 0x81, 0x43, 0xc3, 0x90, 0x7a, 0x6e, 0x58, 0xcd, 0x6d, + 0x69, 0x3b, 0x39, 0xbd, 0x28, 0x06, 0x8e, 0x63, 0x39, 0xba, 0x09, 0x39, 0x95, 0xc2, 0x26, 0x75, + 0xb0, 0x1d, 0x56, 0xf3, 0x42, 0x31, 0x2b, 0xb3, 0x58, 0xca, 0xd0, 0x36, 0xe4, 0xfb, 0x89, 0xac, + 0xb4, 0x0a, 0x42, 0x2b, 0xa7, 0x72, 0x59, 0xa9, 0x3d, 0x82, 0x77, 0x3a, 0x38, 0x34, 0x2c, 0x1a, + 0xe2, 0x53, 0x9b, 0x58, 0x86, 0x43, 0x5d, 0x3e, 0x60, 0x88, 0x23, 0xca, 0xf4, 0x6c, 0x9e, 0x4e, + 0xd5, 0xe2, 0x96, 0xb6, 0xb3, 0xac, 0xbf, 0xdd, 0xc1, 0xe1, 0x81, 0xd2, 0x3b, 0x92, 0x6a, 0xc7, + 0x4a, 0xab, 0x49, 0x48, 0xed, 0x5f, 0x00, 0xe5, 0x7d, 0xea, 0xe2, 0xa0, 0xf7, 0xc4, 0xe7, 0x73, + 0x0d, 0x2f, 0x29, 0xc4, 0x9b, 0x90, 0x93, 0xc7, 0xa1, 0x11, 0xf6, 0x9c, 0x53, 0xcf, 0x56, 0xb5, + 0x98, 0x95, 0xc2, 0x13, 0x21, 0x43, 0xef, 0x42, 0x41, 0x29, 0xf9, 0x81, 0xd7, 0xa5, 0x16, 0x09, + 0x54, 0x49, 0xe6, 0xa5, 0xf8, 0x58, 0x49, 0xd1, 0x07, 0x90, 0x51, 0x8a, 0xac, 0xe7, 0xcb, 0x9a, + 0xcc, 0xef, 0x7d, 0x37, 0x91, 0x8e, 0xea, 0xe8, 0x55, 0x27, 0x71, 0xfd, 0x89, 0x78, 0x7d, 0xd6, + 0xf3, 0x89, 0x0e, 0xde, 0xe0, 0x19, 0xd5, 0xa1, 0xdc, 0x07, 0x65, 0x62, 0x9b, 0x18, 0x2d, 0x6c, + 0x32, 0x2f, 0x10, 0x75, 0x99, 0xd3, 0x4b, 0x0a, 0x1a, 0x1f, 0x69, 0x8a, 0x01, 0x74, 0x0f, 0x2a, + 0xe4, 0x85, 0x4f, 0x03, 0xcc, 0x67, 0x6c, 0x30, 0xea, 0x90, 0x90, 0x61, 0xc7, 0x17, 0x55, 0x37, + 0xaf, 0x97, 0xe3, 0xb1, 0x67, 0xfd, 0x21, 0x6e, 0x12, 0x12, 0xc6, 0x6c, 0xe2, 0x10, 0x97, 0x25, + 0x4c, 0x96, 0xa4, 0x49, 0x3c, 0x16, 0x9b, 0x0c, 0x72, 0x66, 0x39, 0x99, 0x33, 0x43, 0x54, 0xb5, + 0x32, 0x42, 0x55, 0xe7, 0x4a, 0x17, 0x86, 0x4a, 0x77, 0x94, 0xc7, 0x32, 0xd7, 0xc7, 0x63, 0xd9, + 0xeb, 0xe7, 0xb1, 0xdc, 0x15, 0x79, 0x2c, 0xa6, 0xaa, 0xfc, 0xb5, 0x51, 0x55, 0xe1, 0xbf, 0x43, + 0x55, 0xc5, 0x2b, 0x52, 0xd5, 0x63, 0x28, 0x26, 0x32, 0x4c, 0x80, 0xae, 0x96, 0xa6, 0xef, 0xfe, + 0x0a, 0xb1, 0xb1, 0x40, 0x3c, 0x42, 0x7d, 0xe8, 0x0d, 0xa9, 0x6f, 0x2c, 0xc9, 0x95, 0x27, 0x90, + 0xdc, 0x28, 0x7f, 0x55, 0xc6, 0xf1, 0xd7, 0xc7, 0x50, 0xf2, 0x7c, 0x12, 0x83, 0x33, 0x4c, 0xec, + 0x57, 0x57, 0x45, 0x2b, 0x78, 0x6b, 0xba, 0x56, 0x70, 0x7f, 0x81, 0x4f, 0x44, 0x2f, 0x78, 0x43, + 0xcd, 0xed, 0x54, 0xcc, 0xb8, 0x36, 0x05, 0x33, 0x22, 0x1d, 0x4a, 0x2d, 0xde, 0xaf, 0x8b, 0x56, + 0x9c, 0x58, 0x06, 0x75, 0x5b, 0x5e, 0x75, 0xfd, 0x42, 0x8c, 0x43, 0xf7, 0x02, 0xbd, 0xd0, 0x3a, + 0x2f, 0x50, 0x3d, 0xcf, 0xdf, 0x33, 0x50, 0x3c, 0x20, 0x01, 0xed, 0x62, 0xee, 0xe1, 0x12, 0xc2, + 0xdd, 0x1c, 0x50, 0x24, 0x3f, 0x28, 0x14, 0xdd, 0x2a, 0xf2, 0xdb, 0xc7, 0x21, 0x41, 0xef, 0x80, + 0x22, 0x5f, 0x43, 0xac, 0xb1, 0x62, 0x5a, 0x65, 0xf4, 0x94, 0x8b, 0xfe, 0x5f, 0x34, 0x3b, 0x44, + 0x75, 0xe9, 0x8b, 0xa9, 0x6e, 0xb8, 0x4b, 0x79, 0x0e, 0x15, 0xea, 0x52, 0x46, 0xb1, 0x6d, 0x38, + 0x38, 0x68, 0x53, 0xd7, 0x10, 0x9c, 0x2c, 0xd9, 0x74, 0xba, 0x3c, 0x46, 0xca, 0xc1, 0x91, 0xb0, + 0xd7, 0xb9, 0x39, 0xfa, 0x29, 0x54, 0x1d, 0x4c, 0x5d, 0x46, 0x5c, 0xec, 0x9a, 0xe4, 0xbc, 0xeb, + 0x19, 0x9a, 0x98, 0xb5, 0x84, 0x93, 0xa4, 0xfb, 0x51, 0x82, 0x86, 0xeb, 0x23, 0xe8, 0xcc, 0xf5, + 0x13, 0x74, 0xf6, 0x8a, 0x04, 0xbd, 0x05, 0x19, 0x1a, 0x1e, 0x93, 0xc0, 0x27, 0x2c, 0xc2, 0xb6, + 0xe0, 0xfb, 0x65, 0x3d, 0x29, 0xfa, 0x36, 0x51, 0xf8, 0x30, 0xe5, 0x96, 0xae, 0xda, 0x6d, 0xa2, + 0x4b, 0xbb, 0xcd, 0x2b, 0x12, 0xf1, 0x09, 0x94, 0x03, 0x62, 0x45, 0xc3, 0x85, 0xb0, 0x3a, 0x3d, + 0xf0, 0x92, 0xb4, 0x4f, 0xd6, 0xc0, 0x58, 0x76, 0x5f, 0xfb, 0x9f, 0xb1, 0xfb, 0xfa, 0x1b, 0xb3, + 0x7b, 0xf5, 0x3a, 0xd8, 0xfd, 0xb7, 0x1a, 0x6c, 0x0c, 0xb3, 0xfb, 0xc9, 0xe0, 0x6c, 0x16, 0xdf, + 0x8b, 0x2e, 0xbc, 0x63, 0x8f, 0xeb, 0x03, 0x66, 0xb8, 0x65, 0x0f, 0xf7, 0x01, 0x35, 0x17, 0xb2, + 0x12, 0xc4, 0x47, 0x9e, 0x1d, 0x39, 0xe4, 0xe2, 0xe0, 0x0f, 0x20, 0xdd, 0x15, 0x6a, 0xea, 0xc3, + 0xcc, 0xa4, 0x62, 0x95, 0xbe, 0x74, 0x62, 0x7a, 0x81, 0xa5, 0x36, 0x4b, 0x19, 0xd6, 0x7e, 0xaf, + 0x41, 0x36, 0x39, 0x2c, 0xaa, 0x42, 0xf0, 0x98, 0xf2, 0xac, 0xcd, 0x52, 0x15, 0xdc, 0x50, 0x01, + 0x6f, 0x82, 0x24, 0x35, 0x23, 0x81, 0x70, 0x5a, 0x3f, 0x2c, 0xf6, 0x53, 0xfb, 0x8d, 0x06, 0xdf, + 0xf9, 0x80, 0xb7, 0xf8, 0xbd, 0x66, 0xc4, 0xa2, 0x80, 0xa8, 0x2b, 0x0f, 0xdf, 0x19, 0xce, 0x3e, + 0x97, 0xac, 0xd0, 0x13, 0xc8, 0xf4, 0x07, 0x79, 0xca, 0xcc, 0x5d, 0xf8, 0xfd, 0x6c, 0x42, 0x18, + 0x1d, 0x9c, 0xc1, 0x73, 0xed, 0x97, 0x1a, 0xdc, 0x18, 0xb0, 0xa5, 0xfa, 0x22, 0x13, 0xb9, 0x16, + 0x75, 0xdb, 0x53, 0xa0, 0xf9, 0x31, 0x2c, 0xb5, 0xa4, 0xb2, 0x42, 0x72, 0x67, 0x02, 0x92, 0xf1, + 0x11, 0xf4, 0xbe, 0x75, 0xed, 0x9f, 0x0b, 0xb0, 0x3e, 0x01, 0xed, 0xc5, 0x08, 0x26, 0xdd, 0xa5, + 0xe6, 0x26, 0xdf, 0xa5, 0xee, 0x42, 0x85, 0xfd, 0x1c, 0xfb, 0x46, 0xc8, 0x70, 0x90, 0xbc, 0x4b, + 0xcd, 0x0b, 0x13, 0xc4, 0xc7, 0x4e, 0xf8, 0x50, 0x6c, 0xd1, 0x83, 0x5b, 0xc9, 0x20, 0xb1, 0xb1, + 0x3c, 0x18, 0xcc, 0xc8, 0x89, 0x6c, 0x51, 0x6e, 0xea, 0xb3, 0xce, 0xf6, 0x14, 0x49, 0x51, 0xd5, + 0xf4, 0x5a, 0x02, 0x5d, 0x3f, 0xa8, 0x28, 0x9a, 0x87, 0x03, 0x87, 0x63, 0xcb, 0x71, 0xf1, 0xcd, + 0xcb, 0x11, 0x7d, 0xae, 0xc1, 0xed, 0xf1, 0x73, 0x11, 0x5f, 0x07, 0xe2, 0xa9, 0xa8, 0x58, 0x33, + 0x7c, 0x09, 0xba, 0x35, 0x66, 0x3a, 0xbc, 0x45, 0x8c, 0x67, 0x23, 0x21, 0xfc, 0x42, 0x83, 0xf7, + 0xc7, 0x43, 0x90, 0x47, 0xc6, 0x08, 0x86, 0xa5, 0xe9, 0x31, 0xbc, 0x3b, 0x06, 0x83, 0x68, 0x42, + 0x87, 0x40, 0xd4, 0xfe, 0x32, 0x07, 0xe5, 0xa1, 0xa4, 0xbc, 0x3c, 0xd9, 0x3e, 0x81, 0xf5, 0x8e, + 0x17, 0x05, 0x76, 0xcf, 0x50, 0x79, 0x2b, 0x9a, 0x18, 0x71, 0xbe, 0xcc, 0xc0, 0x06, 0x15, 0xe9, + 0xa3, 0x5f, 0x03, 0x98, 0x11, 0x7e, 0xb6, 0x3c, 0x07, 0x25, 0x37, 0x78, 0x63, 0x17, 0x90, 0x90, + 0xc9, 0x0e, 0x69, 0x7e, 0x86, 0x7e, 0x53, 0x3a, 0x38, 0x54, 0xf6, 0xa2, 0x41, 0xfa, 0x3e, 0xac, + 0xb9, 0xe4, 0x05, 0x1b, 0x00, 0x8e, 0xd3, 0x7d, 0x41, 0xa4, 0x7b, 0x85, 0x8f, 0x2a, 0x28, 0x71, + 0xc2, 0xbf, 0x07, 0xc5, 0xbe, 0x81, 0x40, 0xd3, 0xc5, 0xb6, 0xc8, 0xba, 0x79, 0xbd, 0xa0, 0xe4, + 0x87, 0x4a, 0x5c, 0x7b, 0xad, 0xc1, 0xda, 0xf8, 0xea, 0x46, 0x3a, 0xa0, 0xc4, 0x5e, 0xf6, 0x89, + 0x62, 0x06, 0xfe, 0x2d, 0xc5, 0xe6, 0x7d, 0x9f, 0x8f, 0xa1, 0x38, 0x92, 0x1f, 0xb3, 0x1c, 0x4f, + 0xe6, 0x50, 0x32, 0x6e, 0x43, 0xde, 0xc6, 0xe1, 0x28, 0x0d, 0xe4, 0xb8, 0x74, 0xb0, 0x20, 0xbb, + 0xa4, 0x7f, 0x8a, 0xc9, 0x06, 0x11, 0x15, 0x20, 0xf3, 0xdc, 0x0d, 0x7d, 0x62, 0xd2, 0x16, 0x25, + 0x56, 0x31, 0x85, 0x00, 0xd2, 0x0f, 0x04, 0xed, 0x15, 0x35, 0xfe, 0x2c, 0x8f, 0xe5, 0xe2, 0x1c, + 0xca, 0x03, 0x1c, 0x10, 0xc7, 0xb3, 0x69, 0xd8, 0x21, 0x56, 0x71, 0x1e, 0x65, 0x60, 0x49, 0xf0, + 0x1c, 0xb1, 0x8a, 0x0b, 0xdc, 0x4b, 0xe2, 0x54, 0x2f, 0x2e, 0xee, 0xbe, 0x07, 0xa5, 0x91, 0x3f, + 0x69, 0x50, 0x05, 0x8a, 0x4f, 0x07, 0x97, 0x16, 0xa5, 0x9a, 0xda, 0x3f, 0xfb, 0xf2, 0xd5, 0x86, + 0xf6, 0xd5, 0xab, 0x0d, 0xed, 0x1f, 0xaf, 0x36, 0xb4, 0xdf, 0xbd, 0xde, 0x48, 0x7d, 0xf5, 0x7a, + 0x23, 0xf5, 0xd7, 0xd7, 0x1b, 0xa9, 0x4f, 0x9e, 0xb6, 0x29, 0xeb, 0x44, 0xa7, 0x75, 0xd3, 0x73, + 0x1a, 0x87, 0x7d, 0x36, 0xfe, 0x10, 0x9f, 0x86, 0x8d, 0x01, 0x37, 0xdf, 0x31, 0xbd, 0x80, 0x24, + 0x5f, 0x3b, 0x98, 0xba, 0x0d, 0xc7, 0xb3, 0x22, 0x9b, 0x84, 0xf1, 0x7f, 0x5c, 0xfc, 0xba, 0x16, + 0x36, 0xba, 0x7b, 0xa7, 0x69, 0xd1, 0xe1, 0x7c, 0xef, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xcc, + 0x23, 0x47, 0x15, 0x09, 0x1b, 0x00, 0x00, +} + +func (m *ForcePausedInfo) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ForcePausedInfo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ForcePausedInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.MarkPriceAtPausing != nil { + { + size := m.MarkPriceAtPausing.Size() + i -= size + if _, err := m.MarkPriceAtPausing.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintMarket(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Reason != 0 { + i = encodeVarintMarket(dAtA, i, uint64(m.Reason)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil } func (m *OpenNotionalCap) Marshal() (dAtA []byte, err error) { @@ -1319,6 +1481,18 @@ func (m *SpotMarket) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.HasDisabledMinimalProtocolFee { + i-- + if m.HasDisabledMinimalProtocolFee { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x80 + } if m.QuoteDecimals != 0 { i = encodeVarintMarket(dAtA, i, uint64(m.QuoteDecimals)) i-- @@ -1457,6 +1631,32 @@ func (m *BinaryOptionsMarket) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.ForcePausedInfo != nil { + { + size, err := m.ForcePausedInfo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintMarket(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xba + } + if m.HasDisabledMinimalProtocolFee { + i-- + if m.HasDisabledMinimalProtocolFee { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb0 + } { size, err := m.OpenNotionalCap.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -1651,6 +1851,32 @@ func (m *DerivativeMarket) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.ForcePausedInfo != nil { + { + size, err := m.ForcePausedInfo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintMarket(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc2 + } + if m.HasDisabledMinimalProtocolFee { + i-- + if m.HasDisabledMinimalProtocolFee { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb8 + } { size, err := m.OpenNotionalCap.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -2072,6 +2298,26 @@ func (m *ExpiryFuturesMarketInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l + { + size := m.ExpirationTwapStartQuoteCumulativePrice.Size() + i -= size + if _, err := m.ExpirationTwapStartQuoteCumulativePrice.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintMarket(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + { + size := m.ExpirationTwapStartBaseCumulativePrice.Size() + i -= size + if _, err := m.ExpirationTwapStartBaseCumulativePrice.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintMarket(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 { size := m.SettlementPrice.Size() i -= size @@ -2231,6 +2477,22 @@ func encodeVarintMarket(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } +func (m *ForcePausedInfo) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Reason != 0 { + n += 1 + sovMarket(uint64(m.Reason)) + } + if m.MarkPriceAtPausing != nil { + l = m.MarkPriceAtPausing.Size() + n += 1 + l + sovMarket(uint64(l)) + } + return n +} + func (m *OpenNotionalCap) Size() (n int) { if m == nil { return 0 @@ -2352,6 +2614,9 @@ func (m *SpotMarket) Size() (n int) { if m.QuoteDecimals != 0 { n += 1 + sovMarket(uint64(m.QuoteDecimals)) } + if m.HasDisabledMinimalProtocolFee { + n += 3 + } return n } @@ -2424,6 +2689,13 @@ func (m *BinaryOptionsMarket) Size() (n int) { } l = m.OpenNotionalCap.Size() n += 2 + l + sovMarket(uint64(l)) + if m.HasDisabledMinimalProtocolFee { + n += 3 + } + if m.ForcePausedInfo != nil { + l = m.ForcePausedInfo.Size() + n += 2 + l + sovMarket(uint64(l)) + } return n } @@ -2495,6 +2767,13 @@ func (m *DerivativeMarket) Size() (n int) { n += 2 + l + sovMarket(uint64(l)) l = m.OpenNotionalCap.Size() n += 2 + l + sovMarket(uint64(l)) + if m.HasDisabledMinimalProtocolFee { + n += 3 + } + if m.ForcePausedInfo != nil { + l = m.ForcePausedInfo.Size() + n += 2 + l + sovMarket(uint64(l)) + } return n } @@ -2595,6 +2874,10 @@ func (m *ExpiryFuturesMarketInfo) Size() (n int) { n += 1 + l + sovMarket(uint64(l)) l = m.SettlementPrice.Size() n += 1 + l + sovMarket(uint64(l)) + l = m.ExpirationTwapStartBaseCumulativePrice.Size() + n += 1 + l + sovMarket(uint64(l)) + l = m.ExpirationTwapStartQuoteCumulativePrice.Size() + n += 1 + l + sovMarket(uint64(l)) return n } @@ -2643,6 +2926,111 @@ func sovMarket(x uint64) (n int) { func sozMarket(x uint64) (n int) { return sovMarket(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (m *ForcePausedInfo) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMarket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ForcePausedInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ForcePausedInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + m.Reason = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMarket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Reason |= ForcePausedReason(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MarkPriceAtPausing", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMarket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMarket + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMarket + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var v cosmossdk_io_math.LegacyDec + m.MarkPriceAtPausing = &v + if err := m.MarkPriceAtPausing.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipMarket(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthMarket + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *OpenNotionalCap) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3482,6 +3870,26 @@ func (m *SpotMarket) Unmarshal(dAtA []byte) error { break } } + case 16: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HasDisabledMinimalProtocolFee", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMarket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.HasDisabledMinimalProtocolFee = bool(v != 0) default: iNdEx = preIndex skippy, err := skipMarket(dAtA[iNdEx:]) @@ -4130,6 +4538,62 @@ func (m *BinaryOptionsMarket) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 22: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HasDisabledMinimalProtocolFee", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMarket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.HasDisabledMinimalProtocolFee = bool(v != 0) + case 23: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ForcePausedInfo", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMarket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthMarket + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthMarket + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ForcePausedInfo == nil { + m.ForcePausedInfo = &ForcePausedInfo{} + } + if err := m.ForcePausedInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipMarket(dAtA[iNdEx:]) @@ -4826,6 +5290,62 @@ func (m *DerivativeMarket) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 23: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HasDisabledMinimalProtocolFee", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMarket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.HasDisabledMinimalProtocolFee = bool(v != 0) + case 24: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ForcePausedInfo", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMarket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthMarket + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthMarket + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ForcePausedInfo == nil { + m.ForcePausedInfo = &ForcePausedInfo{} + } + if err := m.ForcePausedInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipMarket(dAtA[iNdEx:]) @@ -5599,6 +6119,74 @@ func (m *ExpiryFuturesMarketInfo) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpirationTwapStartBaseCumulativePrice", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMarket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMarket + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMarket + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ExpirationTwapStartBaseCumulativePrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExpirationTwapStartQuoteCumulativePrice", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMarket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMarket + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMarket + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ExpirationTwapStartQuoteCumulativePrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipMarket(dAtA[iNdEx:]) diff --git a/chain/exchange/types/v2/msgs.go b/chain/exchange/types/v2/msgs.go index 2166894e..8ebac86b 100644 --- a/chain/exchange/types/v2/msgs.go +++ b/chain/exchange/types/v2/msgs.go @@ -68,6 +68,8 @@ var ( _ sdk.Msg = &MsgTradingRewardPendingPointsUpdate{} _ sdk.Msg = &MsgFeeDiscount{} _ sdk.Msg = &MsgAtomicMarketOrderFeeMultiplierSchedule{} + _ sdk.Msg = &MsgCancelPostOnlyMode{} + _ sdk.Msg = &MsgActivatePostOnlyMode{} ) // exchange message types @@ -124,6 +126,8 @@ const ( TypeMsgTradingRewardPendingPointsUpdate = "tradingRewardPendingPointsUpdate" TypeMsgFeeDiscount = "feeDiscount" TypeMsgAtomicMarketOrderFeeMultiplierSchedule = "atomicMarketOrderFeeMultiplierSchedule" + TypeMsgCancelPostOnlyMode = "cancelPostOnlyMode" + TypeMsgActivatePostOnlyMode = "activatePostOnlyMode" ) func (MsgUpdateParams) Route() string { return RouterKey } @@ -969,15 +973,7 @@ func (msg MsgCreateSpotMarketOrder) ValidateBasic() error { return errors.Wrap(sdkerrors.ErrInvalidAddress, msg.Sender) } - if msg.Order.OrderType == OrderType_BUY_PO || msg.Order.OrderType == OrderType_SELL_PO { - return errors.Wrap(types.ErrInvalidOrderTypeForMessage, "Spot market order can't be a post only order") - } - - if err := msg.Order.ValidateBasic(senderAddr); err != nil { - return err - } - - return nil + return ValidateSpotMarketOrder(&msg.Order, senderAddr) } // GetSignBytes implements the sdk.Msg interface. It encodes the message for signing @@ -1227,14 +1223,7 @@ func (msg MsgCreateDerivativeMarketOrder) ValidateBasic() error { return errors.Wrap(sdkerrors.ErrInvalidAddress, msg.Sender) } - if msg.Order.OrderType == OrderType_BUY_PO || msg.Order.OrderType == OrderType_SELL_PO { - return errors.Wrap(types.ErrInvalidOrderTypeForMessage, "Derivative market order can't be a post only order") - } - - if err := msg.Order.ValidateBasic(senderAddr, false); err != nil { - return err - } - return nil + return ValidateDerivativeMarketOrder(&msg.Order, senderAddr) } // GetSignBytes encodes the message for signing @@ -1300,17 +1289,7 @@ func (msg MsgCreateBinaryOptionsMarketOrder) ValidateBasic() error { return errors.Wrap(sdkerrors.ErrInvalidAddress, msg.Sender) } - if msg.Order.OrderType == OrderType_BUY_PO || msg.Order.OrderType == OrderType_SELL_PO { - return errors.Wrap(types.ErrInvalidOrderTypeForMessage, "market order can't be a post only order") - } - if msg.Order.OrderType.IsConditional() { - return errors.Wrap(types.ErrUnrecognizedOrderType, string(msg.Order.OrderType)) - } - - if err := msg.Order.ValidateBasic(senderAddr, true); err != nil { - return err - } - return nil + return ValidateBinaryOptionsMarketOrder(&msg.Order, senderAddr) } // GetSignBytes encodes the message for signing @@ -2132,6 +2111,24 @@ func (msg MsgBatchUpdateOrders) ValidateBasic() error { } } + for idx := range msg.SpotMarketOrdersToCreate { + if err := ValidateSpotMarketOrder(msg.SpotMarketOrdersToCreate[idx], sender); err != nil { + return err + } + } + + for idx := range msg.DerivativeMarketOrdersToCreate { + if err := ValidateDerivativeMarketOrder(msg.DerivativeMarketOrdersToCreate[idx], sender); err != nil { + return err + } + } + + for idx := range msg.BinaryOptionsMarketOrdersToCreate { + if err := ValidateBinaryOptionsMarketOrder(msg.BinaryOptionsMarketOrdersToCreate[idx], sender); err != nil { + return err + } + } + // Check for duplicate derivative market orders (same market and subaccount) if err := ensureNoDuplicateMarketOrders(sender, msg.DerivativeMarketOrdersToCreate); err != nil { return err @@ -2231,6 +2228,8 @@ func (msg *MsgAuthorizeStakeGrants) ValidateBasic() error { return errors.Wrap(sdkerrors.ErrInvalidAddress, msg.Sender) } + seenGrantees := make(map[string]struct{}) + for idx := range msg.Grants { grant := msg.Grants[idx] @@ -2238,6 +2237,11 @@ func (msg *MsgAuthorizeStakeGrants) ValidateBasic() error { return errors.Wrap(sdkerrors.ErrInvalidAddress, grant.Grantee) } + if _, ok := seenGrantees[grant.Grantee]; ok { + return errors.Wrapf(types.ErrInvalidStakeGrant, "duplicate grantee %s in MsgAuthorizeStakeGrants", grant.Grantee) + } + seenGrantees[grant.Grantee] = struct{}{} + if grant.Amount.IsNegative() || grant.Amount.GT(types.MaxTokenInt) { return errors.Wrap(types.ErrInvalidStakeGrant, grant.Amount.String()) @@ -2723,3 +2727,82 @@ func ensureNoDuplicateMarketOrders(sender sdk.AccAddress, orders []*DerivativeOr } return nil } + +func ValidateSpotMarketOrder(order *SpotOrder, senderAddr sdk.AccAddress) error { + if order.OrderType == OrderType_BUY_PO || order.OrderType == OrderType_SELL_PO { + return errors.Wrap(types.ErrInvalidOrderTypeForMessage, "Spot market order can't be a post only order") + } + + return order.ValidateBasic(senderAddr) +} + +func ValidateDerivativeMarketOrder(order *DerivativeOrder, senderAddr sdk.AccAddress) error { + if order.OrderType == OrderType_BUY_PO || order.OrderType == OrderType_SELL_PO { + return errors.Wrap(types.ErrInvalidOrderTypeForMessage, "Derivative market order can't be a post only order") + } + + return order.ValidateBasic(senderAddr, false) +} + +func ValidateBinaryOptionsMarketOrder(order *DerivativeOrder, senderAddr sdk.AccAddress) error { + if order.OrderType == OrderType_BUY_PO || order.OrderType == OrderType_SELL_PO { + return errors.Wrap(types.ErrInvalidOrderTypeForMessage, "market order can't be a post only order") + } + if order.OrderType.IsConditional() { + return errors.Wrap(types.ErrUnrecognizedOrderType, string(order.OrderType)) + } + + return order.ValidateBasic(senderAddr, true) +} + +func (*MsgCancelPostOnlyMode) Route() string { return RouterKey } + +func (*MsgCancelPostOnlyMode) Type() string { return TypeMsgCancelPostOnlyMode } + +func (msg *MsgCancelPostOnlyMode) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { + return errors.Wrap(err, "invalid sender address") + } + + return nil +} + +func (msg *MsgCancelPostOnlyMode) GetSignBytes() []byte { + return sdk.MustSortJSON(types.ModuleCdc.MustMarshalJSON(msg)) +} + +func (msg *MsgCancelPostOnlyMode) GetSigners() []sdk.AccAddress { + sender, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + panic(err) + } + return []sdk.AccAddress{sender} +} + +func (*MsgActivatePostOnlyMode) Route() string { return RouterKey } + +func (*MsgActivatePostOnlyMode) Type() string { return TypeMsgActivatePostOnlyMode } + +func (msg *MsgActivatePostOnlyMode) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { + return errors.Wrap(err, "invalid sender address") + } + + if msg.BlocksAmount == 0 { + return errors.Wrap(types.ErrInvalidArgument, "blocks_amount must be greater than 0") + } + + return nil +} + +func (msg *MsgActivatePostOnlyMode) GetSignBytes() []byte { + return sdk.MustSortJSON(types.ModuleCdc.MustMarshalJSON(msg)) +} + +func (msg *MsgActivatePostOnlyMode) GetSigners() []sdk.AccAddress { + sender, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + panic(err) + } + return []sdk.AccAddress{sender} +} diff --git a/chain/exchange/types/v2/params.go b/chain/exchange/types/v2/params.go index bfc39752..785e04d4 100644 --- a/chain/exchange/types/v2/params.go +++ b/chain/exchange/types/v2/params.go @@ -7,6 +7,7 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + ethcommon "github.com/ethereum/go-ethereum/common" downtimetypes "github.com/InjectiveLabs/sdk-go/chain/downtime-detector/types" "github.com/InjectiveLabs/sdk-go/chain/exchange/types" @@ -268,6 +269,10 @@ func (p Params) Validate() error { return fmt.Errorf("post_only_mode_blocks_amount_after_downtime is incorrect: %w", err) } + if err := ValidateEnforcedRestrictionsContracts(p.EnforcedRestrictionsContracts); err != nil { + return fmt.Errorf("enforced_restrictions_contracts are invalid: %w", err) + } + return nil } @@ -351,3 +356,24 @@ func ValidateOpenNotionalCap(i any) error { return nil } + +func ValidateEVMAddresses(addresses []string) error { + for _, addr := range addresses { + if !ethcommon.IsHexAddress(addr) { + return fmt.Errorf("address is not in EVM format: %s", addr) + } + } + + return nil +} + +func ValidateEnforcedRestrictionsContracts(contracts []EnforcedRestrictionsContract) error { + for _, contract := range contracts { + if !ethcommon.IsHexAddress(contract.ContractAddress) { + return fmt.Errorf("contract address is not in EVM format: %s", contract.ContractAddress) + } + // pause_event_signature can be empty (will default to "Pause()") + } + + return nil +} diff --git a/chain/exchange/types/v2/proposal.go b/chain/exchange/types/v2/proposal.go index cfe67009..336f1215 100644 --- a/chain/exchange/types/v2/proposal.go +++ b/chain/exchange/types/v2/proposal.go @@ -220,6 +220,7 @@ func NewSpotMarketParamUpdateProposal( status MarketStatus, ticker string, baseDecimals, quoteDecimals uint32, + hasDisabledMinimalProtocolFee DisableMinimalProtocolFeeUpdate, ) *SpotMarketParamUpdateProposal { return &SpotMarketParamUpdateProposal{ title, @@ -236,6 +237,7 @@ func NewSpotMarketParamUpdateProposal( nil, baseDecimals, quoteDecimals, + hasDisabledMinimalProtocolFee, } } @@ -272,6 +274,7 @@ func (p *SpotMarketParamUpdateProposal) ValidateBasic() error { p.MinQuantityTickSize == nil && p.MinNotional == nil && p.AdminInfo == nil && + p.HasDisabledMinimalProtocolFee == DisableMinimalProtocolFeeUpdate_NoUpdate && p.Status == MarketStatus_Unspecified { return errors.Wrap(gov.ErrInvalidProposalContent, "At least one field should not be nil") } @@ -309,13 +312,8 @@ func (p *SpotMarketParamUpdateProposal) ValidateBasic() error { } if p.AdminInfo != nil { - if p.AdminInfo.Admin != "" { - if _, err := sdk.AccAddressFromBech32(p.AdminInfo.Admin); err != nil { - return errors.Wrap(types.ErrInvalidAddress, err.Error()) - } - } - if p.AdminInfo.AdminPermissions > types.MaxPerm { - return types.ErrInvalidPermissions + if err := p.AdminInfo.ValidateBasic(); err != nil { + return err } } @@ -451,6 +449,12 @@ func (p *SpotMarketLaunchProposal) ValidateBasic() error { return errors.Wrap(types.ErrInvalidDenomDecimal, "quote decimals is invalid") } + if p.AdminInfo != nil { + if err := p.AdminInfo.ValidateBasic(); err != nil { + return err + } + } + return govtypes.ValidateAbstract(p) } @@ -538,6 +542,7 @@ func (p *DerivativeMarketParamUpdateProposal) ValidateBasic() error { p.OpenNotionalCap == nil && p.Status == MarketStatus_Unspecified && p.AdminInfo == nil && + p.HasDisabledMinimalProtocolFee == DisableMinimalProtocolFeeUpdate_NoUpdate && p.OracleParams == nil { return errors.Wrap(gov.ErrInvalidProposalContent, "At least one field should not be nil") } @@ -604,13 +609,8 @@ func (p *DerivativeMarketParamUpdateProposal) ValidateBasic() error { } if p.AdminInfo != nil { - if p.AdminInfo.Admin != "" { - if _, err := sdk.AccAddressFromBech32(p.AdminInfo.Admin); err != nil { - return errors.Wrap(types.ErrInvalidAddress, err.Error()) - } - } - if p.AdminInfo.AdminPermissions > types.MaxPerm { - return types.ErrInvalidPermissions + if err := p.AdminInfo.ValidateBasic(); err != nil { + return err } } @@ -765,10 +765,10 @@ func (p *OracleParams) ValidateBasic() error { return types.ErrSameOracles } switch p.OracleType { - case oracletypes.OracleType_Band, oracletypes.OracleType_PriceFeed, oracletypes.OracleType_Coinbase, + case oracletypes.OracleType_PriceFeed, oracletypes.OracleType_Coinbase, oracletypes.OracleType_Chainlink, oracletypes.OracleType_Razor, oracletypes.OracleType_Dia, oracletypes.OracleType_API3, oracletypes.OracleType_Uma, oracletypes.OracleType_Pyth, - oracletypes.OracleType_BandIBC, oracletypes.OracleType_Provider, oracletypes.OracleType_Stork: + oracletypes.OracleType_Provider, oracletypes.OracleType_Stork, oracletypes.OracleType_ChainlinkDataStreams: default: return errors.Wrap(types.ErrInvalidOracleType, p.OracleType.String()) @@ -914,6 +914,11 @@ func (p *PerpetualMarketLaunchProposal) ValidateBasic() error { if err := ValidateOpenNotionalCap(p.OpenNotionalCap); err != nil { return errors.Wrap(types.ErrInvalidOpenNotionalCap, err.Error()) } + if p.AdminInfo != nil { + if err := p.AdminInfo.ValidateBasic(); err != nil { + return err + } + } return govtypes.ValidateAbstract(p) } @@ -1022,6 +1027,11 @@ func (p *ExpiryFuturesMarketLaunchProposal) ValidateBasic() error { if err := ValidateOpenNotionalCap(p.OpenNotionalCap); err != nil { return errors.Wrap(types.ErrInvalidOpenNotionalCap, err.Error()) } + if p.AdminInfo != nil { + if err := p.AdminInfo.ValidateBasic(); err != nil { + return err + } + } return govtypes.ValidateAbstract(p) } @@ -1672,24 +1682,26 @@ func NewBinaryOptionsMarketParamUpdateProposal( status MarketStatus, oracleParams *ProviderOracleParams, ticker string, + hasDisabledMinimalProtocolFee DisableMinimalProtocolFeeUpdate, ) *BinaryOptionsMarketParamUpdateProposal { return &BinaryOptionsMarketParamUpdateProposal{ - Title: title, - Description: description, - MarketId: marketID, - MakerFeeRate: makerFeeRate, - TakerFeeRate: takerFeeRate, - RelayerFeeShareRate: relayerFeeShareRate, - MinPriceTickSize: minPriceTickSize, - MinQuantityTickSize: minQuantityTickSize, - MinNotional: minNotional, - OpenNotionalCap: openNotionalCap, - ExpirationTimestamp: expirationTimestamp, - SettlementTimestamp: settlementTimestamp, - Admin: admin, - Status: status, - OracleParams: oracleParams, - Ticker: ticker, + Title: title, + Description: description, + MarketId: marketID, + MakerFeeRate: makerFeeRate, + TakerFeeRate: takerFeeRate, + RelayerFeeShareRate: relayerFeeShareRate, + MinPriceTickSize: minPriceTickSize, + MinQuantityTickSize: minQuantityTickSize, + MinNotional: minNotional, + OpenNotionalCap: openNotionalCap, + ExpirationTimestamp: expirationTimestamp, + SettlementTimestamp: settlementTimestamp, + Admin: admin, + Status: status, + OracleParams: oracleParams, + Ticker: ticker, + HasDisabledMinimalProtocolFee: hasDisabledMinimalProtocolFee, } } @@ -1731,6 +1743,7 @@ func (p *BinaryOptionsMarketParamUpdateProposal) ValidateBasic() error { p.SettlementTimestamp == 0 && p.SettlementPrice == nil && p.Admin == "" && + p.HasDisabledMinimalProtocolFee == DisableMinimalProtocolFeeUpdate_NoUpdate && p.OracleParams == nil { return errors.Wrap(gov.ErrInvalidProposalContent, "At least one field should not be nil") } @@ -1876,3 +1889,15 @@ func (p *AtomicMarketOrderFeeMultiplierScheduleProposal) ValidateBasic() error { } return govtypes.ValidateAbstract(p) } + +func (a *AdminInfo) ValidateBasic() error { + if a.Admin != "" { + if _, err := sdk.AccAddressFromBech32(a.Admin); err != nil { + return errors.Wrap(types.ErrInvalidAddress, err.Error()) + } + } + if a.AdminPermissions > types.MaxPerm { + return types.ErrInvalidPermissions + } + return nil +} diff --git a/chain/exchange/types/v2/proposal.pb.go b/chain/exchange/types/v2/proposal.pb.go index 01d8b244..07f503af 100644 --- a/chain/exchange/types/v2/proposal.pb.go +++ b/chain/exchange/types/v2/proposal.pb.go @@ -30,6 +30,34 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +type DisableMinimalProtocolFeeUpdate int32 + +const ( + DisableMinimalProtocolFeeUpdate_NoUpdate DisableMinimalProtocolFeeUpdate = 0 + DisableMinimalProtocolFeeUpdate_False DisableMinimalProtocolFeeUpdate = 1 + DisableMinimalProtocolFeeUpdate_True DisableMinimalProtocolFeeUpdate = 2 +) + +var DisableMinimalProtocolFeeUpdate_name = map[int32]string{ + 0: "NoUpdate", + 1: "False", + 2: "True", +} + +var DisableMinimalProtocolFeeUpdate_value = map[string]int32{ + "NoUpdate": 0, + "False": 1, + "True": 2, +} + +func (x DisableMinimalProtocolFeeUpdate) String() string { + return proto.EnumName(DisableMinimalProtocolFeeUpdate_name, int32(x)) +} + +func (DisableMinimalProtocolFeeUpdate) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_0fb550654abc72c5, []int{0} +} + type ExchangeType int32 const ( @@ -55,7 +83,7 @@ func (x ExchangeType) String() string { } func (ExchangeType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_0fb550654abc72c5, []int{0} + return fileDescriptor_0fb550654abc72c5, []int{1} } type SpotMarketParamUpdateProposal struct { @@ -85,6 +113,9 @@ type SpotMarketParamUpdateProposal struct { BaseDecimals uint32 `protobuf:"varint,13,opt,name=base_decimals,json=baseDecimals,proto3" json:"base_decimals,omitempty"` // quote token decimals QuoteDecimals uint32 `protobuf:"varint,14,opt,name=quote_decimals,json=quoteDecimals,proto3" json:"quote_decimals,omitempty"` + // has_disabled_minimal_protocol_fee defines whether the minimal protocol fee + // is disabled for the market + HasDisabledMinimalProtocolFee DisableMinimalProtocolFeeUpdate `protobuf:"varint,15,opt,name=has_disabled_minimal_protocol_fee,json=hasDisabledMinimalProtocolFee,proto3,enum=injective.exchange.v2.DisableMinimalProtocolFeeUpdate" json:"has_disabled_minimal_protocol_fee,omitempty"` } func (m *SpotMarketParamUpdateProposal) Reset() { *m = SpotMarketParamUpdateProposal{} } @@ -542,6 +573,9 @@ type DerivativeMarketParamUpdateProposal struct { ReduceMarginRatio *cosmossdk_io_math.LegacyDec `protobuf:"bytes,18,opt,name=reduce_margin_ratio,json=reduceMarginRatio,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"reduce_margin_ratio,omitempty"` // open_notional_cap defines the maximum open notional for the market OpenNotionalCap *OpenNotionalCap `protobuf:"bytes,19,opt,name=open_notional_cap,json=openNotionalCap,proto3" json:"open_notional_cap,omitempty"` + // has_disabled_minimal_protocol_fee defines whether the minimal protocol fee + // is disabled for the market + HasDisabledMinimalProtocolFee DisableMinimalProtocolFeeUpdate `protobuf:"varint,20,opt,name=has_disabled_minimal_protocol_fee,json=hasDisabledMinimalProtocolFee,proto3,enum=injective.exchange.v2.DisableMinimalProtocolFeeUpdate" json:"has_disabled_minimal_protocol_fee,omitempty"` } func (m *DerivativeMarketParamUpdateProposal) Reset() { *m = DerivativeMarketParamUpdateProposal{} } @@ -747,6 +781,9 @@ type BinaryOptionsMarketParamUpdateProposal struct { MinNotional *cosmossdk_io_math.LegacyDec `protobuf:"bytes,16,opt,name=min_notional,json=minNotional,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"min_notional,omitempty"` // open_notional_cap defines the maximum open notional for the market OpenNotionalCap *OpenNotionalCap `protobuf:"bytes,17,opt,name=open_notional_cap,json=openNotionalCap,proto3" json:"open_notional_cap,omitempty"` + // has_disabled_minimal_protocol_fee defines whether the minimal protocol fee + // is disabled for the market + HasDisabledMinimalProtocolFee DisableMinimalProtocolFeeUpdate `protobuf:"varint,18,opt,name=has_disabled_minimal_protocol_fee,json=hasDisabledMinimalProtocolFee,proto3,enum=injective.exchange.v2.DisableMinimalProtocolFeeUpdate" json:"has_disabled_minimal_protocol_fee,omitempty"` } func (m *BinaryOptionsMarketParamUpdateProposal) Reset() { @@ -1260,6 +1297,7 @@ func (m *DenomMinNotionalProposal) XXX_DiscardUnknown() { var xxx_messageInfo_DenomMinNotionalProposal proto.InternalMessageInfo func init() { + proto.RegisterEnum("injective.exchange.v2.DisableMinimalProtocolFeeUpdate", DisableMinimalProtocolFeeUpdate_name, DisableMinimalProtocolFeeUpdate_value) proto.RegisterEnum("injective.exchange.v2.ExchangeType", ExchangeType_name, ExchangeType_value) proto.RegisterType((*SpotMarketParamUpdateProposal)(nil), "injective.exchange.v2.SpotMarketParamUpdateProposal") proto.RegisterType((*ExchangeEnableProposal)(nil), "injective.exchange.v2.ExchangeEnableProposal") @@ -1290,174 +1328,180 @@ func init() { } var fileDescriptor_0fb550654abc72c5 = []byte{ - // 2661 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcd, 0x6f, 0x1c, 0x49, - 0xd9, 0x77, 0xdb, 0x8e, 0xe3, 0xa9, 0xf9, 0xb0, 0xdd, 0xf6, 0xfa, 0x9d, 0x75, 0x12, 0x7f, 0x8c, - 0xf3, 0xe1, 0x37, 0xbb, 0x3b, 0x43, 0xcc, 0xa2, 0x5d, 0x79, 0x85, 0x90, 0x3f, 0x13, 0x8b, 0x7c, - 0x38, 0x3d, 0xce, 0x26, 0x8a, 0x58, 0x9a, 0x72, 0x77, 0xd9, 0x2e, 0x3c, 0xdd, 0xd5, 0xdb, 0x55, - 0xe3, 0xc4, 0x7b, 0x61, 0x85, 0x84, 0x84, 0x22, 0x24, 0x96, 0x95, 0x10, 0xe2, 0x10, 0x69, 0xf9, - 0x07, 0x10, 0x42, 0xdc, 0x57, 0x9c, 0x58, 0x38, 0x45, 0x9c, 0x10, 0x87, 0x08, 0x25, 0x07, 0x38, - 0x80, 0xc4, 0x95, 0x1b, 0xea, 0xaa, 0xea, 0x9e, 0x9e, 0x99, 0xee, 0x99, 0x9e, 0xf1, 0x8c, 0x72, - 0x20, 0x97, 0xc4, 0xfd, 0xd4, 0xf3, 0x3c, 0xf5, 0xd4, 0x53, 0x55, 0xbf, 0xfa, 0xd5, 0xc7, 0x80, - 0x8b, 0xd8, 0xfe, 0x3e, 0x32, 0x18, 0x3e, 0x46, 0x25, 0xf4, 0xd8, 0x38, 0x84, 0xf6, 0x01, 0x2a, - 0x1d, 0x2f, 0x97, 0x1c, 0x97, 0x38, 0x84, 0xc2, 0x4a, 0xd1, 0x71, 0x09, 0x23, 0xea, 0x1b, 0x81, - 0x56, 0xd1, 0xd7, 0x2a, 0x1e, 0x2f, 0xcf, 0xbc, 0x69, 0x10, 0x6a, 0x11, 0xaa, 0x73, 0xa5, 0x92, - 0xf8, 0x10, 0x16, 0x33, 0x53, 0x07, 0xe4, 0x80, 0x08, 0xb9, 0xf7, 0x97, 0x94, 0x4e, 0x40, 0x0b, - 0xdb, 0xa4, 0xc4, 0xff, 0x95, 0xa2, 0x59, 0x61, 0x56, 0xda, 0x83, 0x14, 0x95, 0x8e, 0xaf, 0xed, - 0x21, 0x06, 0xaf, 0x95, 0x0c, 0x82, 0x6d, 0x59, 0xfe, 0x7f, 0xb2, 0xdc, 0xa2, 0x07, 0xa5, 0xe3, - 0x6b, 0xde, 0x7f, 0xb2, 0xa0, 0x28, 0x0b, 0x4c, 0x4c, 0x99, 0x8b, 0xf7, 0xaa, 0x0c, 0x13, 0x3b, - 0x70, 0x10, 0x16, 0x4a, 0xfd, 0x98, 0x96, 0x06, 0xed, 0x11, 0x5a, 0x85, 0x68, 0x2d, 0x0b, 0xba, - 0x47, 0x88, 0x49, 0x9d, 0x4b, 0x35, 0x1d, 0xe2, 0x42, 0xa3, 0x52, 0x8b, 0x5b, 0x7c, 0x0a, 0xb5, - 0xc2, 0xcf, 0xcf, 0x82, 0x0b, 0x65, 0x87, 0xb0, 0x5b, 0xdc, 0x76, 0x07, 0xba, 0xd0, 0xba, 0xe7, - 0x98, 0x90, 0xa1, 0x1d, 0x99, 0x5c, 0x75, 0x0a, 0x9c, 0x61, 0x98, 0x55, 0x50, 0x5e, 0x99, 0x57, - 0x96, 0x52, 0x9a, 0xf8, 0x50, 0xe7, 0x41, 0xda, 0x44, 0xd4, 0x70, 0xb1, 0xe3, 0x45, 0x9f, 0x1f, - 0xe4, 0x65, 0x61, 0x91, 0x7a, 0x0e, 0xa4, 0x44, 0x40, 0x3a, 0x36, 0xf3, 0x43, 0xbc, 0x7c, 0x54, - 0x08, 0xb6, 0x4d, 0x75, 0x1b, 0xe4, 0x2c, 0x78, 0x84, 0x5c, 0x7d, 0x1f, 0x21, 0xdd, 0x85, 0x0c, - 0xe5, 0x87, 0x3d, 0x8d, 0xb5, 0xc5, 0xaf, 0x9e, 0xcf, 0x29, 0x7f, 0x7d, 0x3e, 0x77, 0x4e, 0xe4, - 0x8d, 0x9a, 0x47, 0x45, 0x4c, 0x4a, 0x16, 0x64, 0x87, 0xc5, 0x9b, 0xe8, 0x00, 0x1a, 0x27, 0x1b, - 0xc8, 0xd0, 0x32, 0xdc, 0x74, 0x0b, 0x21, 0x0d, 0x32, 0xe4, 0xb9, 0x62, 0xf5, 0xae, 0xce, 0x74, - 0xe0, 0x8a, 0x85, 0x5d, 0x3d, 0x00, 0xd3, 0x2e, 0xaa, 0xc0, 0x13, 0xe9, 0x8c, 0x1e, 0x42, 0x57, - 0xba, 0x1c, 0x49, 0xee, 0x72, 0x52, 0xba, 0xd8, 0x42, 0xa8, 0xec, 0x39, 0xe0, 0x9e, 0x35, 0x30, - 0x69, 0x61, 0x5b, 0x77, 0x5c, 0x6c, 0x20, 0x9d, 0x61, 0xe3, 0x48, 0xa7, 0xf8, 0x13, 0x94, 0x3f, - 0x9b, 0xdc, 0xed, 0xb8, 0x85, 0xed, 0x1d, 0xcf, 0x7c, 0x17, 0x1b, 0x47, 0x65, 0xfc, 0x09, 0x8f, - 0xd6, 0xf3, 0xf9, 0x71, 0x15, 0xda, 0x0c, 0xb3, 0x93, 0x90, 0xdb, 0xd1, 0x0e, 0xa2, 0xb5, 0xb0, - 0x7d, 0x57, 0x7a, 0x08, 0x3c, 0x7f, 0x00, 0x46, 0x28, 0x83, 0xac, 0x4a, 0xf3, 0xa9, 0x79, 0x65, - 0x29, 0xb7, 0xbc, 0x58, 0x8c, 0x9c, 0x5a, 0x45, 0x31, 0x68, 0xca, 0x5c, 0x55, 0x93, 0x26, 0xea, - 0x79, 0x30, 0xe2, 0x45, 0x82, 0xdc, 0x3c, 0xe0, 0x61, 0x0c, 0x7b, 0x61, 0x68, 0x52, 0xa6, 0x6e, - 0x81, 0x8c, 0x17, 0xb4, 0x4d, 0xbc, 0x31, 0x02, 0x2b, 0xf9, 0x74, 0xf2, 0x50, 0xd3, 0x16, 0xb6, - 0x6f, 0x4b, 0x3b, 0xf5, 0x5b, 0x00, 0x40, 0xd3, 0xf3, 0x84, 0xed, 0x7d, 0x92, 0xcf, 0xcc, 0x2b, - 0x4b, 0xe9, 0xe5, 0xf9, 0x98, 0x30, 0x57, 0x3d, 0xc5, 0x6d, 0x7b, 0x9f, 0x68, 0x29, 0xe8, 0xff, - 0xa9, 0x2e, 0x82, 0xac, 0x37, 0x9b, 0x75, 0x13, 0x19, 0xd8, 0x82, 0x15, 0x9a, 0xcf, 0xce, 0x2b, - 0x4b, 0x59, 0x2d, 0xe3, 0x09, 0x37, 0xa4, 0x4c, 0xbd, 0x04, 0x72, 0x1f, 0x57, 0x09, 0x0b, 0x69, - 0xe5, 0xb8, 0x56, 0x96, 0x4b, 0x7d, 0xb5, 0x95, 0xbb, 0x3f, 0xfe, 0x62, 0x6e, 0xe0, 0x1f, 0x5f, - 0xcc, 0x0d, 0xfc, 0xe9, 0x77, 0xef, 0xcc, 0x48, 0x84, 0x39, 0x20, 0xc7, 0x45, 0x39, 0xe3, 0x8a, - 0xeb, 0xc4, 0x66, 0xc8, 0x66, 0x4f, 0xfe, 0xfe, 0x9b, 0xab, 0x97, 0x83, 0x09, 0xdb, 0x72, 0xd6, - 0x15, 0xfe, 0xa0, 0x80, 0xe9, 0x4d, 0xa9, 0xba, 0x69, 0xc3, 0xbd, 0xca, 0xe9, 0x27, 0xe4, 0x75, - 0x90, 0xf1, 0x2b, 0xdf, 0x3d, 0x71, 0x10, 0x9f, 0x93, 0xf1, 0x7d, 0xbb, 0x19, 0x52, 0xd5, 0xea, - 0x0c, 0x57, 0xde, 0xf6, 0x9b, 0xeb, 0x35, 0x68, 0x2e, 0x68, 0x50, 0x74, 0xb8, 0x85, 0x5f, 0xe4, - 0xc0, 0xc2, 0x1a, 0x64, 0xc6, 0xa1, 0x5f, 0x7e, 0x8b, 0x98, 0x78, 0x1f, 0x1b, 0xd0, 0x0b, 0xea, - 0xd4, 0x8d, 0xfa, 0x54, 0x01, 0x05, 0xea, 0x10, 0xa6, 0x4b, 0xac, 0x71, 0xbc, 0x5c, 0xea, 0x55, - 0x9e, 0x4c, 0xdd, 0x5f, 0x20, 0x68, 0x7e, 0x68, 0x7e, 0x68, 0x29, 0xbd, 0xfc, 0x6e, 0x4c, 0x5b, - 0x5b, 0x76, 0x85, 0x36, 0x4b, 0x5b, 0x15, 0x53, 0xf5, 0x73, 0x05, 0x2c, 0x99, 0xc8, 0xc5, 0xc7, - 0xd0, 0x73, 0xdc, 0x26, 0x90, 0x61, 0x1e, 0xc8, 0x4a, 0x4c, 0x20, 0x1b, 0x81, 0x9b, 0xf8, 0x70, - 0x2e, 0x9a, 0xed, 0x95, 0xa8, 0xea, 0x80, 0xf3, 0xe1, 0xb4, 0x54, 0x60, 0xd5, 0x36, 0x0e, 0x43, - 0x71, 0x9c, 0xe1, 0x71, 0x94, 0xda, 0x26, 0xe4, 0x26, 0x37, 0x0c, 0x2a, 0x7f, 0x93, 0xc6, 0x94, - 0x50, 0xf5, 0x07, 0x60, 0xc1, 0x41, 0xae, 0x83, 0x58, 0x15, 0x56, 0x62, 0xab, 0x1d, 0x69, 0xd9, - 0x0f, 0x3b, 0xbe, 0x7d, 0x64, 0xdd, 0xb3, 0x4e, 0xab, 0x62, 0xaa, 0xfe, 0x44, 0x01, 0x97, 0xd1, - 0x63, 0x07, 0xbb, 0x27, 0xfa, 0x7e, 0x95, 0x55, 0x5d, 0x44, 0x63, 0xc3, 0x38, 0xcb, 0xc3, 0x78, - 0x3f, 0x76, 0xe8, 0x7b, 0x4e, 0xb6, 0x84, 0x8f, 0xc8, 0x50, 0x0a, 0xa8, 0x9d, 0x0a, 0x55, 0x3f, - 0x53, 0xc0, 0x15, 0xe6, 0x42, 0x13, 0xdb, 0x07, 0xba, 0x8b, 0x1e, 0x41, 0xd7, 0xd4, 0x0d, 0x68, - 0x39, 0x10, 0x1f, 0xd8, 0x8d, 0xc3, 0x82, 0x03, 0x76, 0xfc, 0xa8, 0xd8, 0x15, 0x5e, 0x34, 0xee, - 0x64, 0x5d, 0xfa, 0x68, 0x18, 0x15, 0x8b, 0xac, 0xbd, 0x12, 0xcf, 0xd0, 0x1e, 0xb6, 0xa1, 0x7b, - 0xa2, 0x13, 0x3e, 0x7d, 0xe2, 0x33, 0x94, 0x6a, 0x99, 0xa1, 0x35, 0xee, 0xe4, 0x8e, 0xf0, 0x11, - 0x9d, 0xa1, 0xbd, 0x76, 0x2a, 0x54, 0xfd, 0xa9, 0x02, 0x2e, 0x35, 0x84, 0x13, 0x33, 0x6b, 0x00, - 0x8f, 0xe6, 0x9b, 0xc9, 0xa3, 0x89, 0x9a, 0x38, 0x0b, 0x75, 0x21, 0x45, 0xce, 0x9a, 0x2f, 0x15, - 0xf0, 0x3e, 0xac, 0x1a, 0x9e, 0x82, 0xee, 0xd7, 0xa0, 0x33, 0x17, 0xda, 0x74, 0x1f, 0xb9, 0xba, - 0x89, 0x6c, 0x62, 0x05, 0x4b, 0x41, 0x53, 0x27, 0xa6, 0x79, 0x27, 0x6e, 0xc7, 0x04, 0x29, 0xaa, - 0x5a, 0x15, 0xce, 0x03, 0x70, 0x95, 0xae, 0x37, 0x3c, 0xcf, 0xfe, 0x72, 0x12, 0x04, 0xbc, 0x0c, - 0x13, 0x68, 0x37, 0x74, 0xf1, 0x77, 0xc1, 0x1b, 0x1e, 0x75, 0x31, 0x31, 0x35, 0x48, 0xd5, 0x66, - 0xb5, 0xe8, 0xc4, 0x12, 0x79, 0x35, 0x26, 0xba, 0x2d, 0x84, 0x36, 0xa4, 0x49, 0x50, 0xfd, 0xe4, - 0x7e, 0xb3, 0x50, 0xfd, 0xa1, 0x02, 0x0a, 0x72, 0xcc, 0xec, 0x13, 0xd7, 0x40, 0xa6, 0x4e, 0x11, - 0x63, 0x15, 0x64, 0xa1, 0x50, 0x65, 0xde, 0x62, 0xea, 0x75, 0xd8, 0x37, 0x5a, 0xf2, 0x86, 0x2d, - 0x6e, 0x5f, 0x0e, 0xcc, 0x83, 0x8a, 0xe7, 0xac, 0x96, 0xe5, 0x54, 0xb5, 0xc1, 0x39, 0xd1, 0x17, - 0x61, 0x2a, 0x51, 0x6b, 0x6a, 0x8e, 0x37, 0xb5, 0x14, 0x8b, 0xb1, 0x36, 0xb1, 0x6e, 0xd5, 0xa8, - 0x44, 0x50, 0x6d, 0xde, 0x8c, 0x29, 0x59, 0xb9, 0x97, 0x7c, 0x7d, 0xbf, 0x1a, 0x2c, 0x87, 0x6d, - 0xd7, 0xbc, 0xc2, 0xcf, 0x46, 0x40, 0x3e, 0x0e, 0x69, 0xbb, 0x5e, 0x10, 0xa7, 0x03, 0xfa, 0x25, - 0x38, 0xb7, 0x4f, 0xbc, 0x2e, 0x00, 0x20, 0xf9, 0x8e, 0x4d, 0x2c, 0xc1, 0xb6, 0xb5, 0x94, 0x20, - 0x3b, 0x36, 0xb1, 0xd4, 0x39, 0x90, 0xf6, 0x99, 0x8e, 0x57, 0xce, 0x29, 0xb4, 0x06, 0x24, 0xcd, - 0xf1, 0x14, 0x62, 0x18, 0x6c, 0x8d, 0x18, 0x0f, 0xf4, 0x92, 0xc1, 0x9e, 0x4d, 0xee, 0x36, 0x92, - 0xc1, 0x36, 0xef, 0x2f, 0x46, 0x7b, 0xb7, 0xbf, 0x48, 0x75, 0xbb, 0xbf, 0x68, 0x24, 0xbf, 0x20, - 0x79, 0x2b, 0x5b, 0x90, 0xdf, 0x74, 0x0f, 0xc8, 0x6f, 0x2e, 0x11, 0xf9, 0x1d, 0x8b, 0x22, 0xbf, - 0x37, 0x93, 0x4f, 0x8e, 0x85, 0x08, 0xf2, 0x5b, 0x3f, 0xec, 0x0b, 0xcf, 0x52, 0xe0, 0x42, 0x4b, - 0x1a, 0xd0, 0xf3, 0x89, 0xd1, 0x30, 0xf2, 0x87, 0x9b, 0x46, 0xfe, 0x1c, 0x48, 0x8b, 0x2d, 0xb3, - 0xee, 0xa5, 0xc7, 0x9f, 0x1a, 0x42, 0xb4, 0x06, 0x29, 0x52, 0x17, 0x40, 0x46, 0x2a, 0x70, 0x2b, - 0x31, 0x27, 0x34, 0x69, 0x74, 0xd7, 0x13, 0xa9, 0x45, 0x30, 0x29, 0x55, 0xa8, 0x01, 0x2b, 0x48, - 0xdf, 0x87, 0x06, 0x23, 0x2e, 0x1f, 0xe6, 0x59, 0x6d, 0x42, 0x14, 0x95, 0xbd, 0x92, 0x2d, 0x5e, - 0xa0, 0x6e, 0x06, 0x75, 0x32, 0x8f, 0xaa, 0x8f, 0x72, 0xaa, 0x7e, 0x31, 0xd4, 0xc5, 0x72, 0x13, - 0xef, 0x27, 0xf9, 0x0e, 0xff, 0xe4, 0x5c, 0x5d, 0x46, 0xe6, 0xfd, 0xad, 0xde, 0x03, 0x53, 0xd8, - 0xc6, 0x0c, 0x0b, 0x46, 0x76, 0x80, 0x6d, 0x6f, 0x00, 0x63, 0x12, 0x1a, 0xc1, 0x6d, 0x07, 0x9e, - 0x2a, 0x1d, 0xdc, 0xe2, 0xf6, 0x9a, 0x67, 0xae, 0x7e, 0x04, 0xf2, 0x16, 0xc4, 0x5e, 0xb7, 0x42, - 0xdb, 0x40, 0xf5, 0xae, 0x3b, 0x18, 0xd3, 0xd3, 0x21, 0x27, 0x61, 0xf7, 0xcd, 0x93, 0x37, 0x9d, - 0xdc, 0x69, 0xbb, 0xc9, 0x9b, 0xe9, 0xc0, 0x55, 0xdd, 0xe4, 0x8d, 0x01, 0xc0, 0x6c, 0x7f, 0x00, - 0x30, 0x77, 0x4a, 0x00, 0x6c, 0x84, 0x9a, 0xb1, 0x9e, 0x40, 0xcd, 0x78, 0xe7, 0x50, 0x53, 0x06, - 0x93, 0x2e, 0x32, 0xab, 0x8d, 0xc3, 0x64, 0x22, 0x79, 0x3c, 0x13, 0xc2, 0x3e, 0x3c, 0x42, 0x1e, - 0x80, 0x09, 0xe2, 0xa0, 0xd0, 0xda, 0x6f, 0x40, 0x27, 0xaf, 0xf2, 0xe0, 0x2e, 0xc7, 0x04, 0x77, - 0xc7, 0x41, 0x41, 0xab, 0xd6, 0xa1, 0xc3, 0x8f, 0x25, 0x06, 0xb4, 0x31, 0x52, 0x2f, 0xee, 0x6e, - 0x2b, 0xdf, 0x12, 0xb0, 0x0a, 0x5f, 0x8e, 0x82, 0x85, 0xb6, 0x84, 0xb9, 0xe7, 0xb0, 0xb6, 0x08, - 0xb2, 0x3e, 0xe2, 0x9c, 0x58, 0x7b, 0xa4, 0x22, 0x81, 0x4d, 0x22, 0x55, 0x99, 0xcb, 0xd4, 0x2b, - 0x60, 0x4c, 0x2a, 0x39, 0x2e, 0x39, 0xc6, 0x26, 0x72, 0x25, 0xbc, 0xe5, 0x84, 0x78, 0x47, 0x4a, - 0x1b, 0xf1, 0x68, 0xa4, 0x4b, 0x3c, 0xea, 0x14, 0x06, 0xaf, 0x81, 0x29, 0xbe, 0xd3, 0xe2, 0xbc, - 0x49, 0x67, 0xd8, 0x42, 0x94, 0x41, 0xcb, 0xe1, 0x78, 0x38, 0xa4, 0x4d, 0xd6, 0xca, 0x76, 0xfd, - 0x22, 0xcf, 0x24, 0xc4, 0x48, 0x6b, 0x26, 0x29, 0x61, 0x52, 0x2b, 0xab, 0x99, 0x4c, 0x81, 0x33, - 0x7c, 0xbc, 0x0a, 0xec, 0xd2, 0xc4, 0x47, 0xe3, 0xba, 0x90, 0x6e, 0x5a, 0x17, 0x9a, 0x61, 0x2a, - 0xd3, 0x3b, 0x98, 0xca, 0xf6, 0x18, 0xa6, 0x72, 0xfd, 0x81, 0xa9, 0xb1, 0x1e, 0xc3, 0xd4, 0x78, - 0x97, 0x30, 0xf5, 0x16, 0x98, 0x10, 0x30, 0xe5, 0x20, 0xd7, 0xc2, 0x94, 0x7a, 0xd3, 0x8c, 0x63, - 0x4c, 0x56, 0x1b, 0xe7, 0x05, 0x3b, 0x35, 0x79, 0x1f, 0xd1, 0xa3, 0xbb, 0x8d, 0x42, 0x3b, 0x6c, - 0x28, 0xfc, 0x3b, 0x05, 0x16, 0xda, 0x1e, 0x4a, 0xbc, 0x26, 0x46, 0x1d, 0x00, 0xd1, 0x34, 0x18, - 0x11, 0x47, 0x38, 0x12, 0x17, 0xe4, 0x57, 0x2c, 0x61, 0x02, 0xfd, 0x23, 0x4c, 0xe9, 0x7e, 0x10, - 0xa6, 0xd7, 0x48, 0xf4, 0xaa, 0x90, 0xa8, 0x9e, 0x30, 0x4d, 0xf4, 0x8c, 0x30, 0xa9, 0xbd, 0x27, - 0x4c, 0x93, 0xaf, 0x0c, 0xf2, 0xda, 0x82, 0x59, 0xe1, 0xb7, 0x69, 0xb0, 0x98, 0xe0, 0x34, 0xbc, - 0x3f, 0xb7, 0x93, 0x71, 0x28, 0xd0, 0xc1, 0x1d, 0x65, 0xa7, 0x28, 0xd0, 0xc1, 0x9d, 0x65, 0x72, - 0x14, 0x18, 0xe9, 0xdd, 0x99, 0xc7, 0xd9, 0xde, 0xdf, 0xa9, 0x8e, 0xf6, 0xe7, 0x4e, 0x35, 0xd5, - 0x9f, 0x3b, 0x55, 0x70, 0xca, 0x3b, 0xd5, 0x32, 0x50, 0x6f, 0x90, 0xaa, 0x5b, 0x39, 0xd9, 0xb6, - 0x19, 0x72, 0x11, 0x65, 0x5a, 0xfd, 0xc6, 0xb6, 0xfd, 0x88, 0x6a, 0x36, 0x57, 0xef, 0x83, 0x29, - 0x21, 0xdd, 0xaa, 0xda, 0xfc, 0xf4, 0x1f, 0x32, 0xb4, 0x0e, 0x9d, 0x10, 0xfc, 0xb7, 0x75, 0x1b, - 0xe9, 0x20, 0x74, 0x03, 0x9c, 0xed, 0xfc, 0x06, 0xf8, 0x46, 0xb0, 0xf5, 0xe0, 0xc7, 0xf9, 0x54, - 0x1e, 0xc8, 0xc6, 0xf9, 0x10, 0x4b, 0x34, 0x9f, 0xdc, 0xd4, 0xdf, 0x9f, 0x88, 0xaf, 0xd0, 0x5d, - 0xf2, 0x58, 0x82, 0xbb, 0xe4, 0xf1, 0x9e, 0xdc, 0x25, 0xf7, 0x03, 0xb2, 0x95, 0x57, 0x07, 0xd9, - 0x4a, 0x33, 0x64, 0xdf, 0x4f, 0x0e, 0xd9, 0x6f, 0x07, 0x90, 0x9d, 0x00, 0x8c, 0x0b, 0xb7, 0x41, - 0x2a, 0xc8, 0x4f, 0x6d, 0x57, 0xa5, 0x84, 0x77, 0x55, 0x91, 0x44, 0x7d, 0x30, 0x9a, 0xa8, 0x17, - 0x7e, 0x39, 0x08, 0x66, 0x5b, 0xdf, 0x15, 0xf4, 0x07, 0xff, 0x6f, 0x83, 0xf1, 0xba, 0x5b, 0x0d, - 0x6c, 0x74, 0xf4, 0x3e, 0x65, 0x8c, 0x86, 0xe2, 0xc4, 0x06, 0x5a, 0xd1, 0x92, 0x27, 0xfc, 0x4a, - 0x90, 0xf0, 0xd6, 0x0d, 0x2f, 0xfc, 0x6a, 0x10, 0x2c, 0x77, 0x7e, 0xa7, 0xd4, 0x75, 0xbe, 0xbe, - 0x0d, 0x72, 0xf5, 0xd7, 0x5f, 0xf2, 0x4a, 0xfd, 0x62, 0xab, 0x5b, 0x16, 0xbf, 0x76, 0x2d, 0x6b, - 0x86, 0x3f, 0x57, 0xf6, 0x93, 0xe7, 0xe3, 0x83, 0x20, 0x1f, 0x9d, 0x37, 0xb6, 0xf0, 0x79, 0x0a, - 0x5c, 0x4e, 0x76, 0x39, 0xf8, 0xfa, 0x95, 0xd3, 0xff, 0xde, 0x2b, 0xa7, 0xb8, 0xc3, 0xa5, 0x54, - 0xe7, 0x87, 0x4b, 0x20, 0xfe, 0x70, 0x29, 0x0a, 0x4b, 0xd2, 0xdd, 0x63, 0x49, 0x0d, 0x56, 0x33, - 0x61, 0x58, 0x3d, 0xd5, 0x7a, 0xbd, 0x13, 0xbd, 0x5e, 0xbf, 0x15, 0xf7, 0x4a, 0x43, 0x1e, 0x0a, - 0xbe, 0xf2, 0x75, 0x3b, 0x72, 0x85, 0x9c, 0xe8, 0xc5, 0x0a, 0xf9, 0x30, 0x39, 0x40, 0x95, 0x5a, - 0x9d, 0xe3, 0x44, 0x2d, 0x92, 0xbf, 0x57, 0xc0, 0x54, 0x54, 0x0a, 0xd5, 0x69, 0x30, 0x22, 0x8f, - 0x6a, 0x05, 0x06, 0xc9, 0x2f, 0x75, 0x06, 0x8c, 0x06, 0xa7, 0xb3, 0x02, 0x81, 0x82, 0xef, 0xb8, - 0xe3, 0x93, 0xa1, 0x84, 0xc7, 0x27, 0xc3, 0xdd, 0x1d, 0x9f, 0x14, 0xfe, 0xa8, 0x80, 0x4c, 0x5d, - 0xec, 0x0d, 0x47, 0x41, 0x4a, 0xdb, 0xa3, 0xa0, 0xc1, 0xc4, 0x47, 0x41, 0xfd, 0x6e, 0xcb, 0x3f, - 0x07, 0xc1, 0x62, 0xe4, 0x0b, 0x9b, 0x1e, 0x1d, 0xaf, 0xdd, 0x03, 0xd9, 0xe0, 0xdd, 0x0f, 0x27, - 0x98, 0x43, 0x7c, 0x84, 0x7e, 0xad, 0x93, 0xc7, 0x3e, 0x9c, 0x70, 0x66, 0x8c, 0xd0, 0x97, 0xfa, - 0x11, 0x78, 0x23, 0x70, 0x2b, 0x9f, 0x17, 0x39, 0x84, 0x04, 0x2f, 0xcc, 0xfe, 0x3f, 0xc6, 0xbd, - 0xef, 0x51, 0xf8, 0xdf, 0x21, 0xa4, 0xa2, 0x4d, 0x1a, 0x4d, 0x32, 0xda, 0x1d, 0x47, 0x4c, 0x90, - 0xc6, 0xc2, 0xbf, 0x86, 0x62, 0xd2, 0xdd, 0xa3, 0x05, 0xb9, 0x4f, 0xe9, 0x76, 0xc0, 0x5c, 0x64, - 0xba, 0x75, 0x68, 0x9a, 0x98, 0xcf, 0xf8, 0xce, 0x13, 0x7f, 0x3e, 0x22, 0xf1, 0xab, 0xbe, 0x3b, - 0xb5, 0x02, 0x2e, 0x44, 0xd7, 0x28, 0xde, 0x1d, 0xf9, 0x4f, 0xf8, 0x3a, 0xa8, 0x6f, 0x26, 0xa2, - 0x3e, 0x91, 0xf5, 0x5e, 0xf6, 0x77, 0x03, 0xdc, 0x7d, 0xaa, 0x80, 0x09, 0xbf, 0x3e, 0x6c, 0x33, - 0x51, 0xaa, 0x5e, 0x01, 0x63, 0xd0, 0x10, 0x2f, 0x94, 0xa0, 0x69, 0xba, 0x88, 0x52, 0xd9, 0xcf, - 0x39, 0x29, 0x5e, 0x15, 0x52, 0x75, 0x0d, 0x00, 0x1b, 0x3d, 0xd2, 0x1d, 0xcf, 0x96, 0x76, 0x72, - 0xac, 0x99, 0xb2, 0xd1, 0x23, 0x5e, 0x23, 0x2d, 0xfc, 0x79, 0x10, 0x2c, 0xd5, 0x85, 0xba, 0x83, - 0xf8, 0x66, 0x57, 0x14, 0xf7, 0x68, 0xdc, 0xbd, 0x0b, 0xa6, 0x1d, 0xe1, 0x96, 0x77, 0x53, 0x88, - 0x1c, 0x0c, 0x71, 0x72, 0x30, 0xe5, 0xf8, 0x95, 0x92, 0x4a, 0x8d, 0x1d, 0x3c, 0x04, 0x53, 0x41, - 0xdf, 0x62, 0x9b, 0x05, 0x7d, 0x2b, 0xc6, 0xd2, 0x52, 0x4c, 0xdf, 0x36, 0xe5, 0x53, 0x53, 0xdd, - 0x46, 0x11, 0x5d, 0xf9, 0x4e, 0xf2, 0x2e, 0xbd, 0x16, 0xdd, 0xa5, 0x2d, 0xf2, 0x54, 0x78, 0xae, - 0x80, 0xc9, 0x88, 0x57, 0x63, 0x5d, 0xe7, 0x6f, 0x0b, 0x8c, 0x52, 0xe3, 0x10, 0x99, 0xd5, 0x0a, - 0x92, 0x53, 0x36, 0xc1, 0x5b, 0xb5, 0xb2, 0xb4, 0xd0, 0x02, 0xdb, 0x95, 0xeb, 0xc9, 0x5b, 0x7d, - 0x3e, 0x68, 0x75, 0x44, 0x43, 0x0a, 0x3f, 0x1a, 0x04, 0x73, 0xfc, 0x0d, 0xd7, 0x3a, 0xb1, 0xac, - 0xaa, 0x8d, 0xd9, 0x89, 0xd7, 0x75, 0x65, 0xaf, 0x1b, 0x7b, 0x00, 0x52, 0xa9, 0xc6, 0xb7, 0xc9, - 0xef, 0xc9, 0x9f, 0x8a, 0x14, 0xeb, 0x7e, 0x15, 0x52, 0x8b, 0x3a, 0x2e, 0x06, 0xad, 0xe6, 0x69, - 0xa5, 0x9c, 0xbc, 0xed, 0x4b, 0xf5, 0xef, 0xd4, 0xe2, 0xfd, 0x17, 0x7e, 0x3d, 0x08, 0x8a, 0xab, - 0x8c, 0x58, 0xd8, 0x10, 0x9c, 0xe6, 0x8e, 0x6b, 0x72, 0xda, 0x7f, 0xab, 0x5a, 0x61, 0xd8, 0xa9, - 0x60, 0xe4, 0xfa, 0xbd, 0x70, 0xea, 0xb4, 0x7c, 0x0f, 0x4c, 0xfb, 0x6f, 0x0b, 0x11, 0xd2, 0xad, - 0xa0, 0x02, 0x3f, 0x47, 0x57, 0x5b, 0xbf, 0x27, 0x0c, 0xc7, 0xa4, 0x4d, 0x59, 0xcd, 0x42, 0xba, - 0xb2, 0x97, 0x3c, 0x43, 0xef, 0x05, 0x19, 0xea, 0xac, 0xf5, 0x85, 0xff, 0x28, 0x20, 0x1f, 0xf7, - 0xc8, 0xb0, 0xeb, 0xd4, 0xdc, 0x07, 0x93, 0xcd, 0x4f, 0x1e, 0xfd, 0xbc, 0x5c, 0x49, 0xf8, 0xd4, - 0x51, 0x9b, 0x68, 0x7c, 0xe2, 0xd8, 0xe5, 0xf3, 0xad, 0xb8, 0xe6, 0x5d, 0x7d, 0x0c, 0x32, 0xe1, - 0x1f, 0x0e, 0xa8, 0xcb, 0x60, 0x6a, 0xf3, 0xc1, 0xfa, 0x8d, 0xd5, 0xdb, 0xd7, 0x37, 0xf5, 0x7b, - 0xb7, 0xcb, 0x3b, 0x9b, 0xeb, 0xdb, 0x5b, 0xdb, 0x9b, 0x1b, 0xe3, 0x03, 0x33, 0xf9, 0x27, 0x4f, - 0xe7, 0x23, 0xcb, 0x54, 0x15, 0x0c, 0x97, 0x77, 0xee, 0xec, 0x8e, 0x2b, 0x33, 0xa3, 0x4f, 0x9e, - 0xce, 0xf3, 0xbf, 0xbd, 0x04, 0x6d, 0x6c, 0x6a, 0xdb, 0x1f, 0xae, 0xee, 0x6e, 0x7f, 0xb8, 0x59, - 0x1e, 0x1f, 0x9c, 0x19, 0x7b, 0xf2, 0x74, 0x3e, 0x2c, 0x5a, 0x3b, 0xfa, 0xea, 0xc5, 0xac, 0xf2, - 0xec, 0xc5, 0xac, 0xf2, 0xb7, 0x17, 0xb3, 0xca, 0x67, 0x2f, 0x67, 0x07, 0x9e, 0xbd, 0x9c, 0x1d, - 0xf8, 0xcb, 0xcb, 0xd9, 0x81, 0x87, 0x77, 0x0f, 0x30, 0x3b, 0xac, 0xee, 0x15, 0x0d, 0x62, 0x95, - 0xb6, 0xfd, 0x3c, 0xdd, 0x84, 0x7b, 0xb4, 0x14, 0x64, 0xed, 0x1d, 0x83, 0xb8, 0x28, 0xfc, 0x79, - 0x08, 0xb1, 0x5d, 0xb2, 0x88, 0xd7, 0xaf, 0xb4, 0xc6, 0xf0, 0x3d, 0x9e, 0x49, 0x4b, 0xc7, 0xcb, - 0x7b, 0x23, 0xfc, 0xc7, 0x53, 0x5f, 0xff, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x27, 0x33, - 0x0c, 0x99, 0x36, 0x00, 0x00, + // 2760 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5b, 0xcd, 0x6f, 0x24, 0x47, + 0x15, 0x77, 0xdb, 0x5e, 0xaf, 0xe7, 0xcd, 0xf8, 0xab, 0xed, 0x98, 0x89, 0xb3, 0xeb, 0x8f, 0xf1, + 0x66, 0xd7, 0x6c, 0x92, 0x19, 0xd6, 0x04, 0x12, 0x39, 0x42, 0xc8, 0x6b, 0x7b, 0x12, 0x8b, 0xfd, + 0x98, 0xed, 0xf1, 0x26, 0x51, 0x44, 0x68, 0xca, 0xdd, 0x65, 0xbb, 0xd8, 0xe9, 0xae, 0x4e, 0x57, + 0x8f, 0x13, 0xe7, 0x42, 0x84, 0x04, 0x42, 0x2b, 0x24, 0x02, 0x17, 0x84, 0x50, 0x50, 0xf8, 0x07, + 0x10, 0x07, 0x6e, 0x1c, 0x22, 0x4e, 0x04, 0x4e, 0x11, 0x27, 0xc4, 0x21, 0x42, 0xc9, 0x01, 0x0e, + 0x20, 0x71, 0xe5, 0x86, 0xba, 0xaa, 0xba, 0xa7, 0x67, 0xa6, 0x7b, 0xa6, 0x67, 0x3c, 0xc3, 0x1e, + 0xd8, 0xcb, 0xee, 0x74, 0xd5, 0x7b, 0xaf, 0x5e, 0xbd, 0x7a, 0xf5, 0xab, 0x5f, 0x7d, 0x18, 0xae, + 0x10, 0xfb, 0x3b, 0xd8, 0xf0, 0xc8, 0x29, 0x2e, 0xe1, 0x77, 0x8c, 0x13, 0x64, 0x1f, 0xe3, 0xd2, + 0xe9, 0x66, 0xc9, 0x71, 0xa9, 0x43, 0x19, 0xaa, 0x15, 0x1d, 0x97, 0x7a, 0x54, 0x7d, 0x22, 0x94, + 0x2a, 0x06, 0x52, 0xc5, 0xd3, 0xcd, 0xa5, 0x27, 0x0d, 0xca, 0x2c, 0xca, 0x74, 0x2e, 0x54, 0x12, + 0x1f, 0x42, 0x63, 0x69, 0xe1, 0x98, 0x1e, 0x53, 0x51, 0xee, 0xff, 0x92, 0xa5, 0x73, 0xc8, 0x22, + 0x36, 0x2d, 0xf1, 0x7f, 0x65, 0xd1, 0xb2, 0x50, 0x2b, 0x1d, 0x22, 0x86, 0x4b, 0xa7, 0x37, 0x0e, + 0xb1, 0x87, 0x6e, 0x94, 0x0c, 0x4a, 0x6c, 0x59, 0xff, 0x05, 0x59, 0x6f, 0xb1, 0xe3, 0xd2, 0xe9, + 0x0d, 0xff, 0x3f, 0x59, 0x51, 0x94, 0x15, 0x26, 0x61, 0x9e, 0x4b, 0x0e, 0xeb, 0x1e, 0xa1, 0x76, + 0x68, 0x20, 0x5a, 0x28, 0xe5, 0x13, 0x7a, 0x1a, 0xf6, 0x47, 0x48, 0x15, 0xe2, 0xa5, 0x2c, 0xe4, + 0x3e, 0xc0, 0x9e, 0x94, 0x79, 0xba, 0x21, 0x43, 0x5d, 0x64, 0xd4, 0x1a, 0x7e, 0x8b, 0x4f, 0x21, + 0x56, 0xf8, 0xe5, 0x24, 0x5c, 0xae, 0x3a, 0xd4, 0xbb, 0xcd, 0x75, 0x2b, 0xc8, 0x45, 0xd6, 0x7d, + 0xc7, 0x44, 0x1e, 0xae, 0xc8, 0xe0, 0xaa, 0x0b, 0x70, 0xc1, 0x23, 0x5e, 0x0d, 0xe7, 0x95, 0x55, + 0x65, 0x23, 0xa3, 0x89, 0x0f, 0x75, 0x15, 0xb2, 0x26, 0x66, 0x86, 0x4b, 0x1c, 0xdf, 0xfb, 0xfc, + 0x28, 0xaf, 0x8b, 0x16, 0xa9, 0x4f, 0x41, 0x46, 0x38, 0xa4, 0x13, 0x33, 0x3f, 0xc6, 0xeb, 0x27, + 0x45, 0xc1, 0xbe, 0xa9, 0xee, 0xc3, 0xb4, 0x85, 0x1e, 0x60, 0x57, 0x3f, 0xc2, 0x58, 0x77, 0x91, + 0x87, 0xf3, 0xe3, 0xbe, 0xc4, 0xcd, 0xf5, 0x8f, 0x3f, 0x5d, 0x51, 0xfe, 0xfa, 0xe9, 0xca, 0x53, + 0x22, 0x6e, 0xcc, 0x7c, 0x50, 0x24, 0xb4, 0x64, 0x21, 0xef, 0xa4, 0x78, 0x0b, 0x1f, 0x23, 0xe3, + 0x6c, 0x17, 0x1b, 0x5a, 0x8e, 0xab, 0x96, 0x31, 0xd6, 0x90, 0x87, 0x7d, 0x53, 0x5e, 0xb3, 0xa9, + 0x0b, 0x3d, 0x98, 0xf2, 0xa2, 0xa6, 0x5e, 0x87, 0x45, 0x17, 0xd7, 0xd0, 0x99, 0x34, 0xc6, 0x4e, + 0x90, 0x2b, 0x4d, 0x4e, 0xa4, 0x37, 0x39, 0x2f, 0x4d, 0x94, 0x31, 0xae, 0xfa, 0x06, 0xb8, 0x65, + 0x0d, 0xe6, 0x2d, 0x62, 0xeb, 0x8e, 0x4b, 0x0c, 0xac, 0x7b, 0xc4, 0x78, 0xa0, 0x33, 0xf2, 0x2e, + 0xce, 0x5f, 0x4c, 0x6f, 0x76, 0xd6, 0x22, 0x76, 0xc5, 0x57, 0x3f, 0x20, 0xc6, 0x83, 0x2a, 0x79, + 0x97, 0x7b, 0xeb, 0xdb, 0x7c, 0xab, 0x8e, 0x6c, 0x8f, 0x78, 0x67, 0x11, 0xb3, 0x93, 0x3d, 0x78, + 0x6b, 0x11, 0xfb, 0x9e, 0xb4, 0x10, 0x5a, 0x7e, 0x09, 0x26, 0x98, 0x87, 0xbc, 0x3a, 0xcb, 0x67, + 0x56, 0x95, 0x8d, 0xe9, 0xcd, 0xf5, 0x62, 0xec, 0xd4, 0x2a, 0x8a, 0xa4, 0xa9, 0x72, 0x51, 0x4d, + 0xaa, 0xa8, 0x97, 0x60, 0xc2, 0xf7, 0x04, 0xbb, 0x79, 0xe0, 0x6e, 0x8c, 0xfb, 0x6e, 0x68, 0xb2, + 0x4c, 0x2d, 0x43, 0xce, 0x77, 0xda, 0xa6, 0x7e, 0x8e, 0xa0, 0x5a, 0x3e, 0x9b, 0xde, 0xd5, 0xac, + 0x45, 0xec, 0x3b, 0x52, 0x4f, 0xfd, 0x3a, 0x00, 0x32, 0x7d, 0x4b, 0xc4, 0x3e, 0xa2, 0xf9, 0xdc, + 0xaa, 0xb2, 0x91, 0xdd, 0x5c, 0x4d, 0x70, 0x73, 0xdb, 0x17, 0xdc, 0xb7, 0x8f, 0xa8, 0x96, 0x41, + 0xc1, 0x4f, 0x75, 0x1d, 0xa6, 0xfc, 0xd9, 0xac, 0x9b, 0xd8, 0x20, 0x16, 0xaa, 0xb1, 0xfc, 0xd4, + 0xaa, 0xb2, 0x31, 0xa5, 0xe5, 0xfc, 0xc2, 0x5d, 0x59, 0xa6, 0x3e, 0x0d, 0xd3, 0x6f, 0xd5, 0xa9, + 0x17, 0x91, 0x9a, 0xe6, 0x52, 0x53, 0xbc, 0x34, 0x14, 0xfb, 0x81, 0x02, 0x6b, 0x27, 0x88, 0xe9, + 0x26, 0x61, 0xe8, 0xb0, 0x86, 0x4d, 0xdd, 0x22, 0xb6, 0x5f, 0x23, 0x30, 0xc7, 0xa0, 0x35, 0x3f, + 0x9d, 0xf2, 0x33, 0x3c, 0x96, 0x5f, 0x4d, 0x70, 0x72, 0x57, 0xe8, 0xde, 0x16, 0x9a, 0x15, 0xa9, + 0x58, 0xc6, 0x58, 0x4c, 0x47, 0x19, 0xc6, 0xcb, 0x27, 0x88, 0x49, 0x49, 0xb3, 0x5d, 0x74, 0xeb, + 0xde, 0x0f, 0x3f, 0x5c, 0x19, 0xf9, 0xc7, 0x87, 0x2b, 0x23, 0x7f, 0xfa, 0xed, 0x73, 0x4b, 0x12, + 0xea, 0x8e, 0xe9, 0x69, 0x51, 0x4e, 0xfd, 0xe2, 0x0e, 0xb5, 0x3d, 0x6c, 0x7b, 0x0f, 0xff, 0xfe, + 0x9b, 0xeb, 0x57, 0x43, 0xe4, 0xe8, 0x38, 0xfd, 0x0b, 0x7f, 0x50, 0x60, 0x71, 0x4f, 0x8a, 0xee, + 0xd9, 0x7e, 0xc3, 0xe7, 0x46, 0x86, 0x97, 0x21, 0x17, 0x34, 0x7e, 0x70, 0xe6, 0x60, 0x0e, 0x0e, + 0xc9, 0x49, 0xb6, 0x17, 0x11, 0xd5, 0x9a, 0x14, 0xb7, 0x9e, 0x0d, 0xba, 0xeb, 0x77, 0x68, 0x25, + 0xec, 0x50, 0xbc, 0xbb, 0x85, 0x9f, 0x4d, 0xc3, 0xda, 0x4d, 0xe4, 0x19, 0x27, 0x41, 0xfd, 0x6d, + 0x6a, 0x92, 0x23, 0x62, 0x20, 0xdf, 0xa9, 0x73, 0x77, 0xea, 0x3d, 0x05, 0x0a, 0xcc, 0xa1, 0x9e, + 0x2e, 0x41, 0xcf, 0xf1, 0x63, 0xa9, 0xd7, 0x79, 0x30, 0xf5, 0x60, 0xa5, 0x62, 0xf9, 0xb1, 0xd5, + 0xb1, 0x8d, 0xec, 0xe6, 0xf3, 0x09, 0x7d, 0xed, 0x38, 0x14, 0xda, 0x32, 0xeb, 0x54, 0xcd, 0xd4, + 0x9f, 0x2a, 0xb0, 0x61, 0x62, 0x97, 0x9c, 0x22, 0xdf, 0x70, 0x17, 0x47, 0xc6, 0xb9, 0x23, 0x5b, + 0x49, 0xd9, 0x18, 0x9a, 0x49, 0x76, 0xe7, 0x8a, 0xd9, 0x5d, 0x88, 0xa9, 0x0e, 0x5c, 0x8a, 0x86, + 0xa5, 0x86, 0xea, 0xb6, 0x71, 0x12, 0xf1, 0xe3, 0x02, 0xf7, 0xa3, 0xd4, 0x35, 0x20, 0xb7, 0xb8, + 0x62, 0xd8, 0xf8, 0x93, 0x2c, 0xa1, 0x86, 0xa9, 0xdf, 0x85, 0x35, 0x07, 0xbb, 0x0e, 0xf6, 0xea, + 0xa8, 0x96, 0xd8, 0xec, 0x44, 0xc7, 0x71, 0xa8, 0x04, 0xfa, 0xb1, 0x6d, 0x2f, 0x3b, 0x9d, 0xaa, + 0x99, 0xfa, 0x23, 0x05, 0xae, 0xe2, 0x77, 0x1c, 0xe2, 0x9e, 0xe9, 0x47, 0x75, 0xaf, 0xee, 0x62, + 0x96, 0xe8, 0xc6, 0x45, 0xee, 0xc6, 0x8b, 0x89, 0xa9, 0xef, 0x1b, 0x29, 0x0b, 0x1b, 0xb1, 0xae, + 0x14, 0x70, 0x37, 0x11, 0xa6, 0xbe, 0xaf, 0xc0, 0x35, 0xcf, 0x45, 0x26, 0xb1, 0x8f, 0x75, 0x17, + 0xbf, 0x8d, 0x5c, 0x53, 0x37, 0x90, 0xe5, 0x20, 0x72, 0x6c, 0xb7, 0xa6, 0x05, 0x5f, 0x39, 0x92, + 0xb3, 0xe2, 0x40, 0x58, 0xd1, 0xb8, 0x91, 0x1d, 0x69, 0xa3, 0x25, 0x2b, 0xd6, 0xbd, 0xee, 0x42, + 0x3c, 0x42, 0x87, 0xc4, 0x46, 0xee, 0x99, 0x4e, 0xf9, 0xf4, 0x49, 0x8e, 0x50, 0xa6, 0x63, 0x84, + 0x6e, 0x72, 0x23, 0x77, 0x85, 0x8d, 0xf8, 0x08, 0x1d, 0x76, 0x13, 0x61, 0xea, 0x8f, 0x15, 0x78, + 0xba, 0xc5, 0x9d, 0x84, 0x59, 0x03, 0xdc, 0x9b, 0xaf, 0xa5, 0xf7, 0x26, 0x6e, 0xe2, 0xac, 0x35, + 0xb9, 0x14, 0x3b, 0x6b, 0x3e, 0x52, 0xe0, 0x45, 0x54, 0x37, 0x7c, 0x01, 0x3d, 0x68, 0x41, 0xf7, + 0x5c, 0x64, 0xb3, 0x23, 0xec, 0xea, 0x26, 0xb6, 0xa9, 0x15, 0xae, 0x49, 0x6d, 0x83, 0x98, 0xe5, + 0x83, 0xb8, 0x9f, 0xe0, 0xa4, 0x68, 0x6a, 0x5b, 0x18, 0x0f, 0xc1, 0x55, 0x9a, 0xde, 0xf5, 0x2d, + 0x07, 0xeb, 0x5a, 0xe8, 0xf0, 0x26, 0x4a, 0x21, 0xdd, 0x32, 0xc4, 0xdf, 0x82, 0x27, 0x7c, 0x0e, + 0x65, 0x12, 0x66, 0xd0, 0xba, 0xed, 0x35, 0xbc, 0x13, 0x6b, 0xf5, 0xf5, 0x04, 0xef, 0xca, 0x18, + 0xef, 0x4a, 0x95, 0xb0, 0xf9, 0xf9, 0xa3, 0xf6, 0x42, 0xf5, 0x7b, 0x0a, 0x14, 0x64, 0xce, 0x1c, + 0x51, 0xd7, 0xc0, 0xa6, 0xce, 0xb0, 0xe7, 0xd5, 0xb0, 0x85, 0x23, 0x8d, 0xf9, 0xab, 0xba, 0x3f, + 0x60, 0x5f, 0xe9, 0x48, 0x60, 0xca, 0x5c, 0xbf, 0x1a, 0xaa, 0x87, 0x0d, 0xaf, 0x58, 0x1d, 0xeb, + 0x99, 0x6a, 0xc3, 0x53, 0x62, 0x2c, 0xa2, 0x9c, 0xa6, 0xd1, 0xd5, 0x69, 0xde, 0xd5, 0x52, 0x22, + 0xc6, 0xda, 0xd4, 0xba, 0xdd, 0xe0, 0x34, 0x61, 0xb3, 0x79, 0x33, 0xa1, 0x66, 0xeb, 0x7e, 0xfa, + 0xf5, 0xfd, 0x7a, 0xb8, 0x1c, 0x76, 0x5d, 0xf3, 0x0a, 0x3f, 0x99, 0x80, 0x7c, 0x12, 0xd2, 0xf6, + 0xbd, 0x20, 0x2e, 0x86, 0x3c, 0x50, 0x90, 0xff, 0x80, 0x01, 0x5e, 0x06, 0x90, 0xc4, 0xcb, 0xa6, + 0x96, 0xa0, 0xfd, 0x5a, 0x46, 0xb0, 0x2e, 0x9b, 0x5a, 0xea, 0x0a, 0x64, 0x03, 0xca, 0xe5, 0xd7, + 0x73, 0x2e, 0xaf, 0x81, 0xe4, 0x5b, 0xbe, 0x40, 0x02, 0x95, 0x6e, 0x30, 0xf4, 0x91, 0x41, 0x52, + 0xe9, 0x8b, 0xe9, 0xcd, 0xc6, 0x52, 0xe9, 0xf6, 0x8d, 0xce, 0xe4, 0xe0, 0x36, 0x3a, 0x99, 0x7e, + 0x37, 0x3a, 0xad, 0x2c, 0x1c, 0xd2, 0xf7, 0xb2, 0x03, 0x0b, 0xcf, 0x0e, 0x80, 0x85, 0x4f, 0xa7, + 0x62, 0xe1, 0x33, 0x31, 0x2c, 0x7c, 0xeb, 0x56, 0xfa, 0xc9, 0xb1, 0x16, 0x43, 0x7e, 0x9b, 0xd3, + 0xbe, 0xf0, 0x49, 0x06, 0x2e, 0x77, 0xa4, 0x01, 0x03, 0x9f, 0x18, 0x2d, 0x99, 0x3f, 0xde, 0x96, + 0xf9, 0x2b, 0x90, 0x15, 0x7b, 0x77, 0xdd, 0x0f, 0x4f, 0x30, 0x35, 0x44, 0xd1, 0x4d, 0xc4, 0xb0, + 0xba, 0x06, 0x39, 0x29, 0xc0, 0xb5, 0xc4, 0x9c, 0xd0, 0xa4, 0xd2, 0x3d, 0xbf, 0x48, 0x2d, 0xc2, + 0xbc, 0x14, 0x61, 0x06, 0xaa, 0x61, 0xfd, 0x08, 0x19, 0x1e, 0x75, 0x79, 0x9a, 0x4f, 0x69, 0x73, + 0xa2, 0xaa, 0xea, 0xd7, 0x94, 0x79, 0x85, 0xba, 0x17, 0xb6, 0xe9, 0xf9, 0x54, 0x7d, 0x92, 0x53, + 0xf5, 0x2b, 0x91, 0x21, 0x96, 0xa7, 0x09, 0x41, 0x90, 0xef, 0xf2, 0x4f, 0xce, 0xd5, 0xa5, 0x67, + 0xfe, 0x6f, 0xf5, 0x3e, 0x2c, 0x10, 0x9b, 0x78, 0x44, 0x30, 0xb2, 0x63, 0x62, 0xfb, 0x09, 0x4c, + 0x68, 0x24, 0x83, 0xbb, 0x26, 0x9e, 0x2a, 0x0d, 0xdc, 0xe6, 0xfa, 0x9a, 0xaf, 0xae, 0xbe, 0x09, + 0x79, 0x0b, 0x11, 0x7f, 0x58, 0x91, 0x6d, 0xe0, 0x66, 0xd3, 0x3d, 0xe4, 0xf4, 0x62, 0xc4, 0x48, + 0xd4, 0x7c, 0xfb, 0xe4, 0xcd, 0xa6, 0x37, 0xda, 0x6d, 0xf2, 0xe6, 0x7a, 0x30, 0xd5, 0x34, 0x79, + 0x13, 0x00, 0x70, 0x6a, 0x38, 0x00, 0x38, 0x7d, 0x4e, 0x00, 0x6c, 0x85, 0x9a, 0x99, 0x81, 0x40, + 0xcd, 0x6c, 0xef, 0x50, 0x53, 0x85, 0x79, 0x17, 0x9b, 0xf5, 0xd6, 0x34, 0x99, 0x4b, 0xef, 0xcf, + 0x9c, 0xd0, 0x8f, 0x66, 0xc8, 0xeb, 0x30, 0x47, 0x1d, 0x1c, 0x59, 0xfb, 0x0d, 0xe4, 0xe4, 0x55, + 0xee, 0xdc, 0xd5, 0x04, 0xe7, 0xee, 0x3a, 0x38, 0xec, 0xd5, 0x0e, 0x72, 0xf8, 0xc6, 0x7e, 0x44, + 0x9b, 0xa1, 0xcd, 0xc5, 0xfd, 0x6d, 0xe5, 0x3b, 0x02, 0x56, 0xe1, 0xa3, 0x49, 0x58, 0xeb, 0x4a, + 0x98, 0x07, 0x0e, 0x6b, 0xeb, 0x30, 0x15, 0x20, 0xce, 0x99, 0x75, 0x48, 0x6b, 0x12, 0xd8, 0x24, + 0x52, 0x55, 0x79, 0x99, 0x7a, 0x0d, 0x66, 0xa4, 0x90, 0xe3, 0xd2, 0x53, 0x62, 0x62, 0x57, 0xc2, + 0xdb, 0xb4, 0x28, 0xae, 0xc8, 0xd2, 0x56, 0x3c, 0x9a, 0xe8, 0x13, 0x8f, 0x7a, 0x85, 0xc1, 0x1b, + 0xb0, 0xc0, 0x77, 0x5a, 0x9c, 0x37, 0xe9, 0x1e, 0xb1, 0x30, 0xf3, 0x90, 0xe5, 0x70, 0x3c, 0x1c, + 0xd3, 0xe6, 0x1b, 0x75, 0x07, 0x41, 0x95, 0xaf, 0x12, 0x61, 0xa4, 0x0d, 0x95, 0x8c, 0x50, 0x69, + 0xd4, 0x35, 0x54, 0x16, 0xe0, 0x02, 0xcf, 0x57, 0x81, 0x5d, 0x9a, 0xf8, 0x68, 0x5d, 0x17, 0xb2, + 0x6d, 0xeb, 0x42, 0x3b, 0x4c, 0xe5, 0x06, 0x07, 0x53, 0x53, 0x03, 0x86, 0xa9, 0xe9, 0xe1, 0xc0, + 0xd4, 0xcc, 0x80, 0x61, 0x6a, 0xb6, 0x4f, 0x98, 0x7a, 0x06, 0xe6, 0x04, 0x4c, 0x39, 0xd8, 0xb5, + 0x08, 0x63, 0xfe, 0x34, 0xe3, 0x18, 0x33, 0xa5, 0xcd, 0xf2, 0x8a, 0x4a, 0xa3, 0x7c, 0x88, 0xe8, + 0xd1, 0xdf, 0x46, 0xa1, 0x1b, 0x36, 0x14, 0xfe, 0x9d, 0x81, 0xb5, 0xae, 0x87, 0x12, 0x8f, 0x89, + 0x51, 0x0f, 0x40, 0xb4, 0x08, 0x13, 0xe2, 0x08, 0x47, 0xe2, 0x82, 0xfc, 0x4a, 0x24, 0x4c, 0x30, + 0x3c, 0xc2, 0x94, 0x1d, 0x06, 0x61, 0x7a, 0x8c, 0x44, 0x8f, 0x0a, 0x89, 0x9a, 0x09, 0xd3, 0xdc, + 0xc0, 0x08, 0x93, 0x3a, 0x78, 0xc2, 0x34, 0xff, 0xc8, 0x20, 0xaf, 0x2b, 0x98, 0x15, 0x7e, 0x97, + 0x83, 0xf5, 0x14, 0xa7, 0xe1, 0xc3, 0xb9, 0x26, 0x4d, 0x42, 0x81, 0x1e, 0x2e, 0x4b, 0x7b, 0x45, + 0x81, 0x1e, 0x2e, 0x4f, 0xd3, 0xa3, 0xc0, 0xc4, 0xe0, 0xce, 0x3c, 0x2e, 0x0e, 0xfe, 0x72, 0x77, + 0x72, 0x38, 0x97, 0xbb, 0x99, 0xe1, 0x5c, 0xee, 0xc2, 0x39, 0x2f, 0x77, 0xab, 0xa0, 0xbe, 0x42, + 0xeb, 0x6e, 0xed, 0x6c, 0xdf, 0xf6, 0xb0, 0x8b, 0x99, 0xa7, 0x35, 0x6f, 0x6c, 0xbb, 0x67, 0x54, + 0xbb, 0xba, 0xfa, 0x1a, 0x2c, 0x88, 0xd2, 0x72, 0xdd, 0xe6, 0xa7, 0xff, 0xc8, 0xc3, 0x3b, 0xc8, + 0x89, 0xc0, 0x7f, 0x57, 0xb3, 0xb1, 0x06, 0x22, 0x57, 0xd1, 0x53, 0xbd, 0x5f, 0x45, 0xbf, 0x12, + 0x6e, 0x3d, 0xf8, 0x71, 0x3e, 0x93, 0x07, 0xb2, 0x49, 0x36, 0xc4, 0x12, 0xcd, 0x27, 0x37, 0x0b, + 0xf6, 0x27, 0xe2, 0x2b, 0x72, 0xa9, 0x3d, 0x93, 0xe2, 0x52, 0x7b, 0x76, 0x20, 0x97, 0xda, 0xc3, + 0x80, 0x6c, 0xe5, 0xd1, 0x41, 0xb6, 0xd2, 0x06, 0xd9, 0x29, 0xef, 0xcd, 0x17, 0x86, 0x7f, 0x6f, + 0xfe, 0x5a, 0xfa, 0xb5, 0xe3, 0xd9, 0x70, 0xed, 0x48, 0xb1, 0x2a, 0x14, 0xee, 0x40, 0x26, 0x1c, + 0xa8, 0xc6, 0xf6, 0x4e, 0x89, 0x6e, 0xef, 0x62, 0x77, 0x0c, 0xa3, 0xf1, 0x3b, 0x86, 0xc2, 0xcf, + 0x47, 0x61, 0xb9, 0xf3, 0xa5, 0xc5, 0x70, 0x16, 0xa2, 0x3b, 0x30, 0xdb, 0x74, 0xbd, 0x42, 0x8c, + 0x9e, 0x5e, 0xec, 0xcc, 0xb0, 0x88, 0x9f, 0xc4, 0xc0, 0x5b, 0x5a, 0xfa, 0x80, 0x5f, 0x0b, 0x03, + 0xde, 0xb9, 0xe3, 0x85, 0x5f, 0x8d, 0xc2, 0x66, 0xef, 0x97, 0x5b, 0x7d, 0xc7, 0xeb, 0x1b, 0x30, + 0xdd, 0x7c, 0x0f, 0x27, 0xef, 0xf6, 0xaf, 0x74, 0xba, 0xee, 0x09, 0x5a, 0xd7, 0xa6, 0xcc, 0xe8, + 0xe7, 0xd6, 0x51, 0xfa, 0x78, 0xbc, 0x14, 0xc6, 0xa3, 0xf7, 0xce, 0x16, 0x7e, 0x01, 0x70, 0x35, + 0xdd, 0x2d, 0xe5, 0xe3, 0x77, 0x5f, 0xff, 0x7f, 0xef, 0xbe, 0x92, 0x4e, 0xb9, 0x32, 0xbd, 0x9f, + 0x72, 0x41, 0xf2, 0x29, 0x57, 0x1c, 0x96, 0x64, 0xfb, 0xc7, 0x92, 0x06, 0xac, 0xe6, 0xa2, 0xb0, + 0x7a, 0x2e, 0xe2, 0x50, 0x89, 0x27, 0x0e, 0xcf, 0x24, 0x3d, 0x17, 0x91, 0xa7, 0x93, 0x8f, 0x9c, + 0x40, 0xc4, 0x2e, 0xd5, 0x73, 0xff, 0xbb, 0xa5, 0x5a, 0x1d, 0xfe, 0x52, 0xfd, 0x46, 0x7a, 0xa4, + 0x2c, 0x75, 0x3a, 0xd9, 0x8a, 0x5b, 0xad, 0x7f, 0xaf, 0xc0, 0x42, 0xdc, 0x58, 0xaa, 0x8b, 0x30, + 0x21, 0x0f, 0xaf, 0x05, 0x18, 0xca, 0x2f, 0x75, 0x09, 0x26, 0xc3, 0xf3, 0x6a, 0x01, 0x85, 0xe1, + 0x77, 0xd2, 0x81, 0xd2, 0x58, 0xca, 0x03, 0xa5, 0xf1, 0xfe, 0x0e, 0x94, 0x0a, 0x7f, 0x54, 0x20, + 0xd7, 0xe4, 0x7b, 0xcb, 0xe1, 0x98, 0xd2, 0xf5, 0x70, 0x6c, 0x34, 0xf5, 0xe1, 0xd8, 0xb0, 0xfb, + 0xf2, 0xcf, 0x51, 0x58, 0x8f, 0x7d, 0x73, 0x34, 0xa0, 0x03, 0xc7, 0xfb, 0x30, 0x15, 0xbe, 0x84, + 0xe2, 0x94, 0x7b, 0x8c, 0x4f, 0x95, 0x2f, 0xf5, 0xf2, 0xfc, 0x89, 0x53, 0xf0, 0x9c, 0x11, 0xf9, + 0x52, 0xdf, 0x84, 0x27, 0x42, 0xb3, 0xf2, 0xc1, 0x95, 0x43, 0x69, 0xf8, 0xe6, 0xee, 0x8b, 0x09, + 0xe6, 0x03, 0x8b, 0xc2, 0x7e, 0x85, 0xd2, 0x9a, 0x36, 0x6f, 0xb4, 0x95, 0xb1, 0xfe, 0xc8, 0x6a, + 0x8a, 0x30, 0x16, 0xfe, 0x35, 0x96, 0x10, 0xee, 0x01, 0x31, 0x83, 0x21, 0x85, 0xdb, 0x81, 0x95, + 0xd8, 0x70, 0xeb, 0xc8, 0x34, 0x09, 0x9f, 0xf1, 0xbd, 0x07, 0xfe, 0x52, 0x4c, 0xe0, 0xb7, 0x03, + 0x73, 0x6a, 0x0d, 0x2e, 0xc7, 0xb7, 0x28, 0x5e, 0x62, 0x05, 0x8f, 0x1a, 0x7b, 0x68, 0x6f, 0x29, + 0xa6, 0x3d, 0x11, 0xf5, 0x41, 0x8e, 0x77, 0x0b, 0xdc, 0xbd, 0xa7, 0xc0, 0x5c, 0xd0, 0x1e, 0xb1, + 0x3d, 0x51, 0xab, 0x5e, 0x83, 0x19, 0x64, 0x88, 0x37, 0x5b, 0xc8, 0x34, 0x5d, 0xcc, 0x98, 0x1c, + 0xe7, 0x69, 0x59, 0xbc, 0x2d, 0x4a, 0xd5, 0x9b, 0x00, 0x36, 0x7e, 0x5b, 0x77, 0x7c, 0x5d, 0xd6, + 0xcb, 0x41, 0x6f, 0xc6, 0xc6, 0x6f, 0xf3, 0x16, 0x59, 0xe1, 0xcf, 0xa3, 0xb0, 0xd1, 0xe4, 0x6a, + 0x05, 0xf3, 0xed, 0xbf, 0xa8, 0x1e, 0x50, 0xde, 0x3d, 0x0f, 0x8b, 0x8e, 0x30, 0xcb, 0x87, 0x29, + 0xc2, 0x52, 0xc6, 0x38, 0x4b, 0x59, 0x70, 0x82, 0x46, 0x69, 0xad, 0x41, 0x53, 0xde, 0x80, 0x85, + 0x70, 0x6c, 0x89, 0xed, 0x85, 0x63, 0x2b, 0x72, 0x69, 0x23, 0x61, 0x6c, 0xdb, 0xe2, 0xa9, 0xa9, + 0x6e, 0x6b, 0x11, 0xdb, 0xfa, 0x66, 0xfa, 0x21, 0xbd, 0x11, 0x3f, 0xa4, 0x1d, 0xe2, 0x54, 0xf8, + 0x54, 0x81, 0xf9, 0x98, 0x77, 0x74, 0x7d, 0xc7, 0xaf, 0x0c, 0x93, 0xcc, 0x38, 0xc1, 0x66, 0xbd, + 0x86, 0xe5, 0x94, 0x4d, 0xf1, 0x7a, 0xaf, 0x2a, 0x35, 0xb4, 0x50, 0x77, 0xeb, 0xe5, 0xf4, 0xbd, + 0xbe, 0x14, 0xf6, 0x3a, 0xa6, 0x23, 0x85, 0xef, 0x8f, 0xc2, 0x0a, 0x7f, 0xd5, 0xb6, 0x43, 0x2d, + 0xab, 0x6e, 0x13, 0xef, 0xcc, 0x1f, 0xba, 0xaa, 0x3f, 0x8c, 0x03, 0x00, 0xa9, 0x4c, 0xeb, 0x6b, + 0xed, 0x17, 0xe4, 0x5f, 0xf1, 0x14, 0x9b, 0xfe, 0x60, 0xa7, 0xe1, 0x75, 0x92, 0x0f, 0x5a, 0xc3, + 0xd2, 0x56, 0x35, 0x7d, 0xdf, 0x37, 0x9a, 0x5f, 0xee, 0x25, 0xdb, 0x2f, 0xfc, 0x7a, 0x14, 0x8a, + 0xdb, 0x1e, 0xb5, 0x88, 0x21, 0x38, 0xcd, 0x5d, 0xd7, 0xe4, 0xfb, 0x8f, 0xdb, 0xf5, 0x9a, 0x47, + 0x9c, 0x1a, 0xc1, 0x6e, 0x30, 0x0a, 0xe7, 0x0e, 0xcb, 0xb7, 0x61, 0x31, 0x78, 0x6d, 0x89, 0xb1, + 0x6e, 0x85, 0x0d, 0x04, 0x31, 0xba, 0xde, 0xf9, 0x85, 0x65, 0xd4, 0x27, 0x6d, 0xc1, 0x6a, 0x2f, + 0x64, 0x5b, 0x87, 0xe9, 0x23, 0xf4, 0x42, 0x18, 0xa1, 0xde, 0x7a, 0x5f, 0xf8, 0x8f, 0x02, 0xf9, + 0xa4, 0x67, 0x97, 0x7d, 0x87, 0xe6, 0x35, 0x98, 0x6f, 0x7f, 0x04, 0x1a, 0xc4, 0xe5, 0x5a, 0xca, + 0xc7, 0x9f, 0xda, 0x5c, 0xeb, 0xa3, 0xcf, 0x3e, 0x1f, 0xb4, 0x25, 0x75, 0xef, 0xfa, 0x2e, 0xac, + 0x74, 0x21, 0xe0, 0x6a, 0x0e, 0x26, 0xef, 0x50, 0xf1, 0x7b, 0x76, 0x44, 0xcd, 0xc0, 0x85, 0x32, + 0xaa, 0x31, 0x3c, 0xab, 0xa8, 0x93, 0x30, 0x7e, 0xe0, 0xd6, 0xf1, 0xec, 0xe8, 0xf5, 0x77, 0x20, + 0x17, 0xfd, 0x83, 0x0c, 0x75, 0x13, 0x16, 0xf6, 0x5e, 0xdf, 0x79, 0x65, 0xfb, 0xce, 0xcb, 0x7b, + 0xfa, 0xfd, 0x3b, 0xd5, 0xca, 0xde, 0xce, 0x7e, 0x79, 0x7f, 0x6f, 0x77, 0x76, 0x64, 0x29, 0xff, + 0xf0, 0x83, 0xd5, 0xd8, 0x3a, 0x55, 0x85, 0xf1, 0x6a, 0xe5, 0xee, 0xc1, 0xac, 0xb2, 0x34, 0xf9, + 0xf0, 0x83, 0x55, 0xfe, 0xdb, 0x0f, 0xf3, 0xee, 0x9e, 0xb6, 0xff, 0xea, 0xf6, 0xc1, 0xfe, 0xab, + 0x7b, 0xd5, 0xd9, 0xd1, 0xa5, 0x99, 0x87, 0x1f, 0xac, 0x46, 0x8b, 0x6e, 0x3e, 0xf8, 0xf8, 0xb3, + 0x65, 0xe5, 0x93, 0xcf, 0x96, 0x95, 0xbf, 0x7d, 0xb6, 0xac, 0xbc, 0xff, 0xf9, 0xf2, 0xc8, 0x27, + 0x9f, 0x2f, 0x8f, 0xfc, 0xe5, 0xf3, 0xe5, 0x91, 0x37, 0xee, 0x1d, 0x13, 0xef, 0xa4, 0x7e, 0x58, + 0x34, 0xa8, 0x55, 0xda, 0x0f, 0xa2, 0x7d, 0x0b, 0x1d, 0xb2, 0x52, 0x18, 0xfb, 0xe7, 0x0c, 0xea, + 0xe2, 0xe8, 0xe7, 0x09, 0x22, 0x76, 0xc9, 0xa2, 0x7e, 0x76, 0xb0, 0xc6, 0x3e, 0xc1, 0x67, 0xab, + 0xac, 0x74, 0xba, 0x79, 0x38, 0xc1, 0xb7, 0x35, 0x5f, 0xfe, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x3d, 0x17, 0x36, 0x79, 0x7a, 0x38, 0x00, 0x00, } func (m *SpotMarketParamUpdateProposal) Marshal() (dAtA []byte, err error) { @@ -1480,6 +1524,11 @@ func (m *SpotMarketParamUpdateProposal) MarshalToSizedBuffer(dAtA []byte) (int, _ = i var l int _ = l + if m.HasDisabledMinimalProtocolFee != 0 { + i = encodeVarintProposal(dAtA, i, uint64(m.HasDisabledMinimalProtocolFee)) + i-- + dAtA[i] = 0x78 + } if m.QuoteDecimals != 0 { i = encodeVarintProposal(dAtA, i, uint64(m.QuoteDecimals)) i-- @@ -2539,6 +2588,13 @@ func (m *DerivativeMarketParamUpdateProposal) MarshalToSizedBuffer(dAtA []byte) _ = i var l int _ = l + if m.HasDisabledMinimalProtocolFee != 0 { + i = encodeVarintProposal(dAtA, i, uint64(m.HasDisabledMinimalProtocolFee)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa0 + } if m.OpenNotionalCap != nil { { size, err := m.OpenNotionalCap.MarshalToSizedBuffer(dAtA[:i]) @@ -2913,6 +2969,13 @@ func (m *BinaryOptionsMarketParamUpdateProposal) MarshalToSizedBuffer(dAtA []byt _ = i var l int _ = l + if m.HasDisabledMinimalProtocolFee != 0 { + i = encodeVarintProposal(dAtA, i, uint64(m.HasDisabledMinimalProtocolFee)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x90 + } if m.OpenNotionalCap != nil { { size, err := m.OpenNotionalCap.MarshalToSizedBuffer(dAtA[:i]) @@ -3680,6 +3743,9 @@ func (m *SpotMarketParamUpdateProposal) Size() (n int) { if m.QuoteDecimals != 0 { n += 1 + sovProposal(uint64(m.QuoteDecimals)) } + if m.HasDisabledMinimalProtocolFee != 0 { + n += 1 + sovProposal(uint64(m.HasDisabledMinimalProtocolFee)) + } return n } @@ -4107,6 +4173,9 @@ func (m *DerivativeMarketParamUpdateProposal) Size() (n int) { l = m.OpenNotionalCap.Size() n += 2 + l + sovProposal(uint64(l)) } + if m.HasDisabledMinimalProtocolFee != 0 { + n += 2 + sovProposal(uint64(m.HasDisabledMinimalProtocolFee)) + } return n } @@ -4245,6 +4314,9 @@ func (m *BinaryOptionsMarketParamUpdateProposal) Size() (n int) { l = m.OpenNotionalCap.Size() n += 2 + l + sovProposal(uint64(l)) } + if m.HasDisabledMinimalProtocolFee != 0 { + n += 2 + sovProposal(uint64(m.HasDisabledMinimalProtocolFee)) + } return n } @@ -4957,6 +5029,25 @@ func (m *SpotMarketParamUpdateProposal) Unmarshal(dAtA []byte) error { break } } + case 15: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HasDisabledMinimalProtocolFee", wireType) + } + m.HasDisabledMinimalProtocolFee = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProposal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.HasDisabledMinimalProtocolFee |= DisableMinimalProtocolFeeUpdate(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipProposal(dAtA[iNdEx:]) @@ -8612,6 +8703,25 @@ func (m *DerivativeMarketParamUpdateProposal) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 20: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HasDisabledMinimalProtocolFee", wireType) + } + m.HasDisabledMinimalProtocolFee = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProposal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.HasDisabledMinimalProtocolFee |= DisableMinimalProtocolFeeUpdate(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipProposal(dAtA[iNdEx:]) @@ -9634,6 +9744,25 @@ func (m *BinaryOptionsMarketParamUpdateProposal) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 18: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HasDisabledMinimalProtocolFee", wireType) + } + m.HasDisabledMinimalProtocolFee = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowProposal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.HasDisabledMinimalProtocolFee |= DisableMinimalProtocolFeeUpdate(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipProposal(dAtA[iNdEx:]) diff --git a/chain/exchange/types/v2/query.pb.go b/chain/exchange/types/v2/query.pb.go index 98b0242c..6ec9e739 100644 --- a/chain/exchange/types/v2/query.pb.go +++ b/chain/exchange/types/v2/query.pb.go @@ -7766,407 +7766,407 @@ func init() { func init() { proto.RegisterFile("injective/exchange/v2/query.proto", fileDescriptor_108a0f108cdd0cc4) } var fileDescriptor_108a0f108cdd0cc4 = []byte{ - // 6391 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3d, 0x5b, 0x6c, 0x1c, 0xc9, - 0x71, 0x9a, 0x25, 0x45, 0x91, 0x45, 0x89, 0x8f, 0xa6, 0x44, 0x51, 0x7b, 0x77, 0x7a, 0x8c, 0x4e, - 0x27, 0xe9, 0xee, 0xc4, 0x95, 0x28, 0xe9, 0xf4, 0xd6, 0x1d, 0x29, 0x8a, 0x92, 0xce, 0x7a, 0xf0, - 0x56, 0xbc, 0x3b, 0xc7, 0xb9, 0x78, 0x3d, 0xdc, 0x6d, 0x2e, 0xc7, 0xda, 0xdd, 0x59, 0xed, 0xcc, - 0xf2, 0xc4, 0x08, 0xfa, 0x88, 0x93, 0x18, 0x86, 0x0d, 0xe4, 0xf9, 0xe1, 0x0f, 0x03, 0x0e, 0x10, - 0x07, 0x09, 0xf2, 0x40, 0x02, 0x38, 0x97, 0x38, 0x88, 0x1d, 0xc4, 0x49, 0x6c, 0xc7, 0x40, 0x80, - 0xc4, 0xc6, 0x25, 0xb1, 0x11, 0x20, 0x17, 0xc7, 0x0e, 0x10, 0xc4, 0x40, 0xe2, 0xfc, 0x07, 0x48, - 0x82, 0xe9, 0xae, 0xee, 0x9d, 0x57, 0xf7, 0xcc, 0x90, 0x3a, 0xc8, 0x4e, 0xbe, 0xc4, 0xed, 0xe9, - 0xaa, 0xae, 0xaa, 0xae, 0xae, 0xaa, 0x7e, 0x54, 0x09, 0x0e, 0xd8, 0xad, 0x8f, 0xd2, 0xaa, 0x67, - 0xaf, 0xd1, 0x12, 0x7d, 0x50, 0x5d, 0xb5, 0x5a, 0x75, 0x5a, 0x5a, 0x9b, 0x29, 0xdd, 0xef, 0xd2, - 0xce, 0xfa, 0x74, 0xbb, 0xe3, 0x78, 0x0e, 0xd9, 0x25, 0xbb, 0x4c, 0x8b, 0x2e, 0xd3, 0x6b, 0x33, - 0xc5, 0x9d, 0x75, 0xa7, 0xee, 0xb0, 0x1e, 0x25, 0xff, 0x2f, 0xde, 0xb9, 0xf8, 0x74, 0xdd, 0x71, - 0xea, 0x0d, 0x5a, 0xb2, 0xda, 0x76, 0xc9, 0x6a, 0xb5, 0x1c, 0xcf, 0xf2, 0x6c, 0xa7, 0xe5, 0xe2, - 0xd7, 0x67, 0x93, 0x47, 0x93, 0x68, 0x79, 0xaf, 0x43, 0xc9, 0xbd, 0x9c, 0x4e, 0x8d, 0x76, 0x96, - 0x1d, 0xe7, 0x1e, 0x76, 0x33, 0x93, 0xbb, 0x35, 0xad, 0xce, 0x3d, 0xea, 0x61, 0x9f, 0x83, 0xc9, - 0x7d, 0xea, 0xb4, 0x45, 0x5d, 0xdb, 0x8d, 0x8f, 0xe7, 0x74, 0xac, 0x6a, 0x83, 0x96, 0xd6, 0x4e, - 0x2c, 0x53, 0xcf, 0x3a, 0x81, 0x3f, 0x79, 0x37, 0xf3, 0x0e, 0xc0, 0xdd, 0xee, 0xb2, 0x55, 0xad, - 0x3a, 0xdd, 0x96, 0x47, 0x26, 0x61, 0xc0, 0xeb, 0x58, 0x35, 0xda, 0x99, 0x32, 0xf6, 0x1b, 0x47, - 0x86, 0xca, 0xf8, 0x8b, 0x1c, 0x85, 0x31, 0x57, 0xf6, 0xaa, 0xb4, 0x9c, 0x56, 0x95, 0x4e, 0x15, - 0xf6, 0x1b, 0x47, 0x76, 0x94, 0x47, 0x7b, 0xed, 0xb7, 0xfd, 0x66, 0xf3, 0x23, 0xf0, 0xf4, 0x6b, - 0xbe, 0x9c, 0x7b, 0x58, 0xef, 0xf8, 0x2c, 0xba, 0x65, 0x7a, 0xbf, 0x4b, 0x5d, 0x8f, 0x1c, 0x84, - 0x1d, 0x01, 0x54, 0x76, 0x0d, 0x47, 0xda, 0xde, 0x6b, 0xbc, 0x51, 0x23, 0x4f, 0xc1, 0x10, 0xe7, - 0xd8, 0xef, 0x50, 0x60, 0x1d, 0x06, 0x79, 0xc3, 0x8d, 0x9a, 0xf9, 0x05, 0x03, 0x9e, 0x51, 0x0c, - 0xe1, 0xb6, 0x9d, 0x96, 0x4b, 0xc9, 0x0d, 0x80, 0xe5, 0xee, 0x7a, 0x85, 0xc9, 0xd6, 0x9d, 0x32, - 0xf6, 0xf7, 0x1d, 0x19, 0x9e, 0x79, 0x7e, 0x3a, 0x71, 0xc6, 0xa7, 0x23, 0x48, 0xe6, 0x2d, 0xcf, - 0x2a, 0x0f, 0x2d, 0x77, 0xd7, 0x39, 0x4a, 0xf2, 0x01, 0x18, 0x76, 0x69, 0xa3, 0x21, 0x70, 0x15, - 0x72, 0xe3, 0x02, 0x1f, 0x9c, 0x23, 0x33, 0x7f, 0xcb, 0x80, 0x43, 0x91, 0x3e, 0xfe, 0xd4, 0xdf, - 0xa2, 0x9e, 0x55, 0xb3, 0x3c, 0xeb, 0x4d, 0xdb, 0x5b, 0xbd, 0xc5, 0xb8, 0x24, 0xb7, 0x61, 0xb0, - 0x89, 0xad, 0x4c, 0x40, 0xc3, 0x33, 0x33, 0xd9, 0xc6, 0x0c, 0xe2, 0x2b, 0x4b, 0x1c, 0x5a, 0x81, - 0x92, 0x9d, 0xb0, 0xd5, 0x76, 0xe7, 0xba, 0xeb, 0x53, 0x7d, 0xfb, 0x8d, 0x23, 0x83, 0x65, 0xfe, - 0xc3, 0x7c, 0x1a, 0x8a, 0x4c, 0xca, 0x57, 0x71, 0xb0, 0x45, 0xab, 0x63, 0x35, 0xc5, 0x34, 0x9a, - 0x1f, 0x82, 0xa7, 0x12, 0xbf, 0xe2, 0x0c, 0x5c, 0x80, 0x81, 0x36, 0x6b, 0x41, 0xea, 0x9f, 0x51, - 0x50, 0xcf, 0xc1, 0xe6, 0xfa, 0xbf, 0xfe, 0xde, 0xbe, 0x2d, 0x65, 0x04, 0x31, 0x7f, 0xce, 0x80, - 0xbd, 0x91, 0x09, 0x9e, 0xa7, 0x6d, 0xc7, 0xb5, 0xbd, 0x7c, 0x5a, 0x74, 0x0d, 0xa0, 0xf7, 0x9b, - 0x71, 0x3d, 0x3c, 0x73, 0x20, 0x55, 0x8c, 0x8c, 0x18, 0xa3, 0x1c, 0x00, 0x35, 0xbf, 0x63, 0xc0, - 0x3e, 0x25, 0x41, 0xc8, 0xf1, 0x47, 0x60, 0xb0, 0x86, 0x6d, 0xa8, 0x71, 0xf3, 0x8a, 0xa1, 0x52, - 0x30, 0x4d, 0x8b, 0x86, 0xab, 0x2d, 0xaf, 0xb3, 0x5e, 0x96, 0x58, 0x8b, 0x3f, 0x0e, 0x3b, 0x42, - 0x9f, 0xc8, 0x18, 0xf4, 0xdd, 0xa3, 0xeb, 0xc8, 0xba, 0xff, 0x27, 0x39, 0x05, 0x5b, 0xd7, 0xac, - 0x46, 0x97, 0x22, 0xb3, 0x7b, 0x15, 0x14, 0x20, 0x9a, 0x32, 0xef, 0x7c, 0xbe, 0x70, 0xd6, 0x30, - 0xf7, 0xe2, 0xb2, 0x15, 0xf3, 0x39, 0x67, 0x35, 0xac, 0x56, 0x95, 0xca, 0xf9, 0xb6, 0x70, 0xcd, - 0xc5, 0xbf, 0x23, 0xff, 0xaf, 0xc0, 0xe0, 0x32, 0xb6, 0x21, 0xff, 0xaa, 0xd1, 0x11, 0x14, 0x27, - 0x5d, 0x42, 0x99, 0x67, 0x50, 0xa5, 0x66, 0xeb, 0xf5, 0x0e, 0xad, 0x5b, 0x1e, 0x7d, 0xc3, 0x69, - 0x74, 0x9b, 0x54, 0x4c, 0xf9, 0x14, 0x6c, 0x13, 0x53, 0xc9, 0x39, 0x16, 0x3f, 0xcd, 0x36, 0xd2, - 0x1e, 0x03, 0x44, 0xd2, 0x16, 0x61, 0xdc, 0x12, 0x9f, 0x2a, 0x6b, 0xec, 0x9b, 0xa0, 0xf1, 0xa0, - 0x82, 0x46, 0xbe, 0x0c, 0x11, 0xcf, 0x98, 0x15, 0x46, 0xec, 0x9a, 0x3f, 0x96, 0x3c, 0xa2, 0x54, - 0xcf, 0x22, 0x0c, 0x22, 0x71, 0x7c, 0xa0, 0xa1, 0xb2, 0xfc, 0x4d, 0x9e, 0x01, 0x90, 0x4b, 0x91, - 0x1b, 0x94, 0xa1, 0xf2, 0x90, 0x58, 0x8b, 0xae, 0xf9, 0x03, 0x61, 0xdd, 0xe2, 0xb8, 0x91, 0x1d, - 0x07, 0xf6, 0xf4, 0xd8, 0x11, 0x4b, 0x20, 0xcc, 0xd6, 0x49, 0x05, 0x5b, 0x12, 0xe7, 0x2c, 0x07, - 0x13, 0x82, 0xaa, 0x3a, 0x9d, 0x5a, 0x79, 0xb7, 0x95, 0xf8, 0xd5, 0x25, 0x3f, 0x01, 0x53, 0xbd, - 0x01, 0x91, 0x76, 0x31, 0x5e, 0x21, 0xbb, 0x18, 0x27, 0x25, 0x92, 0x60, 0xb3, 0x6b, 0xbe, 0x02, - 0x07, 0xc2, 0x0c, 0x87, 0xa0, 0x50, 0xa2, 0x21, 0x03, 0x66, 0x44, 0x3c, 0x42, 0x1d, 0x4c, 0x1d, - 0x06, 0x94, 0xdb, 0x2c, 0x0c, 0x70, 0xaa, 0xd1, 0x26, 0xa9, 0x88, 0x0e, 0x0a, 0x45, 0x58, 0x26, - 0x0e, 0x68, 0x5e, 0x83, 0x12, 0x1f, 0xa8, 0x5b, 0xf5, 0x23, 0x00, 0xb1, 0x18, 0x96, 0x3a, 0x56, - 0xcb, 0x5d, 0xa1, 0x9d, 0x79, 0xda, 0x72, 0x9a, 0xf3, 0xb4, 0x6a, 0x37, 0xad, 0x86, 0x20, 0x7c, - 0x27, 0x6c, 0xad, 0xf9, 0xcd, 0x48, 0x34, 0xff, 0x61, 0xde, 0x84, 0xe3, 0xd9, 0x11, 0x21, 0xfd, - 0x53, 0xb0, 0xad, 0xc6, 0x9b, 0x18, 0xae, 0xfe, 0xb2, 0xf8, 0x69, 0xbe, 0x9a, 0x1d, 0x9b, 0x54, - 0xd1, 0x49, 0x18, 0x60, 0xa4, 0x08, 0x05, 0xc5, 0x5f, 0xe6, 0xc7, 0x0d, 0x38, 0x91, 0x03, 0x19, - 0xd2, 0xf6, 0x1a, 0x8c, 0x30, 0xf8, 0x0a, 0x92, 0x24, 0x14, 0xf1, 0x59, 0xa5, 0x05, 0x0a, 0x60, - 0x41, 0x21, 0xef, 0xa8, 0x05, 0x1b, 0xcd, 0x2b, 0xba, 0x49, 0x95, 0x6c, 0x84, 0x57, 0x93, 0x11, - 0x5d, 0x4d, 0x35, 0x38, 0xa8, 0x45, 0x82, 0xe4, 0x5f, 0x82, 0x6d, 0x1b, 0xb0, 0x0b, 0x02, 0xc6, - 0xfc, 0x50, 0x2c, 0x20, 0x11, 0x16, 0x36, 0x8f, 0xbb, 0x92, 0x9a, 0x52, 0x08, 0x6a, 0xca, 0x5b, - 0x2a, 0x5f, 0x28, 0x89, 0x3f, 0x1f, 0xf2, 0x3c, 0x59, 0xec, 0xbe, 0xec, 0x6f, 0x2e, 0xc2, 0x6e, - 0x8e, 0xbd, 0xed, 0x78, 0x9c, 0xb7, 0xa0, 0x82, 0xb8, 0x9e, 0xe5, 0x75, 0x5d, 0x11, 0x0b, 0xf2, - 0x5f, 0x69, 0xf6, 0xeb, 0x4d, 0x98, 0x8a, 0x63, 0x94, 0x51, 0xc1, 0x36, 0xde, 0x51, 0x88, 0x59, - 0xe9, 0x8d, 0x25, 0x70, 0x59, 0x40, 0x98, 0xa7, 0x61, 0x32, 0x82, 0x38, 0x93, 0x6d, 0x58, 0x8a, - 0x71, 0x28, 0xc9, 0x39, 0x07, 0x03, 0xbc, 0x1b, 0x8a, 0x2d, 0x03, 0x35, 0x08, 0x60, 0x7e, 0xb3, - 0x00, 0x7b, 0x24, 0x5a, 0x19, 0x78, 0x65, 0x21, 0xc8, 0x9f, 0xe6, 0x86, 0xdd, 0xb4, 0x79, 0x40, - 0xd2, 0x5f, 0xe6, 0x3f, 0xc8, 0xcb, 0x00, 0x2c, 0xc4, 0xac, 0xb8, 0x76, 0x8d, 0xb2, 0x40, 0x6c, - 0x64, 0x66, 0xbf, 0x82, 0x1e, 0x36, 0xde, 0x5d, 0xbb, 0x46, 0xcb, 0x43, 0x8e, 0xf8, 0x93, 0x54, - 0x60, 0x0f, 0xc3, 0x54, 0xa9, 0x76, 0x9b, 0xdd, 0x86, 0xe5, 0x03, 0x55, 0x5a, 0x8e, 0xbf, 0x82, - 0xad, 0xc6, 0x54, 0xbf, 0x4f, 0xc3, 0xdc, 0x41, 0x3f, 0xb0, 0xf9, 0x87, 0xf7, 0xf6, 0x3d, 0x55, - 0x75, 0xdc, 0xa6, 0xe3, 0xba, 0xb5, 0x7b, 0xd3, 0xb6, 0x53, 0x6a, 0x5a, 0xde, 0xea, 0xf4, 0x4d, - 0x5a, 0xb7, 0xaa, 0xeb, 0xf3, 0xb4, 0x5a, 0xde, 0xcd, 0xb0, 0x5c, 0x91, 0x48, 0x6e, 0x23, 0x8e, - 0xc4, 0x01, 0xee, 0x77, 0xad, 0x96, 0x67, 0x7b, 0xeb, 0x53, 0x5b, 0x37, 0x3e, 0xc0, 0x6b, 0x88, - 0xc3, 0xfc, 0xb2, 0x81, 0x11, 0x67, 0x44, 0xa6, 0x38, 0x5b, 0x0b, 0x30, 0xb6, 0xdc, 0x5d, 0x77, - 0x2b, 0xed, 0x8e, 0x5d, 0xa5, 0x95, 0x06, 0x5d, 0xa3, 0x0d, 0xd4, 0xa2, 0xa7, 0x15, 0x72, 0xba, - 0xe9, 0xf7, 0x29, 0x8f, 0xf8, 0x50, 0x8b, 0x3e, 0x10, 0xfb, 0x4d, 0xae, 0xc3, 0xb8, 0x1f, 0x92, - 0x87, 0x11, 0x15, 0x32, 0x20, 0x1a, 0x65, 0x60, 0x01, 0x4c, 0x63, 0xd0, 0xe7, 0xd2, 0xfb, 0x6c, - 0xb2, 0xfa, 0xcb, 0xfe, 0x9f, 0xe6, 0xe7, 0x0c, 0x18, 0x59, 0xe8, 0x36, 0x1a, 0x3d, 0x8d, 0xd9, - 0x84, 0x92, 0x91, 0x37, 0x60, 0xbc, 0x69, 0xd7, 0x90, 0x4e, 0xab, 0x55, 0xab, 0x78, 0xce, 0x32, - 0x46, 0x76, 0x87, 0x54, 0xf6, 0xc9, 0xae, 0x31, 0x02, 0x67, 0x5b, 0xb5, 0xa5, 0x3b, 0x73, 0x18, - 0xca, 0x8e, 0x34, 0x03, 0xad, 0xce, 0xb2, 0xf9, 0x09, 0x03, 0x23, 0xad, 0x30, 0xa9, 0x9b, 0x5c, - 0xf9, 0x64, 0x06, 0x26, 0xdf, 0xb6, 0xbd, 0xd5, 0x4a, 0x9c, 0x66, 0xbe, 0xaf, 0x20, 0xfe, 0xd7, - 0x5b, 0x61, 0x52, 0x2a, 0x18, 0x48, 0xc5, 0x28, 0xc1, 0x49, 0x7f, 0x39, 0x6a, 0x31, 0x54, 0x8c, - 0x87, 0x11, 0xf4, 0xac, 0x46, 0x13, 0x75, 0x2a, 0xf2, 0x3d, 0xcb, 0x42, 0x55, 0xf3, 0x53, 0x50, - 0xf2, 0xf3, 0x56, 0xa2, 0x64, 0x03, 0x7e, 0x26, 0xac, 0x0c, 0x19, 0xb9, 0x11, 0x56, 0xe7, 0x67, - 0xe5, 0xc6, 0x48, 0xac, 0x10, 0x77, 0x6e, 0xfd, 0xba, 0xe5, 0xae, 0xf6, 0xfc, 0xa1, 0x96, 0xa3, - 0x98, 0x1b, 0x2a, 0x24, 0xb8, 0xa1, 0x03, 0xb0, 0x9d, 0x5b, 0xa2, 0x55, 0x86, 0x78, 0xaa, 0x8f, - 0xcd, 0xf3, 0x30, 0x6b, 0xe3, 0x63, 0x99, 0x75, 0xb1, 0x1d, 0x4a, 0x20, 0x03, 0x39, 0x9d, 0x87, - 0x81, 0xd0, 0xf6, 0xfb, 0x45, 0x05, 0xa7, 0x4b, 0x1d, 0xbb, 0xd9, 0xa4, 0x35, 0x1f, 0xd3, 0x4d, - 0xdf, 0x2e, 0x30, 0x74, 0x65, 0x84, 0x95, 0x87, 0x09, 0x4b, 0xec, 0x18, 0xa2, 0x37, 0xdc, 0x63, - 0xe3, 0xd6, 0x6c, 0xc0, 0xb3, 0x3c, 0x40, 0xe0, 0x2d, 0xb3, 0xb5, 0x5a, 0x87, 0xba, 0x6e, 0xce, - 0x91, 0x0e, 0xc3, 0xa8, 0x18, 0xc6, 0xe2, 0x08, 0x70, 0xac, 0x11, 0x2b, 0x84, 0xd6, 0xfc, 0x4c, - 0x01, 0x76, 0x25, 0x72, 0x4c, 0xce, 0xc1, 0x56, 0xa6, 0x63, 0x1c, 0x37, 0xb3, 0xa4, 0x5b, 0xd2, - 0x2c, 0x29, 0x87, 0x20, 0x2f, 0xc3, 0xa0, 0xb4, 0xc3, 0x85, 0xec, 0xd0, 0x12, 0xc8, 0x47, 0xb0, - 0x62, 0x37, 0x1a, 0xd6, 0x72, 0x83, 0x7b, 0x9e, 0xac, 0x08, 0x04, 0x50, 0xef, 0x00, 0xa1, 0x3f, - 0x70, 0x80, 0xe0, 0x9b, 0x8b, 0x9e, 0x22, 0x71, 0x0f, 0x81, 0x0e, 0xcb, 0xd7, 0x15, 0xdf, 0x7a, - 0x56, 0xed, 0xda, 0xd4, 0x00, 0xdf, 0xbd, 0x56, 0xed, 0x9a, 0x49, 0x31, 0x8c, 0x8a, 0xcf, 0xf6, - 0x63, 0x55, 0xaa, 0x26, 0x1c, 0x4a, 0x99, 0xf2, 0xc7, 0x3a, 0xdc, 0xa5, 0xc0, 0x9a, 0x0d, 0x9b, - 0xe7, 0x4c, 0xf1, 0xcb, 0x7f, 0x19, 0x81, 0xc5, 0x16, 0x85, 0x97, 0x7b, 0xef, 0x21, 0x69, 0xa4, - 0x02, 0x0a, 0x94, 0xea, 0x8a, 0x07, 0x85, 0x63, 0x20, 0x37, 0x60, 0x64, 0x99, 0xba, 0x5e, 0x65, - 0xb9, 0xbb, 0x8e, 0x68, 0x0a, 0xd9, 0xd1, 0x6c, 0xf7, 0x41, 0xe7, 0xba, 0xeb, 0x1c, 0xd5, 0x07, - 0x60, 0x94, 0xa1, 0x62, 0xc7, 0x66, 0x1c, 0x57, 0x5f, 0x76, 0x5c, 0x3b, 0x7c, 0xd8, 0xbb, 0xb4, - 0xd1, 0x60, 0xc8, 0xcc, 0x2b, 0xb8, 0x3c, 0xe7, 0x69, 0xc7, 0x5e, 0x63, 0xe1, 0xc2, 0x06, 0x44, - 0xf8, 0x53, 0x05, 0x9c, 0x71, 0x35, 0x96, 0xff, 0xf3, 0x82, 0xfc, 0x03, 0xa1, 0x46, 0x3d, 0x19, - 0x3c, 0x8e, 0xb0, 0x55, 0x1b, 0x75, 0xf6, 0x6d, 0x3e, 0xea, 0x34, 0xbf, 0x66, 0xc0, 0x7e, 0x35, - 0xdd, 0x3f, 0x42, 0xa1, 0xe1, 0xa7, 0xfb, 0x60, 0x3a, 0xd1, 0xba, 0x2d, 0x39, 0x57, 0xac, 0x56, - 0x95, 0x36, 0x5e, 0x6f, 0x2f, 0x39, 0xb3, 0x4d, 0xdf, 0x22, 0x3d, 0x3e, 0x5f, 0x3e, 0x0f, 0xc3, - 0xcb, 0x96, 0x4b, 0x2b, 0x16, 0xc3, 0x9b, 0xc7, 0xb8, 0x83, 0x0f, 0xc7, 0xc9, 0x21, 0x0b, 0xb0, - 0xfd, 0x7e, 0xd7, 0xf1, 0x24, 0x9a, 0xfe, 0xec, 0x68, 0x86, 0x19, 0x20, 0xe2, 0xb9, 0x06, 0x83, - 0xae, 0xd7, 0xb1, 0x3c, 0x5a, 0xe7, 0x1b, 0x86, 0x91, 0x99, 0x17, 0x14, 0x52, 0xe5, 0x12, 0x69, - 0xb0, 0x6b, 0x96, 0xbb, 0x08, 0x52, 0x96, 0xc0, 0xe4, 0x26, 0x8c, 0x76, 0xe8, 0x0a, 0xed, 0xd0, - 0x56, 0x95, 0xe2, 0xca, 0x18, 0xc8, 0xae, 0x6b, 0x23, 0x12, 0x96, 0x2f, 0x8d, 0x6f, 0x15, 0xe0, - 0x54, 0x60, 0x66, 0x22, 0x8a, 0xf6, 0xbe, 0xce, 0x4f, 0x54, 0xb2, 0x7d, 0x8f, 0x41, 0xb2, 0xfd, - 0x8f, 0x59, 0xb2, 0x5b, 0x37, 0x2e, 0xd9, 0x15, 0x3c, 0xc2, 0x49, 0x16, 0xec, 0xe3, 0x0b, 0xe2, - 0x3a, 0xf0, 0x7c, 0x82, 0x47, 0xdf, 0xd0, 0x78, 0x99, 0x43, 0xb9, 0x7f, 0x2b, 0xc0, 0x53, 0xe8, - 0xf8, 0x7b, 0x03, 0xfd, 0x90, 0x04, 0x74, 0x17, 0xd8, 0x36, 0xa3, 0x6e, 0xb7, 0xf2, 0x28, 0x14, - 0x82, 0x84, 0xa2, 0xc1, 0xfe, 0x8d, 0x44, 0x83, 0xfb, 0x44, 0x34, 0xe8, 0x6b, 0xce, 0xe0, 0xdc, - 0xd0, 0xf7, 0xdf, 0xdb, 0xc7, 0x1b, 0x92, 0x03, 0xc3, 0x01, 0x45, 0x60, 0xb8, 0xad, 0x17, 0x18, - 0xde, 0xc7, 0x53, 0x3c, 0x95, 0x1e, 0xa1, 0x1b, 0x78, 0x35, 0x12, 0xaf, 0xcd, 0xe8, 0xe3, 0xb5, - 0xa4, 0x69, 0x93, 0x51, 0xdb, 0x3a, 0xbc, 0x90, 0x49, 0xa5, 0xde, 0x87, 0xa1, 0x3f, 0x65, 0xc4, - 0x82, 0x9e, 0x27, 0xb8, 0xd7, 0x73, 0x63, 0xb1, 0x93, 0x62, 0xc7, 0xf7, 0x38, 0x45, 0xf0, 0x49, - 0x71, 0x09, 0x12, 0x88, 0xd8, 0x9e, 0xd8, 0x19, 0xc5, 0x27, 0x0c, 0x80, 0x80, 0x6b, 0x7f, 0x82, - 0x0b, 0xdb, 0x8f, 0xe2, 0x76, 0x2e, 0xd2, 0x4e, 0x9b, 0x7a, 0x5d, 0xab, 0xc1, 0x25, 0x72, 0xd7, - 0xb3, 0x3c, 0x3f, 0x56, 0x1c, 0x16, 0x6c, 0xb7, 0x56, 0x1c, 0x3c, 0x5d, 0x50, 0x5d, 0x53, 0x47, - 0x30, 0xdc, 0x68, 0xad, 0x38, 0x65, 0x94, 0x9a, 0xff, 0x37, 0x59, 0x84, 0xed, 0x2b, 0xdd, 0x56, - 0xcd, 0x6e, 0xd5, 0x39, 0x36, 0x7e, 0xe4, 0x74, 0x2c, 0x1b, 0xb6, 0x05, 0x0e, 0x59, 0x1e, 0x46, - 0x14, 0x3e, 0x46, 0xf3, 0xd7, 0xfb, 0x60, 0xe7, 0x42, 0xb7, 0xd1, 0x88, 0x4e, 0x27, 0x79, 0x39, - 0x72, 0x20, 0x72, 0x58, 0x79, 0x72, 0x1d, 0x06, 0x94, 0x67, 0x64, 0x4b, 0x30, 0xd2, 0x16, 0x04, - 0x04, 0xa9, 0x7d, 0x21, 0x1b, 0xb5, 0x4c, 0x7a, 0xd7, 0xb7, 0x94, 0x77, 0x48, 0x24, 0x4c, 0x02, - 0x77, 0x7d, 0x09, 0x78, 0xdd, 0x0e, 0x75, 0x39, 0xce, 0x3e, 0x86, 0x73, 0x5a, 0x81, 0xf3, 0xea, - 0x83, 0xb6, 0xdd, 0x59, 0x5f, 0xe0, 0x00, 0x3d, 0x99, 0x5e, 0xdf, 0xe2, 0x0b, 0x81, 0x35, 0x32, - 0xa4, 0x73, 0x5c, 0x35, 0xd1, 0xad, 0xe6, 0x30, 0xad, 0x4c, 0x7f, 0xf9, 0x9e, 0x20, 0xf1, 0x48, - 0x70, 0xeb, 0xa6, 0x8f, 0x04, 0xe7, 0x06, 0xa0, 0xdf, 0x67, 0xd4, 0xac, 0xe3, 0x66, 0x35, 0x61, - 0xdd, 0xe1, 0x32, 0xbf, 0x1a, 0x3d, 0x91, 0x7b, 0x41, 0x73, 0x86, 0x15, 0x9b, 0x36, 0x79, 0x2e, - 0x77, 0x01, 0x4f, 0x76, 0x62, 0x3d, 0xb2, 0x6c, 0xe8, 0x6a, 0x0a, 0xeb, 0x20, 0x89, 0xbc, 0x12, - 0x51, 0xab, 0x5c, 0x34, 0x8a, 0xd3, 0xb6, 0x39, 0xf4, 0x3a, 0xd1, 0x0e, 0xe8, 0x0b, 0x32, 0x51, - 0x4a, 0xe3, 0xfb, 0xd7, 0x30, 0x8e, 0xde, 0xdd, 0x9e, 0x08, 0x37, 0xc4, 0xe5, 0x36, 0xff, 0x99, - 0x2d, 0x00, 0xba, 0x86, 0x9b, 0xa4, 0xde, 0x25, 0x11, 0x73, 0x95, 0xec, 0x45, 0x4e, 0x9e, 0x3b, - 0x28, 0xf3, 0x22, 0x4a, 0x76, 0xd1, 0x71, 0x6d, 0xf6, 0xc6, 0xe9, 0x46, 0x2b, 0xc7, 0xbc, 0x08, - 0xed, 0x49, 0x80, 0x96, 0xda, 0xb3, 0xd5, 0x37, 0xd4, 0x14, 0x75, 0xe7, 0x68, 0xea, 0x72, 0x17, - 0xa8, 0x50, 0x6f, 0x39, 0xb4, 0xb9, 0x10, 0x7b, 0x8f, 0x21, 0x87, 0xcc, 0xc5, 0xee, 0x47, 0xe1, - 0x39, 0x05, 0x9e, 0x28, 0xdf, 0x9b, 0x7f, 0xb6, 0xe4, 0xe2, 0xdd, 0x71, 0x6f, 0xac, 0xab, 0x2b, - 0x2b, 0x9c, 0xf7, 0xf7, 0x6f, 0xd0, 0x57, 0x51, 0x87, 0x23, 0xaf, 0x84, 0xe4, 0x0b, 0xa1, 0x3c, - 0xc2, 0xb2, 0x63, 0x4a, 0x16, 0x10, 0xfa, 0x63, 0x99, 0xdf, 0x2d, 0x62, 0x7e, 0x57, 0xe0, 0x70, - 0xea, 0xbc, 0xc8, 0x3b, 0x45, 0x39, 0xa2, 0xbf, 0xd2, 0xf7, 0xa9, 0xec, 0x7e, 0xa2, 0x1e, 0xfd, - 0x74, 0x01, 0xc6, 0x63, 0xb3, 0x40, 0x76, 0xc3, 0x36, 0xdb, 0xad, 0x34, 0x9c, 0x56, 0x9d, 0x21, - 0x1d, 0x2c, 0x0f, 0xd8, 0xee, 0x4d, 0xa7, 0x55, 0xdf, 0x7c, 0x60, 0x3e, 0x0f, 0xc3, 0xb4, 0xe5, - 0x75, 0xd6, 0x63, 0xc7, 0x39, 0xe9, 0xfb, 0x71, 0x06, 0xc7, 0x9d, 0xc0, 0x6d, 0x18, 0xa3, 0x82, - 0xe8, 0x0a, 0x06, 0xfa, 0x39, 0xdc, 0xc9, 0xa8, 0x04, 0xbe, 0xc5, 0x60, 0xcd, 0x07, 0xf8, 0x7c, - 0x20, 0x93, 0x66, 0xca, 0xb3, 0xd1, 0x90, 0xd8, 0x8f, 0xa8, 0x5c, 0x63, 0x14, 0x51, 0x58, 0xfe, - 0x97, 0x71, 0x1d, 0x27, 0x45, 0x24, 0x59, 0x0c, 0xce, 0x2a, 0xaa, 0x64, 0x22, 0xbc, 0xa4, 0xb4, - 0x7f, 0x63, 0x31, 0x11, 0xaa, 0x24, 0x77, 0x8c, 0xc2, 0x19, 0x28, 0x7c, 0x7d, 0x26, 0x6a, 0xdb, - 0xe8, 0x0c, 0x94, 0x38, 0x90, 0xe2, 0xeb, 0x21, 0x8a, 0x73, 0x46, 0x1d, 0x21, 0xaa, 0x67, 0x71, - 0x03, 0xae, 0x88, 0xd1, 0xb2, 0x11, 0x7d, 0x50, 0x8b, 0x42, 0x3e, 0xb9, 0x0c, 0xe9, 0x43, 0xbe, - 0x60, 0x31, 0xbc, 0xf8, 0x3f, 0x2e, 0xf6, 0x3f, 0x4a, 0xa3, 0x85, 0x63, 0x7e, 0x38, 0xf4, 0x48, - 0xd2, 0xb7, 0x37, 0x17, 0xf3, 0x3f, 0x92, 0xec, 0x3d, 0xba, 0x14, 0x0f, 0xd2, 0x04, 0x4e, 0xf3, - 0x1c, 0x3e, 0x4c, 0x4a, 0xf6, 0xaa, 0x48, 0xc4, 0x4e, 0xd8, 0xca, 0xdf, 0xc3, 0x1a, 0xec, 0x3d, - 0x2c, 0xff, 0x61, 0xee, 0xc1, 0x57, 0x07, 0xb7, 0x9c, 0x5a, 0xb7, 0x41, 0x59, 0x94, 0x29, 0x5e, - 0xd2, 0xbd, 0x8e, 0x0f, 0x24, 0x42, 0x9f, 0xe4, 0x8b, 0x84, 0x90, 0x14, 0x55, 0xaf, 0x50, 0xae, - 0xf1, 0x97, 0xbe, 0x1c, 0x16, 0xa5, 0xb6, 0x1b, 0x76, 0x85, 0x7d, 0xaf, 0x18, 0xaf, 0x82, 0xef, - 0x26, 0xde, 0x37, 0x63, 0x7d, 0x3f, 0x78, 0x6d, 0x53, 0xa6, 0x6f, 0x5b, 0x9d, 0xda, 0xa2, 0x63, - 0xb7, 0xbc, 0x4c, 0xaf, 0xe1, 0x4e, 0xc1, 0x64, 0x9b, 0xf2, 0xbd, 0x46, 0xdb, 0x71, 0x1a, 0x15, - 0xcf, 0x6e, 0x52, 0xd7, 0xb3, 0x9a, 0x6d, 0x66, 0x60, 0xfb, 0xca, 0x3b, 0xf1, 0xeb, 0xa2, 0xe3, - 0x34, 0x96, 0xc4, 0x37, 0xf3, 0x67, 0xc4, 0x45, 0x68, 0xc2, 0x98, 0xc8, 0xdc, 0x32, 0x3c, 0x25, - 0xfc, 0x19, 0x7b, 0xc4, 0x5c, 0xe9, 0xb0, 0x5e, 0x95, 0x36, 0xeb, 0xc6, 0xe9, 0xc8, 0x66, 0x2f, - 0xa7, 0x82, 0x93, 0x1f, 0x1c, 0xcb, 0x3c, 0x80, 0xe6, 0x2b, 0xf0, 0xe5, 0x8a, 0xd5, 0x6c, 0x5b, - 0x76, 0xbd, 0x25, 0xa4, 0xff, 0x1f, 0xfd, 0x68, 0xa2, 0x12, 0xfb, 0x20, 0xad, 0xf7, 0xe1, 0x69, - 0x9f, 0x46, 0x5f, 0x08, 0x48, 0x65, 0x15, 0xbb, 0x04, 0xb7, 0x73, 0xc7, 0x95, 0x1b, 0x6a, 0x8b, - 0x2f, 0xc5, 0x20, 0x6e, 0x66, 0x50, 0xf6, 0x78, 0xaa, 0x4f, 0xe4, 0x21, 0x1c, 0x8a, 0x0c, 0xc9, - 0xc4, 0x2f, 0xc7, 0x75, 0xab, 0xab, 0xd4, 0xd7, 0x4f, 0x3c, 0xfe, 0x3e, 0xaa, 0x3c, 0x4e, 0x14, - 0xac, 0x70, 0xb1, 0x38, 0x8d, 0xf2, 0x81, 0xd0, 0xa0, 0x7e, 0x93, 0xe8, 0x74, 0x17, 0x71, 0x92, - 0x0f, 0xc3, 0x1e, 0xcf, 0xf1, 0xac, 0x46, 0xe2, 0xcc, 0xe4, 0x70, 0x8a, 0x93, 0x0c, 0x4b, 0x6c, - 0x5e, 0xc8, 0x27, 0x0d, 0x38, 0x26, 0xb4, 0x2a, 0x1b, 0x97, 0xfd, 0x79, 0xb9, 0x3c, 0x82, 0xf8, - 0x97, 0x52, 0x99, 0x6d, 0xc2, 0x01, 0x49, 0x8b, 0x92, 0xe9, 0xad, 0xd9, 0xd5, 0xf1, 0x19, 0x31, - 0x72, 0x22, 0xef, 0xe6, 0x05, 0xd4, 0xc9, 0x1b, 0xee, 0x9d, 0xb6, 0x47, 0x6b, 0x77, 0xba, 0xde, - 0x9d, 0x15, 0xde, 0xc1, 0x4d, 0x7f, 0x49, 0x3b, 0x8f, 0xca, 0x9a, 0x08, 0x8c, 0xca, 0xba, 0x1f, - 0xb6, 0xdb, 0x6e, 0xc5, 0xf1, 0xbf, 0x57, 0x9c, 0xae, 0x87, 0x21, 0x12, 0xd8, 0x12, 0xc4, 0x3c, - 0x8c, 0x47, 0x46, 0x31, 0x1c, 0x78, 0x98, 0x26, 0x4d, 0xd3, 0x3c, 0x86, 0xdf, 0x9a, 0x8e, 0x38, - 0xa8, 0xc6, 0x84, 0x98, 0x97, 0xd1, 0xc9, 0x2d, 0x50, 0x3a, 0x6f, 0xbb, 0xfc, 0xb8, 0x0e, 0x83, - 0xd6, 0x80, 0x67, 0x56, 0x33, 0xfd, 0x4f, 0x06, 0xba, 0x38, 0x15, 0x02, 0xa4, 0xe1, 0x19, 0x00, - 0xcf, 0xa6, 0x1d, 0x79, 0xbf, 0x64, 0x1c, 0xe9, 0x2f, 0x0f, 0xf9, 0x2d, 0xfc, 0x5c, 0xe8, 0x16, - 0x6c, 0x97, 0x01, 0x74, 0xef, 0x1c, 0x42, 0x15, 0x6f, 0x04, 0xc6, 0x5a, 0xb2, 0x69, 0x87, 0x0d, - 0x34, 0x6c, 0xf5, 0x46, 0x25, 0xaf, 0xc2, 0xb0, 0xb4, 0x5f, 0x5e, 0x03, 0x4f, 0x20, 0x8e, 0x66, - 0xc3, 0xb6, 0xb4, 0x74, 0xb3, 0x0c, 0xc2, 0x6a, 0x79, 0x0d, 0x69, 0xa7, 0x02, 0xdd, 0x84, 0x7a, - 0x8a, 0xa9, 0xf8, 0x98, 0xb8, 0x67, 0x4b, 0xec, 0x23, 0x1d, 0xee, 0xae, 0x15, 0x4a, 0x2b, 0x35, - 0xfc, 0xde, 0x5b, 0x3e, 0x46, 0x56, 0x5e, 0x25, 0xca, 0x89, 0x95, 0x78, 0xa3, 0xf9, 0x0a, 0x7a, - 0x12, 0x7c, 0x21, 0x7e, 0xcb, 0x76, 0x9b, 0x96, 0x57, 0x0d, 0x9c, 0x78, 0xee, 0x83, 0xe1, 0x5a, - 0xd7, 0xf5, 0x2a, 0x2b, 0x56, 0xd5, 0x73, 0x78, 0x92, 0x4a, 0x5f, 0x19, 0xfc, 0xa6, 0x05, 0xd6, - 0x62, 0xfe, 0x6a, 0x1f, 0x8c, 0x46, 0xa0, 0x89, 0x09, 0xa1, 0x7d, 0x4c, 0xf6, 0xb7, 0x97, 0x64, - 0x16, 0x86, 0xac, 0x35, 0xcb, 0xce, 0xfd, 0x32, 0xa2, 0x07, 0xe5, 0x7b, 0x74, 0xb6, 0xea, 0xf3, - 0x04, 0xe8, 0x1c, 0x82, 0x2c, 0xc0, 0x76, 0x7c, 0x1b, 0x5f, 0x59, 0x75, 0x1a, 0xb5, 0xc0, 0x45, - 0x4c, 0xfa, 0xe5, 0x10, 0x02, 0x5e, 0x77, 0x1a, 0x35, 0xf2, 0x2a, 0x8c, 0xd0, 0x07, 0x6d, 0x5a, - 0xf5, 0x17, 0x2c, 0xa7, 0x65, 0x20, 0x3b, 0xa6, 0x1d, 0x02, 0x94, 0x99, 0x1b, 0x72, 0x05, 0xa0, - 0x66, 0xaf, 0xe0, 0x25, 0x0f, 0x3f, 0xa2, 0xcf, 0xb8, 0x7f, 0xe9, 0x81, 0x99, 0x6f, 0xa3, 0xf3, - 0x4e, 0x98, 0x66, 0x54, 0xb4, 0xd7, 0x81, 0x08, 0xd6, 0x9b, 0xf2, 0x2b, 0x86, 0x29, 0xcf, 0xe9, - 0xd3, 0x0a, 0x04, 0xb6, 0xf2, 0xf8, 0x72, 0x14, 0xbd, 0x79, 0x08, 0x17, 0x3a, 0x76, 0xf5, 0x43, - 0xbf, 0xb9, 0x9e, 0xa0, 0xa4, 0x59, 0xfa, 0x74, 0x01, 0x76, 0x05, 0xba, 0xf0, 0x5d, 0x12, 0x13, - 0xe5, 0xff, 0x73, 0x55, 0x32, 0x7f, 0x51, 0x84, 0xe6, 0x4a, 0x09, 0xe2, 0x04, 0xda, 0x50, 0x14, - 0x03, 0xb2, 0xf3, 0xf6, 0xe0, 0xe8, 0x69, 0xcf, 0x69, 0x12, 0x45, 0x5f, 0xde, 0xbd, 0x9c, 0x3c, - 0xa4, 0xf4, 0x36, 0x11, 0x1b, 0xe8, 0x07, 0xc7, 0xb6, 0xeb, 0xd9, 0x55, 0x39, 0xad, 0xe7, 0x60, - 0x47, 0xe8, 0x03, 0x21, 0xd0, 0xef, 0x9b, 0x6f, 0x34, 0xe5, 0xec, 0x6f, 0x7f, 0xf6, 0x7a, 0xe9, - 0x42, 0xfd, 0x65, 0xfe, 0xc3, 0x6c, 0xa1, 0xa3, 0xd2, 0x8c, 0x21, 0x77, 0x9b, 0xe0, 0xca, 0xd6, - 0x94, 0x47, 0xf0, 0x21, 0x14, 0xe5, 0x00, 0x9c, 0x1f, 0xcc, 0xdf, 0xb2, 0x3d, 0xe7, 0x0d, 0xab, - 0xdb, 0x60, 0xde, 0x40, 0xf2, 0xf0, 0x15, 0x03, 0x26, 0xa3, 0x5f, 0x70, 0xe4, 0xa3, 0x30, 0xd6, - 0xb4, 0x5c, 0x8f, 0x76, 0xc4, 0xc5, 0x25, 0x15, 0xae, 0x72, 0x94, 0xb7, 0xcf, 0x8a, 0x66, 0x72, - 0x02, 0x76, 0xd6, 0x64, 0x50, 0x1f, 0xe8, 0xce, 0xaf, 0x4b, 0x26, 0x7a, 0xdf, 0x7a, 0x20, 0x87, - 0x60, 0xc4, 0x6d, 0x3b, 0x5e, 0xa0, 0x33, 0xbf, 0x2b, 0xda, 0xe1, 0xb7, 0x86, 0xba, 0x55, 0xdf, - 0x9e, 0x39, 0x1e, 0xe8, 0xd6, 0xcf, 0xbb, 0xf9, 0xad, 0xb2, 0x9b, 0x39, 0x8f, 0x86, 0x1e, 0xb7, - 0xad, 0xf3, 0x0b, 0x1d, 0xa7, 0xc9, 0x58, 0x0a, 0x1c, 0x48, 0xad, 0xf9, 0xbf, 0x2b, 0xe1, 0x53, - 0xd1, 0xed, 0xac, 0x51, 0x5c, 0xc1, 0x8a, 0x97, 0x55, 0x09, 0x58, 0x50, 0x26, 0xda, 0x9d, 0xad, - 0xd8, 0x1c, 0x5f, 0xb7, 0x5d, 0xcf, 0xe9, 0xd8, 0x55, 0x19, 0x4d, 0x55, 0x9d, 0x40, 0xb0, 0xa4, - 0x45, 0xe1, 0xa0, 0x41, 0x51, 0xa1, 0x90, 0x1b, 0xfa, 0x1d, 0x22, 0xe8, 0x63, 0x1f, 0x52, 0x92, - 0x0c, 0x42, 0x38, 0xb6, 0x7b, 0x81, 0x5f, 0xe6, 0x17, 0x0c, 0x98, 0x60, 0x9f, 0xf9, 0x88, 0x7e, - 0xe4, 0xe4, 0x6f, 0xe9, 0xc8, 0x8b, 0x40, 0xf8, 0x08, 0xf5, 0x8e, 0xd3, 0x6d, 0xfb, 0xb1, 0xa6, - 0x4b, 0xab, 0xa8, 0xd8, 0x63, 0xec, 0xcb, 0x35, 0xfc, 0x70, 0x97, 0x56, 0xc9, 0x6e, 0xd8, 0xd6, - 0xb4, 0x1e, 0x54, 0xac, 0x3a, 0x45, 0x35, 0x1f, 0x68, 0x5a, 0x0f, 0x66, 0xeb, 0x94, 0x4c, 0xc3, - 0x84, 0xdd, 0xaa, 0x36, 0xba, 0x3e, 0xa9, 0xd6, 0xdb, 0x95, 0x55, 0x3e, 0x08, 0x3e, 0xeb, 0x1b, - 0xc7, 0x4f, 0x65, 0xeb, 0x6d, 0x1c, 0xdd, 0xd7, 0x39, 0xd1, 0x5f, 0xee, 0xc4, 0xd9, 0xad, 0x6f, - 0x79, 0x14, 0xdb, 0xc5, 0x36, 0xdb, 0xfc, 0x8c, 0x81, 0x27, 0xfe, 0x32, 0x85, 0xc2, 0xf2, 0xec, - 0x86, 0xed, 0xad, 0x67, 0xba, 0xcd, 0xfc, 0x30, 0xec, 0xe2, 0xfc, 0x21, 0x49, 0x7e, 0xfc, 0xe9, - 0x33, 0x9e, 0x12, 0x65, 0x25, 0x88, 0xaa, 0x3c, 0xe1, 0xc5, 0x1b, 0xcd, 0xff, 0x36, 0x42, 0x1a, - 0x19, 0xa4, 0x4e, 0xbe, 0x44, 0x86, 0x35, 0xd9, 0x8a, 0x77, 0x7f, 0xfb, 0x52, 0xbd, 0x5e, 0x0f, - 0x84, 0xbc, 0x09, 0x63, 0x82, 0x78, 0x29, 0x2b, 0x4e, 0x7d, 0xd0, 0x10, 0x62, 0x72, 0x2e, 0xe6, - 0xea, 0x4e, 0x0b, 0xf1, 0x05, 0x2c, 0xcd, 0x28, 0x62, 0x11, 0x9f, 0xc8, 0x15, 0x18, 0x0e, 0x4e, - 0x56, 0x1f, 0xd3, 0x2d, 0x33, 0x5d, 0xb7, 0xca, 0xd0, 0x91, 0x33, 0x69, 0x9e, 0xc4, 0x7c, 0x86, - 0x39, 0xbb, 0x65, 0x09, 0x29, 0xa4, 0x5d, 0xb6, 0x9a, 0xcb, 0xf8, 0xb8, 0x3a, 0x02, 0x24, 0x4d, - 0x61, 0xe4, 0xa6, 0x48, 0x35, 0x4b, 0x1c, 0x1c, 0xa7, 0x22, 0x7a, 0x51, 0x74, 0x1f, 0x8e, 0x25, - 0xde, 0xfd, 0x5f, 0x71, 0x5a, 0x35, 0x9b, 0x3f, 0x12, 0x7b, 0xdc, 0x09, 0xc6, 0x9f, 0xed, 0x83, - 0x03, 0xb1, 0x5b, 0xea, 0xe8, 0x78, 0x3f, 0xba, 0x0f, 0x3c, 0xae, 0xc1, 0x76, 0xaf, 0x63, 0xd7, - 0xeb, 0xb4, 0xb3, 0x98, 0xf7, 0x26, 0x32, 0x04, 0x98, 0xfe, 0xd0, 0xe3, 0x10, 0x6c, 0xb3, 0x5d, - 0x76, 0xbd, 0xcf, 0x42, 0xce, 0xc1, 0xb9, 0xe1, 0xef, 0xbf, 0xb7, 0x4f, 0x34, 0x95, 0xc5, 0x1f, - 0x91, 0xf7, 0x20, 0xdb, 0x14, 0xef, 0x41, 0x06, 0x7b, 0xef, 0x41, 0x3e, 0x66, 0x84, 0xde, 0xd2, - 0x69, 0x95, 0x42, 0xe6, 0x80, 0x86, 0x5f, 0x27, 0x9c, 0xcd, 0xfa, 0x3a, 0x21, 0x8a, 0x52, 0xbe, - 0x51, 0x10, 0x57, 0x65, 0xe2, 0xad, 0x7e, 0xae, 0xe7, 0x94, 0xe6, 0xef, 0x8a, 0x13, 0xac, 0x04, - 0x70, 0x24, 0xf9, 0x22, 0xf4, 0xcf, 0xd9, 0xd2, 0x59, 0x1c, 0xd1, 0x13, 0x1c, 0x78, 0x44, 0xc1, - 0xa0, 0x7c, 0xe8, 0x59, 0xf7, 0x9e, 0x48, 0xd0, 0xcc, 0x01, 0xed, 0x43, 0x25, 0xbc, 0x5f, 0x14, - 0x07, 0xe0, 0xe1, 0x2b, 0xd3, 0x7c, 0x4c, 0xbf, 0x23, 0xc2, 0x47, 0x25, 0x92, 0x1f, 0x4a, 0xd6, - 0xdf, 0x35, 0x60, 0x3c, 0xd6, 0xfb, 0x89, 0xae, 0xff, 0xf0, 0x8a, 0xe9, 0x8b, 0xae, 0x98, 0x98, - 0x09, 0xec, 0x4f, 0xb8, 0xce, 0xbb, 0x85, 0x6b, 0x08, 0x2f, 0xa4, 0x3d, 0xa7, 0x69, 0x57, 0xaf, - 0x3e, 0xa0, 0xd5, 0xae, 0xaf, 0xec, 0x0b, 0x94, 0xde, 0xea, 0x36, 0x3c, 0xbb, 0xdd, 0xb0, 0x69, - 0x27, 0xd3, 0xdc, 0xae, 0xe1, 0xf5, 0x66, 0x16, 0x74, 0xf2, 0x96, 0x1e, 0x9a, 0xb2, 0x35, 0x8f, - 0x18, 0x03, 0x60, 0xe6, 0x59, 0x91, 0x8a, 0xcd, 0x66, 0xf8, 0xae, 0x67, 0xdd, 0xa3, 0xd7, 0x3a, - 0x56, 0xef, 0x91, 0xe6, 0x14, 0x6c, 0xab, 0xfb, 0xbf, 0x29, 0x15, 0xe7, 0x3e, 0xf8, 0xd3, 0xfc, - 0x4d, 0x99, 0x69, 0x1d, 0x03, 0x45, 0x02, 0xcf, 0xc2, 0x56, 0xd6, 0x19, 0xcf, 0x37, 0x54, 0x3e, - 0x95, 0xc3, 0x73, 0x50, 0x0e, 0x40, 0x6e, 0x43, 0xef, 0x96, 0xad, 0xc2, 0x71, 0xe8, 0x13, 0xb7, - 0xe4, 0x45, 0x19, 0x47, 0x33, 0x42, 0x43, 0xbf, 0xcd, 0x25, 0xb4, 0x16, 0xec, 0xd7, 0x6c, 0xd7, - 0x5b, 0x75, 0x3a, 0xf6, 0x4f, 0xb2, 0x47, 0x9c, 0x31, 0x3e, 0x3b, 0x61, 0x3e, 0x3b, 0x41, 0x09, - 0x14, 0xc2, 0x12, 0xf8, 0x20, 0x9e, 0x0b, 0x25, 0x61, 0x45, 0x11, 0x9c, 0x86, 0x01, 0x7c, 0x9b, - 0xca, 0xe7, 0xe7, 0x19, 0x9c, 0x9f, 0x5d, 0xf1, 0xf9, 0xb9, 0xd1, 0xf2, 0xca, 0xd8, 0x59, 0x9e, - 0x42, 0xc6, 0x31, 0xbb, 0xa9, 0x04, 0x9b, 0x9f, 0x17, 0x67, 0x51, 0x89, 0xd0, 0x48, 0xd8, 0x07, - 0x80, 0xf0, 0xe3, 0x54, 0x06, 0x55, 0xc9, 0x43, 0xe4, 0x18, 0x03, 0xe4, 0xc8, 0xf9, 0xfb, 0xd9, - 0x59, 0x18, 0x60, 0x68, 0xdc, 0x94, 0xe3, 0xee, 0x04, 0x41, 0x21, 0xa0, 0x79, 0x16, 0x03, 0x28, - 0xbc, 0x4b, 0xe2, 0x3b, 0xd4, 0x4c, 0x2b, 0xe7, 0x2d, 0x8c, 0xa2, 0x22, 0x90, 0xc8, 0xe7, 0x65, - 0xd8, 0x86, 0x3b, 0x5f, 0xd4, 0xc2, 0x67, 0xb5, 0xa9, 0xc9, 0x02, 0x5c, 0x00, 0xc9, 0x32, 0x1e, - 0xa1, 0xcf, 0x81, 0xcb, 0xa1, 0xa7, 0x12, 0xbf, 0x2a, 0x8b, 0x3a, 0x64, 0x1b, 0xbd, 0x57, 0xd4, - 0xe1, 0x1e, 0xec, 0x08, 0x7d, 0xd2, 0x87, 0xf9, 0x97, 0x7a, 0xcc, 0xe6, 0xb0, 0x8b, 0x92, 0xd7, - 0x53, 0xf2, 0x51, 0x51, 0xcb, 0x69, 0xde, 0xb2, 0x5b, 0x22, 0x8b, 0x40, 0x9f, 0x8b, 0xff, 0x96, - 0x7c, 0x4d, 0x14, 0x85, 0xea, 0x15, 0x33, 0x09, 0xa9, 0x57, 0xb6, 0x68, 0x0b, 0x57, 0xc2, 0x3e, - 0x05, 0x76, 0x39, 0x05, 0xeb, 0xf2, 0xc9, 0x55, 0xac, 0x03, 0x8e, 0xff, 0x26, 0x4c, 0xf0, 0xe4, - 0xfa, 0xa6, 0xdd, 0x92, 0xd9, 0x15, 0x62, 0x42, 0x0e, 0xeb, 0x32, 0xec, 0x83, 0xdc, 0x8c, 0xd7, - 0xa2, 0x03, 0x98, 0x1f, 0x85, 0xed, 0x77, 0xda, 0xb4, 0x75, 0xc3, 0x5f, 0x75, 0xa9, 0x5b, 0xb0, - 0x4d, 0xce, 0xcd, 0x19, 0xbc, 0xf6, 0x0c, 0x0e, 0x98, 0x69, 0x79, 0x7c, 0x10, 0x17, 0x56, 0x18, - 0x30, 0x71, 0x6a, 0xd4, 0x5b, 0xea, 0x10, 0x30, 0x82, 0x3c, 0x7f, 0x0a, 0x86, 0x64, 0x2a, 0x35, - 0xd9, 0x09, 0x63, 0xfe, 0xbf, 0x95, 0xd7, 0x5b, 0x6e, 0x9b, 0x56, 0xed, 0x15, 0x9b, 0xd6, 0xc6, - 0xb6, 0x90, 0x6d, 0xd0, 0x37, 0xd7, 0x5d, 0x1f, 0x33, 0xc8, 0x20, 0xf4, 0xdf, 0xa5, 0x8d, 0xc6, - 0x58, 0xe1, 0xf9, 0x37, 0x60, 0x67, 0xd2, 0x23, 0x7a, 0x1f, 0x41, 0x00, 0x96, 0x21, 0x1e, 0xdb, - 0x42, 0x26, 0x60, 0x74, 0xa1, 0xe3, 0x34, 0xdf, 0x74, 0x3a, 0xae, 0xb7, 0xe4, 0xcc, 0x51, 0xd7, - 0x1b, 0x33, 0x44, 0xa3, 0xff, 0x6b, 0xc9, 0x61, 0x9f, 0xc6, 0x0a, 0x33, 0x5f, 0xb9, 0x07, 0x5b, - 0x19, 0xa3, 0xe4, 0x5d, 0x03, 0x76, 0xdd, 0x3c, 0x19, 0x89, 0x8f, 0xe6, 0x1c, 0xe7, 0x1e, 0x39, - 0xaf, 0x2b, 0x29, 0xa3, 0x8f, 0xcc, 0x8a, 0x17, 0x36, 0x04, 0xcb, 0xe5, 0x6c, 0xce, 0x7e, 0xec, - 0xdd, 0x7f, 0xf9, 0xe5, 0xc2, 0x05, 0x72, 0xae, 0x94, 0x5c, 0x7b, 0xaa, 0x77, 0x64, 0x54, 0xba, - 0x79, 0x52, 0xd2, 0x5b, 0x7a, 0x28, 0xa7, 0xf5, 0x11, 0xf9, 0xa2, 0x01, 0xa3, 0x37, 0x4f, 0xca, - 0x50, 0x97, 0xf1, 0x73, 0x2a, 0x8d, 0xa6, 0xa4, 0xc0, 0xba, 0x78, 0x3a, 0x27, 0x14, 0xf2, 0x70, - 0x81, 0xf1, 0x70, 0x9a, 0x9c, 0x54, 0xf0, 0xe0, 0xb6, 0x1d, 0x4f, 0x49, 0xfd, 0x6f, 0x1b, 0x30, - 0x91, 0x50, 0xf0, 0x88, 0x9c, 0xd0, 0xd1, 0x92, 0x58, 0x3a, 0xa9, 0x38, 0x93, 0x07, 0x04, 0x69, - 0x3f, 0xc6, 0x68, 0x3f, 0x4c, 0x0e, 0x95, 0xf4, 0xc5, 0xc6, 0x90, 0xaa, 0x3f, 0x35, 0x80, 0xc4, - 0x2b, 0x0c, 0x91, 0xd3, 0x79, 0x2b, 0x12, 0x71, 0x82, 0x5f, 0xda, 0x58, 0x21, 0x23, 0xf3, 0x3c, - 0x23, 0xfa, 0x14, 0x99, 0x49, 0x21, 0xba, 0xe4, 0xc6, 0x49, 0xfd, 0xa2, 0x01, 0xe3, 0x31, 0xd4, - 0x7a, 0x7d, 0x51, 0x55, 0xdf, 0x28, 0x9e, 0xce, 0x09, 0x85, 0xe4, 0x9f, 0x63, 0xe4, 0x9f, 0x24, - 0x27, 0x72, 0x93, 0x4f, 0xbe, 0x60, 0xc0, 0x58, 0xb4, 0x52, 0x12, 0x39, 0x99, 0x65, 0xde, 0x23, - 0x0e, 0xba, 0x78, 0x2a, 0x1f, 0x10, 0x92, 0x7e, 0x96, 0x91, 0x3e, 0x43, 0x8e, 0xa7, 0x91, 0x4e, - 0xa3, 0x44, 0xfe, 0x89, 0x01, 0xa3, 0x91, 0xca, 0x43, 0x44, 0xab, 0xb0, 0xc9, 0xd5, 0x9a, 0x8a, - 0x27, 0x73, 0xc1, 0x64, 0xb4, 0x32, 0xf2, 0xef, 0x48, 0x41, 0xa6, 0xd2, 0x43, 0x94, 0xff, 0x23, - 0x26, 0xf9, 0x68, 0xe5, 0x24, 0x92, 0x87, 0x98, 0x6c, 0x92, 0x57, 0x15, 0x67, 0xca, 0x2e, 0xf9, - 0x68, 0x4d, 0x29, 0xf2, 0x2d, 0x03, 0x76, 0x25, 0x96, 0xa9, 0x21, 0x67, 0x33, 0x51, 0x92, 0x50, - 0x35, 0xa9, 0x78, 0x6e, 0x03, 0x90, 0xc8, 0xc8, 0x0d, 0xc6, 0xc8, 0x15, 0x32, 0x9b, 0x99, 0x91, - 0x20, 0x9a, 0x90, 0xed, 0xfc, 0x1b, 0x03, 0x26, 0x93, 0x0b, 0xf0, 0x90, 0xfc, 0x04, 0xca, 0xf9, - 0x39, 0xbf, 0x11, 0x50, 0x64, 0xee, 0x32, 0x63, 0xee, 0x2c, 0x79, 0x69, 0x43, 0xcc, 0xb9, 0xe4, - 0xe7, 0x0b, 0x70, 0x30, 0x43, 0x7d, 0x24, 0xb2, 0xa0, 0xa5, 0x31, 0x73, 0x11, 0xa9, 0xe2, 0xb5, - 0x4d, 0xe3, 0x41, 0xc6, 0xdf, 0x64, 0x8c, 0xbf, 0x46, 0xee, 0xa4, 0x32, 0xce, 0x91, 0x56, 0x44, - 0x43, 0xc5, 0x43, 0xb4, 0x95, 0x50, 0x9d, 0xa7, 0xd2, 0x43, 0xf6, 0xf3, 0x11, 0xf9, 0x54, 0x01, - 0x9e, 0xcd, 0x52, 0x31, 0x8a, 0x6c, 0x96, 0x15, 0x39, 0xff, 0xd7, 0x37, 0x8f, 0x08, 0x85, 0xb2, - 0xc8, 0x84, 0xf2, 0x2a, 0xb9, 0xfe, 0x98, 0x84, 0xe2, 0x92, 0xcf, 0x18, 0x30, 0x1c, 0x28, 0x67, - 0x42, 0xa6, 0xb5, 0x1e, 0x28, 0x56, 0x81, 0xa5, 0x58, 0xca, 0xdc, 0x1f, 0x59, 0x78, 0x81, 0xb1, - 0x70, 0x88, 0x1c, 0xd4, 0xc5, 0x36, 0x78, 0xa4, 0x4e, 0x7e, 0xcd, 0x00, 0x08, 0x54, 0xa8, 0x39, - 0x96, 0x6d, 0x30, 0x41, 0xdb, 0x74, 0xd6, 0xee, 0x48, 0xda, 0x19, 0x46, 0xda, 0x09, 0x52, 0xca, - 0x40, 0x5a, 0xc8, 0x6c, 0xfc, 0x8e, 0x01, 0xa3, 0x91, 0xba, 0x30, 0x7a, 0x57, 0x94, 0x5c, 0xce, - 0x46, 0xef, 0x8a, 0x14, 0x85, 0x67, 0xcc, 0xe3, 0x8c, 0xea, 0xe7, 0xc9, 0x11, 0x1d, 0xd5, 0x2b, - 0xdd, 0x46, 0xa3, 0x22, 0xa4, 0xfa, 0x4e, 0xbc, 0xf6, 0xcf, 0x89, 0xec, 0x23, 0x67, 0x0a, 0x0e, - 0x93, 0xab, 0xca, 0x64, 0x0b, 0x6c, 0x03, 0xb4, 0x86, 0xa4, 0xfc, 0x7b, 0x06, 0xec, 0x08, 0xc5, - 0xcb, 0xe4, 0x78, 0xda, 0x04, 0xc7, 0x02, 0xf2, 0x13, 0x39, 0x20, 0x32, 0x06, 0x57, 0x8c, 0x66, - 0x59, 0x1c, 0x37, 0x44, 0xf1, 0x57, 0x0d, 0x18, 0x8b, 0x26, 0xd1, 0xeb, 0x5d, 0xbc, 0xa2, 0x7c, - 0x8c, 0xde, 0xc5, 0xab, 0xaa, 0x90, 0x98, 0x0b, 0x8c, 0xf4, 0x57, 0xc8, 0xe5, 0x54, 0xd2, 0x43, - 0xfa, 0x5c, 0x7a, 0x18, 0x3a, 0x93, 0x7d, 0x44, 0xfe, 0xd5, 0x80, 0x29, 0x55, 0x0d, 0x12, 0xa2, - 0xdd, 0xad, 0xa5, 0x14, 0xab, 0x29, 0x5e, 0xdc, 0x18, 0x70, 0x46, 0x73, 0xa8, 0xe2, 0x0f, 0x79, - 0x93, 0xc1, 0x98, 0xb8, 0xbb, 0x7f, 0x44, 0xfe, 0xce, 0xdf, 0x8e, 0xc4, 0x6a, 0x05, 0xa5, 0x6c, - 0x47, 0x54, 0x25, 0x8e, 0x52, 0xb6, 0x23, 0xca, 0x92, 0x44, 0x79, 0xf8, 0xaa, 0x2c, 0xaf, 0x63, - 0x4a, 0xac, 0x76, 0x06, 0xdf, 0x31, 0x60, 0x2c, 0x5a, 0x84, 0x58, 0xaf, 0x89, 0x8a, 0xaa, 0xc8, - 0xc5, 0x53, 0xf9, 0x80, 0x90, 0xa3, 0xd3, 0x8c, 0xa3, 0x12, 0x39, 0x56, 0xd2, 0x14, 0x97, 0x76, - 0x63, 0x64, 0x7f, 0xdb, 0x80, 0x3d, 0x3d, 0xed, 0x66, 0xbe, 0xd1, 0xa6, 0xad, 0x27, 0xb0, 0x92, - 0x32, 0xcd, 0x88, 0x27, 0xe8, 0xab, 0x64, 0x58, 0x53, 0x5f, 0x43, 0x4d, 0x0b, 0x27, 0x3d, 0xa6, - 0x6b, 0x5a, 0x62, 0x55, 0x99, 0x74, 0x4d, 0x4b, 0x2e, 0x23, 0x93, 0xba, 0x8f, 0xe1, 0x2e, 0x2f, - 0x9a, 0xc7, 0x19, 0x32, 0x72, 0xef, 0x19, 0x30, 0xa5, 0x2a, 0x57, 0xa3, 0x37, 0x0e, 0x29, 0xa5, - 0x72, 0xf4, 0xc6, 0x21, 0xad, 0x42, 0x8e, 0x79, 0x8d, 0xb1, 0x36, 0x4b, 0x5e, 0x4e, 0x3f, 0x08, - 0xd2, 0x33, 0xf8, 0x97, 0x06, 0x4c, 0x24, 0x9c, 0x38, 0x91, 0x97, 0xb2, 0x91, 0x17, 0xf3, 0x41, - 0x67, 0x72, 0xc3, 0x21, 0x47, 0x2f, 0x33, 0x8e, 0xce, 0x91, 0x33, 0xe9, 0x1c, 0x25, 0xfb, 0xa3, - 0x7f, 0x34, 0x60, 0x32, 0xb9, 0x32, 0x81, 0x7e, 0x7b, 0xa3, 0xad, 0x8a, 0xa1, 0xdf, 0xde, 0xe8, - 0x0b, 0x21, 0x98, 0x37, 0x19, 0x4b, 0x0b, 0x64, 0x3e, 0x23, 0x4b, 0xfa, 0x35, 0xf5, 0x3f, 0x06, - 0xec, 0xd5, 0x97, 0x41, 0x20, 0xb3, 0xd9, 0x1d, 0x8e, 0x8a, 0xdf, 0xb9, 0xcd, 0xa0, 0x40, 0xbe, - 0xdf, 0x60, 0x7c, 0x2f, 0x92, 0xdb, 0x1b, 0xe2, 0x5b, 0xed, 0xbf, 0xfe, 0x3d, 0xb4, 0x18, 0x23, - 0x5e, 0xec, 0x42, 0x0e, 0xc5, 0x8b, 0xf9, 0xb2, 0x8b, 0x1b, 0x03, 0xde, 0x28, 0xbf, 0x19, 0xfd, - 0xda, 0x7f, 0x1a, 0xb0, 0x2f, 0xaa, 0x62, 0x51, 0x37, 0xf1, 0x84, 0x54, 0x3b, 0x07, 0xcb, 0xb9, - 0x1c, 0xc7, 0xef, 0x1b, 0x30, 0x1e, 0x4b, 0x7a, 0xd7, 0x9f, 0x37, 0xaa, 0x6a, 0x53, 0xe8, 0xcf, - 0x1b, 0x95, 0x99, 0xf5, 0xe6, 0x09, 0xc6, 0xda, 0x0b, 0xe4, 0x68, 0x06, 0xd3, 0x8a, 0xf4, 0x7d, - 0xc9, 0x80, 0xb1, 0x58, 0x4d, 0x85, 0x93, 0x79, 0x86, 0xcf, 0xe4, 0xc0, 0x55, 0x79, 0xf6, 0xe6, - 0x25, 0x46, 0xf2, 0x19, 0x72, 0x3a, 0x33, 0xc9, 0x21, 0xcb, 0xf9, 0x6d, 0x03, 0x76, 0x2b, 0x32, - 0xe3, 0xf5, 0x57, 0x1d, 0xfa, 0x94, 0xfc, 0xe2, 0x85, 0x0d, 0xc1, 0x22, 0x4f, 0xf3, 0x8c, 0xa7, - 0xcb, 0xe4, 0x62, 0x56, 0x9e, 0x84, 0x9d, 0x08, 0xb1, 0xf6, 0xe7, 0x06, 0xec, 0x4c, 0xca, 0x1b, - 0x24, 0x67, 0xb2, 0x45, 0x7a, 0xb1, 0xfc, 0xfd, 0xe2, 0xd9, 0xfc, 0x80, 0x19, 0x77, 0xe0, 0xf2, - 0xef, 0xe8, 0xa2, 0xf8, 0x9c, 0x01, 0x13, 0xe2, 0x08, 0x25, 0x90, 0xae, 0xa8, 0x3f, 0xce, 0x88, - 0xa7, 0x3c, 0xea, 0x8f, 0x33, 0x12, 0xf2, 0x20, 0x53, 0x8f, 0x33, 0x9a, 0x0c, 0xa6, 0xc2, 0xf2, - 0x0f, 0xc9, 0x2f, 0x19, 0x30, 0x24, 0x93, 0x1b, 0xc9, 0x8b, 0xba, 0xb1, 0xa2, 0xc9, 0x91, 0xc5, - 0x63, 0x19, 0x7b, 0x23, 0x5d, 0x47, 0x18, 0x5d, 0x26, 0xd9, 0xaf, 0xa0, 0xab, 0x2d, 0xc9, 0xf8, - 0x43, 0x03, 0xc6, 0x63, 0x65, 0x10, 0xf4, 0xf6, 0x44, 0x55, 0x73, 0x41, 0x6f, 0x4f, 0x94, 0xb5, - 0x16, 0xcc, 0x53, 0x8c, 0xd8, 0x69, 0xf2, 0x62, 0x1a, 0xb1, 0x21, 0xc5, 0xfd, 0xb2, 0x01, 0x13, - 0x09, 0x19, 0xfe, 0x24, 0xe3, 0x25, 0x50, 0x4c, 0xc2, 0x67, 0x72, 0xc3, 0x65, 0x3c, 0x49, 0x0f, - 0x90, 0x1f, 0x51, 0xdb, 0x7f, 0x36, 0xa0, 0xa8, 0xae, 0x1c, 0x40, 0x2e, 0xe5, 0xa3, 0x28, 0x3a, - 0x1b, 0x97, 0x37, 0x0a, 0x9e, 0xd1, 0xbe, 0x28, 0xf9, 0x0a, 0x4d, 0xd3, 0xc7, 0x0b, 0x70, 0x30, - 0x43, 0xbe, 0xbe, 0xfe, 0x04, 0x3a, 0x7b, 0x29, 0x0a, 0xfd, 0x09, 0x74, 0x8e, 0xc2, 0x01, 0xe6, - 0x6d, 0xc6, 0xfe, 0x75, 0xb2, 0xa0, 0x32, 0x46, 0xf2, 0xd9, 0x54, 0x36, 0x41, 0x7c, 0xdd, 0x80, - 0x89, 0x84, 0xe4, 0x7d, 0xbd, 0xbe, 0xaa, 0xeb, 0x0d, 0xe8, 0xf5, 0x55, 0x53, 0x67, 0xc0, 0x7c, - 0x85, 0x31, 0x76, 0x9e, 0x9c, 0x55, 0xcd, 0xab, 0x2c, 0x53, 0x14, 0xa8, 0xd4, 0x14, 0x62, 0xe5, - 0x9b, 0x06, 0xec, 0x56, 0x64, 0xf5, 0xeb, 0xdd, 0xa1, 0xbe, 0x28, 0x81, 0xde, 0x1d, 0xa6, 0x14, - 0x23, 0x48, 0x75, 0xf1, 0x94, 0xc1, 0x2b, 0x79, 0xfa, 0x5b, 0x03, 0x26, 0x93, 0x93, 0xfe, 0xf5, - 0x11, 0xa4, 0xb6, 0x62, 0x81, 0x3e, 0x82, 0xd4, 0x57, 0x2a, 0x30, 0xaf, 0x30, 0x86, 0x2e, 0x91, - 0x0b, 0x59, 0xe7, 0x09, 0x0b, 0x59, 0xc5, 0xa6, 0x4a, 0x51, 0x9e, 0x40, 0x3f, 0x55, 0xfa, 0x42, - 0x2c, 0xfa, 0xa9, 0x4a, 0xa9, 0x87, 0x90, 0x3a, 0x55, 0xfc, 0xc9, 0xa8, 0x48, 0x3e, 0x48, 0x3a, - 0xcd, 0x1a, 0x8f, 0xe7, 0x52, 0xa7, 0x9f, 0xec, 0x24, 0xa4, 0xfc, 0xeb, 0x5d, 0x96, 0x32, 0x69, - 0xdf, 0x9c, 0x61, 0x1c, 0xbc, 0x48, 0x9e, 0x57, 0x70, 0x90, 0x90, 0x3a, 0x4d, 0xfe, 0xc2, 0x80, - 0xa9, 0xc5, 0x5e, 0x32, 0xf6, 0x13, 0xa4, 0x3e, 0xed, 0xbd, 0x43, 0x30, 0x25, 0x3d, 0xca, 0xc5, - 0x97, 0x44, 0x62, 0x4f, 0x38, 0x57, 0x5f, 0x6f, 0xc6, 0xd4, 0x75, 0x07, 0xf4, 0x66, 0x4c, 0x53, - 0x8b, 0x20, 0x35, 0x6a, 0x08, 0x11, 0x2f, 0x12, 0xe9, 0xc9, 0xbb, 0x06, 0x4c, 0x26, 0xa7, 0x4f, - 0xeb, 0x97, 0xb9, 0x36, 0x67, 0x5b, 0xbf, 0xcc, 0xf5, 0xd9, 0xda, 0xe6, 0x1c, 0xe3, 0xe3, 0x22, - 0x39, 0xaf, 0xe0, 0x23, 0x94, 0xc8, 0x1c, 0x4c, 0xdc, 0x0e, 0x3c, 0x26, 0xf0, 0x27, 0x25, 0x21, - 0x79, 0x59, 0x3f, 0x29, 0xea, 0x24, 0x6b, 0xfd, 0xa4, 0x68, 0x12, 0xaf, 0x53, 0x27, 0x25, 0x31, - 0x2b, 0x9b, 0xfc, 0x99, 0x01, 0xe3, 0xb1, 0x1c, 0x5b, 0xfd, 0x92, 0x50, 0x65, 0x5e, 0xeb, 0x97, - 0x84, 0x32, 0x91, 0x37, 0xf5, 0x70, 0x2d, 0x9e, 0xe5, 0x5b, 0x7a, 0x18, 0xc8, 0xf0, 0x7e, 0x44, - 0xfe, 0xda, 0x80, 0xdd, 0x8a, 0x64, 0x53, 0xbd, 0xa1, 0xd5, 0xe7, 0xf8, 0xea, 0x0d, 0x6d, 0x4a, - 0x76, 0x6b, 0xea, 0x42, 0x17, 0xaf, 0x5f, 0x13, 0x72, 0x5f, 0xc9, 0x37, 0x0c, 0xd8, 0xa3, 0x4c, - 0x23, 0x25, 0x17, 0x33, 0x6a, 0x48, 0x62, 0x86, 0x6b, 0xf1, 0xd2, 0x06, 0xa1, 0x91, 0xad, 0x97, - 0x18, 0x5b, 0xc7, 0xc9, 0x74, 0x16, 0x2d, 0x63, 0xa5, 0x10, 0xfc, 0x0d, 0x98, 0x4b, 0x3e, 0x6b, - 0xc0, 0x48, 0x38, 0x29, 0x55, 0xb9, 0x0b, 0x4b, 0xcc, 0x6a, 0x55, 0xee, 0xc2, 0x92, 0x33, 0x5d, - 0xcd, 0x12, 0xa3, 0xf3, 0x28, 0x39, 0xac, 0xda, 0x1d, 0xda, 0x9e, 0x53, 0xe1, 0xe9, 0xa3, 0x36, - 0xa3, 0xe6, 0xab, 0x06, 0xd6, 0xc0, 0x89, 0x65, 0x8a, 0xea, 0x57, 0x83, 0x2a, 0x3d, 0x55, 0xbf, - 0x1a, 0x94, 0xe9, 0xa8, 0xa9, 0xcf, 0x4e, 0x38, 0xcd, 0x32, 0xcc, 0x28, 0x3d, 0x0c, 0xe5, 0xc0, - 0xb2, 0x58, 0x77, 0x32, 0x39, 0xd5, 0x54, 0x6f, 0x65, 0xb5, 0x19, 0xae, 0x7a, 0x2b, 0xab, 0xcf, - 0x6c, 0x4d, 0x3d, 0x5a, 0x58, 0x95, 0xe0, 0x95, 0x50, 0x06, 0x2c, 0x0b, 0xdb, 0x13, 0xaa, 0x8c, - 0xe8, 0x4d, 0xab, 0xba, 0xa6, 0x89, 0xde, 0xb4, 0x6a, 0xca, 0x99, 0xa4, 0x86, 0xed, 0xc1, 0x5a, - 0x27, 0x15, 0x67, 0x05, 0x3d, 0x9f, 0x1b, 0xf0, 0x12, 0x7f, 0x6f, 0xc0, 0x1e, 0x65, 0x05, 0x13, - 0xfd, 0x8a, 0x4e, 0xab, 0x90, 0xa2, 0x5f, 0xd1, 0xa9, 0x65, 0x53, 0xcc, 0x8b, 0x8c, 0xb9, 0x97, - 0xc8, 0x29, 0x55, 0x44, 0x98, 0xc0, 0x59, 0x45, 0xd6, 0x66, 0xfa, 0xa2, 0x01, 0x63, 0xd1, 0x7c, - 0x58, 0xfd, 0xe9, 0xa2, 0x22, 0xb7, 0xb7, 0x78, 0x2a, 0x1f, 0x50, 0x46, 0xea, 0x7b, 0xff, 0x15, - 0x21, 0x42, 0x86, 0x42, 0xf4, 0xcf, 0x1b, 0xb0, 0x33, 0x21, 0xb3, 0xd4, 0xd5, 0xbf, 0x6f, 0x48, - 0xca, 0x7f, 0xd5, 0xbf, 0x6f, 0x48, 0x4c, 0x7e, 0x4d, 0xbd, 0x9a, 0x5d, 0x66, 0x50, 0x22, 0x8d, - 0x59, 0x1e, 0xe8, 0x7e, 0xb2, 0x00, 0x07, 0x52, 0x93, 0x1a, 0xc9, 0x7c, 0x9e, 0x03, 0x74, 0x55, - 0xa2, 0x6c, 0xf1, 0xea, 0x26, 0xb1, 0x20, 0xa7, 0x1f, 0x64, 0x9c, 0x96, 0xc9, 0x62, 0xe6, 0x4b, - 0x97, 0x6a, 0x0f, 0x97, 0xf6, 0x4c, 0xfe, 0x07, 0x06, 0x98, 0xe9, 0xe9, 0x64, 0xe4, 0x6a, 0xba, - 0x72, 0x65, 0xc8, 0x6e, 0x2b, 0x2e, 0x6c, 0x16, 0x4d, 0xc6, 0xe0, 0xc0, 0x62, 0x48, 0xf8, 0x9d, - 0x44, 0xc5, 0x77, 0xa9, 0xbd, 0x64, 0x36, 0xf2, 0xc7, 0x06, 0x8c, 0x45, 0xb3, 0xd1, 0x52, 0x5e, - 0xaf, 0x26, 0xa7, 0xbd, 0xa5, 0xbc, 0x5e, 0x55, 0x24, 0xbc, 0xa5, 0xbe, 0x24, 0xb2, 0xf8, 0xc9, - 0x8c, 0xeb, 0x43, 0xf2, 0xc4, 0xab, 0xd2, 0x43, 0x4c, 0x26, 0x7b, 0x44, 0xfe, 0xca, 0x00, 0x12, - 0x4f, 0x90, 0xd2, 0xdf, 0xbd, 0x2b, 0xf3, 0xd9, 0xf4, 0x77, 0xef, 0xea, 0x84, 0xb5, 0xd4, 0xd7, - 0x39, 0x98, 0x2e, 0x16, 0x84, 0x15, 0x3c, 0x74, 0x1e, 0x05, 0xb8, 0xf9, 0xaa, 0x01, 0x13, 0x09, - 0xf9, 0x67, 0x24, 0x27, 0x5d, 0xd9, 0x1c, 0x94, 0x26, 0xd1, 0x2d, 0x75, 0x57, 0x9f, 0xc0, 0x90, - 0xdb, 0xe3, 0x88, 0xbd, 0xef, 0x0a, 0x67, 0x60, 0x1d, 0x4f, 0x57, 0xf4, 0x70, 0xfa, 0x9a, 0xde, - 0xfe, 0x25, 0xa6, 0xad, 0xa5, 0xbe, 0xef, 0xc2, 0x65, 0x8f, 0xb1, 0x71, 0xc8, 0x70, 0xff, 0x86, - 0x1f, 0x4e, 0x86, 0xf2, 0xd1, 0x48, 0x76, 0x02, 0xb2, 0x65, 0x59, 0x24, 0xa7, 0xbb, 0x99, 0xd3, - 0x8c, 0xe8, 0x23, 0xe4, 0xb9, 0x4c, 0x44, 0xbb, 0xe4, 0x8f, 0xd8, 0xf5, 0x5b, 0x38, 0xab, 0x2a, - 0xed, 0xfa, 0x2d, 0x31, 0x33, 0x2d, 0xed, 0xfa, 0x2d, 0x39, 0x31, 0x2d, 0x55, 0xc8, 0xf1, 0xac, - 0x31, 0xf9, 0x5e, 0xf7, 0x1d, 0x76, 0xdf, 0x19, 0x49, 0x08, 0x23, 0xb9, 0xc8, 0xc8, 0x7a, 0xdf, - 0xa9, 0x48, 0x6b, 0x4b, 0x3d, 0xec, 0x49, 0xc8, 0x79, 0x23, 0xbf, 0x62, 0x44, 0x52, 0xd6, 0x4a, - 0xfa, 0x00, 0x29, 0x96, 0x6b, 0x56, 0x3c, 0x9e, 0x1d, 0x00, 0xe9, 0x7c, 0x91, 0xd1, 0xf9, 0x1c, - 0x79, 0x56, 0x19, 0x44, 0xd1, 0x56, 0xc5, 0x46, 0xa8, 0xb9, 0x7b, 0x5f, 0xff, 0xee, 0x5e, 0xe3, - 0x1b, 0xdf, 0xdd, 0x6b, 0x7c, 0xe7, 0xbb, 0x7b, 0x8d, 0x5f, 0xf8, 0xde, 0xde, 0x2d, 0xdf, 0xf8, - 0xde, 0xde, 0x2d, 0xdf, 0xfe, 0xde, 0xde, 0x2d, 0x1f, 0x7a, 0xad, 0x6e, 0x7b, 0xab, 0xdd, 0xe5, - 0xe9, 0xaa, 0xd3, 0x2c, 0xdd, 0x10, 0x98, 0x6e, 0x5a, 0xcb, 0x6e, 0x0f, 0xef, 0xb1, 0xaa, 0xd3, - 0xa1, 0xc1, 0x9f, 0xab, 0x96, 0xdd, 0xc2, 0xdb, 0x2e, 0xb7, 0x37, 0xa8, 0xb7, 0xde, 0xa6, 0x6e, - 0x69, 0x6d, 0x66, 0x79, 0x80, 0xfd, 0x27, 0xfe, 0x27, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0xe6, - 0x22, 0x4d, 0x98, 0xf1, 0x80, 0x00, 0x00, + // 6400 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x6b, 0x6c, 0x1c, 0xc9, + 0x71, 0xb0, 0x66, 0x49, 0x51, 0x64, 0x51, 0xe2, 0xa3, 0x29, 0x51, 0xd4, 0xde, 0x9d, 0x1e, 0xa3, + 0xd3, 0x49, 0xba, 0x3b, 0x71, 0x25, 0x4a, 0x3a, 0xbd, 0x75, 0x47, 0x8a, 0xa2, 0xa4, 0xb3, 0x1e, + 0xbc, 0x15, 0xef, 0xce, 0x9f, 0xbf, 0x8b, 0xd7, 0xc3, 0xdd, 0xe6, 0x72, 0xac, 0xdd, 0x9d, 0xd5, + 0xce, 0x2c, 0x4f, 0x8c, 0xa0, 0x1f, 0x71, 0x12, 0xc3, 0xb0, 0x81, 0x3c, 0x7f, 0xf8, 0x87, 0x01, + 0x07, 0x88, 0x83, 0x04, 0x79, 0x20, 0x01, 0x9c, 0x0b, 0x1c, 0xc4, 0x0e, 0xe2, 0x3c, 0xec, 0x18, + 0x08, 0x90, 0xd8, 0xb8, 0x24, 0x76, 0x02, 0xe4, 0xe2, 0xf8, 0x02, 0x04, 0x31, 0x90, 0x38, 0xff, + 0x03, 0x24, 0xc1, 0x74, 0x57, 0xf7, 0xce, 0xab, 0x7b, 0x66, 0x48, 0x1d, 0x64, 0x27, 0xbf, 0xc4, + 0xed, 0xe9, 0xaa, 0xae, 0xaa, 0xae, 0xae, 0xaa, 0x7e, 0x54, 0x09, 0x0e, 0xd8, 0xad, 0x8f, 0xd3, + 0xaa, 0x67, 0xaf, 0xd1, 0x12, 0x7d, 0x50, 0x5d, 0xb5, 0x5a, 0x75, 0x5a, 0x5a, 0x9b, 0x29, 0xdd, + 0xef, 0xd2, 0xce, 0xfa, 0x74, 0xbb, 0xe3, 0x78, 0x0e, 0xd9, 0x25, 0xbb, 0x4c, 0x8b, 0x2e, 0xd3, + 0x6b, 0x33, 0xc5, 0x9d, 0x75, 0xa7, 0xee, 0xb0, 0x1e, 0x25, 0xff, 0x2f, 0xde, 0xb9, 0xf8, 0x74, + 0xdd, 0x71, 0xea, 0x0d, 0x5a, 0xb2, 0xda, 0x76, 0xc9, 0x6a, 0xb5, 0x1c, 0xcf, 0xf2, 0x6c, 0xa7, + 0xe5, 0xe2, 0xd7, 0x67, 0x93, 0x47, 0x93, 0x68, 0x79, 0xaf, 0x43, 0xc9, 0xbd, 0x9c, 0x4e, 0x8d, + 0x76, 0x96, 0x1d, 0xe7, 0x1e, 0x76, 0x33, 0x93, 0xbb, 0x35, 0xad, 0xce, 0x3d, 0xea, 0x61, 0x9f, + 0x83, 0xc9, 0x7d, 0xea, 0xb4, 0x45, 0x5d, 0xdb, 0x8d, 0x8f, 0xe7, 0x74, 0xac, 0x6a, 0x83, 0x96, + 0xd6, 0x4e, 0x2c, 0x53, 0xcf, 0x3a, 0x81, 0x3f, 0x79, 0x37, 0xf3, 0x0e, 0xc0, 0xdd, 0xee, 0xb2, + 0x55, 0xad, 0x3a, 0xdd, 0x96, 0x47, 0x26, 0x61, 0xc0, 0xeb, 0x58, 0x35, 0xda, 0x99, 0x32, 0xf6, + 0x1b, 0x47, 0x86, 0xca, 0xf8, 0x8b, 0x1c, 0x85, 0x31, 0x57, 0xf6, 0xaa, 0xb4, 0x9c, 0x56, 0x95, + 0x4e, 0x15, 0xf6, 0x1b, 0x47, 0x76, 0x94, 0x47, 0x7b, 0xed, 0xb7, 0xfd, 0x66, 0xf3, 0x63, 0xf0, + 0xf4, 0x6b, 0xbe, 0x9c, 0x7b, 0x58, 0xef, 0xf8, 0x2c, 0xba, 0x65, 0x7a, 0xbf, 0x4b, 0x5d, 0x8f, + 0x1c, 0x84, 0x1d, 0x01, 0x54, 0x76, 0x0d, 0x47, 0xda, 0xde, 0x6b, 0xbc, 0x51, 0x23, 0x4f, 0xc1, + 0x10, 0xe7, 0xd8, 0xef, 0x50, 0x60, 0x1d, 0x06, 0x79, 0xc3, 0x8d, 0x9a, 0xf9, 0x25, 0x03, 0x9e, + 0x51, 0x0c, 0xe1, 0xb6, 0x9d, 0x96, 0x4b, 0xc9, 0x0d, 0x80, 0xe5, 0xee, 0x7a, 0x85, 0xc9, 0xd6, + 0x9d, 0x32, 0xf6, 0xf7, 0x1d, 0x19, 0x9e, 0x79, 0x7e, 0x3a, 0x71, 0xc6, 0xa7, 0x23, 0x48, 0xe6, + 0x2d, 0xcf, 0x2a, 0x0f, 0x2d, 0x77, 0xd7, 0x39, 0x4a, 0xf2, 0x21, 0x18, 0x76, 0x69, 0xa3, 0x21, + 0x70, 0x15, 0x72, 0xe3, 0x02, 0x1f, 0x9c, 0x23, 0x33, 0x7f, 0xc3, 0x80, 0x43, 0x91, 0x3e, 0xfe, + 0xd4, 0xdf, 0xa2, 0x9e, 0x55, 0xb3, 0x3c, 0xeb, 0x4d, 0xdb, 0x5b, 0xbd, 0xc5, 0xb8, 0x24, 0xb7, + 0x61, 0xb0, 0x89, 0xad, 0x4c, 0x40, 0xc3, 0x33, 0x33, 0xd9, 0xc6, 0x0c, 0xe2, 0x2b, 0x4b, 0x1c, + 0x5a, 0x81, 0x92, 0x9d, 0xb0, 0xd5, 0x76, 0xe7, 0xba, 0xeb, 0x53, 0x7d, 0xfb, 0x8d, 0x23, 0x83, + 0x65, 0xfe, 0xc3, 0x7c, 0x1a, 0x8a, 0x4c, 0xca, 0x57, 0x71, 0xb0, 0x45, 0xab, 0x63, 0x35, 0xc5, + 0x34, 0x9a, 0x1f, 0x81, 0xa7, 0x12, 0xbf, 0xe2, 0x0c, 0x5c, 0x80, 0x81, 0x36, 0x6b, 0x41, 0xea, + 0x9f, 0x51, 0x50, 0xcf, 0xc1, 0xe6, 0xfa, 0xbf, 0xf1, 0xde, 0xbe, 0x2d, 0x65, 0x04, 0x31, 0x7f, + 0xc6, 0x80, 0xbd, 0x91, 0x09, 0x9e, 0xa7, 0x6d, 0xc7, 0xb5, 0xbd, 0x7c, 0x5a, 0x74, 0x0d, 0xa0, + 0xf7, 0x9b, 0x71, 0x3d, 0x3c, 0x73, 0x20, 0x55, 0x8c, 0x8c, 0x18, 0xa3, 0x1c, 0x00, 0x35, 0xbf, + 0x6b, 0xc0, 0x3e, 0x25, 0x41, 0xc8, 0xf1, 0xc7, 0x60, 0xb0, 0x86, 0x6d, 0xa8, 0x71, 0xf3, 0x8a, + 0xa1, 0x52, 0x30, 0x4d, 0x8b, 0x86, 0xab, 0x2d, 0xaf, 0xb3, 0x5e, 0x96, 0x58, 0x8b, 0xff, 0x1f, + 0x76, 0x84, 0x3e, 0x91, 0x31, 0xe8, 0xbb, 0x47, 0xd7, 0x91, 0x75, 0xff, 0x4f, 0x72, 0x0a, 0xb6, + 0xae, 0x59, 0x8d, 0x2e, 0x45, 0x66, 0xf7, 0x2a, 0x28, 0x40, 0x34, 0x65, 0xde, 0xf9, 0x7c, 0xe1, + 0xac, 0x61, 0xee, 0xc5, 0x65, 0x2b, 0xe6, 0x73, 0xce, 0x6a, 0x58, 0xad, 0x2a, 0x95, 0xf3, 0x6d, + 0xe1, 0x9a, 0x8b, 0x7f, 0x47, 0xfe, 0x5f, 0x81, 0xc1, 0x65, 0x6c, 0x43, 0xfe, 0x55, 0xa3, 0x23, + 0x28, 0x4e, 0xba, 0x84, 0x32, 0xcf, 0xa0, 0x4a, 0xcd, 0xd6, 0xeb, 0x1d, 0x5a, 0xb7, 0x3c, 0xfa, + 0x86, 0xd3, 0xe8, 0x36, 0xa9, 0x98, 0xf2, 0x29, 0xd8, 0x26, 0xa6, 0x92, 0x73, 0x2c, 0x7e, 0x9a, + 0x6d, 0xa4, 0x3d, 0x06, 0x88, 0xa4, 0x2d, 0xc2, 0xb8, 0x25, 0x3e, 0x55, 0xd6, 0xd8, 0x37, 0x41, + 0xe3, 0x41, 0x05, 0x8d, 0x7c, 0x19, 0x22, 0x9e, 0x31, 0x2b, 0x8c, 0xd8, 0x35, 0xff, 0x5f, 0xf2, + 0x88, 0x52, 0x3d, 0x8b, 0x30, 0x88, 0xc4, 0xf1, 0x81, 0x86, 0xca, 0xf2, 0x37, 0x79, 0x06, 0x40, + 0x2e, 0x45, 0x6e, 0x50, 0x86, 0xca, 0x43, 0x62, 0x2d, 0xba, 0xe6, 0x0f, 0x84, 0x75, 0x8b, 0xe3, + 0x46, 0x76, 0x1c, 0xd8, 0xd3, 0x63, 0x47, 0x2c, 0x81, 0x30, 0x5b, 0x27, 0x15, 0x6c, 0x49, 0x9c, + 0xb3, 0x1c, 0x4c, 0x08, 0xaa, 0xea, 0x74, 0x6a, 0xe5, 0xdd, 0x56, 0xe2, 0x57, 0x97, 0xfc, 0x18, + 0x4c, 0xf5, 0x06, 0x44, 0xda, 0xc5, 0x78, 0x85, 0xec, 0x62, 0x9c, 0x94, 0x48, 0x82, 0xcd, 0xae, + 0xf9, 0x0a, 0x1c, 0x08, 0x33, 0x1c, 0x82, 0x42, 0x89, 0x86, 0x0c, 0x98, 0x11, 0xf1, 0x08, 0x75, + 0x30, 0x75, 0x18, 0x50, 0x6e, 0xb3, 0x30, 0xc0, 0xa9, 0x46, 0x9b, 0xa4, 0x22, 0x3a, 0x28, 0x14, + 0x61, 0x99, 0x38, 0xa0, 0x79, 0x0d, 0x4a, 0x7c, 0xa0, 0x6e, 0xd5, 0x8f, 0x00, 0xc4, 0x62, 0x58, + 0xea, 0x58, 0x2d, 0x77, 0x85, 0x76, 0xe6, 0x69, 0xcb, 0x69, 0xce, 0xd3, 0xaa, 0xdd, 0xb4, 0x1a, + 0x82, 0xf0, 0x9d, 0xb0, 0xb5, 0xe6, 0x37, 0x23, 0xd1, 0xfc, 0x87, 0x79, 0x13, 0x8e, 0x67, 0x47, + 0x84, 0xf4, 0x4f, 0xc1, 0xb6, 0x1a, 0x6f, 0x62, 0xb8, 0xfa, 0xcb, 0xe2, 0xa7, 0xf9, 0x6a, 0x76, + 0x6c, 0x52, 0x45, 0x27, 0x61, 0x80, 0x91, 0x22, 0x14, 0x14, 0x7f, 0x99, 0x9f, 0x34, 0xe0, 0x44, + 0x0e, 0x64, 0x48, 0xdb, 0x6b, 0x30, 0xc2, 0xe0, 0x2b, 0x48, 0x92, 0x50, 0xc4, 0x67, 0x95, 0x16, + 0x28, 0x80, 0x05, 0x85, 0xbc, 0xa3, 0x16, 0x6c, 0x34, 0xaf, 0xe8, 0x26, 0x55, 0xb2, 0x11, 0x5e, + 0x4d, 0x46, 0x74, 0x35, 0xd5, 0xe0, 0xa0, 0x16, 0x09, 0x92, 0x7f, 0x09, 0xb6, 0x6d, 0xc0, 0x2e, + 0x08, 0x18, 0xf3, 0x23, 0xb1, 0x80, 0x44, 0x58, 0xd8, 0x3c, 0xee, 0x4a, 0x6a, 0x4a, 0x21, 0xa8, + 0x29, 0x6f, 0xa9, 0x7c, 0xa1, 0x24, 0xfe, 0x7c, 0xc8, 0xf3, 0x64, 0xb1, 0xfb, 0xb2, 0xbf, 0xb9, + 0x08, 0xbb, 0x39, 0xf6, 0xb6, 0xe3, 0x71, 0xde, 0x82, 0x0a, 0xe2, 0x7a, 0x96, 0xd7, 0x75, 0x45, + 0x2c, 0xc8, 0x7f, 0xa5, 0xd9, 0xaf, 0x37, 0x61, 0x2a, 0x8e, 0x51, 0x46, 0x05, 0xdb, 0x78, 0x47, + 0x21, 0x66, 0xa5, 0x37, 0x96, 0xc0, 0x65, 0x01, 0x61, 0x9e, 0x86, 0xc9, 0x08, 0xe2, 0x4c, 0xb6, + 0x61, 0x29, 0xc6, 0xa1, 0x24, 0xe7, 0x1c, 0x0c, 0xf0, 0x6e, 0x28, 0xb6, 0x0c, 0xd4, 0x20, 0x80, + 0xf9, 0xad, 0x02, 0xec, 0x91, 0x68, 0x65, 0xe0, 0x95, 0x85, 0x20, 0x7f, 0x9a, 0x1b, 0x76, 0xd3, + 0xe6, 0x01, 0x49, 0x7f, 0x99, 0xff, 0x20, 0x2f, 0x03, 0xb0, 0x10, 0xb3, 0xe2, 0xda, 0x35, 0xca, + 0x02, 0xb1, 0x91, 0x99, 0xfd, 0x0a, 0x7a, 0xd8, 0x78, 0x77, 0xed, 0x1a, 0x2d, 0x0f, 0x39, 0xe2, + 0x4f, 0x52, 0x81, 0x3d, 0x0c, 0x53, 0xa5, 0xda, 0x6d, 0x76, 0x1b, 0x96, 0x0f, 0x54, 0x69, 0x39, + 0xfe, 0x0a, 0xb6, 0x1a, 0x53, 0xfd, 0x3e, 0x0d, 0x73, 0x07, 0xfd, 0xc0, 0xe6, 0xef, 0xdf, 0xdb, + 0xf7, 0x54, 0xd5, 0x71, 0x9b, 0x8e, 0xeb, 0xd6, 0xee, 0x4d, 0xdb, 0x4e, 0xa9, 0x69, 0x79, 0xab, + 0xd3, 0x37, 0x69, 0xdd, 0xaa, 0xae, 0xcf, 0xd3, 0x6a, 0x79, 0x37, 0xc3, 0x72, 0x45, 0x22, 0xb9, + 0x8d, 0x38, 0x12, 0x07, 0xb8, 0xdf, 0xb5, 0x5a, 0x9e, 0xed, 0xad, 0x4f, 0x6d, 0xdd, 0xf8, 0x00, + 0xaf, 0x21, 0x0e, 0xf3, 0xab, 0x06, 0x46, 0x9c, 0x11, 0x99, 0xe2, 0x6c, 0x2d, 0xc0, 0xd8, 0x72, + 0x77, 0xdd, 0xad, 0xb4, 0x3b, 0x76, 0x95, 0x56, 0x1a, 0x74, 0x8d, 0x36, 0x50, 0x8b, 0x9e, 0x56, + 0xc8, 0xe9, 0xa6, 0xdf, 0xa7, 0x3c, 0xe2, 0x43, 0x2d, 0xfa, 0x40, 0xec, 0x37, 0xb9, 0x0e, 0xe3, + 0x7e, 0x48, 0x1e, 0x46, 0x54, 0xc8, 0x80, 0x68, 0x94, 0x81, 0x05, 0x30, 0x8d, 0x41, 0x9f, 0x4b, + 0xef, 0xb3, 0xc9, 0xea, 0x2f, 0xfb, 0x7f, 0x9a, 0x5f, 0x30, 0x60, 0x64, 0xa1, 0xdb, 0x68, 0xf4, + 0x34, 0x66, 0x13, 0x4a, 0x46, 0xde, 0x80, 0xf1, 0xa6, 0x5d, 0x43, 0x3a, 0xad, 0x56, 0xad, 0xe2, + 0x39, 0xcb, 0x18, 0xd9, 0x1d, 0x52, 0xd9, 0x27, 0xbb, 0xc6, 0x08, 0x9c, 0x6d, 0xd5, 0x96, 0xee, + 0xcc, 0x61, 0x28, 0x3b, 0xd2, 0x0c, 0xb4, 0x3a, 0xcb, 0xe6, 0xa7, 0x0c, 0x8c, 0xb4, 0xc2, 0xa4, + 0x6e, 0x72, 0xe5, 0x93, 0x19, 0x98, 0x7c, 0xdb, 0xf6, 0x56, 0x2b, 0x71, 0x9a, 0xf9, 0xbe, 0x82, + 0xf8, 0x5f, 0x6f, 0x85, 0x49, 0xa9, 0x60, 0x20, 0x15, 0xa3, 0x04, 0x27, 0xfd, 0xe5, 0xa8, 0xc5, + 0x50, 0x31, 0x1e, 0x46, 0xd0, 0xb3, 0x1a, 0x4d, 0xd4, 0xa9, 0xc8, 0xf7, 0x2c, 0x0b, 0x55, 0xcd, + 0x4f, 0x41, 0xc9, 0xcf, 0x5b, 0x89, 0x92, 0x0d, 0xf8, 0x99, 0xb0, 0x32, 0x64, 0xe4, 0x46, 0x58, + 0x9d, 0x9f, 0x96, 0x1b, 0x23, 0xb1, 0x42, 0xdc, 0xb9, 0xf5, 0xeb, 0x96, 0xbb, 0xda, 0xf3, 0x87, + 0x5a, 0x8e, 0x62, 0x6e, 0xa8, 0x90, 0xe0, 0x86, 0x0e, 0xc0, 0x76, 0x6e, 0x89, 0x56, 0x19, 0xe2, + 0xa9, 0x3e, 0x36, 0xcf, 0xc3, 0xac, 0x8d, 0x8f, 0x65, 0xd6, 0xc5, 0x76, 0x28, 0x81, 0x0c, 0xe4, + 0x74, 0x1e, 0x06, 0x42, 0xdb, 0xef, 0x17, 0x15, 0x9c, 0x2e, 0x75, 0xec, 0x66, 0x93, 0xd6, 0x7c, + 0x4c, 0x37, 0x7d, 0xbb, 0xc0, 0xd0, 0x95, 0x11, 0x56, 0x1e, 0x26, 0x2c, 0xb1, 0x63, 0x88, 0xde, + 0x70, 0x8f, 0x8d, 0x5b, 0xb3, 0x01, 0xcf, 0xf2, 0x00, 0x81, 0xb7, 0xcc, 0xd6, 0x6a, 0x1d, 0xea, + 0xba, 0x39, 0x47, 0x3a, 0x0c, 0xa3, 0x62, 0x18, 0x8b, 0x23, 0xc0, 0xb1, 0x46, 0xac, 0x10, 0x5a, + 0xf3, 0x73, 0x05, 0xd8, 0x95, 0xc8, 0x31, 0x39, 0x07, 0x5b, 0x99, 0x8e, 0x71, 0xdc, 0xcc, 0x92, + 0x6e, 0x49, 0xb3, 0xa4, 0x1c, 0x82, 0xbc, 0x0c, 0x83, 0xd2, 0x0e, 0x17, 0xb2, 0x43, 0x4b, 0x20, + 0x1f, 0xc1, 0x8a, 0xdd, 0x68, 0x58, 0xcb, 0x0d, 0xee, 0x79, 0xb2, 0x22, 0x10, 0x40, 0xbd, 0x03, + 0x84, 0xfe, 0xc0, 0x01, 0x82, 0x6f, 0x2e, 0x7a, 0x8a, 0xc4, 0x3d, 0x04, 0x3a, 0x2c, 0x5f, 0x57, + 0x7c, 0xeb, 0x59, 0xb5, 0x6b, 0x53, 0x03, 0x7c, 0xf7, 0x5a, 0xb5, 0x6b, 0x26, 0xc5, 0x30, 0x2a, + 0x3e, 0xdb, 0x8f, 0x55, 0xa9, 0x9a, 0x70, 0x28, 0x65, 0xca, 0x1f, 0xeb, 0x70, 0x97, 0x02, 0x6b, + 0x36, 0x6c, 0x9e, 0x33, 0xc5, 0x2f, 0xff, 0x69, 0x04, 0x16, 0x5b, 0x14, 0x5e, 0xee, 0xbd, 0x87, + 0xa4, 0x91, 0x0a, 0x28, 0x50, 0xaa, 0x2b, 0x1e, 0x14, 0x8e, 0x81, 0xdc, 0x80, 0x91, 0x65, 0xea, + 0x7a, 0x95, 0xe5, 0xee, 0x3a, 0xa2, 0x29, 0x64, 0x47, 0xb3, 0xdd, 0x07, 0x9d, 0xeb, 0xae, 0x73, + 0x54, 0x1f, 0x82, 0x51, 0x86, 0x8a, 0x1d, 0x9b, 0x71, 0x5c, 0x7d, 0xd9, 0x71, 0xed, 0xf0, 0x61, + 0xef, 0xd2, 0x46, 0x83, 0x21, 0x33, 0xaf, 0xe0, 0xf2, 0x9c, 0xa7, 0x1d, 0x7b, 0x8d, 0x85, 0x0b, + 0x1b, 0x10, 0xe1, 0x4f, 0x14, 0x70, 0xc6, 0xd5, 0x58, 0xfe, 0xd7, 0x0b, 0xf2, 0xf7, 0x84, 0x1a, + 0xf5, 0x64, 0xf0, 0x38, 0xc2, 0x56, 0x6d, 0xd4, 0xd9, 0xb7, 0xf9, 0xa8, 0xd3, 0xfc, 0xba, 0x01, + 0xfb, 0xd5, 0x74, 0xff, 0x08, 0x85, 0x86, 0x9f, 0xed, 0x83, 0xe9, 0x44, 0xeb, 0xb6, 0xe4, 0x5c, + 0xb1, 0x5a, 0x55, 0xda, 0x78, 0xbd, 0xbd, 0xe4, 0xcc, 0x36, 0x7d, 0x8b, 0xf4, 0xf8, 0x7c, 0xf9, + 0x3c, 0x0c, 0x2f, 0x5b, 0x2e, 0xad, 0x58, 0x0c, 0x6f, 0x1e, 0xe3, 0x0e, 0x3e, 0x1c, 0x27, 0x87, + 0x2c, 0xc0, 0xf6, 0xfb, 0x5d, 0xc7, 0x93, 0x68, 0xfa, 0xb3, 0xa3, 0x19, 0x66, 0x80, 0x88, 0xe7, + 0x1a, 0x0c, 0xba, 0x5e, 0xc7, 0xf2, 0x68, 0x9d, 0x6f, 0x18, 0x46, 0x66, 0x5e, 0x50, 0x48, 0x95, + 0x4b, 0xa4, 0xc1, 0xae, 0x59, 0xee, 0x22, 0x48, 0x59, 0x02, 0x93, 0x9b, 0x30, 0xda, 0xa1, 0x2b, + 0xb4, 0x43, 0x5b, 0x55, 0x8a, 0x2b, 0x63, 0x20, 0xbb, 0xae, 0x8d, 0x48, 0x58, 0xbe, 0x34, 0xbe, + 0x5d, 0x80, 0x53, 0x81, 0x99, 0x89, 0x28, 0xda, 0x07, 0x3a, 0x3f, 0x51, 0xc9, 0xf6, 0x3d, 0x06, + 0xc9, 0xf6, 0x3f, 0x66, 0xc9, 0x6e, 0xdd, 0xb8, 0x64, 0x57, 0xf0, 0x08, 0x27, 0x59, 0xb0, 0x8f, + 0x2f, 0x88, 0xeb, 0xc0, 0xf3, 0x09, 0x1e, 0x7d, 0x43, 0xe3, 0x65, 0x0e, 0xe5, 0xfe, 0xb5, 0x00, + 0x4f, 0xa1, 0xe3, 0xef, 0x0d, 0xf4, 0x43, 0x12, 0xd0, 0x5d, 0x60, 0xdb, 0x8c, 0xba, 0xdd, 0xca, + 0xa3, 0x50, 0x08, 0x12, 0x8a, 0x06, 0xfb, 0x37, 0x12, 0x0d, 0xee, 0x13, 0xd1, 0xa0, 0xaf, 0x39, + 0x83, 0x73, 0x43, 0xdf, 0x7f, 0x6f, 0x1f, 0x6f, 0x48, 0x0e, 0x0c, 0x07, 0x14, 0x81, 0xe1, 0xb6, + 0x5e, 0x60, 0x78, 0x1f, 0x4f, 0xf1, 0x54, 0x7a, 0x84, 0x6e, 0xe0, 0xd5, 0x48, 0xbc, 0x36, 0xa3, + 0x8f, 0xd7, 0x92, 0xa6, 0x4d, 0x46, 0x6d, 0xeb, 0xf0, 0x42, 0x26, 0x95, 0xfa, 0x00, 0x86, 0xfe, + 0x8c, 0x11, 0x0b, 0x7a, 0x9e, 0xe0, 0x5e, 0xcf, 0x8d, 0xc5, 0x4e, 0x8a, 0x1d, 0xdf, 0xe3, 0x14, + 0xc1, 0xa7, 0xc5, 0x25, 0x48, 0x20, 0x62, 0x7b, 0x62, 0x67, 0x14, 0x9f, 0x32, 0x00, 0x02, 0xae, + 0xfd, 0x09, 0x2e, 0x6c, 0x3f, 0x8a, 0xdb, 0xb9, 0x48, 0x3b, 0x6d, 0xea, 0x75, 0xad, 0x06, 0x97, + 0xc8, 0x5d, 0xcf, 0xf2, 0xfc, 0x58, 0x71, 0x58, 0xb0, 0xdd, 0x5a, 0x71, 0xf0, 0x74, 0x41, 0x75, + 0x4d, 0x1d, 0xc1, 0x70, 0xa3, 0xb5, 0xe2, 0x94, 0x51, 0x6a, 0xfe, 0xdf, 0x64, 0x11, 0xb6, 0xaf, + 0x74, 0x5b, 0x35, 0xbb, 0x55, 0xe7, 0xd8, 0xf8, 0x91, 0xd3, 0xb1, 0x6c, 0xd8, 0x16, 0x38, 0x64, + 0x79, 0x18, 0x51, 0xf8, 0x18, 0xcd, 0x5f, 0xed, 0x83, 0x9d, 0x0b, 0xdd, 0x46, 0x23, 0x3a, 0x9d, + 0xe4, 0xe5, 0xc8, 0x81, 0xc8, 0x61, 0xe5, 0xc9, 0x75, 0x18, 0x50, 0x9e, 0x91, 0x2d, 0xc1, 0x48, + 0x5b, 0x10, 0x10, 0xa4, 0xf6, 0x85, 0x6c, 0xd4, 0x32, 0xe9, 0x5d, 0xdf, 0x52, 0xde, 0x21, 0x91, + 0x30, 0x09, 0xdc, 0xf5, 0x25, 0xe0, 0x75, 0x3b, 0xd4, 0xe5, 0x38, 0xfb, 0x18, 0xce, 0x69, 0x05, + 0xce, 0xab, 0x0f, 0xda, 0x76, 0x67, 0x7d, 0x81, 0x03, 0xf4, 0x64, 0x7a, 0x7d, 0x8b, 0x2f, 0x04, + 0xd6, 0xc8, 0x90, 0xce, 0x71, 0xd5, 0x44, 0xb7, 0x9a, 0xc3, 0xb4, 0x32, 0xfd, 0xe5, 0x7b, 0x82, + 0xc4, 0x23, 0xc1, 0xad, 0x9b, 0x3e, 0x12, 0x9c, 0x1b, 0x80, 0x7e, 0x9f, 0x51, 0xb3, 0x8e, 0x9b, + 0xd5, 0x84, 0x75, 0x87, 0xcb, 0xfc, 0x6a, 0xf4, 0x44, 0xee, 0x05, 0xcd, 0x19, 0x56, 0x6c, 0xda, + 0xe4, 0xb9, 0xdc, 0x05, 0x3c, 0xd9, 0x89, 0xf5, 0xc8, 0xb2, 0xa1, 0xab, 0x29, 0xac, 0x83, 0x24, + 0xf2, 0x4a, 0x44, 0xad, 0x72, 0xd1, 0x28, 0x4e, 0xdb, 0xe6, 0xd0, 0xeb, 0x44, 0x3b, 0xa0, 0x2f, + 0xc8, 0x44, 0x29, 0x8d, 0xef, 0x5f, 0xc3, 0x38, 0x7a, 0x77, 0x7b, 0x22, 0xdc, 0x10, 0x97, 0xdb, + 0xfc, 0x67, 0xb6, 0x00, 0xe8, 0x1a, 0x6e, 0x92, 0x7a, 0x97, 0x44, 0xcc, 0x55, 0xb2, 0x17, 0x39, + 0x79, 0xee, 0xa0, 0xcc, 0x8b, 0x28, 0xd9, 0x45, 0xc7, 0xb5, 0xd9, 0x1b, 0xa7, 0x1b, 0xad, 0x1c, + 0xf3, 0x22, 0xb4, 0x27, 0x01, 0x5a, 0x6a, 0xcf, 0x56, 0xdf, 0x50, 0x53, 0xd4, 0x9d, 0xa3, 0xa9, + 0xcb, 0x5d, 0xa0, 0x42, 0xbd, 0xe5, 0xd0, 0xe6, 0x42, 0xec, 0x3d, 0x86, 0x1c, 0x32, 0x17, 0xbb, + 0x1f, 0x87, 0xe7, 0x14, 0x78, 0xa2, 0x7c, 0x6f, 0xfe, 0xd9, 0x92, 0x8b, 0x77, 0xc7, 0xbd, 0xb1, + 0xae, 0xae, 0xac, 0x70, 0xde, 0x3f, 0xb8, 0x41, 0x5f, 0x45, 0x1d, 0x8e, 0xbc, 0x12, 0x92, 0x2f, + 0x84, 0xf2, 0x08, 0xcb, 0x8e, 0x29, 0x59, 0x40, 0xe8, 0x8f, 0x65, 0x7e, 0xb7, 0x88, 0xf9, 0x5d, + 0x81, 0xc3, 0xa9, 0xf3, 0x22, 0xef, 0x14, 0xe5, 0x88, 0xfe, 0x4a, 0xdf, 0xa7, 0xb2, 0xfb, 0x89, + 0x7a, 0xf4, 0x93, 0x05, 0x18, 0x8f, 0xcd, 0x02, 0xd9, 0x0d, 0xdb, 0x6c, 0xb7, 0xd2, 0x70, 0x5a, + 0x75, 0x86, 0x74, 0xb0, 0x3c, 0x60, 0xbb, 0x37, 0x9d, 0x56, 0x7d, 0xf3, 0x81, 0xf9, 0x3c, 0x0c, + 0xd3, 0x96, 0xd7, 0x59, 0x8f, 0x1d, 0xe7, 0xa4, 0xef, 0xc7, 0x19, 0x1c, 0x77, 0x02, 0xb7, 0x61, + 0x8c, 0x0a, 0xa2, 0x2b, 0x18, 0xe8, 0xe7, 0x70, 0x27, 0xa3, 0x12, 0xf8, 0x16, 0x83, 0x35, 0x1f, + 0xe0, 0xf3, 0x81, 0x4c, 0x9a, 0x29, 0xcf, 0x46, 0x43, 0x62, 0x3f, 0xa2, 0x72, 0x8d, 0x51, 0x44, + 0x61, 0xf9, 0x5f, 0xc6, 0x75, 0x9c, 0x14, 0x91, 0x64, 0x31, 0x38, 0xab, 0xa8, 0x92, 0x89, 0xf0, + 0x92, 0xd2, 0xfe, 0x8d, 0xc5, 0x44, 0xa8, 0x92, 0xdc, 0x31, 0x0a, 0x67, 0xa0, 0xf0, 0xf5, 0x99, + 0xa8, 0x6d, 0xa3, 0x33, 0x50, 0xe2, 0x40, 0x8a, 0xaf, 0x87, 0x28, 0xce, 0x19, 0x75, 0x84, 0xa8, + 0x9e, 0xc5, 0x0d, 0xb8, 0x22, 0x46, 0xcb, 0x46, 0xf4, 0x41, 0x2d, 0x0a, 0xf9, 0xe4, 0x32, 0xa4, + 0x0f, 0xf9, 0x82, 0xc5, 0xf0, 0xe2, 0xff, 0xa4, 0xd8, 0xff, 0x28, 0x8d, 0x16, 0x8e, 0xf9, 0xd1, + 0xd0, 0x23, 0x49, 0xdf, 0xde, 0x5c, 0xcc, 0xff, 0x48, 0xb2, 0xf7, 0xe8, 0x52, 0x3c, 0x48, 0x13, + 0x38, 0xcd, 0x73, 0xf8, 0x30, 0x29, 0xd9, 0xab, 0x22, 0x11, 0x3b, 0x61, 0x2b, 0x7f, 0x0f, 0x6b, + 0xb0, 0xf7, 0xb0, 0xfc, 0x87, 0xb9, 0x07, 0x5f, 0x1d, 0xdc, 0x72, 0x6a, 0xdd, 0x06, 0x65, 0x51, + 0xa6, 0x78, 0x49, 0xf7, 0x3a, 0x3e, 0x90, 0x08, 0x7d, 0x92, 0x2f, 0x12, 0x42, 0x52, 0x54, 0xbd, + 0x42, 0xb9, 0xc6, 0x5f, 0xfa, 0x72, 0x58, 0x94, 0xda, 0x6e, 0xd8, 0x15, 0xf6, 0xbd, 0x62, 0xbc, + 0x0a, 0xbe, 0x9b, 0xf8, 0xc0, 0x8c, 0xf5, 0xfd, 0xe0, 0xb5, 0x4d, 0x99, 0xbe, 0x6d, 0x75, 0x6a, + 0x8b, 0x8e, 0xdd, 0xf2, 0x32, 0xbd, 0x86, 0x3b, 0x05, 0x93, 0x6d, 0xca, 0xf7, 0x1a, 0x6d, 0xc7, + 0x69, 0x54, 0x3c, 0xbb, 0x49, 0x5d, 0xcf, 0x6a, 0xb6, 0x99, 0x81, 0xed, 0x2b, 0xef, 0xc4, 0xaf, + 0x8b, 0x8e, 0xd3, 0x58, 0x12, 0xdf, 0xcc, 0x9f, 0x12, 0x17, 0xa1, 0x09, 0x63, 0x22, 0x73, 0xcb, + 0xf0, 0x94, 0xf0, 0x67, 0xec, 0x11, 0x73, 0xa5, 0xc3, 0x7a, 0x55, 0xda, 0xac, 0x1b, 0xa7, 0x23, + 0x9b, 0xbd, 0x9c, 0x0a, 0x4e, 0x7e, 0x70, 0x2c, 0xf3, 0x00, 0x9a, 0xaf, 0xc0, 0x97, 0x2b, 0x56, + 0xb3, 0x6d, 0xd9, 0xf5, 0x96, 0x90, 0xfe, 0xbf, 0xf7, 0xa3, 0x89, 0x4a, 0xec, 0x83, 0xb4, 0xde, + 0x87, 0xa7, 0x7d, 0x1a, 0x7d, 0x21, 0x20, 0x95, 0x55, 0xec, 0x12, 0xdc, 0xce, 0x1d, 0x57, 0x6e, + 0xa8, 0x2d, 0xbe, 0x14, 0x83, 0xb8, 0x99, 0x41, 0xd9, 0xe3, 0xa9, 0x3e, 0x91, 0x87, 0x70, 0x28, + 0x32, 0x24, 0x13, 0xbf, 0x1c, 0xd7, 0xad, 0xae, 0x52, 0x5f, 0x3f, 0xf1, 0xf8, 0xfb, 0xa8, 0xf2, + 0x38, 0x51, 0xb0, 0xc2, 0xc5, 0xe2, 0x34, 0xca, 0x07, 0x42, 0x83, 0xfa, 0x4d, 0xa2, 0xd3, 0x5d, + 0xc4, 0x49, 0x3e, 0x0a, 0x7b, 0x3c, 0xc7, 0xb3, 0x1a, 0x89, 0x33, 0x93, 0xc3, 0x29, 0x4e, 0x32, + 0x2c, 0xb1, 0x79, 0x21, 0x9f, 0x36, 0xe0, 0x98, 0xd0, 0xaa, 0x6c, 0x5c, 0xf6, 0xe7, 0xe5, 0xf2, + 0x08, 0xe2, 0x5f, 0x4a, 0x65, 0xb6, 0x09, 0x07, 0x24, 0x2d, 0x4a, 0xa6, 0xb7, 0x66, 0x57, 0xc7, + 0x67, 0xc4, 0xc8, 0x89, 0xbc, 0x9b, 0x17, 0x50, 0x27, 0x6f, 0xb8, 0x77, 0xda, 0x1e, 0xad, 0xdd, + 0xe9, 0x7a, 0x77, 0x56, 0x78, 0x07, 0x37, 0xfd, 0x25, 0xed, 0x3c, 0x2a, 0x6b, 0x22, 0x30, 0x2a, + 0xeb, 0x7e, 0xd8, 0x6e, 0xbb, 0x15, 0xc7, 0xff, 0x5e, 0x71, 0xba, 0x1e, 0x86, 0x48, 0x60, 0x4b, + 0x10, 0xf3, 0x30, 0x1e, 0x19, 0xc5, 0x70, 0xe0, 0x61, 0x9a, 0x34, 0x4d, 0xf3, 0x18, 0x7e, 0x6b, + 0x3a, 0xe2, 0xa0, 0x1a, 0x13, 0x62, 0x5e, 0x46, 0x27, 0xb7, 0x40, 0xe9, 0xbc, 0xed, 0xf2, 0xe3, + 0x3a, 0x0c, 0x5a, 0x03, 0x9e, 0x59, 0xcd, 0xf4, 0x3f, 0x1a, 0xe8, 0xe2, 0x54, 0x08, 0x90, 0x86, + 0x67, 0x00, 0x3c, 0x9b, 0x76, 0xe4, 0xfd, 0x92, 0x71, 0xa4, 0xbf, 0x3c, 0xe4, 0xb7, 0xf0, 0x73, + 0xa1, 0x5b, 0xb0, 0x5d, 0x06, 0xd0, 0xbd, 0x73, 0x08, 0x55, 0xbc, 0x11, 0x18, 0x6b, 0xc9, 0xa6, + 0x1d, 0x36, 0xd0, 0xb0, 0xd5, 0x1b, 0x95, 0xbc, 0x0a, 0xc3, 0xd2, 0x7e, 0x79, 0x0d, 0x3c, 0x81, + 0x38, 0x9a, 0x0d, 0xdb, 0xd2, 0xd2, 0xcd, 0x32, 0x08, 0xab, 0xe5, 0x35, 0xa4, 0x9d, 0x0a, 0x74, + 0x13, 0xea, 0x29, 0xa6, 0xe2, 0x13, 0xe2, 0x9e, 0x2d, 0xb1, 0x8f, 0x74, 0xb8, 0xbb, 0x56, 0x28, + 0xad, 0xd4, 0xf0, 0x7b, 0x6f, 0xf9, 0x18, 0x59, 0x79, 0x95, 0x28, 0x27, 0x56, 0xe2, 0x8d, 0xe6, + 0x2b, 0xe8, 0x49, 0xf0, 0x85, 0xf8, 0x2d, 0xdb, 0x6d, 0x5a, 0x5e, 0x35, 0x70, 0xe2, 0xb9, 0x0f, + 0x86, 0x6b, 0x5d, 0xd7, 0xab, 0xac, 0x58, 0x55, 0xcf, 0xe1, 0x49, 0x2a, 0x7d, 0x65, 0xf0, 0x9b, + 0x16, 0x58, 0x8b, 0xf9, 0xcb, 0x7d, 0x30, 0x1a, 0x81, 0x26, 0x26, 0x84, 0xf6, 0x31, 0xd9, 0xdf, + 0x5e, 0x92, 0x59, 0x18, 0xb2, 0xd6, 0x2c, 0x3b, 0xf7, 0xcb, 0x88, 0x1e, 0x94, 0xef, 0xd1, 0xd9, + 0xaa, 0xcf, 0x13, 0xa0, 0x73, 0x08, 0xb2, 0x00, 0xdb, 0xf1, 0x6d, 0x7c, 0x65, 0xd5, 0x69, 0xd4, + 0x02, 0x17, 0x31, 0xe9, 0x97, 0x43, 0x08, 0x78, 0xdd, 0x69, 0xd4, 0xc8, 0xab, 0x30, 0x42, 0x1f, + 0xb4, 0x69, 0xd5, 0x5f, 0xb0, 0x9c, 0x96, 0x81, 0xec, 0x98, 0x76, 0x08, 0x50, 0x66, 0x6e, 0xc8, + 0x15, 0x80, 0x9a, 0xbd, 0x82, 0x97, 0x3c, 0xfc, 0x88, 0x3e, 0xe3, 0xfe, 0xa5, 0x07, 0x66, 0xbe, + 0x8d, 0xce, 0x3b, 0x61, 0x9a, 0x51, 0xd1, 0x5e, 0x07, 0x22, 0x58, 0x6f, 0xca, 0xaf, 0x18, 0xa6, + 0x3c, 0xa7, 0x4f, 0x2b, 0x10, 0xd8, 0xca, 0xe3, 0xcb, 0x51, 0xf4, 0xe6, 0x21, 0x5c, 0xe8, 0xd8, + 0xd5, 0x0f, 0xfd, 0xe6, 0x7a, 0x82, 0x92, 0x66, 0xe9, 0xb3, 0x05, 0xd8, 0x15, 0xe8, 0xc2, 0x77, + 0x49, 0x4c, 0x94, 0xff, 0xc7, 0x55, 0xc9, 0xfc, 0x79, 0x11, 0x9a, 0x2b, 0x25, 0x88, 0x13, 0x68, + 0x43, 0x51, 0x0c, 0xc8, 0xce, 0xdb, 0x83, 0xa3, 0xa7, 0x3d, 0xa7, 0x49, 0x14, 0x7d, 0x79, 0xf7, + 0x72, 0xf2, 0x90, 0xd2, 0xdb, 0x44, 0x6c, 0xa0, 0x1f, 0x1c, 0xdb, 0xae, 0x67, 0x57, 0xe5, 0xb4, + 0x9e, 0x83, 0x1d, 0xa1, 0x0f, 0x84, 0x40, 0xbf, 0x6f, 0xbe, 0xd1, 0x94, 0xb3, 0xbf, 0xfd, 0xd9, + 0xeb, 0xa5, 0x0b, 0xf5, 0x97, 0xf9, 0x0f, 0xb3, 0x85, 0x8e, 0x4a, 0x33, 0x86, 0xdc, 0x6d, 0x82, + 0x2b, 0x5b, 0x53, 0x1e, 0xc1, 0x87, 0x50, 0x94, 0x03, 0x70, 0x7e, 0x30, 0x7f, 0xcb, 0xf6, 0x9c, + 0x37, 0xac, 0x6e, 0x83, 0x79, 0x03, 0xc9, 0xc3, 0x9f, 0x19, 0x30, 0x19, 0xfd, 0x82, 0x23, 0x1f, + 0x85, 0xb1, 0xa6, 0xe5, 0x7a, 0xb4, 0x23, 0x2e, 0x2e, 0xa9, 0x70, 0x95, 0xa3, 0xbc, 0x7d, 0x56, + 0x34, 0x93, 0x13, 0xb0, 0xb3, 0x26, 0x83, 0xfa, 0x40, 0x77, 0x7e, 0x5d, 0x32, 0xd1, 0xfb, 0xd6, + 0x03, 0x39, 0x04, 0x23, 0x6e, 0xdb, 0xf1, 0x02, 0x9d, 0xf9, 0x5d, 0xd1, 0x0e, 0xbf, 0x35, 0xd4, + 0xad, 0xfa, 0xf6, 0xcc, 0xf1, 0x40, 0xb7, 0x7e, 0xde, 0xcd, 0x6f, 0x95, 0xdd, 0xcc, 0x79, 0x34, + 0xf4, 0xb8, 0x6d, 0x9d, 0x5f, 0xe8, 0x38, 0x4d, 0xc6, 0x52, 0xe0, 0x40, 0x6a, 0xcd, 0xff, 0x5d, + 0x09, 0x9f, 0x8a, 0x6e, 0x67, 0x8d, 0xe2, 0x0a, 0x56, 0xbc, 0xac, 0x4a, 0xc0, 0x82, 0x32, 0xd1, + 0xee, 0x6c, 0xc5, 0xe6, 0xf8, 0xba, 0xed, 0x7a, 0x4e, 0xc7, 0xae, 0xca, 0x68, 0xaa, 0xea, 0x04, + 0x82, 0x25, 0x2d, 0x0a, 0x07, 0x0d, 0x8a, 0x0a, 0x85, 0xdc, 0xd0, 0xef, 0x10, 0x41, 0x1f, 0xfb, + 0x90, 0x92, 0x64, 0x10, 0xc2, 0xb1, 0xdd, 0x0b, 0xfc, 0x32, 0xbf, 0x64, 0xc0, 0x04, 0xfb, 0xcc, + 0x47, 0xf4, 0x23, 0x27, 0x7f, 0x4b, 0x47, 0x5e, 0x04, 0xc2, 0x47, 0xa8, 0x77, 0x9c, 0x6e, 0xdb, + 0x8f, 0x35, 0x5d, 0x5a, 0x45, 0xc5, 0x1e, 0x63, 0x5f, 0xae, 0xe1, 0x87, 0xbb, 0xb4, 0x4a, 0x76, + 0xc3, 0xb6, 0xa6, 0xf5, 0xa0, 0x62, 0xd5, 0x29, 0xaa, 0xf9, 0x40, 0xd3, 0x7a, 0x30, 0x5b, 0xa7, + 0x64, 0x1a, 0x26, 0xec, 0x56, 0xb5, 0xd1, 0xf5, 0x49, 0xb5, 0xde, 0xae, 0xac, 0xf2, 0x41, 0xf0, + 0x59, 0xdf, 0x38, 0x7e, 0x2a, 0x5b, 0x6f, 0xe3, 0xe8, 0xbe, 0xce, 0x89, 0xfe, 0x72, 0x27, 0xce, + 0x6e, 0x7d, 0xcb, 0xa3, 0xd8, 0x2e, 0xb6, 0xd9, 0xe6, 0xe7, 0x0c, 0x3c, 0xf1, 0x97, 0x29, 0x14, + 0x96, 0x67, 0x37, 0x6c, 0x6f, 0x3d, 0xd3, 0x6d, 0xe6, 0x47, 0x61, 0x17, 0xe7, 0x0f, 0x49, 0xf2, + 0xe3, 0x4f, 0x9f, 0xf1, 0x94, 0x28, 0x2b, 0x41, 0x54, 0xe5, 0x09, 0x2f, 0xde, 0x68, 0xfe, 0x97, + 0x11, 0xd2, 0xc8, 0x20, 0x75, 0xf2, 0x25, 0x32, 0xac, 0xc9, 0x56, 0xbc, 0xfb, 0xdb, 0x97, 0xea, + 0xf5, 0x7a, 0x20, 0xe4, 0x4d, 0x18, 0x13, 0xc4, 0x4b, 0x59, 0x71, 0xea, 0x83, 0x86, 0x10, 0x93, + 0x73, 0x31, 0x57, 0x77, 0x5a, 0x88, 0x2f, 0x60, 0x69, 0x46, 0x11, 0x8b, 0xf8, 0x44, 0xae, 0xc0, + 0x70, 0x70, 0xb2, 0xfa, 0x98, 0x6e, 0x99, 0xe9, 0xba, 0x55, 0x86, 0x8e, 0x9c, 0x49, 0xf3, 0x24, + 0xe6, 0x33, 0xcc, 0xd9, 0x2d, 0x4b, 0x48, 0x21, 0xed, 0xb2, 0xd5, 0x5c, 0xc6, 0xc7, 0xd5, 0x11, + 0x20, 0x69, 0x0a, 0x23, 0x37, 0x45, 0xaa, 0x59, 0xe2, 0xe0, 0x38, 0x15, 0xd1, 0x8b, 0xa2, 0xfb, + 0x70, 0x2c, 0xf1, 0xee, 0xff, 0x8a, 0xd3, 0xaa, 0xd9, 0xfc, 0x91, 0xd8, 0xe3, 0x4e, 0x30, 0xfe, + 0x7c, 0x1f, 0x1c, 0x88, 0xdd, 0x52, 0x47, 0xc7, 0xfb, 0xd1, 0x7d, 0xe0, 0x71, 0x0d, 0xb6, 0x7b, + 0x1d, 0xbb, 0x5e, 0xa7, 0x9d, 0xc5, 0xbc, 0x37, 0x91, 0x21, 0xc0, 0xf4, 0x87, 0x1e, 0x87, 0x60, + 0x9b, 0xed, 0xb2, 0xeb, 0x7d, 0x16, 0x72, 0x0e, 0xce, 0x0d, 0x7f, 0xff, 0xbd, 0x7d, 0xa2, 0xa9, + 0x2c, 0xfe, 0x88, 0xbc, 0x07, 0xd9, 0xa6, 0x78, 0x0f, 0x32, 0xd8, 0x7b, 0x0f, 0xf2, 0x09, 0x23, + 0xf4, 0x96, 0x4e, 0xab, 0x14, 0x32, 0x07, 0x34, 0xfc, 0x3a, 0xe1, 0x6c, 0xd6, 0xd7, 0x09, 0x51, + 0x94, 0xf2, 0x8d, 0x82, 0xb8, 0x2a, 0x13, 0x6f, 0xf5, 0x73, 0x3d, 0xa7, 0x34, 0x7f, 0x5b, 0x9c, + 0x60, 0x25, 0x80, 0x23, 0xc9, 0x17, 0xa1, 0x7f, 0xce, 0x96, 0xce, 0xe2, 0x88, 0x9e, 0xe0, 0xc0, + 0x23, 0x0a, 0x06, 0xe5, 0x43, 0xcf, 0xba, 0xf7, 0x44, 0x82, 0x66, 0x0e, 0x68, 0x1f, 0x2a, 0xe1, + 0xfd, 0xa2, 0x38, 0x00, 0x0f, 0x5f, 0x99, 0xe6, 0x63, 0xfa, 0x1d, 0x11, 0x3e, 0x2a, 0x91, 0xfc, + 0x50, 0xb2, 0xfe, 0xae, 0x01, 0xe3, 0xb1, 0xde, 0x4f, 0x74, 0xfd, 0x87, 0x57, 0x4c, 0x5f, 0x74, + 0xc5, 0xc4, 0x4c, 0x60, 0x7f, 0xc2, 0x75, 0xde, 0x2d, 0x5c, 0x43, 0x78, 0x21, 0xed, 0x39, 0x4d, + 0xbb, 0x7a, 0xf5, 0x01, 0xad, 0x76, 0x7d, 0x65, 0x5f, 0xa0, 0xf4, 0x56, 0xb7, 0xe1, 0xd9, 0xed, + 0x86, 0x4d, 0x3b, 0x99, 0xe6, 0x76, 0x0d, 0xaf, 0x37, 0xb3, 0xa0, 0x93, 0xb7, 0xf4, 0xd0, 0x94, + 0xad, 0x79, 0xc4, 0x18, 0x00, 0x33, 0xcf, 0x8a, 0x54, 0x6c, 0x36, 0xc3, 0x77, 0x3d, 0xeb, 0x1e, + 0xbd, 0xd6, 0xb1, 0x7a, 0x8f, 0x34, 0xa7, 0x60, 0x5b, 0xdd, 0xff, 0x4d, 0xa9, 0x38, 0xf7, 0xc1, + 0x9f, 0xe6, 0xaf, 0xcb, 0x4c, 0xeb, 0x18, 0x28, 0x12, 0x78, 0x16, 0xb6, 0xb2, 0xce, 0x78, 0xbe, + 0xa1, 0xf2, 0xa9, 0x1c, 0x9e, 0x83, 0x72, 0x00, 0x72, 0x1b, 0x7a, 0xb7, 0x6c, 0x15, 0x8e, 0x43, + 0x9f, 0xb8, 0x25, 0x2f, 0xca, 0x38, 0x9a, 0x11, 0x1a, 0xfa, 0x6d, 0x2e, 0xa1, 0xb5, 0x60, 0xbf, + 0x66, 0xbb, 0xde, 0xaa, 0xd3, 0xb1, 0x7f, 0x9c, 0x3d, 0xe2, 0x8c, 0xf1, 0xd9, 0x09, 0xf3, 0xd9, + 0x09, 0x4a, 0xa0, 0x10, 0x96, 0xc0, 0x87, 0xf1, 0x5c, 0x28, 0x09, 0x2b, 0x8a, 0xe0, 0x34, 0x0c, + 0xe0, 0xdb, 0x54, 0x3e, 0x3f, 0xcf, 0xe0, 0xfc, 0xec, 0x8a, 0xcf, 0xcf, 0x8d, 0x96, 0x57, 0xc6, + 0xce, 0xf2, 0x14, 0x32, 0x8e, 0xd9, 0x4d, 0x25, 0xd8, 0xfc, 0xa2, 0x38, 0x8b, 0x4a, 0x84, 0x46, + 0xc2, 0x3e, 0x04, 0x84, 0x1f, 0xa7, 0x32, 0xa8, 0x4a, 0x1e, 0x22, 0xc7, 0x18, 0x20, 0x47, 0xce, + 0xdf, 0xcf, 0xce, 0xc2, 0x00, 0x43, 0xe3, 0xa6, 0x1c, 0x77, 0x27, 0x08, 0x0a, 0x01, 0xcd, 0xb3, + 0x18, 0x40, 0xe1, 0x5d, 0x12, 0xdf, 0xa1, 0x66, 0x5a, 0x39, 0x6f, 0x61, 0x14, 0x15, 0x81, 0x44, + 0x3e, 0x2f, 0xc3, 0x36, 0xdc, 0xf9, 0xa2, 0x16, 0x3e, 0xab, 0x4d, 0x4d, 0x16, 0xe0, 0x02, 0x48, + 0x96, 0xf1, 0x08, 0x7d, 0x0e, 0x5c, 0x0e, 0x3d, 0x95, 0xf8, 0x55, 0x59, 0xd4, 0x21, 0xdb, 0xe8, + 0xbd, 0xa2, 0x0e, 0xf7, 0x60, 0x47, 0xe8, 0x93, 0x3e, 0xcc, 0xbf, 0xd4, 0x63, 0x36, 0x87, 0x5d, + 0x94, 0xbc, 0x9e, 0x92, 0x8f, 0x8a, 0x5a, 0x4e, 0xf3, 0x96, 0xdd, 0x12, 0x59, 0x04, 0xfa, 0x5c, + 0xfc, 0xb7, 0xe4, 0x6b, 0xa2, 0x28, 0x54, 0xaf, 0x98, 0x49, 0x48, 0xbd, 0xb2, 0x45, 0x5b, 0xb8, + 0x12, 0xf6, 0x29, 0xb0, 0xcb, 0x29, 0x58, 0x97, 0x4f, 0xae, 0x62, 0x1d, 0x70, 0xfc, 0x37, 0x61, + 0x82, 0x27, 0xd7, 0x37, 0xed, 0x96, 0xcc, 0xae, 0x10, 0x13, 0x72, 0x58, 0x97, 0x61, 0x1f, 0xe4, + 0x66, 0xbc, 0x16, 0x1d, 0xc0, 0xfc, 0x38, 0x6c, 0xbf, 0xd3, 0xa6, 0xad, 0x1b, 0xfe, 0xaa, 0x4b, + 0xdd, 0x82, 0x6d, 0x72, 0x6e, 0xce, 0xe0, 0xb5, 0x67, 0x70, 0xc0, 0x4c, 0xcb, 0xe3, 0xc3, 0xb8, + 0xb0, 0xc2, 0x80, 0x89, 0x53, 0xa3, 0xde, 0x52, 0x87, 0x80, 0x11, 0xe4, 0xf9, 0x53, 0x30, 0x24, + 0x53, 0xa9, 0xc9, 0x4e, 0x18, 0xf3, 0xff, 0xad, 0xbc, 0xde, 0x72, 0xdb, 0xb4, 0x6a, 0xaf, 0xd8, + 0xb4, 0x36, 0xb6, 0x85, 0x6c, 0x83, 0xbe, 0xb9, 0xee, 0xfa, 0x98, 0x41, 0x06, 0xa1, 0xff, 0x2e, + 0x6d, 0x34, 0xc6, 0x0a, 0xcf, 0xbf, 0x01, 0x3b, 0x93, 0x1e, 0xd1, 0xfb, 0x08, 0x02, 0xb0, 0x0c, + 0xf1, 0xd8, 0x16, 0x32, 0x01, 0xa3, 0x0b, 0x1d, 0xa7, 0xf9, 0xa6, 0xd3, 0x71, 0xbd, 0x25, 0x67, + 0x8e, 0xba, 0xde, 0x98, 0x21, 0x1a, 0xfd, 0x5f, 0x4b, 0x0e, 0xfb, 0x34, 0x56, 0x98, 0xf9, 0xbb, + 0x7b, 0xb0, 0x95, 0x31, 0x4a, 0xde, 0x35, 0x60, 0xd7, 0xcd, 0x93, 0x91, 0xf8, 0x68, 0xce, 0x71, + 0xee, 0x91, 0xf3, 0xba, 0x92, 0x32, 0xfa, 0xc8, 0xac, 0x78, 0x61, 0x43, 0xb0, 0x5c, 0xce, 0xe6, + 0xec, 0x27, 0xde, 0xfd, 0xe7, 0x5f, 0x2c, 0x5c, 0x20, 0xe7, 0x4a, 0xc9, 0xb5, 0xa7, 0x7a, 0x47, + 0x46, 0xa5, 0x9b, 0x27, 0x25, 0xbd, 0xa5, 0x87, 0x72, 0x5a, 0x1f, 0x91, 0x2f, 0x1b, 0x30, 0x7a, + 0xf3, 0xa4, 0x0c, 0x75, 0x19, 0x3f, 0xa7, 0xd2, 0x68, 0x4a, 0x0a, 0xac, 0x8b, 0xa7, 0x73, 0x42, + 0x21, 0x0f, 0x17, 0x18, 0x0f, 0xa7, 0xc9, 0x49, 0x05, 0x0f, 0x6e, 0xdb, 0xf1, 0x94, 0xd4, 0xff, + 0xa6, 0x01, 0x13, 0x09, 0x05, 0x8f, 0xc8, 0x09, 0x1d, 0x2d, 0x89, 0xa5, 0x93, 0x8a, 0x33, 0x79, + 0x40, 0x90, 0xf6, 0x63, 0x8c, 0xf6, 0xc3, 0xe4, 0x50, 0x49, 0x5f, 0x6c, 0x0c, 0xa9, 0xfa, 0x23, + 0x03, 0x48, 0xbc, 0xc2, 0x10, 0x39, 0x9d, 0xb7, 0x22, 0x11, 0x27, 0xf8, 0xa5, 0x8d, 0x15, 0x32, + 0x32, 0xcf, 0x33, 0xa2, 0x4f, 0x91, 0x99, 0x14, 0xa2, 0x4b, 0x6e, 0x9c, 0xd4, 0x2f, 0x1b, 0x30, + 0x1e, 0x43, 0xad, 0xd7, 0x17, 0x55, 0xf5, 0x8d, 0xe2, 0xe9, 0x9c, 0x50, 0x48, 0xfe, 0x39, 0x46, + 0xfe, 0x49, 0x72, 0x22, 0x37, 0xf9, 0xe4, 0x4b, 0x06, 0x8c, 0x45, 0x2b, 0x25, 0x91, 0x93, 0x59, + 0xe6, 0x3d, 0xe2, 0xa0, 0x8b, 0xa7, 0xf2, 0x01, 0x21, 0xe9, 0x67, 0x19, 0xe9, 0x33, 0xe4, 0x78, + 0x1a, 0xe9, 0x34, 0x4a, 0xe4, 0x1f, 0x1a, 0x30, 0x1a, 0xa9, 0x3c, 0x44, 0xb4, 0x0a, 0x9b, 0x5c, + 0xad, 0xa9, 0x78, 0x32, 0x17, 0x4c, 0x46, 0x2b, 0x23, 0xff, 0x8e, 0x14, 0x64, 0x2a, 0x3d, 0x44, + 0xf9, 0x3f, 0x62, 0x92, 0x8f, 0x56, 0x4e, 0x22, 0x79, 0x88, 0xc9, 0x26, 0x79, 0x55, 0x71, 0xa6, + 0xec, 0x92, 0x8f, 0xd6, 0x94, 0x22, 0xdf, 0x36, 0x60, 0x57, 0x62, 0x99, 0x1a, 0x72, 0x36, 0x13, + 0x25, 0x09, 0x55, 0x93, 0x8a, 0xe7, 0x36, 0x00, 0x89, 0x8c, 0xdc, 0x60, 0x8c, 0x5c, 0x21, 0xb3, + 0x99, 0x19, 0x09, 0xa2, 0x09, 0xd9, 0xce, 0xbf, 0x32, 0x60, 0x32, 0xb9, 0x00, 0x0f, 0xc9, 0x4f, + 0xa0, 0x9c, 0x9f, 0xf3, 0x1b, 0x01, 0x45, 0xe6, 0x2e, 0x33, 0xe6, 0xce, 0x92, 0x97, 0x36, 0xc4, + 0x9c, 0x4b, 0x7e, 0xb6, 0x00, 0x07, 0x33, 0xd4, 0x47, 0x22, 0x0b, 0x5a, 0x1a, 0x33, 0x17, 0x91, + 0x2a, 0x5e, 0xdb, 0x34, 0x1e, 0x64, 0xfc, 0x4d, 0xc6, 0xf8, 0x6b, 0xe4, 0x4e, 0x2a, 0xe3, 0x1c, + 0x69, 0x45, 0x34, 0x54, 0x3c, 0x44, 0x5b, 0x09, 0xd5, 0x79, 0x2a, 0x3d, 0x64, 0x3f, 0x1f, 0x91, + 0xcf, 0x14, 0xe0, 0xd9, 0x2c, 0x15, 0xa3, 0xc8, 0x66, 0x59, 0x91, 0xf3, 0x7f, 0x7d, 0xf3, 0x88, + 0x50, 0x28, 0x8b, 0x4c, 0x28, 0xaf, 0x92, 0xeb, 0x8f, 0x49, 0x28, 0x2e, 0xf9, 0x9c, 0x01, 0xc3, + 0x81, 0x72, 0x26, 0x64, 0x5a, 0xeb, 0x81, 0x62, 0x15, 0x58, 0x8a, 0xa5, 0xcc, 0xfd, 0x91, 0x85, + 0x17, 0x18, 0x0b, 0x87, 0xc8, 0x41, 0x5d, 0x6c, 0x83, 0x47, 0xea, 0xe4, 0x57, 0x0c, 0x80, 0x40, + 0x85, 0x9a, 0x63, 0xd9, 0x06, 0x13, 0xb4, 0x4d, 0x67, 0xed, 0x8e, 0xa4, 0x9d, 0x61, 0xa4, 0x9d, + 0x20, 0xa5, 0x0c, 0xa4, 0x85, 0xcc, 0xc6, 0x6f, 0x19, 0x30, 0x1a, 0xa9, 0x0b, 0xa3, 0x77, 0x45, + 0xc9, 0xe5, 0x6c, 0xf4, 0xae, 0x48, 0x51, 0x78, 0xc6, 0x3c, 0xce, 0xa8, 0x7e, 0x9e, 0x1c, 0xd1, + 0x51, 0xbd, 0xd2, 0x6d, 0x34, 0x2a, 0x42, 0xaa, 0xef, 0xc4, 0x6b, 0xff, 0x9c, 0xc8, 0x3e, 0x72, + 0xa6, 0xe0, 0x30, 0xb9, 0xaa, 0x4c, 0xb6, 0xc0, 0x36, 0x40, 0x6b, 0x48, 0xca, 0xbf, 0x63, 0xc0, + 0x8e, 0x50, 0xbc, 0x4c, 0x8e, 0xa7, 0x4d, 0x70, 0x2c, 0x20, 0x3f, 0x91, 0x03, 0x22, 0x63, 0x70, + 0xc5, 0x68, 0x96, 0xc5, 0x71, 0x43, 0x14, 0x7f, 0xcd, 0x80, 0xb1, 0x68, 0x12, 0xbd, 0xde, 0xc5, + 0x2b, 0xca, 0xc7, 0xe8, 0x5d, 0xbc, 0xaa, 0x0a, 0x89, 0xb9, 0xc0, 0x48, 0x7f, 0x85, 0x5c, 0x4e, + 0x25, 0x3d, 0xa4, 0xcf, 0xa5, 0x87, 0xa1, 0x33, 0xd9, 0x47, 0xe4, 0x5f, 0x0c, 0x98, 0x52, 0xd5, + 0x20, 0x21, 0xda, 0xdd, 0x5a, 0x4a, 0xb1, 0x9a, 0xe2, 0xc5, 0x8d, 0x01, 0x67, 0x34, 0x87, 0x2a, + 0xfe, 0x90, 0x37, 0x19, 0x8c, 0x89, 0xbb, 0xfb, 0x47, 0xe4, 0x6f, 0xfc, 0xed, 0x48, 0xac, 0x56, + 0x50, 0xca, 0x76, 0x44, 0x55, 0xe2, 0x28, 0x65, 0x3b, 0xa2, 0x2c, 0x49, 0x94, 0x87, 0xaf, 0xca, + 0xf2, 0x3a, 0xa6, 0xc4, 0x6a, 0x67, 0xf0, 0x1d, 0x03, 0xc6, 0xa2, 0x45, 0x88, 0xf5, 0x9a, 0xa8, + 0xa8, 0x8a, 0x5c, 0x3c, 0x95, 0x0f, 0x08, 0x39, 0x3a, 0xcd, 0x38, 0x2a, 0x91, 0x63, 0x25, 0x4d, + 0x71, 0x69, 0x37, 0x46, 0xf6, 0x77, 0x0c, 0xd8, 0xd3, 0xd3, 0x6e, 0xe6, 0x1b, 0x6d, 0xda, 0x7a, + 0x02, 0x2b, 0x29, 0xd3, 0x8c, 0x78, 0x82, 0xbe, 0x4a, 0x86, 0x35, 0xf5, 0x75, 0xd4, 0xb4, 0x70, + 0xd2, 0x63, 0xba, 0xa6, 0x25, 0x56, 0x95, 0x49, 0xd7, 0xb4, 0xe4, 0x32, 0x32, 0xa9, 0xfb, 0x18, + 0xee, 0xf2, 0xa2, 0x79, 0x9c, 0x21, 0x23, 0xf7, 0x9e, 0x01, 0x53, 0xaa, 0x72, 0x35, 0x7a, 0xe3, + 0x90, 0x52, 0x2a, 0x47, 0x6f, 0x1c, 0xd2, 0x2a, 0xe4, 0x98, 0xd7, 0x18, 0x6b, 0xb3, 0xe4, 0xe5, + 0xf4, 0x83, 0x20, 0x3d, 0x83, 0x7f, 0x6e, 0xc0, 0x44, 0xc2, 0x89, 0x13, 0x79, 0x29, 0x1b, 0x79, + 0x31, 0x1f, 0x74, 0x26, 0x37, 0x1c, 0x72, 0xf4, 0x32, 0xe3, 0xe8, 0x1c, 0x39, 0x93, 0xce, 0x51, + 0xb2, 0x3f, 0xfa, 0x07, 0x03, 0x26, 0x93, 0x2b, 0x13, 0xe8, 0xb7, 0x37, 0xda, 0xaa, 0x18, 0xfa, + 0xed, 0x8d, 0xbe, 0x10, 0x82, 0x79, 0x93, 0xb1, 0xb4, 0x40, 0xe6, 0x33, 0xb2, 0xa4, 0x5f, 0x53, + 0xff, 0x6d, 0xc0, 0x5e, 0x7d, 0x19, 0x04, 0x32, 0x9b, 0xdd, 0xe1, 0xa8, 0xf8, 0x9d, 0xdb, 0x0c, + 0x0a, 0xe4, 0xfb, 0x0d, 0xc6, 0xf7, 0x22, 0xb9, 0xbd, 0x21, 0xbe, 0xd5, 0xfe, 0xeb, 0xdf, 0x42, + 0x8b, 0x31, 0xe2, 0xc5, 0x2e, 0xe4, 0x50, 0xbc, 0x98, 0x2f, 0xbb, 0xb8, 0x31, 0xe0, 0x8d, 0xf2, + 0x9b, 0xd1, 0xaf, 0xfd, 0x87, 0x01, 0xfb, 0xa2, 0x2a, 0x16, 0x75, 0x13, 0x4f, 0x48, 0xb5, 0x73, + 0xb0, 0x9c, 0xcb, 0x71, 0xfc, 0xae, 0x01, 0xe3, 0xb1, 0xa4, 0x77, 0xfd, 0x79, 0xa3, 0xaa, 0x36, + 0x85, 0xfe, 0xbc, 0x51, 0x99, 0x59, 0x6f, 0x9e, 0x60, 0xac, 0xbd, 0x40, 0x8e, 0x66, 0x30, 0xad, + 0x48, 0xdf, 0x57, 0x0c, 0x18, 0x8b, 0xd5, 0x54, 0x38, 0x99, 0x67, 0xf8, 0x4c, 0x0e, 0x5c, 0x95, + 0x67, 0x6f, 0x5e, 0x62, 0x24, 0x9f, 0x21, 0xa7, 0x33, 0x93, 0x1c, 0xb2, 0x9c, 0xdf, 0x31, 0x60, + 0xb7, 0x22, 0x33, 0x5e, 0x7f, 0xd5, 0xa1, 0x4f, 0xc9, 0x2f, 0x5e, 0xd8, 0x10, 0x2c, 0xf2, 0x34, + 0xcf, 0x78, 0xba, 0x4c, 0x2e, 0x66, 0xe5, 0x49, 0xd8, 0x89, 0x10, 0x6b, 0x7f, 0x62, 0xc0, 0xce, + 0xa4, 0xbc, 0x41, 0x72, 0x26, 0x5b, 0xa4, 0x17, 0xcb, 0xdf, 0x2f, 0x9e, 0xcd, 0x0f, 0x98, 0x71, + 0x07, 0x2e, 0xff, 0x8e, 0x2e, 0x8a, 0x2f, 0x18, 0x30, 0x21, 0x8e, 0x50, 0x02, 0xe9, 0x8a, 0xfa, + 0xe3, 0x8c, 0x78, 0xca, 0xa3, 0xfe, 0x38, 0x23, 0x21, 0x0f, 0x32, 0xf5, 0x38, 0xa3, 0xc9, 0x60, + 0x2a, 0x2c, 0xff, 0x90, 0xfc, 0x82, 0x01, 0x43, 0x32, 0xb9, 0x91, 0xbc, 0xa8, 0x1b, 0x2b, 0x9a, + 0x1c, 0x59, 0x3c, 0x96, 0xb1, 0x37, 0xd2, 0x75, 0x84, 0xd1, 0x65, 0x92, 0xfd, 0x0a, 0xba, 0xda, + 0x92, 0x8c, 0xaf, 0x1a, 0x30, 0x1e, 0x2b, 0x83, 0xa0, 0xb7, 0x27, 0xaa, 0x9a, 0x0b, 0x7a, 0x7b, + 0xa2, 0xac, 0xb5, 0x90, 0x7a, 0xc8, 0x29, 0x89, 0xad, 0xd8, 0xad, 0xa4, 0x93, 0x81, 0xbf, 0x30, + 0x60, 0x22, 0x21, 0xd7, 0x9f, 0x64, 0xbc, 0x0e, 0x8a, 0xc9, 0xfa, 0x4c, 0x6e, 0x38, 0x64, 0xe4, + 0x0a, 0x63, 0xe4, 0x12, 0xb9, 0xa0, 0x0a, 0xa7, 0x7b, 0x5a, 0x2b, 0x79, 0x8a, 0xe9, 0xf2, 0x3f, + 0x19, 0x50, 0x54, 0x97, 0x13, 0x20, 0x97, 0xf2, 0x11, 0x17, 0x9d, 0xa2, 0xcb, 0x1b, 0x05, 0xcf, + 0x68, 0x74, 0x94, 0x7c, 0x85, 0x66, 0xec, 0x93, 0x05, 0x38, 0x98, 0x21, 0x89, 0x5f, 0x7f, 0x2c, + 0x9d, 0xbd, 0x3e, 0x85, 0xfe, 0x58, 0x3a, 0x47, 0x35, 0x01, 0xf3, 0x36, 0x63, 0xff, 0x3a, 0x59, + 0x50, 0x59, 0x28, 0xf9, 0x96, 0x2a, 0x9b, 0x20, 0xbe, 0x61, 0xc0, 0x44, 0x42, 0x46, 0xbf, 0x5e, + 0x75, 0xd5, 0x45, 0x08, 0xf4, 0xaa, 0xab, 0x29, 0x3e, 0x60, 0xbe, 0xc2, 0x18, 0x3b, 0x4f, 0xce, + 0xaa, 0xe6, 0x55, 0xd6, 0x2e, 0x0a, 0x94, 0x6f, 0x0a, 0xb1, 0xf2, 0x2d, 0x03, 0x76, 0x2b, 0x52, + 0xfd, 0xf5, 0x3e, 0x52, 0x5f, 0xa9, 0x40, 0xef, 0x23, 0x53, 0x2a, 0x14, 0xa4, 0xfa, 0x7d, 0xca, + 0xe0, 0x95, 0x3c, 0xfd, 0xb5, 0x01, 0x93, 0xc9, 0x95, 0x00, 0xf4, 0x61, 0xa5, 0xb6, 0x8c, 0x81, + 0x3e, 0xac, 0xd4, 0x97, 0x2f, 0x48, 0x35, 0x31, 0xb1, 0x79, 0xc2, 0xea, 0x56, 0xb1, 0xa9, 0x52, + 0xd4, 0x2c, 0xd0, 0x4f, 0x95, 0xbe, 0x3a, 0x8b, 0x7e, 0xaa, 0x52, 0x8a, 0x24, 0xa4, 0x4e, 0x15, + 0x7f, 0x47, 0x2a, 0x32, 0x12, 0x92, 0x8e, 0xb8, 0xc6, 0xe3, 0x09, 0xd6, 0xe9, 0xc7, 0x3d, 0x09, + 0x75, 0x00, 0xf4, 0x7e, 0x4c, 0x99, 0xc9, 0x6f, 0xce, 0x30, 0x0e, 0x5e, 0x24, 0xcf, 0x2b, 0x38, + 0x48, 0xc8, 0xa7, 0x26, 0x7f, 0x6a, 0xc0, 0xd4, 0x62, 0x2f, 0x43, 0xfb, 0x09, 0x52, 0x9f, 0xf6, + 0x08, 0x22, 0x98, 0xa7, 0x1e, 0xe5, 0xe2, 0x2b, 0x22, 0xdb, 0x27, 0x9c, 0xc0, 0xaf, 0x37, 0x63, + 0xea, 0x62, 0x04, 0x7a, 0x33, 0xa6, 0x29, 0x50, 0x60, 0x9e, 0x62, 0x4c, 0x4c, 0x93, 0x17, 0xb3, + 0x4c, 0x81, 0xc8, 0xae, 0x27, 0xef, 0x1a, 0x30, 0x99, 0x9c, 0x53, 0xad, 0x5f, 0xe6, 0xda, 0x44, + 0x6e, 0xfd, 0x32, 0xd7, 0xa7, 0x70, 0x9b, 0x73, 0x8c, 0x8f, 0x8b, 0xe4, 0xbc, 0x82, 0x8f, 0x50, + 0x76, 0x73, 0x30, 0x9b, 0x3b, 0xf0, 0xc2, 0xc0, 0x9f, 0x94, 0x84, 0x8c, 0x66, 0xfd, 0xa4, 0xa8, + 0x33, 0xaf, 0xf5, 0x93, 0xa2, 0xc9, 0xc6, 0x4e, 0x9d, 0x94, 0xc4, 0x54, 0x6d, 0xf2, 0xc7, 0x06, + 0x8c, 0xc7, 0x12, 0x6f, 0xf5, 0x4b, 0x42, 0x95, 0x8e, 0xad, 0x5f, 0x12, 0xca, 0xec, 0xde, 0xd4, + 0x13, 0xb7, 0x78, 0xea, 0x6f, 0xe9, 0x61, 0x20, 0xed, 0xfb, 0x11, 0xf9, 0x4b, 0x03, 0x76, 0x2b, + 0x32, 0x50, 0xf5, 0x86, 0x56, 0x9f, 0xf8, 0xab, 0x37, 0xb4, 0x29, 0x29, 0xaf, 0xa9, 0x0b, 0x5d, + 0x3c, 0x89, 0x4d, 0x48, 0x88, 0x25, 0xdf, 0x34, 0x60, 0x8f, 0x32, 0xb7, 0x94, 0x5c, 0xcc, 0xa8, + 0x21, 0x89, 0x69, 0xaf, 0xc5, 0x4b, 0x1b, 0x84, 0x46, 0xb6, 0x5e, 0x62, 0x6c, 0x1d, 0x27, 0xd3, + 0x59, 0xb4, 0x8c, 0xd5, 0x47, 0xf0, 0x77, 0x65, 0x2e, 0xf9, 0xbc, 0x01, 0x23, 0xe1, 0x4c, 0x55, + 0xe5, 0xd6, 0x2c, 0x31, 0xd5, 0x55, 0xb9, 0x35, 0x4b, 0x4e, 0x7f, 0x35, 0x4b, 0x8c, 0xce, 0xa3, + 0xe4, 0xb0, 0x6a, 0xcb, 0x68, 0x7b, 0x4e, 0x85, 0xe7, 0x94, 0xda, 0x8c, 0x9a, 0xaf, 0x19, 0x58, + 0x18, 0x27, 0x96, 0x3e, 0xaa, 0x5f, 0x0d, 0xaa, 0x9c, 0x55, 0xfd, 0x6a, 0x50, 0xe6, 0xa8, 0xa6, + 0x6e, 0xd3, 0x38, 0xcd, 0x32, 0xcc, 0x28, 0x3d, 0x0c, 0x25, 0xc6, 0xb2, 0x58, 0x77, 0x32, 0x39, + 0xff, 0x54, 0x6f, 0x65, 0xb5, 0x69, 0xaf, 0x7a, 0x2b, 0xab, 0x4f, 0x77, 0x4d, 0x3d, 0x6f, 0x58, + 0x95, 0xe0, 0x95, 0x50, 0x5a, 0x2c, 0x0b, 0xdb, 0x13, 0x4a, 0x8f, 0xe8, 0x4d, 0xab, 0xba, 0xd0, + 0x89, 0xde, 0xb4, 0x6a, 0x6a, 0x9c, 0xa4, 0x86, 0xed, 0xc1, 0x02, 0x28, 0x15, 0x67, 0x05, 0x3d, + 0x9f, 0x1b, 0xf0, 0x12, 0x7f, 0x6b, 0xc0, 0x1e, 0x65, 0x59, 0x13, 0xfd, 0x8a, 0x4e, 0x2b, 0x9b, + 0xa2, 0x5f, 0xd1, 0xa9, 0xb5, 0x54, 0xcc, 0x8b, 0x8c, 0xb9, 0x97, 0xc8, 0x29, 0x55, 0x44, 0x98, + 0xc0, 0x59, 0x45, 0x16, 0x6c, 0xfa, 0xb2, 0x01, 0x63, 0xd1, 0x24, 0x59, 0xfd, 0x91, 0xa3, 0x22, + 0xe1, 0xb7, 0x78, 0x2a, 0x1f, 0x50, 0x46, 0xea, 0x7b, 0xff, 0x3f, 0x21, 0x42, 0x86, 0x42, 0xf4, + 0x2f, 0x1a, 0xb0, 0x33, 0x21, 0xdd, 0xd4, 0xd5, 0x3f, 0x7a, 0x48, 0x4a, 0x8a, 0xd5, 0x3f, 0x7a, + 0x48, 0xcc, 0x88, 0x4d, 0xbd, 0xaf, 0x5d, 0x66, 0x50, 0x22, 0xb7, 0x59, 0x9e, 0xf2, 0x7e, 0xba, + 0x00, 0x07, 0x52, 0x33, 0x1d, 0xc9, 0x7c, 0x9e, 0x53, 0x75, 0x55, 0xf6, 0x6c, 0xf1, 0xea, 0x26, + 0xb1, 0x20, 0xa7, 0x1f, 0x66, 0x9c, 0x96, 0xc9, 0x62, 0xe6, 0x9b, 0x98, 0x6a, 0x0f, 0x97, 0xf6, + 0xa0, 0xfe, 0x07, 0x06, 0x98, 0xe9, 0x39, 0x66, 0xe4, 0x6a, 0xba, 0x72, 0x65, 0x48, 0x79, 0x2b, + 0x2e, 0x6c, 0x16, 0x4d, 0xc6, 0xe0, 0xc0, 0x62, 0x48, 0xf8, 0x45, 0x45, 0xc5, 0x77, 0xa9, 0xbd, + 0x0c, 0x37, 0xf2, 0x07, 0x06, 0x8c, 0x45, 0x53, 0xd4, 0x52, 0x9e, 0xb4, 0x26, 0xe7, 0xc2, 0xa5, + 0x3c, 0x69, 0x55, 0x64, 0xc1, 0xa5, 0x3e, 0x2f, 0xb2, 0xf8, 0xc9, 0x8c, 0xeb, 0x43, 0xf2, 0x6c, + 0xac, 0xd2, 0x43, 0xcc, 0x30, 0x63, 0x87, 0x88, 0x24, 0x9e, 0x35, 0xa5, 0xbf, 0x90, 0x57, 0x26, + 0xb9, 0xe9, 0x2f, 0xe4, 0xd5, 0x59, 0x6c, 0xa9, 0x4f, 0x76, 0x30, 0x87, 0x2c, 0x08, 0x2b, 0x78, + 0xe8, 0x3c, 0x0a, 0x70, 0xf3, 0x35, 0x03, 0x26, 0x12, 0x92, 0xd2, 0x48, 0x4e, 0xba, 0xb2, 0x39, + 0x28, 0x4d, 0xf6, 0x5b, 0xea, 0xae, 0x3e, 0x81, 0x21, 0xb7, 0xc7, 0x11, 0x7b, 0xf4, 0x15, 0x4e, + 0xcb, 0x3a, 0x9e, 0xae, 0xe8, 0xe1, 0x9c, 0x36, 0xbd, 0xfd, 0x4b, 0xcc, 0x65, 0x4b, 0x7d, 0xf4, + 0x85, 0xcb, 0x1e, 0x63, 0xe3, 0x90, 0xe1, 0xfe, 0x35, 0x3f, 0x9c, 0x0c, 0x25, 0xa9, 0x91, 0xec, + 0x04, 0x64, 0x4b, 0xbd, 0x48, 0xce, 0x81, 0x33, 0xa7, 0x19, 0xd1, 0x47, 0xc8, 0x73, 0x99, 0x88, + 0x76, 0xc9, 0xef, 0xb3, 0x3b, 0xb9, 0x70, 0xaa, 0x55, 0xda, 0x9d, 0x5c, 0x62, 0xba, 0x5a, 0xda, + 0x9d, 0x5c, 0x72, 0xb6, 0x5a, 0xaa, 0x90, 0xe3, 0xa9, 0x64, 0xf2, 0x11, 0xef, 0x3b, 0xec, 0x12, + 0x34, 0x92, 0x25, 0x46, 0x72, 0x91, 0x91, 0xf5, 0x12, 0x54, 0x91, 0xeb, 0x96, 0x7a, 0xd8, 0x93, + 0x90, 0x08, 0x47, 0x7e, 0xc9, 0x88, 0xe4, 0xb1, 0x95, 0xf4, 0x01, 0x52, 0x2c, 0x01, 0xad, 0x78, + 0x3c, 0x3b, 0x00, 0xd2, 0xf9, 0x22, 0xa3, 0xf3, 0x39, 0xf2, 0xac, 0x32, 0x88, 0xa2, 0xad, 0x8a, + 0x8d, 0x50, 0x73, 0xf7, 0xbe, 0xf1, 0xbd, 0xbd, 0xc6, 0x37, 0xbf, 0xb7, 0xd7, 0xf8, 0xee, 0xf7, + 0xf6, 0x1a, 0x3f, 0xf7, 0xfe, 0xde, 0x2d, 0xdf, 0x7c, 0x7f, 0xef, 0x96, 0xef, 0xbc, 0xbf, 0x77, + 0xcb, 0x47, 0x5e, 0xab, 0xdb, 0xde, 0x6a, 0x77, 0x79, 0xba, 0xea, 0x34, 0x4b, 0x37, 0x04, 0xa6, + 0x9b, 0xd6, 0xb2, 0xdb, 0xc3, 0x7b, 0xac, 0xea, 0x74, 0x68, 0xf0, 0xe7, 0xaa, 0x65, 0xb7, 0xf0, + 0x0a, 0xcc, 0xed, 0x0d, 0xea, 0xad, 0xb7, 0xa9, 0x5b, 0x5a, 0x9b, 0x59, 0x1e, 0x60, 0xff, 0xb3, + 0xff, 0xc9, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xdd, 0xd4, 0x38, 0xa0, 0x06, 0x81, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/chain/exchange/types/v2/spot.go b/chain/exchange/types/v2/spot.go new file mode 100644 index 00000000..eef4473d --- /dev/null +++ b/chain/exchange/types/v2/spot.go @@ -0,0 +1,252 @@ +// nolint // revive +package v2 + +import ( + "bytes" + "sort" + + "cosmossdk.io/math" + "github.com/InjectiveLabs/sdk-go/chain/exchange/types" + "github.com/ethereum/go-ethereum/common" +) + +type OrderFillType int + +const ( + RestingLimitBuy OrderFillType = 0 + RestingLimitSell OrderFillType = 1 + TransientLimitBuy OrderFillType = 2 + TransientLimitSell OrderFillType = 3 +) + +func (r *SpotOrderbookMatchingResults) GetOrderbookFills(fillType OrderFillType) *OrderbookFills { + switch fillType { + case RestingLimitBuy: + return r.RestingBuyOrderbookFills + case RestingLimitSell: + return r.RestingSellOrderbookFills + case TransientLimitBuy: + return r.TransientBuyOrderbookFills + case TransientLimitSell: + return r.TransientSellOrderbookFills + } + + return r.TransientSellOrderbookFills +} + +type OrderbookFills struct { + Orders []*SpotLimitOrder + FillQuantities []math.LegacyDec +} + +type SpotOrderbookMatchingResults struct { + TransientBuyOrderbookFills *OrderbookFills + RestingBuyOrderbookFills *OrderbookFills + TransientSellOrderbookFills *OrderbookFills + RestingSellOrderbookFills *OrderbookFills + ClearingPrice math.LegacyDec + ClearingQuantity math.LegacyDec +} + +type SpotMarketFilter struct { +} + +type FullSpotMarketFiller struct { +} + +type SpotOrderStateExpansion struct { + BaseChangeAmount math.LegacyDec + BaseRefundAmount math.LegacyDec + QuoteChangeAmount math.LegacyDec + QuoteRefundAmount math.LegacyDec + TradePrice math.LegacyDec + FeeRecipient common.Address + FeeRecipientReward math.LegacyDec + AuctionFeeReward math.LegacyDec + TraderFeeReward math.LegacyDec + TradingRewardPoints math.LegacyDec + LimitOrder *SpotLimitOrder + LimitOrderFillQuantity math.LegacyDec + MarketOrder *SpotMarketOrder + MarketOrderFillQuantity math.LegacyDec + OrderHash common.Hash + OrderPrice math.LegacyDec + SubaccountID common.Hash + TraderAddress string + Cid string +} + +type SpotBatchExecutionData struct { + Market *SpotMarket + BaseDenomDepositDeltas types.DepositDeltas + QuoteDenomDepositDeltas types.DepositDeltas + BaseDenomDepositSubaccountIDs []common.Hash + QuoteDenomDepositSubaccountIDs []common.Hash + LimitOrderFilledDeltas []*SpotLimitOrderDelta + MarketOrderExecutionEvent *EventBatchSpotExecution + LimitOrderExecutionEvent []*EventBatchSpotExecution + NewOrdersEvent *EventNewSpotOrders + TradingRewardPoints types.TradingRewardPoints + VwapData *SpotVwapData +} + +func (e *SpotOrderStateExpansion) UpdateFromDepositDeltas( + market *SpotMarket, baseDenomDepositDeltas, quoteDenomDepositDeltas types.DepositDeltas, +) { + traderBaseDepositDelta := &types.DepositDelta{ + AvailableBalanceDelta: market.QuantityToChainFormat(e.BaseRefundAmount), + TotalBalanceDelta: market.QuantityToChainFormat(e.BaseChangeAmount), + } + + traderQuoteDepositDelta := &types.DepositDelta{ + AvailableBalanceDelta: market.NotionalToChainFormat(e.QuoteRefundAmount), + TotalBalanceDelta: market.NotionalToChainFormat(e.QuoteChangeAmount), + } + + if e.BaseChangeAmount.IsPositive() { + traderBaseDepositDelta.AddAvailableBalance(market.QuantityToChainFormat(e.BaseChangeAmount)) + } + + if e.QuoteChangeAmount.IsPositive() { + traderQuoteDepositDelta.AddAvailableBalance(market.NotionalToChainFormat(e.QuoteChangeAmount)) + } + + feeRecipientSubaccount := types.EthAddressToSubaccountID(e.FeeRecipient) + if bytes.Equal(feeRecipientSubaccount.Bytes(), types.ZeroSubaccountID.Bytes()) { + feeRecipientSubaccount = types.AuctionSubaccountID + } + + baseDenomDepositDeltas.ApplyDepositDelta(e.SubaccountID, traderBaseDepositDelta) + quoteDenomDepositDeltas.ApplyDepositDelta(e.SubaccountID, traderQuoteDepositDelta) + + quoteDenomDepositDeltas.ApplyUniformDelta(feeRecipientSubaccount, market.NotionalToChainFormat(e.FeeRecipientReward)) + quoteDenomDepositDeltas.ApplyUniformDelta(types.AuctionSubaccountID, market.NotionalToChainFormat(e.AuctionFeeReward)) +} + +func GetBatchExecutionEventsFromSpotLimitOrderStateExpansions( + isBuy bool, + market *SpotMarket, + executionType ExecutionType, + spotLimitOrderStateExpansions []*SpotOrderStateExpansion, + baseDenomDepositDeltas, + quoteDenomDepositDeltas types.DepositDeltas, +) (*EventBatchSpotExecution, []*SpotLimitOrderDelta, types.TradingRewardPoints) { + limitOrderBatchEvent := &EventBatchSpotExecution{ + MarketId: market.MarketID().Hex(), + IsBuy: isBuy, + ExecutionType: executionType, + } + + trades := make([]*TradeLog, 0, len(spotLimitOrderStateExpansions)) + + // array of (SubaccountIndexKey, fillableAmount) to update/delete + filledDeltas := make([]*SpotLimitOrderDelta, 0, len(spotLimitOrderStateExpansions)) + tradingRewardPoints := types.NewTradingRewardPoints() + + for idx := range spotLimitOrderStateExpansions { + expansion := spotLimitOrderStateExpansions[idx] + expansion.UpdateFromDepositDeltas(market, baseDenomDepositDeltas, quoteDenomDepositDeltas) + + // skip adding trade data if there was no trade (unfilled new order) + fillQuantity := spotLimitOrderStateExpansions[idx].BaseChangeAmount + if fillQuantity.IsZero() { + continue + } + + filledDeltas = append(filledDeltas, &SpotLimitOrderDelta{ + Order: expansion.LimitOrder, + FillQuantity: expansion.LimitOrderFillQuantity, + }) + + var realizedTradeFee math.LegacyDec + + isSelfRelayedTrade := expansion.FeeRecipient == types.SubaccountIDToEthAddress(expansion.SubaccountID) + if isSelfRelayedTrade { + // if negative fee, equals the full negative rebate + // otherwise equals the fees going to auction + realizedTradeFee = expansion.AuctionFeeReward + } else { + realizedTradeFee = expansion.FeeRecipientReward.Add(expansion.AuctionFeeReward) + } + + tradingRewardPoints.AddPointsForAddress(expansion.TraderAddress, expansion.TradingRewardPoints) + + trades = append(trades, &TradeLog{ + Quantity: expansion.BaseChangeAmount.Abs(), + Price: expansion.TradePrice, + SubaccountId: expansion.SubaccountID.Bytes(), + Fee: realizedTradeFee, + OrderHash: expansion.OrderHash.Bytes(), + FeeRecipientAddress: expansion.FeeRecipient.Bytes(), + Cid: expansion.Cid, + }) + } + limitOrderBatchEvent.Trades = trades + + if len(trades) == 0 { + limitOrderBatchEvent = nil + } + return limitOrderBatchEvent, filledDeltas, tradingRewardPoints +} + +type SpotVwapData struct { + Price math.LegacyDec + Quantity math.LegacyDec +} + +func NewSpotVwapData() *SpotVwapData { + return &SpotVwapData{ + Price: math.LegacyZeroDec(), + Quantity: math.LegacyZeroDec(), + } +} + +func (p *SpotVwapData) ApplyExecution(price, quantity math.LegacyDec) *SpotVwapData { + if p == nil { + p = NewSpotVwapData() + } + + if price.IsNil() || quantity.IsNil() || quantity.IsZero() { + return p + } + + newQuantity := p.Quantity.Add(quantity) + newPrice := p.Price.Mul(p.Quantity).Add(price.Mul(quantity)).Quo(newQuantity) + + return &SpotVwapData{ + Price: newPrice, + Quantity: newQuantity, + } +} + +type SpotVwapInfo map[common.Hash]*SpotVwapData + +func NewSpotVwapInfo() SpotVwapInfo { + return make(SpotVwapInfo) +} + +func (p *SpotVwapInfo) ApplyVwap(marketID common.Hash, newVwapData *SpotVwapData) { + var existingVwapData *SpotVwapData + + existingVwapData = (*p)[marketID] + if existingVwapData == nil { + existingVwapData = NewSpotVwapData() + (*p)[marketID] = existingVwapData + } + + if !newVwapData.Quantity.IsZero() { + (*p)[marketID] = existingVwapData.ApplyExecution(newVwapData.Price, newVwapData.Quantity) + } +} + +func (p *SpotVwapInfo) GetSortedSpotMarketIDs() []common.Hash { + spotMarketIDs := make([]common.Hash, 0) + for k := range *p { + spotMarketIDs = append(spotMarketIDs, k) + } + + sort.SliceStable(spotMarketIDs, func(i, j int) bool { + return bytes.Compare(spotMarketIDs[i].Bytes(), spotMarketIDs[j].Bytes()) < 0 + }) + return spotMarketIDs +} diff --git a/chain/exchange/types/v2/subaccount.go b/chain/exchange/types/v2/subaccount.go index a4abf9c2..d0fb00b3 100644 --- a/chain/exchange/types/v2/subaccount.go +++ b/chain/exchange/types/v2/subaccount.go @@ -2,6 +2,7 @@ package v2 import ( "cosmossdk.io/math" + "github.com/ethereum/go-ethereum/common" ) func NewSubaccountOrderbookMetadata() *SubaccountOrderbookMetadata { @@ -42,3 +43,59 @@ func (m *SubaccountOrderbookMetadata) ApplyDelta(d *SubaccountOrderbookMetadata) m.VanillaLimitOrderCount += d.VanillaLimitOrderCount m.ReduceOnlyLimitOrderCount += d.ReduceOnlyLimitOrderCount } + +func NewSubaccountOrderMetadata() *SubaccountOrderMetadata { + return &SubaccountOrderMetadata{ + CumulativeEOBVanillaQuantity: math.LegacyZeroDec(), + CumulativeEOBReduceOnlyQuantity: math.LegacyZeroDec(), + CumulativeBetterReduceOnlyQuantity: math.LegacyZeroDec(), + } +} + +type SubaccountOrderMetadata struct { + CumulativeEOBVanillaQuantity math.LegacyDec + CumulativeEOBReduceOnlyQuantity math.LegacyDec + CumulativeBetterReduceOnlyQuantity math.LegacyDec +} + +func NewSubaccountOrderResults() *SubaccountOrderResults { + return &SubaccountOrderResults{ + ReduceOnlyOrders: make([]*SubaccountOrderData, 0), + VanillaOrders: make([]*SubaccountOrderData, 0), + metadata: NewSubaccountOrderMetadata(), + } +} + +type SubaccountOrderResults struct { + ReduceOnlyOrders []*SubaccountOrderData + VanillaOrders []*SubaccountOrderData + metadata *SubaccountOrderMetadata + LastFoundOrderPrice *math.LegacyDec + LastFoundOrderHash *common.Hash +} + +func (r *SubaccountOrderResults) AddSubaccountOrder(d *SubaccountOrderData) { + if d.Order.IsReduceOnly { + r.ReduceOnlyOrders = append(r.ReduceOnlyOrders, d) + r.metadata.CumulativeEOBReduceOnlyQuantity = r.metadata.CumulativeEOBReduceOnlyQuantity.Add(d.Order.Quantity) + } else { + r.VanillaOrders = append(r.VanillaOrders, d) + r.metadata.CumulativeEOBVanillaQuantity = r.metadata.CumulativeEOBVanillaQuantity.Add(d.Order.Quantity) + } +} + +func (r *SubaccountOrderResults) IncrementCumulativeBetterReduceOnlyQuantity(quantity math.LegacyDec) { + r.metadata.CumulativeBetterReduceOnlyQuantity = r.metadata.CumulativeBetterReduceOnlyQuantity.Add(quantity) +} + +func (r *SubaccountOrderResults) GetCumulativeEOBVanillaQuantity() math.LegacyDec { + return r.metadata.CumulativeEOBVanillaQuantity +} + +func (r *SubaccountOrderResults) GetCumulativeEOBReduceOnlyQuantity() math.LegacyDec { + return r.metadata.CumulativeEOBReduceOnlyQuantity +} + +func (r *SubaccountOrderResults) GetCumulativeBetterReduceOnlyQuantity() math.LegacyDec { + return r.metadata.CumulativeBetterReduceOnlyQuantity +} diff --git a/chain/exchange/types/v2/trade.go b/chain/exchange/types/v2/trade.go new file mode 100644 index 00000000..a99e3846 --- /dev/null +++ b/chain/exchange/types/v2/trade.go @@ -0,0 +1,23 @@ +package v2 + +import "cosmossdk.io/math" + +type TradeFeeData struct { + TotalTradeFee math.LegacyDec + TraderFee math.LegacyDec + TradingRewardPoints math.LegacyDec + FeeRecipientReward math.LegacyDec + AuctionFeeReward math.LegacyDec + DiscountedTradeFeeRate math.LegacyDec +} + +func NewEmptyTradeFeeData(discountedTradeFeeRate math.LegacyDec) *TradeFeeData { + return &TradeFeeData{ + TotalTradeFee: math.LegacyZeroDec(), + TraderFee: math.LegacyZeroDec(), + TradingRewardPoints: math.LegacyZeroDec(), + FeeRecipientReward: math.LegacyZeroDec(), + AuctionFeeReward: math.LegacyZeroDec(), + DiscountedTradeFeeRate: discountedTradeFeeRate, + } +} diff --git a/chain/exchange/types/v2/tx.pb.go b/chain/exchange/types/v2/tx.pb.go index 679f3811..93757855 100644 --- a/chain/exchange/types/v2/tx.pb.go +++ b/chain/exchange/types/v2/tx.pb.go @@ -5141,6 +5141,100 @@ func (m *MsgCancelPostOnlyModeResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgCancelPostOnlyModeResponse proto.InternalMessageInfo +// MsgActivatePostOnlyMode defines a message to turn on the post-only mode for a +// number of blocks +type MsgActivatePostOnlyMode struct { + // the sender's Injective address + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + // the number of blocks to activate post-only mode for + BlocksAmount uint32 `protobuf:"varint,2,opt,name=blocks_amount,json=blocksAmount,proto3" json:"blocks_amount,omitempty"` +} + +func (m *MsgActivatePostOnlyMode) Reset() { *m = MsgActivatePostOnlyMode{} } +func (m *MsgActivatePostOnlyMode) String() string { return proto.CompactTextString(m) } +func (*MsgActivatePostOnlyMode) ProtoMessage() {} +func (*MsgActivatePostOnlyMode) Descriptor() ([]byte, []int) { + return fileDescriptor_7c861fb1c14863a5, []int{113} +} +func (m *MsgActivatePostOnlyMode) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgActivatePostOnlyMode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgActivatePostOnlyMode.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgActivatePostOnlyMode) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgActivatePostOnlyMode.Merge(m, src) +} +func (m *MsgActivatePostOnlyMode) XXX_Size() int { + return m.Size() +} +func (m *MsgActivatePostOnlyMode) XXX_DiscardUnknown() { + xxx_messageInfo_MsgActivatePostOnlyMode.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgActivatePostOnlyMode proto.InternalMessageInfo + +func (m *MsgActivatePostOnlyMode) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgActivatePostOnlyMode) GetBlocksAmount() uint32 { + if m != nil { + return m.BlocksAmount + } + return 0 +} + +// MsgActivatePostOnlyModeResponse defines the response for +// MsgActivatePostOnlyMode +type MsgActivatePostOnlyModeResponse struct { +} + +func (m *MsgActivatePostOnlyModeResponse) Reset() { *m = MsgActivatePostOnlyModeResponse{} } +func (m *MsgActivatePostOnlyModeResponse) String() string { return proto.CompactTextString(m) } +func (*MsgActivatePostOnlyModeResponse) ProtoMessage() {} +func (*MsgActivatePostOnlyModeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_7c861fb1c14863a5, []int{114} +} +func (m *MsgActivatePostOnlyModeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgActivatePostOnlyModeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgActivatePostOnlyModeResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgActivatePostOnlyModeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgActivatePostOnlyModeResponse.Merge(m, src) +} +func (m *MsgActivatePostOnlyModeResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgActivatePostOnlyModeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgActivatePostOnlyModeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgActivatePostOnlyModeResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*MsgUpdateSpotMarket)(nil), "injective.exchange.v2.MsgUpdateSpotMarket") proto.RegisterType((*MsgUpdateSpotMarketResponse)(nil), "injective.exchange.v2.MsgUpdateSpotMarketResponse") @@ -5255,179 +5349,181 @@ func init() { proto.RegisterType((*MsgAtomicMarketOrderFeeMultiplierScheduleResponse)(nil), "injective.exchange.v2.MsgAtomicMarketOrderFeeMultiplierScheduleResponse") proto.RegisterType((*MsgCancelPostOnlyMode)(nil), "injective.exchange.v2.MsgCancelPostOnlyMode") proto.RegisterType((*MsgCancelPostOnlyModeResponse)(nil), "injective.exchange.v2.MsgCancelPostOnlyModeResponse") + proto.RegisterType((*MsgActivatePostOnlyMode)(nil), "injective.exchange.v2.MsgActivatePostOnlyMode") + proto.RegisterType((*MsgActivatePostOnlyModeResponse)(nil), "injective.exchange.v2.MsgActivatePostOnlyModeResponse") } func init() { proto.RegisterFile("injective/exchange/v2/tx.proto", fileDescriptor_7c861fb1c14863a5) } var fileDescriptor_7c861fb1c14863a5 = []byte{ - // 5243 bytes of a gzipped FileDescriptorProto + // 5300 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5d, 0x6c, 0x1c, 0xc9, 0x71, 0xb0, 0x46, 0xfc, 0x2f, 0xfe, 0x0f, 0x29, 0x71, 0xb5, 0x94, 0x48, 0x69, 0xa8, 0x5f, 0x9e, - 0xc4, 0x95, 0x78, 0xfa, 0xbb, 0x95, 0x25, 0x1d, 0x29, 0x8a, 0xdf, 0xe9, 0x4e, 0x3c, 0x51, 0x4b, - 0xdd, 0x77, 0xbe, 0x8b, 0x8d, 0xc5, 0x70, 0xb6, 0xb9, 0x1c, 0x73, 0x77, 0x66, 0x6f, 0x66, 0x96, - 0x12, 0xef, 0x21, 0xfe, 0x41, 0x10, 0x1f, 0x1c, 0x04, 0x30, 0x10, 0x20, 0x40, 0x80, 0x04, 0x70, - 0x12, 0x24, 0x81, 0x9d, 0x20, 0x39, 0x27, 0x06, 0xe2, 0x24, 0x08, 0x0c, 0x04, 0x30, 0x60, 0x24, - 0x2f, 0x97, 0x00, 0x06, 0x02, 0x3f, 0x28, 0xc6, 0xdd, 0xc3, 0x05, 0xce, 0x5b, 0x1e, 0x93, 0x97, - 0x60, 0xba, 0x7b, 0x7a, 0xe7, 0xa7, 0xbb, 0x67, 0x76, 0x8f, 0x3c, 0x9f, 0x0d, 0xbf, 0xdc, 0x69, - 0xba, 0xab, 0xaa, 0xab, 0xaa, 0xab, 0xab, 0xab, 0xab, 0xab, 0x97, 0x30, 0x63, 0x5a, 0x5f, 0x42, - 0x86, 0x67, 0xee, 0xa2, 0x02, 0x7a, 0x66, 0x6c, 0xeb, 0x56, 0x15, 0x15, 0x76, 0x17, 0x0b, 0xde, - 0xb3, 0x85, 0x86, 0x63, 0x7b, 0xb6, 0x7a, 0x84, 0xf5, 0x2f, 0x04, 0xfd, 0x0b, 0xbb, 0x8b, 0xf9, - 0x19, 0xc3, 0x76, 0xeb, 0xb6, 0x5b, 0xd8, 0xd4, 0x5d, 0x54, 0xd8, 0xbd, 0xb2, 0x89, 0x3c, 0xfd, - 0x4a, 0xc1, 0xb0, 0x4d, 0x8b, 0xa0, 0xe5, 0x17, 0x68, 0x7f, 0xc5, 0x74, 0x3d, 0xc7, 0xdc, 0x6c, - 0x7a, 0xa6, 0x6d, 0x31, 0xb8, 0x70, 0x23, 0x85, 0x9f, 0xa2, 0xf0, 0x75, 0xb7, 0x5a, 0xd8, 0xbd, - 0xe2, 0xff, 0x8f, 0x76, 0x1c, 0x23, 0x1d, 0x65, 0xfc, 0x55, 0x20, 0x1f, 0xb4, 0x6b, 0xb2, 0x6a, - 0x57, 0x6d, 0xd2, 0xee, 0xff, 0x8b, 0xb6, 0x9e, 0xe6, 0x0b, 0xc4, 0x98, 0x27, 0x50, 0xa7, 0xf8, - 0x50, 0xb6, 0x53, 0x41, 0x0e, 0x05, 0xd1, 0xf8, 0x20, 0x75, 0xdd, 0xd9, 0x41, 0x9e, 0x7c, 0xb0, - 0x86, 0x63, 0x37, 0x6c, 0x57, 0xaf, 0x51, 0xa8, 0x33, 0x2d, 0x28, 0xdb, 0xd1, 0x8d, 0x5a, 0x4b, - 0x63, 0xe4, 0x93, 0x82, 0x8d, 0xeb, 0x75, 0xd3, 0xb2, 0x0b, 0xf8, 0xbf, 0xa4, 0x49, 0xfb, 0xe3, - 0x2e, 0x98, 0x58, 0x73, 0xab, 0x6f, 0x34, 0x2a, 0xba, 0x87, 0x36, 0x1a, 0xb6, 0xb7, 0x86, 0x47, - 0x57, 0x27, 0xa1, 0x47, 0xaf, 0xd4, 0x4d, 0x2b, 0xa7, 0x9c, 0x54, 0xce, 0x0f, 0x94, 0xc8, 0x87, - 0x3a, 0x0d, 0x03, 0x84, 0xbb, 0xb2, 0x59, 0xc9, 0x1d, 0xc6, 0x3d, 0xfd, 0xa4, 0xe1, 0x41, 0x45, - 0x3d, 0x01, 0x60, 0xa1, 0xa7, 0x65, 0xcf, 0x34, 0x76, 0x90, 0x93, 0xeb, 0xc2, 0xbd, 0x03, 0x16, - 0x7a, 0xfa, 0x04, 0x37, 0xa8, 0x6f, 0xc1, 0x94, 0xdf, 0x5d, 0x37, 0xad, 0x72, 0xc3, 0x31, 0x0d, - 0x84, 0x01, 0xcb, 0xae, 0xf9, 0x2e, 0xca, 0x75, 0xfb, 0xb0, 0xcb, 0x73, 0x3f, 0x7a, 0x3e, 0x7b, - 0xe8, 0x27, 0xcf, 0x67, 0xa7, 0xc9, 0x1c, 0xb8, 0x95, 0x9d, 0x05, 0xd3, 0x2e, 0xd4, 0x75, 0x6f, - 0x7b, 0xe1, 0x21, 0xaa, 0xea, 0xc6, 0xde, 0x0a, 0x32, 0x4a, 0x13, 0x16, 0x7a, 0xba, 0x66, 0x5a, - 0xeb, 0x3e, 0x05, 0x9f, 0xf0, 0x86, 0xf9, 0x2e, 0x52, 0xcb, 0x90, 0x0f, 0x48, 0xbf, 0xd3, 0xd4, - 0x2d, 0xcf, 0xf4, 0xf6, 0x42, 0xd4, 0x7b, 0xb2, 0x53, 0x3f, 0x4a, 0xa8, 0x3f, 0xa6, 0x44, 0xd8, - 0x00, 0x6b, 0x30, 0x16, 0x0c, 0x60, 0xd9, 0xbe, 0x51, 0xe9, 0xb5, 0x5c, 0x6f, 0x76, 0xb2, 0x23, - 0x84, 0xec, 0xeb, 0x14, 0xb5, 0x58, 0xf8, 0xcf, 0x6f, 0xcd, 0x1e, 0xfa, 0xda, 0xc7, 0xef, 0xcf, - 0x13, 0xb5, 0x7e, 0xe3, 0xe3, 0xf7, 0xe7, 0x8f, 0xb3, 0xd9, 0xe5, 0xcc, 0x86, 0x76, 0x02, 0xa6, - 0x39, 0xcd, 0x25, 0xe4, 0x36, 0x6c, 0xcb, 0x45, 0xda, 0xf7, 0x7a, 0xe1, 0x18, 0xeb, 0x5f, 0x41, - 0x8e, 0xb9, 0xab, 0xfb, 0xb6, 0xf0, 0xab, 0xa9, 0x3c, 0xf0, 0xa9, 0x54, 0xbf, 0x00, 0x39, 0x9f, - 0x9c, 0x69, 0x99, 0x9e, 0xa9, 0xd7, 0xca, 0x75, 0xdd, 0xa9, 0x9a, 0x56, 0xd9, 0xd1, 0x3d, 0xd3, - 0xce, 0xf5, 0x65, 0x27, 0x7b, 0xc4, 0x42, 0x4f, 0x1f, 0x10, 0x1a, 0x6b, 0x98, 0x44, 0xc9, 0xa7, - 0xa0, 0x56, 0xe0, 0x38, 0x66, 0x56, 0x37, 0x2d, 0x0f, 0x59, 0xba, 0x65, 0xa0, 0xe8, 0x08, 0xfd, - 0xd9, 0x47, 0x38, 0xe6, 0x33, 0xde, 0xa2, 0x13, 0x1e, 0xe5, 0x6d, 0x32, 0x9d, 0x0e, 0xaa, 0x34, - 0xe3, 0x03, 0x0c, 0x64, 0x1f, 0x60, 0xd2, 0x42, 0x4f, 0x4b, 0x98, 0x44, 0x98, 0x76, 0x19, 0x7c, - 0xd1, 0xca, 0x76, 0x03, 0xb5, 0xf4, 0x5d, 0x36, 0xf4, 0x46, 0x0e, 0x4e, 0x2a, 0xe7, 0x07, 0x17, - 0xcf, 0x2e, 0x70, 0xbd, 0xff, 0xc2, 0xa3, 0x06, 0x62, 0x3a, 0xbe, 0xa7, 0x37, 0x96, 0xbb, 0x7d, - 0x0e, 0x4a, 0xaa, 0x85, 0x9e, 0xc6, 0x7a, 0x8a, 0x2f, 0xbd, 0xf7, 0xad, 0xd9, 0x43, 0xc9, 0xf5, - 0xa4, 0x25, 0xd7, 0x53, 0x7c, 0x61, 0x68, 0x73, 0x70, 0x4a, 0xd8, 0xc9, 0xd6, 0xd6, 0xdf, 0x28, - 0x30, 0xca, 0xa0, 0xd6, 0x75, 0x47, 0xaf, 0xbb, 0xea, 0x75, 0x18, 0xd0, 0x9b, 0xde, 0xb6, 0xed, - 0x98, 0xde, 0x1e, 0x59, 0x55, 0xcb, 0xb9, 0x7f, 0xfb, 0xde, 0xa5, 0x49, 0xba, 0x79, 0x2c, 0x55, - 0x2a, 0x0e, 0x72, 0xdd, 0x0d, 0xcf, 0x31, 0xad, 0x6a, 0xa9, 0x05, 0xaa, 0xde, 0x82, 0xde, 0x06, - 0xa6, 0x80, 0x17, 0xdc, 0xe0, 0xe2, 0x09, 0x81, 0xf4, 0x64, 0x18, 0x2a, 0x34, 0x45, 0x29, 0xbe, - 0xe0, 0x0b, 0xd8, 0x22, 0xe6, 0x0b, 0x99, 0x4b, 0x0a, 0x49, 0x50, 0xb5, 0x63, 0x30, 0x15, 0x6b, - 0x62, 0x02, 0xfd, 0x95, 0x02, 0xb0, 0xe6, 0x56, 0x57, 0x50, 0xc3, 0x76, 0x4d, 0x4f, 0x3d, 0x0a, - 0xbd, 0x2e, 0xb2, 0x2a, 0xc8, 0xa1, 0xee, 0x81, 0x7e, 0xa9, 0x73, 0x30, 0xec, 0x36, 0x37, 0x75, - 0xc3, 0xb0, 0x9b, 0x56, 0xc8, 0x47, 0x0c, 0xb5, 0x1a, 0x1f, 0x54, 0xd4, 0x1b, 0xd0, 0xab, 0xd7, - 0xfd, 0x7f, 0x63, 0x1f, 0x31, 0xb8, 0x78, 0x8c, 0xee, 0xca, 0x0b, 0xfe, 0xae, 0xbd, 0x40, 0xf7, - 0xa0, 0x85, 0x7b, 0xb6, 0x69, 0x05, 0xc2, 0x10, 0xf0, 0xe2, 0x0b, 0xe1, 0x59, 0xa3, 0x43, 0xfa, - 0x12, 0x4d, 0x84, 0x25, 0xa2, 0x2c, 0x6a, 0x93, 0xa0, 0xb6, 0xbe, 0x98, 0x1c, 0xdf, 0x55, 0x60, - 0x70, 0xcd, 0xad, 0xbe, 0x69, 0x7a, 0xdb, 0x15, 0x47, 0x7f, 0xfa, 0x73, 0x12, 0xe4, 0xa2, 0x40, - 0x90, 0xc9, 0xb0, 0x20, 0x01, 0x8f, 0xda, 0x11, 0xbc, 0xd9, 0x06, 0x9f, 0x4c, 0x94, 0x6f, 0x2b, - 0x78, 0xba, 0xee, 0x39, 0x88, 0xfa, 0xf7, 0x87, 0x66, 0xdd, 0xf4, 0x1e, 0xf9, 0xa1, 0x82, 0x50, - 0xac, 0xcf, 0x41, 0x0f, 0x8e, 0x25, 0xa8, 0x29, 0x9d, 0x14, 0x98, 0x92, 0x4f, 0x0d, 0x13, 0xa2, - 0x7c, 0x13, 0xa4, 0xe2, 0x4d, 0x01, 0xdb, 0x27, 0xc3, 0x6c, 0xf3, 0xf8, 0xd1, 0xbe, 0x00, 0xb3, - 0x82, 0xae, 0x40, 0x1c, 0x7f, 0xf7, 0xc0, 0xa3, 0x94, 0xb7, 0x75, 0x77, 0x9b, 0xb2, 0x3d, 0x80, - 0x5b, 0x5e, 0xd1, 0xdd, 0x6d, 0x75, 0x0c, 0xba, 0x0c, 0x36, 0x0d, 0xfe, 0x3f, 0x8b, 0xfd, 0x01, - 0x37, 0xda, 0xdf, 0x2a, 0x70, 0x62, 0xcd, 0xad, 0x2e, 0xeb, 0x9e, 0xb1, 0xcd, 0x1b, 0xc3, 0x15, - 0xea, 0xe3, 0x0e, 0xf4, 0xe2, 0x21, 0xfc, 0xb5, 0xd5, 0xd5, 0x86, 0x42, 0x28, 0x56, 0xf1, 0x8e, - 0x40, 0x23, 0x67, 0xc3, 0x1a, 0x11, 0xf3, 0xa5, 0xfd, 0xb5, 0x02, 0x67, 0xa4, 0x10, 0x4c, 0x3d, - 0xa7, 0x60, 0xa8, 0xa5, 0x1e, 0xe4, 0xe6, 0x94, 0x93, 0x5d, 0xe7, 0x07, 0x4a, 0x83, 0x4c, 0x41, - 0xc8, 0x55, 0x17, 0x60, 0xc2, 0xc0, 0x34, 0x2a, 0x65, 0xc2, 0x5e, 0xd9, 0x30, 0x2b, 0x44, 0xb2, - 0x81, 0xd2, 0x38, 0xed, 0x22, 0x64, 0xef, 0x99, 0x15, 0x57, 0xbd, 0x08, 0xea, 0x96, 0x6e, 0xd6, - 0x62, 0xe0, 0x5d, 0x18, 0x7c, 0x8c, 0xf4, 0xb4, 0xa0, 0x43, 0xea, 0xfe, 0xad, 0x6e, 0xc8, 0xaf, - 0xb9, 0xd5, 0x07, 0x96, 0xeb, 0xe9, 0x96, 0xd7, 0x8a, 0x2c, 0x1e, 0xea, 0x4d, 0xcb, 0xd8, 0x16, - 0xea, 0xfa, 0x28, 0xf4, 0xd2, 0xd0, 0x80, 0x4c, 0x22, 0xfd, 0xf2, 0x27, 0xde, 0x5f, 0x2f, 0xe5, - 0x0a, 0xb2, 0xec, 0x7a, 0x10, 0x36, 0xf8, 0x2d, 0x2b, 0x7e, 0x83, 0x3a, 0x0b, 0x83, 0xef, 0x34, - 0x6d, 0x2f, 0xe8, 0xc7, 0xa1, 0x42, 0x09, 0x70, 0x13, 0x01, 0x28, 0xc1, 0x04, 0x2f, 0xa6, 0x68, - 0x63, 0xd7, 0x1f, 0xab, 0xc7, 0x03, 0x8a, 0xcf, 0xc3, 0x51, 0x41, 0x30, 0xd1, 0xc6, 0xae, 0xef, - 0xb3, 0x95, 0x88, 0x24, 0x56, 0x61, 0x28, 0x12, 0x45, 0xb4, 0xb1, 0xdd, 0x0f, 0xd6, 0x43, 0x21, - 0xc4, 0x1c, 0x0c, 0x53, 0xad, 0x19, 0x66, 0x5d, 0xaf, 0xb9, 0x78, 0x57, 0x1f, 0x2e, 0x0d, 0x11, - 0xc5, 0x91, 0x36, 0xf5, 0x0c, 0x8c, 0x04, 0xba, 0xa3, 0x50, 0x03, 0x18, 0x6a, 0x98, 0xaa, 0x8f, - 0x34, 0x16, 0x6f, 0x09, 0xac, 0x78, 0x2e, 0x6c, 0xc5, 0x82, 0xe9, 0xd6, 0x4e, 0x83, 0x26, 0xee, - 0x65, 0xce, 0xea, 0xa7, 0xfd, 0xd8, 0x03, 0x50, 0xb0, 0x75, 0xe4, 0x34, 0x90, 0xd7, 0xc4, 0x61, - 0x4b, 0xe7, 0x86, 0x13, 0xb3, 0x8c, 0xae, 0x84, 0x65, 0xcc, 0xc2, 0x20, 0x39, 0xc9, 0x94, 0x7d, - 0xad, 0x04, 0xa6, 0x43, 0x9a, 0x96, 0xf5, 0x60, 0x51, 0x61, 0x00, 0x8c, 0x45, 0x6c, 0xa6, 0x44, - 0x91, 0x1e, 0xfb, 0x4d, 0xfe, 0xa2, 0xa2, 0x20, 0xae, 0xa1, 0xd7, 0x50, 0x79, 0x4b, 0x37, 0x3c, - 0xdb, 0xc1, 0x66, 0x30, 0x5c, 0x1a, 0x27, 0x5d, 0x1b, 0x7e, 0xcf, 0x2a, 0xee, 0x50, 0xef, 0xb3, - 0x31, 0xbd, 0xbd, 0x06, 0xc2, 0xd3, 0x3b, 0xb2, 0x78, 0x3a, 0xe4, 0x56, 0xe8, 0xd9, 0x2a, 0xd8, - 0x1d, 0x1e, 0xe1, 0xcf, 0x27, 0x7b, 0x0d, 0x14, 0x70, 0xe6, 0xff, 0x5b, 0x7d, 0x00, 0x23, 0x75, - 0x7d, 0x07, 0x39, 0xe5, 0x2d, 0x84, 0xfc, 0xa8, 0x0a, 0xb5, 0x13, 0xb5, 0x0d, 0x61, 0xd4, 0x55, - 0x84, 0x4a, 0xba, 0x87, 0x49, 0x79, 0x51, 0x52, 0x6d, 0xc4, 0x67, 0x43, 0x5e, 0x98, 0xd4, 0x1b, - 0x30, 0xc9, 0x8d, 0x59, 0x21, 0x3b, 0x41, 0xd5, 0x4c, 0x06, 0xac, 0x5f, 0x84, 0x9c, 0x30, 0x58, - 0x1d, 0x6c, 0x23, 0x78, 0xaf, 0xf3, 0x23, 0x55, 0x81, 0x83, 0x18, 0x3a, 0x18, 0x07, 0x31, 0xbc, - 0xcf, 0x0e, 0x62, 0xa4, 0x43, 0x07, 0xb1, 0x01, 0x13, 0xbc, 0xd8, 0x7c, 0x34, 0x3b, 0xb9, 0x71, - 0x27, 0x11, 0x98, 0x7f, 0x1e, 0xc6, 0x93, 0x41, 0xf9, 0x58, 0x07, 0x41, 0xf9, 0xa8, 0x1d, 0x8b, - 0xc8, 0x5f, 0x16, 0xf8, 0xa0, 0xf3, 0x1c, 0x1f, 0xc4, 0x75, 0x1f, 0xda, 0x05, 0x38, 0x97, 0x02, - 0xc2, 0xbc, 0xd1, 0x47, 0x7d, 0x30, 0xd7, 0x82, 0x5d, 0x36, 0x2d, 0xdd, 0xd9, 0x7b, 0xd4, 0xf0, - 0x99, 0x71, 0x3f, 0x91, 0x47, 0x9a, 0x83, 0xe1, 0xc0, 0x59, 0xec, 0xd5, 0x37, 0xed, 0x1a, 0xf5, - 0x49, 0xd4, 0xc9, 0x6c, 0xe0, 0x36, 0xf5, 0x1c, 0x8c, 0x52, 0xa0, 0x86, 0x63, 0xef, 0x9a, 0x3e, - 0x75, 0xe2, 0x99, 0x46, 0x48, 0xf3, 0x3a, 0x6d, 0x8d, 0xbb, 0x92, 0x9e, 0x0e, 0x5d, 0x49, 0xbb, - 0x1e, 0x2c, 0xe9, 0x7a, 0xfa, 0xf6, 0xcf, 0xf5, 0xf4, 0x77, 0xea, 0x7a, 0xae, 0xc0, 0x24, 0x7a, - 0xd6, 0x30, 0xb1, 0x11, 0x5b, 0x65, 0xcf, 0xac, 0x23, 0xd7, 0xd3, 0xeb, 0x0d, 0xec, 0xcb, 0xba, - 0x4a, 0x13, 0xad, 0xbe, 0x27, 0x41, 0x97, 0x8f, 0xe2, 0x22, 0xcf, 0xab, 0xa1, 0x3a, 0xb2, 0xbc, - 0x10, 0x0a, 0x10, 0x94, 0x56, 0x5f, 0x0b, 0x85, 0x65, 0x3d, 0x06, 0xc3, 0x59, 0x8f, 0xd8, 0x46, - 0x33, 0x94, 0x35, 0x04, 0x19, 0x3e, 0x18, 0x0f, 0x33, 0xb2, 0xcf, 0x1e, 0x66, 0xb4, 0x43, 0x0f, - 0x73, 0x70, 0xce, 0x60, 0x45, 0xe0, 0x0c, 0x2e, 0x72, 0x9c, 0x81, 0x70, 0xf5, 0x6a, 0x97, 0xe0, - 0x85, 0x0c, 0x60, 0xcc, 0x29, 0x7c, 0x65, 0x20, 0xec, 0x14, 0xee, 0xfb, 0x06, 0xb5, 0xb7, 0xda, - 0xf4, 0x9a, 0x0e, 0x72, 0x3f, 0xfb, 0x61, 0x4a, 0xcc, 0x57, 0xf4, 0xee, 0xaf, 0xaf, 0xe8, 0x13, - 0xf9, 0x8a, 0xa3, 0xd0, 0x8b, 0x57, 0xde, 0x1e, 0x5e, 0xd8, 0x5d, 0x25, 0xfa, 0xc5, 0xf1, 0x21, - 0x03, 0xfb, 0xe7, 0x43, 0x60, 0xbf, 0xc3, 0x97, 0xc1, 0x83, 0x0b, 0x5f, 0x86, 0x0e, 0x2c, 0x7c, - 0xf9, 0x25, 0x77, 0x2e, 0x82, 0xf0, 0x65, 0x6c, 0xff, 0xc3, 0x97, 0xf1, 0x4f, 0xdb, 0x63, 0x09, - 0x5d, 0x4b, 0xd4, 0x63, 0x09, 0xc1, 0x98, 0xc7, 0xfa, 0x73, 0x05, 0x72, 0x91, 0xb4, 0x0a, 0x81, - 0x3a, 0xc8, 0x14, 0xd0, 0x4b, 0x02, 0x39, 0x4f, 0xf1, 0x53, 0x40, 0x21, 0x86, 0xb4, 0xbf, 0x50, - 0xe0, 0xa4, 0xa8, 0x33, 0x6b, 0x16, 0x68, 0x0d, 0xfa, 0x1c, 0xe4, 0x36, 0x6b, 0x5e, 0x90, 0x0c, - 0xbd, 0x24, 0x61, 0x3f, 0x4a, 0xdf, 0x47, 0xc2, 0xb2, 0x28, 0xa5, 0x80, 0x46, 0x90, 0x54, 0xea, - 0xe2, 0x25, 0x95, 0x7e, 0xac, 0xc0, 0x51, 0x3e, 0x15, 0xf5, 0x2e, 0xf4, 0x07, 0x2b, 0x87, 0x26, - 0x72, 0x33, 0x19, 0x24, 0x43, 0x52, 0x5f, 0x82, 0x1e, 0xbc, 0x9c, 0xc9, 0x4e, 0x91, 0x0d, 0x9b, - 0x60, 0xa8, 0xd7, 0xa0, 0x6b, 0x0b, 0x21, 0xc2, 0x72, 0x36, 0x44, 0x1f, 0x3e, 0x99, 0x2c, 0x23, - 0xd3, 0xd0, 0x4a, 0x60, 0x67, 0x48, 0x1e, 0x2e, 0x47, 0x2d, 0x47, 0xb4, 0x62, 0x5a, 0x34, 0x39, - 0xf6, 0x53, 0x7c, 0x2f, 0x25, 0x59, 0x26, 0xe6, 0x4b, 0xdb, 0xc4, 0xb9, 0x32, 0x31, 0xc0, 0x7e, - 0xa4, 0x12, 0xff, 0x31, 0x6c, 0xa4, 0x91, 0x98, 0xe1, 0x53, 0x52, 0xd0, 0x6d, 0x8e, 0x82, 0x2e, + 0xc4, 0x95, 0x78, 0x27, 0x9d, 0xb4, 0xb2, 0xa4, 0x23, 0x45, 0xf1, 0x3b, 0xdd, 0x89, 0x27, 0x6a, + 0xa9, 0xfb, 0xce, 0x77, 0xb1, 0xb1, 0x18, 0xce, 0x36, 0x97, 0x63, 0xee, 0xce, 0xec, 0xcd, 0xcc, + 0x52, 0xe2, 0x3d, 0xc4, 0x3f, 0x08, 0x62, 0xc1, 0x41, 0x00, 0x03, 0x01, 0x02, 0x04, 0x48, 0x00, + 0x27, 0x41, 0x12, 0xd8, 0x09, 0x92, 0x73, 0x62, 0x20, 0x4e, 0x82, 0xc0, 0x40, 0x00, 0x03, 0x46, + 0xf2, 0x72, 0x09, 0x60, 0x20, 0xf0, 0x83, 0x62, 0xdc, 0x3d, 0x5c, 0xe0, 0xbc, 0xe5, 0x31, 0x79, + 0x09, 0xa6, 0xbb, 0xa7, 0x77, 0x7e, 0xba, 0x7b, 0x66, 0xf7, 0xc8, 0xf3, 0xd9, 0xf0, 0xcb, 0x9d, + 0xa6, 0xbb, 0xaa, 0xba, 0xaa, 0xba, 0xba, 0xba, 0xba, 0xba, 0x7a, 0x09, 0x33, 0xa6, 0xf5, 0x25, + 0x64, 0x78, 0xe6, 0x2e, 0x2a, 0xa0, 0xa7, 0xc6, 0xb6, 0x6e, 0x55, 0x51, 0x61, 0x77, 0xb1, 0xe0, + 0x3d, 0x5d, 0x68, 0x38, 0xb6, 0x67, 0xab, 0x47, 0x58, 0xff, 0x42, 0xd0, 0xbf, 0xb0, 0xbb, 0x98, + 0x9f, 0x31, 0x6c, 0xb7, 0x6e, 0xbb, 0x85, 0x4d, 0xdd, 0x45, 0x85, 0xdd, 0x2b, 0x9b, 0xc8, 0xd3, + 0xaf, 0x14, 0x0c, 0xdb, 0xb4, 0x08, 0x5a, 0x7e, 0x81, 0xf6, 0x57, 0x4c, 0xd7, 0x73, 0xcc, 0xcd, + 0xa6, 0x67, 0xda, 0x16, 0x83, 0x0b, 0x37, 0x52, 0xf8, 0x29, 0x0a, 0x5f, 0x77, 0xab, 0x85, 0xdd, + 0x2b, 0xfe, 0xff, 0x68, 0xc7, 0x31, 0xd2, 0x51, 0xc6, 0x5f, 0x05, 0xf2, 0x41, 0xbb, 0x26, 0xab, + 0x76, 0xd5, 0x26, 0xed, 0xfe, 0xbf, 0x68, 0xeb, 0x69, 0xbe, 0x40, 0x8c, 0x79, 0x02, 0x75, 0x8a, + 0x0f, 0x65, 0x3b, 0x15, 0xe4, 0x50, 0x10, 0x8d, 0x0f, 0x52, 0xd7, 0x9d, 0x1d, 0xe4, 0xc9, 0x07, + 0x6b, 0x38, 0x76, 0xc3, 0x76, 0xf5, 0x1a, 0x85, 0x3a, 0xd3, 0x82, 0xb2, 0x1d, 0xdd, 0xa8, 0xb5, + 0x34, 0x46, 0x3e, 0x29, 0xd8, 0xb8, 0x5e, 0x37, 0x2d, 0xbb, 0x80, 0xff, 0x4b, 0x9a, 0xb4, 0x3f, + 0xee, 0x82, 0x89, 0x35, 0xb7, 0xfa, 0x66, 0xa3, 0xa2, 0x7b, 0x68, 0xa3, 0x61, 0x7b, 0x6b, 0x78, + 0x74, 0x75, 0x12, 0x7a, 0xf4, 0x4a, 0xdd, 0xb4, 0x72, 0xca, 0x49, 0xe5, 0xfc, 0x40, 0x89, 0x7c, + 0xa8, 0xd3, 0x30, 0x40, 0xb8, 0x2b, 0x9b, 0x95, 0xdc, 0x61, 0xdc, 0xd3, 0x4f, 0x1a, 0xee, 0x57, + 0xd4, 0x13, 0x00, 0x16, 0x7a, 0x52, 0xf6, 0x4c, 0x63, 0x07, 0x39, 0xb9, 0x2e, 0xdc, 0x3b, 0x60, + 0xa1, 0x27, 0x8f, 0x71, 0x83, 0xfa, 0x36, 0x4c, 0xf9, 0xdd, 0x75, 0xd3, 0x2a, 0x37, 0x1c, 0xd3, + 0x40, 0x18, 0xb0, 0xec, 0x9a, 0xef, 0xa1, 0x5c, 0xb7, 0x0f, 0xbb, 0x3c, 0xf7, 0xa3, 0xe7, 0xb3, + 0x87, 0x7e, 0xf2, 0x7c, 0x76, 0x9a, 0xcc, 0x81, 0x5b, 0xd9, 0x59, 0x30, 0xed, 0x42, 0x5d, 0xf7, + 0xb6, 0x17, 0x1e, 0xa0, 0xaa, 0x6e, 0xec, 0xad, 0x20, 0xa3, 0x34, 0x61, 0xa1, 0x27, 0x6b, 0xa6, + 0xb5, 0xee, 0x53, 0xf0, 0x09, 0x6f, 0x98, 0xef, 0x21, 0xb5, 0x0c, 0xf9, 0x80, 0xf4, 0xbb, 0x4d, + 0xdd, 0xf2, 0x4c, 0x6f, 0x2f, 0x44, 0xbd, 0x27, 0x3b, 0xf5, 0xa3, 0x84, 0xfa, 0x23, 0x4a, 0x84, + 0x0d, 0xb0, 0x06, 0x63, 0xc1, 0x00, 0x96, 0xed, 0x1b, 0x95, 0x5e, 0xcb, 0xf5, 0x66, 0x27, 0x3b, + 0x42, 0xc8, 0xbe, 0x41, 0x51, 0x8b, 0x85, 0xff, 0xfc, 0xd6, 0xec, 0xa1, 0xaf, 0x7d, 0xfc, 0xfe, + 0x3c, 0x51, 0xeb, 0x37, 0x3e, 0x7e, 0x7f, 0xfe, 0x38, 0x9b, 0x5d, 0xce, 0x6c, 0x68, 0x27, 0x60, + 0x9a, 0xd3, 0x5c, 0x42, 0x6e, 0xc3, 0xb6, 0x5c, 0xa4, 0x7d, 0xaf, 0x17, 0x8e, 0xb1, 0xfe, 0x15, + 0xe4, 0x98, 0xbb, 0xba, 0x6f, 0x0b, 0xbf, 0x9a, 0xca, 0x03, 0x9f, 0x4a, 0xf5, 0x0b, 0x90, 0xf3, + 0xc9, 0x99, 0x96, 0xe9, 0x99, 0x7a, 0xad, 0x5c, 0xd7, 0x9d, 0xaa, 0x69, 0x95, 0x1d, 0xdd, 0x33, + 0xed, 0x5c, 0x5f, 0x76, 0xb2, 0x47, 0x2c, 0xf4, 0xe4, 0x3e, 0xa1, 0xb1, 0x86, 0x49, 0x94, 0x7c, + 0x0a, 0x6a, 0x05, 0x8e, 0x63, 0x66, 0x75, 0xd3, 0xf2, 0x90, 0xa5, 0x5b, 0x06, 0x8a, 0x8e, 0xd0, + 0x9f, 0x7d, 0x84, 0x63, 0x3e, 0xe3, 0x2d, 0x3a, 0xe1, 0x51, 0xde, 0x21, 0xd3, 0xe9, 0xa0, 0x4a, + 0x33, 0x3e, 0xc0, 0x40, 0xf6, 0x01, 0x26, 0x2d, 0xf4, 0xa4, 0x84, 0x49, 0x84, 0x69, 0x97, 0xc1, + 0x17, 0xad, 0x6c, 0x37, 0x50, 0x4b, 0xdf, 0x65, 0x43, 0x6f, 0xe4, 0xe0, 0xa4, 0x72, 0x7e, 0x70, + 0xf1, 0xec, 0x02, 0xd7, 0xfb, 0x2f, 0x3c, 0x6c, 0x20, 0xa6, 0xe3, 0xbb, 0x7a, 0x63, 0xb9, 0xdb, + 0xe7, 0xa0, 0xa4, 0x5a, 0xe8, 0x49, 0xac, 0xa7, 0x78, 0xe3, 0xd9, 0xb7, 0x66, 0x0f, 0x25, 0xd7, + 0x93, 0x96, 0x5c, 0x4f, 0xf1, 0x85, 0xa1, 0xcd, 0xc1, 0x29, 0x61, 0x27, 0x5b, 0x5b, 0x7f, 0xa3, + 0xc0, 0x28, 0x83, 0x5a, 0xd7, 0x1d, 0xbd, 0xee, 0xaa, 0xd7, 0x60, 0x40, 0x6f, 0x7a, 0xdb, 0xb6, + 0x63, 0x7a, 0x7b, 0x64, 0x55, 0x2d, 0xe7, 0xfe, 0xed, 0x7b, 0x97, 0x26, 0xe9, 0xe6, 0xb1, 0x54, + 0xa9, 0x38, 0xc8, 0x75, 0x37, 0x3c, 0xc7, 0xb4, 0xaa, 0xa5, 0x16, 0xa8, 0x7a, 0x13, 0x7a, 0x1b, + 0x98, 0x02, 0x5e, 0x70, 0x83, 0x8b, 0x27, 0x04, 0xd2, 0x93, 0x61, 0xa8, 0xd0, 0x14, 0xa5, 0xf8, + 0x82, 0x2f, 0x60, 0x8b, 0x98, 0x2f, 0x64, 0x2e, 0x29, 0x24, 0x41, 0xd5, 0x8e, 0xc1, 0x54, 0xac, + 0x89, 0x09, 0xf4, 0x57, 0x0a, 0xc0, 0x9a, 0x5b, 0x5d, 0x41, 0x0d, 0xdb, 0x35, 0x3d, 0xf5, 0x28, + 0xf4, 0xba, 0xc8, 0xaa, 0x20, 0x87, 0xba, 0x07, 0xfa, 0xa5, 0xce, 0xc1, 0xb0, 0xdb, 0xdc, 0xd4, + 0x0d, 0xc3, 0x6e, 0x5a, 0x21, 0x1f, 0x31, 0xd4, 0x6a, 0xbc, 0x5f, 0x51, 0x5f, 0x86, 0x5e, 0xbd, + 0xee, 0xff, 0x1b, 0xfb, 0x88, 0xc1, 0xc5, 0x63, 0x74, 0x57, 0x5e, 0xf0, 0x77, 0xed, 0x05, 0xba, + 0x07, 0x2d, 0xdc, 0xb5, 0x4d, 0x2b, 0x10, 0x86, 0x80, 0x17, 0x5f, 0x08, 0xcf, 0x1a, 0x1d, 0xd2, + 0x97, 0x68, 0x22, 0x2c, 0x11, 0x65, 0x51, 0x9b, 0x04, 0xb5, 0xf5, 0xc5, 0xe4, 0xf8, 0xae, 0x02, + 0x83, 0x6b, 0x6e, 0xf5, 0x2d, 0xd3, 0xdb, 0xae, 0x38, 0xfa, 0x93, 0x9f, 0x93, 0x20, 0x17, 0x05, + 0x82, 0x4c, 0x86, 0x05, 0x09, 0x78, 0xd4, 0x8e, 0xe0, 0xcd, 0x36, 0xf8, 0x64, 0xa2, 0x7c, 0x5b, + 0xc1, 0xd3, 0x75, 0xd7, 0x41, 0xd4, 0xbf, 0x3f, 0x30, 0xeb, 0xa6, 0xf7, 0xd0, 0x0f, 0x15, 0x84, + 0x62, 0x7d, 0x0e, 0x7a, 0x70, 0x2c, 0x41, 0x4d, 0xe9, 0xa4, 0xc0, 0x94, 0x7c, 0x6a, 0x98, 0x10, + 0xe5, 0x9b, 0x20, 0x15, 0xaf, 0x0b, 0xd8, 0x3e, 0x19, 0x66, 0x9b, 0xc7, 0x8f, 0xf6, 0x05, 0x98, + 0x15, 0x74, 0x05, 0xe2, 0xf8, 0xbb, 0x07, 0x1e, 0xa5, 0xbc, 0xad, 0xbb, 0xdb, 0x94, 0xed, 0x01, + 0xdc, 0xf2, 0xaa, 0xee, 0x6e, 0xab, 0x63, 0xd0, 0x65, 0xb0, 0x69, 0xf0, 0xff, 0x59, 0xec, 0x0f, + 0xb8, 0xd1, 0xfe, 0x56, 0x81, 0x13, 0x6b, 0x6e, 0x75, 0x59, 0xf7, 0x8c, 0x6d, 0xde, 0x18, 0xae, + 0x50, 0x1f, 0xb7, 0xa1, 0x17, 0x0f, 0xe1, 0xaf, 0xad, 0xae, 0x36, 0x14, 0x42, 0xb1, 0x8a, 0xb7, + 0x05, 0x1a, 0x39, 0x1b, 0xd6, 0x88, 0x98, 0x2f, 0xed, 0xaf, 0x15, 0x38, 0x23, 0x85, 0x60, 0xea, + 0x39, 0x05, 0x43, 0x2d, 0xf5, 0x20, 0x37, 0xa7, 0x9c, 0xec, 0x3a, 0x3f, 0x50, 0x1a, 0x64, 0x0a, + 0x42, 0xae, 0xba, 0x00, 0x13, 0x06, 0xa6, 0x51, 0x29, 0x13, 0xf6, 0xca, 0x86, 0x59, 0x21, 0x92, + 0x0d, 0x94, 0xc6, 0x69, 0x17, 0x21, 0x7b, 0xd7, 0xac, 0xb8, 0xea, 0x45, 0x50, 0xb7, 0x74, 0xb3, + 0x16, 0x03, 0xef, 0xc2, 0xe0, 0x63, 0xa4, 0xa7, 0x05, 0x1d, 0x52, 0xf7, 0x6f, 0x75, 0x43, 0x7e, + 0xcd, 0xad, 0xde, 0xb7, 0x5c, 0x4f, 0xb7, 0xbc, 0x56, 0x64, 0xf1, 0x40, 0x6f, 0x5a, 0xc6, 0xb6, + 0x50, 0xd7, 0x47, 0xa1, 0x97, 0x86, 0x06, 0x64, 0x12, 0xe9, 0x97, 0x3f, 0xf1, 0xfe, 0x7a, 0x29, + 0x57, 0x90, 0x65, 0xd7, 0x83, 0xb0, 0xc1, 0x6f, 0x59, 0xf1, 0x1b, 0xd4, 0x59, 0x18, 0x7c, 0xb7, + 0x69, 0x7b, 0x41, 0x3f, 0x0e, 0x15, 0x4a, 0x80, 0x9b, 0x08, 0x40, 0x09, 0x26, 0x78, 0x31, 0x45, + 0x1b, 0xbb, 0xfe, 0x58, 0x3d, 0x1e, 0x50, 0x7c, 0x1e, 0x8e, 0x0a, 0x82, 0x89, 0x36, 0x76, 0x7d, + 0x9f, 0xad, 0x44, 0x24, 0xb1, 0x0a, 0x43, 0x91, 0x28, 0xa2, 0x8d, 0xed, 0x7e, 0xb0, 0x1e, 0x0a, + 0x21, 0xe6, 0x60, 0x98, 0x6a, 0xcd, 0x30, 0xeb, 0x7a, 0xcd, 0xc5, 0xbb, 0xfa, 0x70, 0x69, 0x88, + 0x28, 0x8e, 0xb4, 0xa9, 0x67, 0x60, 0x24, 0xd0, 0x1d, 0x85, 0x1a, 0xc0, 0x50, 0xc3, 0x54, 0x7d, + 0xa4, 0xb1, 0x78, 0x53, 0x60, 0xc5, 0x73, 0x61, 0x2b, 0x16, 0x4c, 0xb7, 0x76, 0x1a, 0x34, 0x71, + 0x2f, 0x73, 0x56, 0x3f, 0xed, 0xc7, 0x1e, 0x80, 0x82, 0xad, 0x23, 0xa7, 0x81, 0xbc, 0x26, 0x0e, + 0x5b, 0x3a, 0x37, 0x9c, 0x98, 0x65, 0x74, 0x25, 0x2c, 0x63, 0x16, 0x06, 0xc9, 0x49, 0xa6, 0xec, + 0x6b, 0x25, 0x30, 0x1d, 0xd2, 0xb4, 0xac, 0x07, 0x8b, 0x0a, 0x03, 0x60, 0x2c, 0x62, 0x33, 0x25, + 0x8a, 0xf4, 0xc8, 0x6f, 0xf2, 0x17, 0x15, 0x05, 0x71, 0x0d, 0xbd, 0x86, 0xca, 0x5b, 0xba, 0xe1, + 0xd9, 0x0e, 0x36, 0x83, 0xe1, 0xd2, 0x38, 0xe9, 0xda, 0xf0, 0x7b, 0x56, 0x71, 0x87, 0x7a, 0x8f, + 0x8d, 0xe9, 0xed, 0x35, 0x10, 0x9e, 0xde, 0x91, 0xc5, 0xd3, 0x21, 0xb7, 0x42, 0xcf, 0x56, 0xc1, + 0xee, 0xf0, 0x10, 0x7f, 0x3e, 0xde, 0x6b, 0xa0, 0x80, 0x33, 0xff, 0xdf, 0xea, 0x7d, 0x18, 0xa9, + 0xeb, 0x3b, 0xc8, 0x29, 0x6f, 0x21, 0xe4, 0x47, 0x55, 0xa8, 0x9d, 0xa8, 0x6d, 0x08, 0xa3, 0xae, + 0x22, 0x54, 0xd2, 0x3d, 0x4c, 0xca, 0x8b, 0x92, 0x6a, 0x23, 0x3e, 0x1b, 0xf2, 0xc2, 0xa4, 0xde, + 0x84, 0x49, 0x6e, 0xcc, 0x0a, 0xd9, 0x09, 0xaa, 0x66, 0x32, 0x60, 0xfd, 0x22, 0xe4, 0x84, 0xc1, + 0xea, 0x60, 0x1b, 0xc1, 0x7b, 0x9d, 0x1f, 0xa9, 0x0a, 0x1c, 0xc4, 0xd0, 0xc1, 0x38, 0x88, 0xe1, + 0x7d, 0x76, 0x10, 0x23, 0x1d, 0x3a, 0x88, 0x0d, 0x98, 0xe0, 0xc5, 0xe6, 0xa3, 0xd9, 0xc9, 0x8d, + 0x3b, 0x89, 0xc0, 0xfc, 0xf3, 0x30, 0x9e, 0x0c, 0xca, 0xc7, 0x3a, 0x08, 0xca, 0x47, 0xed, 0x58, + 0x44, 0xfe, 0x8a, 0xc0, 0x07, 0x9d, 0xe7, 0xf8, 0x20, 0xae, 0xfb, 0xd0, 0x2e, 0xc0, 0xb9, 0x14, + 0x10, 0xe6, 0x8d, 0x3e, 0xea, 0x83, 0xb9, 0x16, 0xec, 0xb2, 0x69, 0xe9, 0xce, 0xde, 0xc3, 0x86, + 0xcf, 0x8c, 0xfb, 0x89, 0x3c, 0xd2, 0x1c, 0x0c, 0x07, 0xce, 0x62, 0xaf, 0xbe, 0x69, 0xd7, 0xa8, + 0x4f, 0xa2, 0x4e, 0x66, 0x03, 0xb7, 0xa9, 0xe7, 0x60, 0x94, 0x02, 0x35, 0x1c, 0x7b, 0xd7, 0xf4, + 0xa9, 0x13, 0xcf, 0x34, 0x42, 0x9a, 0xd7, 0x69, 0x6b, 0xdc, 0x95, 0xf4, 0x74, 0xe8, 0x4a, 0xda, + 0xf5, 0x60, 0x49, 0xd7, 0xd3, 0xb7, 0x7f, 0xae, 0xa7, 0xbf, 0x53, 0xd7, 0x73, 0x05, 0x26, 0xd1, + 0xd3, 0x86, 0x89, 0x8d, 0xd8, 0x2a, 0x7b, 0x66, 0x1d, 0xb9, 0x9e, 0x5e, 0x6f, 0x60, 0x5f, 0xd6, + 0x55, 0x9a, 0x68, 0xf5, 0x3d, 0x0e, 0xba, 0x7c, 0x14, 0x17, 0x79, 0x5e, 0x0d, 0xd5, 0x91, 0xe5, + 0x85, 0x50, 0x80, 0xa0, 0xb4, 0xfa, 0x5a, 0x28, 0x2c, 0xeb, 0x31, 0x18, 0xce, 0x7a, 0xc4, 0x36, + 0x9a, 0xa1, 0xac, 0x21, 0xc8, 0xf0, 0xc1, 0x78, 0x98, 0x91, 0x7d, 0xf6, 0x30, 0xa3, 0x1d, 0x7a, + 0x98, 0x83, 0x73, 0x06, 0x2b, 0x02, 0x67, 0x70, 0x91, 0xe3, 0x0c, 0x84, 0xab, 0x57, 0xbb, 0x04, + 0x2f, 0x64, 0x00, 0x63, 0x4e, 0xe1, 0x2b, 0x03, 0x61, 0xa7, 0x70, 0xcf, 0x37, 0xa8, 0xbd, 0xd5, + 0xa6, 0xd7, 0x74, 0x90, 0xfb, 0xd9, 0x0f, 0x53, 0x62, 0xbe, 0xa2, 0x77, 0x7f, 0x7d, 0x45, 0x9f, + 0xc8, 0x57, 0x1c, 0x85, 0x5e, 0xbc, 0xf2, 0xf6, 0xf0, 0xc2, 0xee, 0x2a, 0xd1, 0x2f, 0x8e, 0x0f, + 0x19, 0xd8, 0x3f, 0x1f, 0x02, 0xfb, 0x1d, 0xbe, 0x0c, 0x1e, 0x5c, 0xf8, 0x32, 0x74, 0x60, 0xe1, + 0xcb, 0x2f, 0xb9, 0x73, 0x11, 0x84, 0x2f, 0x63, 0xfb, 0x1f, 0xbe, 0x8c, 0x7f, 0xda, 0x1e, 0x4b, + 0xe8, 0x5a, 0xa2, 0x1e, 0x4b, 0x08, 0xc6, 0x3c, 0xd6, 0x9f, 0x2b, 0x90, 0x8b, 0xa4, 0x55, 0x08, + 0xd4, 0x41, 0xa6, 0x80, 0x6e, 0x08, 0xe4, 0x3c, 0xc5, 0x4f, 0x01, 0x85, 0x18, 0xd2, 0xfe, 0x42, + 0x81, 0x93, 0xa2, 0xce, 0xac, 0x59, 0xa0, 0x35, 0xe8, 0x73, 0x90, 0xdb, 0xac, 0x79, 0x41, 0x32, + 0xf4, 0x92, 0x84, 0xfd, 0x28, 0x7d, 0x1f, 0x09, 0xcb, 0xa2, 0x94, 0x02, 0x1a, 0x41, 0x52, 0xa9, + 0x8b, 0x97, 0x54, 0xfa, 0xb1, 0x02, 0x47, 0xf9, 0x54, 0xd4, 0x3b, 0xd0, 0x1f, 0xac, 0x1c, 0x9a, + 0xc8, 0xcd, 0x64, 0x90, 0x0c, 0x49, 0xbd, 0x01, 0x3d, 0x78, 0x39, 0x93, 0x9d, 0x22, 0x1b, 0x36, + 0xc1, 0x50, 0xaf, 0x42, 0xd7, 0x16, 0x42, 0x84, 0xe5, 0x6c, 0x88, 0x3e, 0x7c, 0x32, 0x59, 0x46, + 0xa6, 0xa1, 0x95, 0xc0, 0xce, 0x90, 0x3c, 0x5c, 0x8e, 0x5a, 0x8e, 0x68, 0xc5, 0xb4, 0x68, 0x72, + 0xec, 0xa7, 0xf8, 0x2c, 0x25, 0x59, 0x26, 0xe6, 0x4b, 0xdb, 0xc4, 0xb9, 0x32, 0x31, 0xc0, 0x7e, + 0xa4, 0x12, 0xff, 0x31, 0x6c, 0xa4, 0x91, 0x98, 0xe1, 0x53, 0x52, 0xd0, 0x2d, 0x8e, 0x82, 0x2e, 0x24, 0x15, 0x24, 0x60, 0x4d, 0x43, 0x70, 0x3e, 0x0d, 0x66, 0x3f, 0xd4, 0xf4, 0x43, 0x05, 0xc7, 0x4a, 0xa1, 0xbc, 0x25, 0x6f, 0x42, 0xc4, 0x79, 0xd7, 0x95, 0x58, 0xde, 0xb5, 0x3d, 0x55, 0x05, - 0xd9, 0xd7, 0x97, 0xdf, 0x4b, 0x71, 0xb8, 0x69, 0xfc, 0x69, 0xdf, 0x57, 0xb0, 0xc7, 0x4d, 0x83, - 0xfb, 0x2c, 0x66, 0x61, 0x3f, 0x50, 0xf0, 0x05, 0xc7, 0x3d, 0x3f, 0x5c, 0xa8, 0x31, 0x6f, 0x2d, - 0xd4, 0xb8, 0xf4, 0xe6, 0x36, 0x71, 0xdb, 0xd1, 0xc5, 0xb9, 0xed, 0x88, 0x9a, 0x4b, 0xb7, 0xc0, - 0x5c, 0x7a, 0x5a, 0xe6, 0x52, 0xe0, 0x4c, 0xcf, 0x74, 0xc4, 0x94, 0xa3, 0xbc, 0x6b, 0xc7, 0x71, - 0x5e, 0x39, 0xd6, 0xca, 0x76, 0xbb, 0x3f, 0x21, 0xbb, 0x1d, 0x99, 0xab, 0x28, 0x8c, 0xd8, 0xd0, - 0x8a, 0xd0, 0x5d, 0xd1, 0x3d, 0x3d, 0x25, 0xbd, 0x8f, 0x89, 0xac, 0xe8, 0x9e, 0x4e, 0x0d, 0x0c, - 0xe3, 0x14, 0xaf, 0xbd, 0x97, 0xb2, 0xcf, 0x71, 0x59, 0xd1, 0x56, 0xb1, 0x07, 0xe1, 0xf6, 0x31, - 0x3b, 0xca, 0x41, 0x9f, 0xdb, 0x34, 0x0c, 0xe4, 0x12, 0x13, 0xea, 0x2f, 0x05, 0x9f, 0x51, 0x47, - 0x7d, 0x2a, 0x4a, 0x28, 0xb2, 0xa0, 0x0f, 0x50, 0xf0, 0x3b, 0x1c, 0xc1, 0xe7, 0x05, 0x82, 0x73, - 0x78, 0xd2, 0x1e, 0xc1, 0x85, 0x54, 0xa0, 0xf6, 0x54, 0x01, 0x30, 0x19, 0x50, 0x24, 0xd7, 0x93, - 0x29, 0xd2, 0x67, 0xba, 0xbe, 0xbb, 0x0b, 0x27, 0xdc, 0x86, 0xed, 0x95, 0xd9, 0xba, 0x70, 0xcb, - 0x9e, 0x5d, 0x36, 0x30, 0xc7, 0x65, 0xbd, 0x56, 0xa3, 0x8b, 0x30, 0xe7, 0xb2, 0x28, 0xe0, 0x41, - 0xc5, 0x7d, 0x62, 0x13, 0x91, 0x96, 0x6a, 0x35, 0xf5, 0x35, 0x98, 0xab, 0x30, 0x77, 0x21, 0x26, - 0xd3, 0x8d, 0xc9, 0xcc, 0x54, 0x62, 0x97, 0xc5, 0x31, 0x62, 0x6f, 0xc1, 0x11, 0xcc, 0x0d, 0xf5, - 0x02, 0x8c, 0x44, 0xae, 0xa7, 0x8d, 0x19, 0x54, 0x4a, 0xaa, 0xcb, 0xac, 0x2d, 0xa0, 0xae, 0x22, - 0x98, 0x0e, 0xf1, 0x99, 0x18, 0xa0, 0xb7, 0xad, 0x01, 0x72, 0x95, 0xa8, 0x4f, 0x6e, 0x0d, 0xc3, - 0x91, 0x00, 0x7b, 0xbb, 0x5c, 0x5f, 0x1b, 0x77, 0x6b, 0x71, 0x09, 0x30, 0x05, 0x75, 0x47, 0x24, - 0x01, 0x19, 0xa0, 0xbf, 0xed, 0x4d, 0x84, 0x2f, 0x07, 0x19, 0xac, 0x06, 0xb3, 0x9b, 0xd8, 0x60, - 0xcb, 0x36, 0xb1, 0xd8, 0xa4, 0xca, 0x06, 0xda, 0x52, 0xd9, 0xf4, 0x66, 0xd2, 0xfe, 0x99, 0xd6, - 0x4a, 0x70, 0x2e, 0x36, 0x9a, 0xd0, 0x90, 0x00, 0x1b, 0xd2, 0xa9, 0xcd, 0x64, 0x2a, 0x23, 0x66, - 0x4b, 0x8e, 0x4c, 0x02, 0xa2, 0xb2, 0xc1, 0x0e, 0x54, 0x26, 0x90, 0x83, 0x68, 0x6d, 0x0b, 0x8e, - 0x87, 0x57, 0x53, 0x62, 0xc0, 0xa1, 0xb6, 0x8c, 0x20, 0xb4, 0xe8, 0x62, 0xe3, 0x3c, 0x03, 0x2d, - 0xb9, 0xe8, 0x12, 0xa3, 0x0d, 0x77, 0x20, 0x5e, 0x62, 0x85, 0xc6, 0x46, 0xfe, 0x32, 0x9c, 0xe5, - 0xcf, 0x54, 0x62, 0xf4, 0x91, 0x0e, 0x46, 0xe7, 0x4d, 0x6b, 0x94, 0x81, 0xe2, 0x15, 0x8e, 0x5f, - 0x3e, 0x91, 0xf0, 0xcb, 0x61, 0x07, 0xa9, 0xfd, 0xe5, 0x20, 0x1c, 0xe7, 0x75, 0x30, 0xf7, 0xbb, - 0x00, 0x13, 0x78, 0xda, 0xa8, 0x99, 0x45, 0x5d, 0xf1, 0xb8, 0xdf, 0x45, 0x37, 0x31, 0xd2, 0xa1, - 0x16, 0xe1, 0x58, 0x48, 0xfd, 0x31, 0xac, 0xc3, 0x18, 0x6b, 0xaa, 0x05, 0x10, 0xc5, 0x9d, 0x87, - 0xf1, 0x96, 0x83, 0x08, 0x42, 0x28, 0xe2, 0x64, 0x47, 0xd9, 0xa2, 0xa7, 0x61, 0xd4, 0x75, 0x98, - 0x8a, 0xaf, 0xf8, 0x00, 0x83, 0xf8, 0xd3, 0x23, 0xb1, 0xf5, 0x4b, 0xf1, 0x96, 0xe0, 0x44, 0x6c, - 0x92, 0x62, 0x3c, 0xf6, 0x60, 0x1e, 0xf3, 0x11, 0x6d, 0x47, 0xd9, 0xbc, 0x0d, 0xd3, 0xbc, 0xd5, - 0x13, 0x0c, 0xdf, 0x4b, 0x76, 0x85, 0xe4, 0x5a, 0xa0, 0x1c, 0xdc, 0x80, 0x5c, 0x10, 0x00, 0x86, - 0xdd, 0x21, 0x0e, 0xeb, 0xfa, 0x08, 0xeb, 0xb4, 0xbf, 0x15, 0x18, 0xe0, 0x48, 0xf0, 0x1a, 0x4c, - 0xd1, 0x48, 0x30, 0x81, 0xd7, 0x8f, 0xf1, 0x26, 0x49, 0x77, 0x0c, 0xed, 0x1e, 0xcc, 0x04, 0xe3, - 0x25, 0x7d, 0x24, 0xc6, 0x1e, 0xc0, 0xd8, 0xd3, 0x14, 0x2a, 0x66, 0x7e, 0x84, 0xc8, 0x12, 0x9c, - 0xa0, 0x63, 0x0b, 0x68, 0x10, 0xdf, 0x93, 0x27, 0x40, 0x5c, 0x12, 0xaf, 0x82, 0x16, 0xf0, 0xc1, - 0x77, 0x3e, 0x98, 0xce, 0x20, 0xd9, 0x0c, 0x29, 0x24, 0x27, 0x30, 0xc0, 0xb4, 0x5e, 0x81, 0x53, - 0x94, 0x1d, 0x09, 0xa9, 0x21, 0x4c, 0x8a, 0xf2, 0x2d, 0xa2, 0x74, 0x03, 0x72, 0x09, 0xb7, 0x14, + 0xd9, 0xd7, 0x57, 0x9e, 0xa5, 0x38, 0xdc, 0x34, 0xfe, 0xb4, 0xef, 0x2b, 0xd8, 0xe3, 0xa6, 0xc1, + 0x7d, 0x16, 0xb3, 0xb0, 0x1f, 0x28, 0xf8, 0x82, 0xe3, 0xae, 0x1f, 0x2e, 0xd4, 0x98, 0xb7, 0x16, + 0x6a, 0x5c, 0x7a, 0x73, 0x9b, 0xb8, 0xed, 0xe8, 0xe2, 0xdc, 0x76, 0x44, 0xcd, 0xa5, 0x5b, 0x60, + 0x2e, 0x3d, 0x2d, 0x73, 0x29, 0x70, 0xa6, 0x67, 0x3a, 0x62, 0xca, 0x51, 0xde, 0xb5, 0xe3, 0x38, + 0xaf, 0x1c, 0x6b, 0x65, 0xbb, 0xdd, 0x9f, 0x90, 0xdd, 0x8e, 0xcc, 0x55, 0x14, 0x46, 0x6c, 0x68, + 0x45, 0xe8, 0xae, 0xe8, 0x9e, 0x9e, 0x92, 0xde, 0xc7, 0x44, 0x56, 0x74, 0x4f, 0xa7, 0x06, 0x86, + 0x71, 0x8a, 0x57, 0x9f, 0xa5, 0xec, 0x73, 0x5c, 0x56, 0xb4, 0x55, 0xec, 0x41, 0xb8, 0x7d, 0xcc, + 0x8e, 0x72, 0xd0, 0xe7, 0x36, 0x0d, 0x03, 0xb9, 0xc4, 0x84, 0xfa, 0x4b, 0xc1, 0x67, 0xd4, 0x51, + 0x9f, 0x8a, 0x12, 0x8a, 0x2c, 0xe8, 0x03, 0x14, 0xfc, 0x36, 0x47, 0xf0, 0x79, 0x81, 0xe0, 0x1c, + 0x9e, 0xb4, 0x87, 0x70, 0x21, 0x15, 0xa8, 0x3d, 0x55, 0x00, 0x4c, 0x06, 0x14, 0xc9, 0xf5, 0x64, + 0x8a, 0xf4, 0x99, 0xae, 0xef, 0xee, 0xc0, 0x09, 0xb7, 0x61, 0x7b, 0x65, 0xb6, 0x2e, 0xdc, 0xb2, + 0x67, 0x97, 0x0d, 0xcc, 0x71, 0x59, 0xaf, 0xd5, 0xe8, 0x22, 0xcc, 0xb9, 0x2c, 0x0a, 0xb8, 0x5f, + 0x71, 0x1f, 0xdb, 0x44, 0xa4, 0xa5, 0x5a, 0x4d, 0x7d, 0x1d, 0xe6, 0x2a, 0xcc, 0x5d, 0x88, 0xc9, + 0x74, 0x63, 0x32, 0x33, 0x95, 0xd8, 0x65, 0x71, 0x8c, 0xd8, 0xdb, 0x70, 0x04, 0x73, 0x43, 0xbd, + 0x00, 0x23, 0x91, 0xeb, 0x69, 0x63, 0x06, 0x95, 0x92, 0xea, 0x32, 0x6b, 0x0b, 0xa8, 0xab, 0x08, + 0xa6, 0x43, 0x7c, 0x26, 0x06, 0xe8, 0x6d, 0x6b, 0x80, 0x5c, 0x25, 0xea, 0x93, 0x5b, 0xc3, 0x70, + 0x24, 0xc0, 0xde, 0x2e, 0xd7, 0xd7, 0xc6, 0xdd, 0x5a, 0x5c, 0x02, 0x4c, 0x41, 0xdd, 0x11, 0x49, + 0x40, 0x06, 0xe8, 0x6f, 0x7b, 0x13, 0xe1, 0xcb, 0x41, 0x06, 0xab, 0xc1, 0xec, 0x26, 0x36, 0xd8, + 0xb2, 0x4d, 0x2c, 0x36, 0xa9, 0xb2, 0x81, 0xb6, 0x54, 0x36, 0xbd, 0x99, 0xb4, 0x7f, 0xa6, 0xb5, + 0x12, 0x9c, 0x8b, 0x8d, 0x26, 0x34, 0x24, 0xc0, 0x86, 0x74, 0x6a, 0x33, 0x99, 0xca, 0x88, 0xd9, + 0x92, 0x23, 0x93, 0x80, 0xa8, 0x6c, 0xb0, 0x03, 0x95, 0x09, 0xe4, 0x20, 0x5a, 0xdb, 0x82, 0xe3, + 0xe1, 0xd5, 0x94, 0x18, 0x70, 0xa8, 0x2d, 0x23, 0x08, 0x2d, 0xba, 0xd8, 0x38, 0x4f, 0x41, 0x4b, + 0x2e, 0xba, 0xc4, 0x68, 0xc3, 0x1d, 0x88, 0x97, 0x58, 0xa1, 0xb1, 0x91, 0xbf, 0x0c, 0x67, 0xf9, + 0x33, 0x95, 0x18, 0x7d, 0xa4, 0x83, 0xd1, 0x79, 0xd3, 0x1a, 0x65, 0xa0, 0x78, 0x85, 0xe3, 0x97, + 0x4f, 0x24, 0xfc, 0x72, 0xd8, 0x41, 0x6a, 0x7f, 0x39, 0x08, 0xc7, 0x79, 0x1d, 0xcc, 0xfd, 0x2e, + 0xc0, 0x04, 0x9e, 0x36, 0x6a, 0x66, 0x51, 0x57, 0x3c, 0xee, 0x77, 0xd1, 0x4d, 0x8c, 0x74, 0xa8, + 0x45, 0x38, 0x16, 0x52, 0x7f, 0x0c, 0xeb, 0x30, 0xc6, 0x9a, 0x6a, 0x01, 0x44, 0x71, 0xe7, 0x61, + 0xbc, 0xe5, 0x20, 0x82, 0x10, 0x8a, 0x38, 0xd9, 0x51, 0xb6, 0xe8, 0x69, 0x18, 0x75, 0x0d, 0xa6, + 0xe2, 0x2b, 0x3e, 0xc0, 0x20, 0xfe, 0xf4, 0x48, 0x6c, 0xfd, 0x52, 0xbc, 0x25, 0x38, 0x11, 0x9b, + 0xa4, 0x18, 0x8f, 0x3d, 0x98, 0xc7, 0x7c, 0x44, 0xdb, 0x51, 0x36, 0x6f, 0xc1, 0x34, 0x6f, 0xf5, + 0x04, 0xc3, 0xf7, 0x92, 0x5d, 0x21, 0xb9, 0x16, 0x28, 0x07, 0x2f, 0x43, 0x2e, 0x08, 0x00, 0xc3, + 0xee, 0x10, 0x87, 0x75, 0x7d, 0x84, 0x75, 0xda, 0xdf, 0x0a, 0x0c, 0x70, 0x24, 0x78, 0x15, 0xa6, + 0x68, 0x24, 0x98, 0xc0, 0xeb, 0xc7, 0x78, 0x93, 0xa4, 0x3b, 0x86, 0x76, 0x17, 0x66, 0x82, 0xf1, + 0x92, 0x3e, 0x12, 0x63, 0x0f, 0x60, 0xec, 0x69, 0x0a, 0x15, 0x33, 0x3f, 0x42, 0x64, 0x09, 0x4e, + 0xd0, 0xb1, 0x05, 0x34, 0x88, 0xef, 0xc9, 0x13, 0x20, 0x2e, 0x89, 0xd7, 0x40, 0x0b, 0xf8, 0xe0, + 0x3b, 0x1f, 0x4c, 0x67, 0x90, 0x6c, 0x86, 0x14, 0x92, 0x13, 0x18, 0x60, 0x5a, 0xaf, 0xc2, 0x29, + 0xca, 0x8e, 0x84, 0xd4, 0x10, 0x26, 0x45, 0xf9, 0x16, 0x51, 0x7a, 0x19, 0x72, 0x09, 0xb7, 0x14, 0xcc, 0xe4, 0x30, 0x99, 0x8d, 0x98, 0xab, 0xa1, 0xd3, 0xb8, 0x02, 0xb3, 0x91, 0x69, 0x8c, 0xae, 0x75, 0xcc, 0xc0, 0x48, 0x44, 0xaf, 0xb1, 0x64, 0x01, 0x19, 0x7e, 0x19, 0x66, 0xc2, 0x73, 0xca, - 0x21, 0x32, 0x1a, 0x56, 0x2c, 0x97, 0xc6, 0x3d, 0x98, 0x11, 0x78, 0xbc, 0x40, 0x90, 0x31, 0xc2, + 0x21, 0x32, 0x1a, 0x56, 0x2c, 0x97, 0xc6, 0x5d, 0x98, 0x11, 0x78, 0xbc, 0x40, 0x90, 0x31, 0xc2, 0x08, 0xd7, 0x7f, 0x51, 0x71, 0xd6, 0xe1, 0x0c, 0xc7, 0x4a, 0x38, 0xfc, 0x8c, 0x93, 0x4d, 0x26, - 0x61, 0x2c, 0x09, 0xb6, 0x5e, 0x87, 0xd3, 0x49, 0x93, 0xe1, 0x10, 0x54, 0x31, 0xc1, 0x93, 0x71, - 0xcb, 0x49, 0xd0, 0x7b, 0x15, 0x34, 0x89, 0x7b, 0x0d, 0x44, 0x9d, 0x20, 0xf6, 0x23, 0x72, 0x96, - 0x54, 0xda, 0x37, 0xe1, 0x82, 0xc0, 0x16, 0x39, 0x0c, 0x4e, 0x62, 0x92, 0xa7, 0x79, 0x26, 0x99, - 0x60, 0xf2, 0x0d, 0x38, 0xcf, 0x37, 0x4c, 0x0e, 0xdd, 0x23, 0x98, 0xee, 0x1c, 0xc7, 0x3e, 0xe3, + 0x61, 0x2c, 0x09, 0xb6, 0xde, 0x80, 0xd3, 0x49, 0x93, 0xe1, 0x10, 0x54, 0x31, 0xc1, 0x93, 0x71, + 0xcb, 0x49, 0xd0, 0x7b, 0x0d, 0x34, 0x89, 0x7b, 0x0d, 0x44, 0x9d, 0x20, 0xf6, 0x23, 0x72, 0x96, + 0x54, 0xda, 0xb7, 0xe0, 0x82, 0xc0, 0x16, 0x39, 0x0c, 0x4e, 0x62, 0x92, 0xa7, 0x79, 0x26, 0x99, + 0x60, 0xf2, 0x4d, 0x38, 0xcf, 0x37, 0x4c, 0x0e, 0xdd, 0x23, 0x98, 0xee, 0x1c, 0xc7, 0x3e, 0xe3, 0x64, 0x43, 0xa1, 0xee, 0xdf, 0x29, 0x30, 0xc3, 0xc9, 0x72, 0x64, 0xc9, 0xec, 0xed, 0x47, 0xfa, - 0xe1, 0x16, 0x67, 0x8b, 0x39, 0x27, 0xcb, 0xcf, 0x84, 0x33, 0x7c, 0xdf, 0x57, 0xe0, 0xac, 0x1c, + 0xe1, 0x26, 0x67, 0x8b, 0x39, 0x27, 0xcb, 0xcf, 0x84, 0x33, 0x7c, 0xdf, 0x57, 0xe0, 0xac, 0x1c, 0x24, 0x6b, 0xee, 0x61, 0x23, 0x9e, 0xe7, 0x7b, 0x31, 0x55, 0x98, 0x4f, 0x96, 0xed, 0xfb, 0xaf, - 0xc3, 0x70, 0x5c, 0x46, 0xeb, 0x17, 0x30, 0xe7, 0xa7, 0x3e, 0x86, 0x11, 0x5c, 0xfc, 0x68, 0xda, + 0xc3, 0x70, 0x5c, 0x46, 0xeb, 0x17, 0x30, 0xe7, 0xa7, 0x3e, 0x82, 0x11, 0x5c, 0xfc, 0x68, 0xda, 0x56, 0xb9, 0x82, 0x6a, 0x9e, 0x8e, 0x0f, 0xed, 0x83, 0x91, 0x6b, 0xa1, 0x48, 0x01, 0x29, 0x05, 0x5e, 0xf1, 0x61, 0xa9, 0x59, 0x0c, 0x37, 0xc2, 0x8d, 0xa4, 0x16, 0x75, 0xcf, 0x6e, 0x7a, 0xed, 0x94, 0x57, 0x51, 0x94, 0x90, 0xb6, 0x7f, 0x40, 0x8e, 0xb6, 0x9c, 0x34, 0xd5, 0xa7, 0x65, 0xe7, @@ -5435,160 +5531,164 @@ var fileDescriptor_7c861fb1c14863a5 = []byte{ 0xff, 0xd2, 0x8b, 0x03, 0x1c, 0xf6, 0xc4, 0xf4, 0xf4, 0xf3, 0xcb, 0x20, 0xb1, 0xee, 0xba, 0xee, 0xee, 0x60, 0x03, 0xeb, 0xa1, 0xdd, 0x6b, 0xba, 0xbb, 0x13, 0x08, 0xd4, 0xdb, 0x12, 0x28, 0x35, 0x41, 0xc3, 0x15, 0x50, 0xd3, 0x48, 0x8a, 0x97, 0xd7, 0xc7, 0x92, 0x4d, 0x5f, 0x3d, 0x8c, 0x1f, - 0x4f, 0x88, 0xd2, 0x17, 0xbf, 0x40, 0x4a, 0xba, 0xc9, 0x51, 0xd2, 0xe9, 0xa4, 0x92, 0x92, 0x32, + 0x4f, 0x88, 0xd2, 0x17, 0xbf, 0x40, 0x4a, 0xba, 0xce, 0x51, 0xd2, 0xe9, 0xa4, 0x92, 0x92, 0x32, 0x6a, 0x67, 0x70, 0x8e, 0x57, 0xd4, 0xcd, 0x54, 0xf5, 0x07, 0x0a, 0x0c, 0xb0, 0x13, 0x6f, 0x54, 0x01, 0x4a, 0x9a, 0x02, 0x0e, 0xa7, 0x2a, 0xa0, 0x4b, 0xae, 0x80, 0x6e, 0x81, 0x02, 0x5a, 0x69, 0x48, 0xed, 0xbb, 0x64, 0x47, 0x0d, 0xa5, 0xa3, 0xe2, 0xe1, 0xeb, 0x81, 0x24, 0xd1, 0x52, 0x77, - 0x52, 0x09, 0x43, 0xda, 0x43, 0xbc, 0x91, 0x4a, 0x20, 0xda, 0x4a, 0x9f, 0xfd, 0xe6, 0x61, 0x38, - 0xb2, 0xe6, 0x56, 0x37, 0x98, 0x96, 0x9f, 0x38, 0xba, 0xe5, 0x6e, 0x49, 0xcc, 0xf8, 0x32, 0x4c, + 0x52, 0x09, 0x43, 0xda, 0x03, 0xbc, 0x91, 0x4a, 0x20, 0xda, 0x4a, 0x9f, 0xfd, 0xe6, 0x61, 0x38, + 0xb2, 0xe6, 0x56, 0x37, 0x98, 0x96, 0x1f, 0x3b, 0xba, 0xe5, 0x6e, 0x49, 0xcc, 0xf8, 0x32, 0x4c, 0xba, 0x76, 0xd3, 0x31, 0x50, 0x99, 0x37, 0x5f, 0x2a, 0xe9, 0xdb, 0x08, 0xcf, 0x1a, 0x3e, 0x17, 0xba, 0x9e, 0x69, 0x91, 0x02, 0x1d, 0x9e, 0x9d, 0x4f, 0x85, 0x00, 0x36, 0xf8, 0x75, 0xf4, 0xdd, 0xed, 0xd5, 0xd1, 0x2f, 0xc4, 0xf4, 0x3b, 0x13, 0xd6, 0x6f, 0x52, 0x5c, 0x6d, 0x16, 0x5f, 0x7d, - 0x25, 0x3b, 0x98, 0x2d, 0x7f, 0xed, 0x30, 0xae, 0xb5, 0xbf, 0xff, 0xcc, 0x43, 0x8e, 0xa5, 0xd7, + 0x25, 0x3b, 0x98, 0x2d, 0x7f, 0xed, 0x30, 0xae, 0xb5, 0xbf, 0xf7, 0xd4, 0x43, 0x8e, 0xa5, 0xd7, 0x7e, 0x59, 0xf4, 0x74, 0x31, 0xa6, 0xa7, 0xc8, 0xbb, 0xb1, 0xb8, 0xb0, 0xf4, 0xdd, 0x58, 0xbc, - 0xb9, 0x55, 0x3c, 0xa7, 0xe0, 0x64, 0xec, 0x43, 0xf3, 0x9d, 0xa6, 0x89, 0x5f, 0x8a, 0xd0, 0x08, + 0xb9, 0x55, 0x3c, 0xa7, 0xe0, 0x64, 0xec, 0x03, 0xf3, 0xdd, 0xa6, 0x89, 0x5f, 0x8a, 0xd0, 0x08, 0xe1, 0x93, 0x25, 0x63, 0x23, 0x7e, 0xa3, 0x2b, 0xe6, 0x37, 0xd8, 0x8e, 0xdf, 0xdd, 0xf6, 0x8e, 0xaf, 0x04, 0x3b, 0xfe, 0x25, 0x59, 0xe2, 0x24, 0x21, 0x8c, 0x36, 0x83, 0xf3, 0x26, 0x89, 0x76, - 0xa6, 0x85, 0x1f, 0x2b, 0x30, 0xbe, 0xe6, 0x56, 0x1f, 0x6d, 0x6d, 0xb9, 0xc8, 0xfb, 0x14, 0x54, + 0xa6, 0x85, 0x1f, 0x2b, 0x30, 0xbe, 0xe6, 0x56, 0x1f, 0x6e, 0x6d, 0xb9, 0xc8, 0xfb, 0x14, 0x54, 0x50, 0x84, 0x63, 0x36, 0x1e, 0xcb, 0x33, 0xad, 0x6a, 0xd4, 0x6c, 0x82, 0x8c, 0xc8, 0x54, 0x0b, 0x20, 0x6c, 0x36, 0x6e, 0x71, 0x3e, 0x26, 0x7a, 0x3e, 0x2c, 0x7a, 0x54, 0x02, 0x6d, 0x1a, 0x3f, - 0x0a, 0x8c, 0x36, 0x32, 0xa1, 0xff, 0x8c, 0xc4, 0x0d, 0xf7, 0xeb, 0xc8, 0xa9, 0x22, 0xcb, 0xd8, + 0x0a, 0x8c, 0x36, 0x32, 0xa1, 0xff, 0x8c, 0xc4, 0x0d, 0xf7, 0xea, 0xc8, 0xa9, 0x22, 0xcb, 0xd8, 0xdb, 0xc0, 0x25, 0x74, 0xf4, 0xc5, 0xe0, 0x81, 0xc9, 0x5e, 0xbc, 0x22, 0xdb, 0xe3, 0xb9, 0xcc, - 0xd0, 0x3d, 0x9e, 0xdb, 0xd7, 0x7a, 0xd3, 0x74, 0x18, 0xcb, 0xfa, 0xc0, 0xf2, 0x4f, 0x7e, 0x2e, - 0x9b, 0x62, 0x52, 0x30, 0xf2, 0x19, 0x59, 0xf2, 0x11, 0xbd, 0x74, 0xc7, 0x6c, 0xe2, 0x16, 0xf3, + 0xd0, 0x3d, 0x9e, 0xdb, 0xd7, 0x7a, 0xd3, 0x74, 0x18, 0xcb, 0x7a, 0xdf, 0xf2, 0x4f, 0x7e, 0x2e, + 0x9b, 0x62, 0x52, 0x30, 0xf2, 0x19, 0x59, 0xf2, 0x11, 0xbd, 0x74, 0xc7, 0x6c, 0xe2, 0x26, 0xf3, 0x07, 0xed, 0x44, 0xe3, 0xd4, 0x27, 0x2c, 0xc6, 0x94, 0xaa, 0x45, 0x2b, 0x55, 0x78, 0x3a, 0xa1, 0x6f, 0xdf, 0xf8, 0x9d, 0x71, 0xb5, 0xae, 0xa0, 0x5f, 0xa9, 0x35, 0xae, 0x56, 0xbe, 0x4e, 0xa8, 0x5a, 0xf9, 0x9d, 0x4c, 0xad, 0xff, 0xac, 0x60, 0x8f, 0xb4, 0xee, 0x98, 0xbb, 0x66, 0x0d, 0x55, - 0x51, 0xe5, 0xfe, 0x33, 0x64, 0x34, 0x3d, 0x74, 0xcf, 0xb6, 0x3c, 0x47, 0x37, 0xc4, 0xeb, 0x6f, + 0x51, 0xe5, 0xde, 0x53, 0x64, 0x34, 0x3d, 0x74, 0xd7, 0xb6, 0x3c, 0x47, 0x37, 0xc4, 0xeb, 0x6f, 0x12, 0x7a, 0xb6, 0x9a, 0x56, 0xc5, 0xa5, 0xaa, 0x24, 0x1f, 0xea, 0x05, 0x18, 0x33, 0x28, 0x66, 0x59, 0x27, 0x4f, 0x0f, 0xa9, 0xd2, 0x46, 0x83, 0x76, 0xfa, 0x22, 0x51, 0x55, 0x69, 0x14, 0x44, - 0xf4, 0x44, 0xa2, 0x9b, 0xdb, 0x82, 0x3a, 0xa0, 0x33, 0x61, 0x71, 0x85, 0xbc, 0xfa, 0x8e, 0xe4, + 0xf4, 0x44, 0xa2, 0x9b, 0x5b, 0x82, 0x3a, 0xa0, 0x33, 0x61, 0x71, 0x85, 0xbc, 0xfa, 0x8e, 0xe4, 0xb4, 0x0c, 0x80, 0x85, 0x37, 0x5f, 0x02, 0xc0, 0xfc, 0x96, 0x2b, 0xe6, 0xd6, 0x16, 0x8e, 0x70, 0xa4, 0xdb, 0xde, 0x65, 0x7f, 0xaa, 0xbe, 0xf3, 0x1f, 0xb3, 0xe7, 0xab, 0xa6, 0xb7, 0xdd, 0xdc, 0x5c, 0x30, 0xec, 0x3a, 0x7d, 0x9c, 0x4f, 0xff, 0x77, 0xc9, 0xad, 0xec, 0x14, 0xbc, 0xbd, 0x06, 0x72, 0x31, 0x82, 0x5b, 0x1a, 0xc0, 0xe4, 0x57, 0xcc, 0xad, 0xad, 0xe2, 0x04, 0x47, 0x26, 0xed, - 0x8b, 0x30, 0xb6, 0xe6, 0x56, 0x4b, 0xe8, 0xa9, 0xee, 0x54, 0xdc, 0x47, 0x0d, 0xef, 0x51, 0x53, + 0x8b, 0x30, 0xb6, 0xe6, 0x56, 0x4b, 0xe8, 0x89, 0xee, 0x54, 0xdc, 0x87, 0x0d, 0xef, 0x61, 0x53, 0xa8, 0x69, 0x92, 0x9f, 0xe7, 0x28, 0xe5, 0x58, 0x58, 0x29, 0x11, 0x52, 0x5a, 0x1e, 0x3b, 0xd4, - 0x48, 0x5b, 0xf8, 0xcd, 0xe5, 0x11, 0xdc, 0x69, 0xd4, 0x74, 0xb3, 0xfe, 0xd0, 0x36, 0x76, 0x50, + 0x48, 0x5b, 0xf8, 0xcd, 0xe5, 0x11, 0xdc, 0x69, 0xd4, 0x74, 0xb3, 0xfe, 0xc0, 0x36, 0x76, 0x50, 0x65, 0x15, 0x4f, 0x9e, 0x78, 0x11, 0x4d, 0xd4, 0x30, 0xd8, 0x12, 0xb1, 0xf4, 0xf5, 0xe6, 0xe6, - 0x6b, 0x68, 0x0f, 0x4f, 0xfc, 0x50, 0x89, 0xd7, 0xa5, 0x1e, 0x87, 0x01, 0xd7, 0xac, 0x5a, 0xba, + 0xeb, 0x68, 0x0f, 0x4f, 0xfc, 0x50, 0x89, 0xd7, 0xa5, 0x1e, 0x87, 0x01, 0xd7, 0xac, 0x5a, 0xba, 0xd7, 0x74, 0x48, 0x82, 0x61, 0xa8, 0xd4, 0x6a, 0x90, 0xc7, 0x57, 0x49, 0xbe, 0x68, 0x7c, 0x95, 0xec, 0x68, 0xd5, 0xd8, 0x92, 0xe7, 0x97, 0x1b, 0x66, 0xd5, 0xc2, 0xa7, 0x85, 0x0d, 0xe8, 0xf5, - 0xff, 0x4d, 0x05, 0x19, 0x5a, 0xbe, 0xf5, 0xb3, 0xe7, 0xb3, 0xbd, 0x2e, 0x6e, 0xf9, 0x9f, 0xe7, + 0xff, 0x4d, 0x05, 0x19, 0x5a, 0xbe, 0xf9, 0xb3, 0xe7, 0xb3, 0xbd, 0x2e, 0x6e, 0xf9, 0x9f, 0xe7, 0xb3, 0x97, 0x32, 0xcc, 0xe2, 0x92, 0x61, 0x50, 0x3b, 0x2d, 0x51, 0x52, 0xea, 0x71, 0xe8, 0x5e, 0x21, 0x51, 0xbb, 0x4f, 0xb2, 0xff, 0x67, 0xcf, 0x67, 0xb1, 0xcd, 0x96, 0x70, 0xab, 0xe6, 0xe2, 0x87, 0xac, 0x98, 0x03, 0xdb, 0x50, 0xcf, 0x10, 0xf9, 0x49, 0xd5, 0x2c, 0xc9, 0xeb, 0x60, 0x04, - 0xff, 0xbb, 0xd4, 0xef, 0x77, 0xe1, 0xba, 0xd8, 0x3b, 0xd0, 0xb3, 0xab, 0xd7, 0x9a, 0x88, 0x9e, + 0xff, 0xbb, 0xd4, 0xef, 0x77, 0xe1, 0xba, 0xd8, 0xdb, 0xd0, 0xb3, 0xab, 0xd7, 0x9a, 0x88, 0x9e, 0xcf, 0x35, 0x41, 0x00, 0x12, 0x12, 0x2d, 0x48, 0x37, 0x60, 0x34, 0xed, 0xeb, 0x5d, 0x78, 0x89, - 0x2f, 0x55, 0xea, 0xa6, 0x45, 0xae, 0x61, 0x38, 0x39, 0x83, 0xce, 0x0e, 0x95, 0xaf, 0xc3, 0x58, + 0x2f, 0x55, 0xea, 0xa6, 0x45, 0xae, 0x61, 0x38, 0x39, 0x83, 0xce, 0x0e, 0x95, 0x6f, 0xc0, 0x58, 0xa8, 0xca, 0x9d, 0xa4, 0x98, 0x5a, 0x99, 0x22, 0x25, 0xcd, 0x6f, 0x8d, 0xb6, 0x90, 0x71, 0x89, - 0xa8, 0xb0, 0xd0, 0xbe, 0xbb, 0xfd, 0x42, 0xfb, 0x1e, 0x71, 0xa1, 0xfd, 0x2d, 0xe8, 0x75, 0x3d, + 0xa8, 0xb0, 0xd0, 0xbe, 0xbb, 0xfd, 0x42, 0xfb, 0x1e, 0x71, 0xa1, 0xfd, 0x4d, 0xe8, 0x75, 0x3d, 0xdd, 0x6b, 0xba, 0xb4, 0x54, 0x79, 0x4e, 0xa4, 0x51, 0x2c, 0xe6, 0x06, 0x06, 0x2d, 0x51, 0x94, 0x62, 0x51, 0x96, 0xb8, 0x91, 0xeb, 0x58, 0x7b, 0x01, 0xe7, 0x6d, 0xe4, 0x40, 0xcc, 0x5c, 0xff, - 0x94, 0x3c, 0xb1, 0x5d, 0x22, 0xcf, 0xa7, 0xdf, 0x45, 0x1b, 0x9e, 0xbe, 0x83, 0xfe, 0x9f, 0xa3, + 0x94, 0x3c, 0xb1, 0x5d, 0x22, 0xcf, 0xa7, 0xdf, 0x43, 0x1b, 0x9e, 0xbe, 0x83, 0xfe, 0x9f, 0xa3, 0x5b, 0x9e, 0x78, 0x0d, 0x2e, 0x41, 0x6f, 0x15, 0x43, 0xd0, 0x53, 0xe3, 0x05, 0x81, 0x64, 0x98, 0x4c, 0x40, 0x19, 0x2b, 0xb4, 0x44, 0x11, 0x8b, 0x97, 0x65, 0xef, 0x6b, 0x79, 0xcc, 0x68, 0xa7, 0xf0, 0xeb, 0x3a, 0x5e, 0x17, 0x93, 0x65, 0x0f, 0x3b, 0x93, 0x25, 0x9f, 0x11, 0xdd, 0x0b, 0x41, 0x08, 0x05, 0xc9, 0x41, 0x1f, 0xe6, 0x87, 0x15, 0xb4, 0x07, 0x9f, 0x72, 0xb7, 0x90, 0x1c, 0x81, - 0xba, 0x85, 0x64, 0x07, 0xe3, 0xed, 0x5f, 0x94, 0xd6, 0x2d, 0xe5, 0x7d, 0x4a, 0x6b, 0xcd, 0xae, - 0x98, 0x5b, 0xa6, 0xa1, 0x4b, 0xe3, 0xea, 0x27, 0xd0, 0x1f, 0xfc, 0xa8, 0x09, 0x5d, 0x9a, 0x37, + 0xba, 0x85, 0x64, 0x07, 0xe3, 0xed, 0x5f, 0x94, 0xd6, 0x2d, 0xe5, 0x3d, 0x4a, 0x6b, 0xcd, 0xae, + 0x98, 0x5b, 0xa6, 0xa1, 0x4b, 0xe3, 0xea, 0xc7, 0xd0, 0x1f, 0xfc, 0xa8, 0x09, 0x5d, 0x9a, 0xd7, 0x05, 0xea, 0x16, 0xd2, 0x5e, 0xa7, 0xf8, 0x25, 0x46, 0x29, 0xdb, 0xe6, 0x26, 0x24, 0xa8, 0x9d, - 0xc5, 0x7b, 0x9b, 0xb0, 0x9f, 0x49, 0xfd, 0xbe, 0x82, 0x0f, 0x9b, 0x99, 0x1f, 0xd0, 0xbe, 0x96, - 0x10, 0xb6, 0x90, 0x5a, 0xfd, 0x4a, 0x48, 0x72, 0x64, 0xbc, 0x2a, 0x90, 0x31, 0x72, 0x34, 0x4c, - 0x3c, 0xf6, 0x24, 0x47, 0x43, 0xe1, 0x2b, 0xcf, 0x1f, 0x90, 0xf3, 0x41, 0x7b, 0xcf, 0x3b, 0xd7, - 0x13, 0x62, 0x5d, 0x15, 0x25, 0xa8, 0x79, 0x74, 0x39, 0xb2, 0x65, 0x2a, 0x52, 0xe6, 0x3f, 0x22, - 0x23, 0xe7, 0x06, 0xf9, 0xeb, 0x31, 0x6a, 0xad, 0xed, 0xbf, 0x10, 0xc9, 0x6e, 0xad, 0x42, 0xda, - 0x9d, 0x5a, 0xab, 0xb8, 0xe6, 0x9c, 0x58, 0x6b, 0x7a, 0xb1, 0x79, 0xb0, 0x46, 0xdb, 0x7e, 0x2c, - 0xd7, 0xc6, 0x1a, 0x15, 0xd1, 0xee, 0x78, 0x8d, 0x0a, 0xdf, 0x06, 0xd1, 0x35, 0x9a, 0xfa, 0x28, - 0xe8, 0x87, 0x0a, 0xae, 0x49, 0x24, 0x99, 0x38, 0xbb, 0x5e, 0x6f, 0x5a, 0xa6, 0xb7, 0xb7, 0x6e, - 0xdb, 0xb5, 0x8d, 0x06, 0xb2, 0x2a, 0x42, 0x99, 0x4b, 0x09, 0x99, 0xaf, 0xcb, 0xfc, 0x52, 0x92, - 0x32, 0x47, 0xe2, 0x4c, 0xaf, 0xb4, 0x05, 0xe4, 0xe8, 0x2b, 0x6d, 0x41, 0x6f, 0x7c, 0xfd, 0xb6, - 0xd6, 0x37, 0xfe, 0x15, 0x10, 0xb2, 0x4f, 0xee, 0xc3, 0xfa, 0xe5, 0xd2, 0xed, 0x74, 0xfd, 0x72, - 0x89, 0xd1, 0xf5, 0xcb, 0xed, 0x63, 0x52, 0xfe, 0x2b, 0x49, 0x08, 0xc7, 0x2f, 0x53, 0xb2, 0xc8, - 0xfa, 0xff, 0x13, 0xb2, 0x16, 0x33, 0x5e, 0xd5, 0xc8, 0x25, 0xbe, 0x2b, 0x90, 0xf8, 0x5c, 0xf4, - 0xf4, 0x28, 0x24, 0xa9, 0x9d, 0xc7, 0x09, 0x63, 0x09, 0x04, 0x93, 0xfe, 0x27, 0xb4, 0xac, 0x34, - 0x69, 0xfa, 0x59, 0x14, 0xf0, 0x56, 0x42, 0x01, 0xb7, 0xb3, 0x2f, 0x66, 0xb9, 0x0e, 0x96, 0x05, - 0x3a, 0x98, 0x4f, 0x59, 0xd1, 0x61, 0x35, 0x90, 0xe8, 0x4e, 0x0e, 0xc4, 0x34, 0xf1, 0x4f, 0x0a, - 0x4e, 0x54, 0x10, 0x80, 0x55, 0xdb, 0x31, 0x50, 0x65, 0x83, 0x85, 0xaa, 0x42, 0x0d, 0x3c, 0x4e, - 0x68, 0xe0, 0x9a, 0x34, 0x76, 0x8d, 0x13, 0xe6, 0x48, 0x5e, 0x14, 0x48, 0x1e, 0xc9, 0x1d, 0xf0, - 0xa9, 0xd1, 0xdc, 0x01, 0xbf, 0x33, 0x6e, 0xf1, 0x4f, 0x1c, 0xbd, 0x62, 0x5a, 0xf4, 0xb4, 0x79, - 0x4f, 0xaf, 0x37, 0x74, 0xb3, 0x6a, 0xa5, 0x78, 0xef, 0xec, 0x16, 0x2f, 0xa1, 0xde, 0xa9, 0xc5, - 0x4b, 0x48, 0x52, 0x8b, 0x97, 0x40, 0x30, 0xe9, 0xbf, 0x43, 0x52, 0xb5, 0x41, 0x2c, 0x76, 0xdf, - 0xd2, 0x37, 0x6b, 0x62, 0x0b, 0x7f, 0x90, 0x10, 0xf8, 0x92, 0x70, 0x93, 0x0e, 0x13, 0xe4, 0xc8, - 0xb8, 0x28, 0x90, 0x31, 0x1f, 0xdd, 0x99, 0xc3, 0x54, 0x68, 0xfe, 0x35, 0xda, 0x98, 0x69, 0x1e, - 0xf7, 0xcd, 0x73, 0x49, 0xa8, 0xef, 0xeb, 0x3c, 0x46, 0x3c, 0x97, 0x04, 0xa2, 0xf5, 0x1b, 0x22, - 0xe4, 0xd1, 0x49, 0x04, 0x74, 0x1d, 0x59, 0xfe, 0xc7, 0xba, 0x6d, 0x5a, 0x9e, 0x9b, 0xa2, 0x82, - 0x5f, 0x4b, 0xa8, 0xe0, 0x6e, 0x16, 0x15, 0x70, 0x86, 0xe0, 0xe8, 0x21, 0xd3, 0x03, 0xc0, 0x34, - 0xba, 0xf4, 0x01, 0x60, 0x1a, 0x18, 0xd3, 0xc8, 0x1f, 0x2a, 0x30, 0xb2, 0xe6, 0x56, 0x57, 0x11, - 0x5a, 0x31, 0x5d, 0x9c, 0xd6, 0x11, 0x0a, 0xbf, 0x9a, 0x10, 0x7e, 0x5e, 0x20, 0x7c, 0x88, 0x1a, - 0x47, 0xce, 0x82, 0x40, 0xce, 0xa9, 0xb0, 0x9c, 0x21, 0x12, 0x5a, 0x0e, 0x8e, 0x46, 0x5b, 0x18, - 0xf7, 0xff, 0x4d, 0x6a, 0x28, 0x96, 0x3c, 0xbb, 0x6e, 0x1a, 0xa1, 0x82, 0x86, 0x55, 0x84, 0xd6, - 0x9a, 0x35, 0xcf, 0x6c, 0xd4, 0x4c, 0xe4, 0x6c, 0x18, 0xdb, 0xa8, 0xd2, 0x94, 0xac, 0x57, 0x3d, - 0x21, 0xd8, 0x7d, 0x81, 0x60, 0xd9, 0x06, 0xe2, 0xc8, 0xfc, 0xaa, 0x40, 0xe6, 0xc5, 0xc8, 0xb9, - 0x37, 0x13, 0x75, 0xed, 0x45, 0xb8, 0x92, 0x19, 0x98, 0x69, 0xaa, 0x8c, 0xcf, 0xee, 0xe4, 0x26, - 0x78, 0xdd, 0x76, 0xbd, 0x47, 0x56, 0x6d, 0x6f, 0xcd, 0xae, 0x08, 0x95, 0x22, 0x3f, 0xa1, 0x27, - 0xe9, 0xd0, 0x13, 0x7a, 0xb2, 0x23, 0xe0, 0x60, 0xf1, 0xdb, 0x37, 0xa1, 0x6b, 0xcd, 0xad, 0xaa, - 0x6f, 0x42, 0x5f, 0xf0, 0x1b, 0x70, 0xa7, 0xc4, 0x49, 0x30, 0x0a, 0x92, 0xbf, 0x90, 0x0a, 0xc2, - 0x12, 0xbd, 0x6f, 0x43, 0x3f, 0xfb, 0x51, 0x36, 0x49, 0x7a, 0x2d, 0x80, 0xc9, 0xcf, 0xa7, 0xc3, - 0x30, 0xda, 0x5f, 0x57, 0x60, 0x4a, 0xf4, 0x6b, 0x55, 0x57, 0xc4, 0x74, 0x04, 0x28, 0xf9, 0x97, - 0xda, 0x46, 0x61, 0x9c, 0xfc, 0xae, 0x02, 0xc7, 0xa5, 0xbf, 0x81, 0x74, 0x3d, 0x95, 0x36, 0x17, - 0x2f, 0x7f, 0xa7, 0x33, 0x3c, 0xc6, 0xd8, 0x1f, 0x29, 0x70, 0x32, 0xf5, 0x97, 0x0f, 0x8a, 0xa9, - 0x83, 0x08, 0x71, 0xf3, 0xcb, 0x9d, 0xe3, 0x32, 0x26, 0x7f, 0x1d, 0x26, 0xb9, 0xbf, 0x76, 0xb7, - 0x20, 0xa6, 0xcd, 0x83, 0xcf, 0x5f, 0x6f, 0x0f, 0x9e, 0x8d, 0xff, 0x4d, 0x05, 0xf2, 0x92, 0x1f, - 0x99, 0xbb, 0x2a, 0x26, 0x2b, 0xc6, 0xca, 0x7f, 0xae, 0x13, 0x2c, 0xc6, 0xd2, 0x57, 0x15, 0x38, - 0xc2, 0x7f, 0xff, 0x5d, 0xc8, 0x22, 0x64, 0x08, 0x21, 0x7f, 0xa3, 0x4d, 0x04, 0xc6, 0x83, 0x0d, - 0xa3, 0xf1, 0x57, 0x88, 0x92, 0x85, 0x1f, 0x03, 0xcd, 0x5f, 0xc9, 0x0c, 0x1a, 0x11, 0x9a, 0xff, - 0x0c, 0xb0, 0x90, 0xa6, 0xcc, 0x18, 0x82, 0x4c, 0x68, 0xf9, 0x0b, 0xbe, 0x26, 0x8c, 0x27, 0x9f, - 0xa3, 0xbd, 0x90, 0x42, 0x2d, 0x0c, 0x9c, 0x7f, 0xb1, 0x0d, 0x60, 0x36, 0xec, 0x6f, 0x2b, 0x70, - 0x4c, 0x7c, 0x05, 0x28, 0x21, 0x29, 0x44, 0xca, 0xdf, 0xea, 0x00, 0x29, 0xb2, 0x24, 0x24, 0x4f, - 0xc9, 0xaf, 0xa6, 0xd9, 0x14, 0x0f, 0x4b, 0xb6, 0x24, 0x32, 0xbc, 0xfe, 0xf6, 0x5d, 0x59, 0xea, - 0xc3, 0xe4, 0x62, 0xa6, 0x55, 0xc7, 0xc5, 0x95, 0xb9, 0xb2, 0xcc, 0x0f, 0x89, 0x7f, 0x47, 0x81, - 0x69, 0x59, 0x8d, 0xf7, 0xb5, 0xec, 0x2a, 0x08, 0xaf, 0xe1, 0xdb, 0x1d, 0xa1, 0x45, 0xbd, 0x09, - 0xb7, 0x28, 0xb4, 0x90, 0xb6, 0x4a, 0x63, 0x08, 0x52, 0x6f, 0x22, 0xab, 0xbc, 0xc4, 0x9a, 0x91, - 0xd5, 0xea, 0x5d, 0xcb, 0xb4, 0x62, 0xe3, 0x68, 0x32, 0xcd, 0x64, 0x29, 0xb3, 0x0b, 0xed, 0x8f, - 0xe2, 0x0c, 0x68, 0xfa, 0xfe, 0x28, 0xc4, 0xcd, 0xb0, 0x3f, 0xa6, 0x26, 0x2b, 0xd5, 0xdf, 0x53, - 0xe0, 0x84, 0xfc, 0x97, 0x0b, 0x52, 0x7d, 0xbc, 0x00, 0x31, 0x7f, 0xb7, 0x43, 0x44, 0xc6, 0xdb, - 0xef, 0x2b, 0x30, 0x93, 0x52, 0xef, 0x7d, 0xb3, 0xad, 0x31, 0xc2, 0x66, 0xff, 0x72, 0xa7, 0x98, - 0x8c, 0xbd, 0x6f, 0x28, 0x90, 0x13, 0x16, 0xfb, 0x2e, 0xa6, 0xd9, 0x72, 0x12, 0x27, 0x5f, 0x6c, - 0x1f, 0x27, 0xa2, 0xab, 0x94, 0x67, 0xdf, 0x37, 0x33, 0x99, 0x33, 0x07, 0x53, 0xa6, 0xab, 0x8c, - 0x2f, 0xb6, 0x9f, 0x81, 0xca, 0x29, 0x25, 0xbd, 0x28, 0xb9, 0x13, 0x4f, 0x40, 0xe7, 0xaf, 0xb6, - 0x03, 0xcd, 0x46, 0x76, 0x60, 0x2c, 0x51, 0x9a, 0x29, 0x39, 0x08, 0xc4, 0x61, 0xf3, 0x8b, 0xd9, - 0x61, 0xc3, 0x1b, 0x7d, 0xb2, 0xd4, 0x51, 0xb2, 0xd1, 0x27, 0x80, 0x65, 0x1b, 0xbd, 0xb0, 0xbe, - 0x10, 0xbb, 0x62, 0x7e, 0x9d, 0x9d, 0xc4, 0x15, 0x73, 0x11, 0x64, 0xae, 0x58, 0x5a, 0x20, 0xa7, - 0xd6, 0x60, 0x24, 0x56, 0xdf, 0x78, 0x5e, 0x4c, 0x2a, 0x0a, 0x99, 0xbf, 0x9c, 0x15, 0x92, 0x8d, - 0xf6, 0x1b, 0x0a, 0x1c, 0x15, 0xd4, 0xe2, 0x5d, 0x96, 0x39, 0x47, 0x1e, 0x46, 0xfe, 0x66, 0xbb, - 0x18, 0x11, 0x36, 0x04, 0xb5, 0x6b, 0x97, 0x65, 0xc7, 0xd9, 0x76, 0xd9, 0x90, 0x97, 0x7b, 0xa9, - 0x26, 0x0c, 0x47, 0x8b, 0x8e, 0xce, 0x89, 0x49, 0x45, 0x00, 0xf3, 0x85, 0x8c, 0x80, 0x11, 0x77, - 0x93, 0x52, 0x99, 0x22, 0x91, 0x43, 0x8e, 0x29, 0x73, 0x37, 0xd9, 0x8a, 0x30, 0xd4, 0x2d, 0x18, - 0x8a, 0xfc, 0x8e, 0xfe, 0x59, 0x31, 0xc5, 0x30, 0x5c, 0x7e, 0x21, 0x1b, 0x5c, 0xd8, 0xb9, 0x24, - 0xfe, 0xa0, 0xc9, 0x7c, 0x1a, 0x8d, 0x16, 0xac, 0xcc, 0xb9, 0x88, 0xfe, 0x06, 0x07, 0x36, 0x36, - 0xc1, 0x1f, 0xe0, 0xb8, 0x9c, 0x46, 0x2e, 0x8e, 0x21, 0x33, 0x36, 0xf9, 0x9f, 0x2b, 0xf0, 0x0f, - 0xd6, 0xdc, 0x1a, 0x17, 0x89, 0x0a, 0x79, 0xf0, 0xb2, 0x83, 0xb5, 0xac, 0x36, 0xc5, 0xdf, 0x51, - 0x38, 0x85, 0x29, 0x92, 0x1d, 0x25, 0x09, 0x2d, 0xdb, 0x51, 0xc4, 0x95, 0x27, 0xf8, 0x3c, 0x25, - 0x2e, 0x3b, 0x49, 0x3b, 0xa2, 0xf1, 0x90, 0x64, 0xe7, 0xa9, 0xd4, 0x9a, 0x10, 0xdf, 0x08, 0x49, - 0x50, 0x97, 0xcd, 0x08, 0x13, 0xb9, 0xa9, 0xc5, 0xec, 0xb0, 0x91, 0xad, 0x86, 0xde, 0xd3, 0x44, - 0x73, 0x44, 0xb2, 0xad, 0x86, 0x9f, 0x86, 0xba, 0xd1, 0x26, 0x42, 0x64, 0x1e, 0x48, 0x13, 0x27, - 0x0d, 0x24, 0x9b, 0x07, 0x71, 0xc6, 0xe9, 0x56, 0x07, 0x48, 0x1c, 0x7e, 0x78, 0xee, 0x50, 0x66, - 0x17, 0xc2, 0x08, 0xff, 0x56, 0x07, 0x48, 0x91, 0x14, 0x26, 0xb6, 0x1e, 0x7c, 0x61, 0x1f, 0xb9, - 0xc2, 0x97, 0xa5, 0x30, 0x05, 0x17, 0xfe, 0xb2, 0x14, 0x66, 0x4a, 0x8d, 0x00, 0xb6, 0x16, 0x7e, - 0x81, 0x40, 0x21, 0x8b, 0xed, 0x85, 0x10, 0x64, 0xd6, 0x22, 0xbd, 0xc1, 0xc7, 0x67, 0x44, 0xd9, - 0xf5, 0xfd, 0x35, 0xd9, 0xb6, 0x2b, 0x44, 0x93, 0x9d, 0x11, 0x33, 0xdc, 0xac, 0x93, 0xb0, 0x5d, - 0x7e, 0xad, 0x7e, 0xb3, 0x2d, 0x1b, 0x08, 0xf3, 0xf6, 0x72, 0xa7, 0x98, 0x8c, 0xbd, 0x2f, 0xc3, - 0x38, 0xbe, 0x20, 0x8e, 0x04, 0x93, 0x92, 0x5d, 0x86, 0x7f, 0xa7, 0x2c, 0xdb, 0x65, 0xe4, 0xb7, - 0xd0, 0x78, 0xd6, 0x88, 0x59, 0x73, 0x6f, 0xfb, 0x64, 0xb3, 0x26, 0xb9, 0xe6, 0x95, 0xcd, 0x5a, - 0x86, 0xdb, 0x61, 0x3f, 0xc8, 0x25, 0xb7, 0xac, 0x81, 0x5f, 0x96, 0x05, 0xb9, 0xd1, 0x7b, 0x59, - 0x59, 0x90, 0xcb, 0xbf, 0xc1, 0xc5, 0x3a, 0x20, 0xf3, 0xb2, 0x3f, 0x3a, 0x48, 0xb7, 0xdc, 0x0c, - 0x37, 0xab, 0x38, 0xbb, 0xc1, 0xe1, 0x2a, 0x72, 0xf5, 0x28, 0xcb, 0x6e, 0xa4, 0x5d, 0x58, 0xca, - 0xb2, 0x1b, 0x59, 0x2f, 0x3b, 0x55, 0x13, 0xc6, 0x49, 0x4b, 0xf8, 0xba, 0xf3, 0x8c, 0x98, 0x70, - 0x08, 0x2c, 0x7f, 0x29, 0x13, 0x18, 0x1b, 0xea, 0xef, 0x15, 0xb8, 0x48, 0xc6, 0xca, 0x78, 0x39, - 0x29, 0x8b, 0x72, 0x33, 0x51, 0xc8, 0xbf, 0xf2, 0x49, 0x29, 0x84, 0x83, 0x29, 0xce, 0x4d, 0xe1, - 0xc5, 0xb4, 0x7c, 0x44, 0x18, 0x5a, 0x16, 0x4c, 0x89, 0x2f, 0x09, 0xf3, 0x3d, 0x5f, 0xf9, 0xf8, - 0xfd, 0x79, 0x65, 0x79, 0xe7, 0x47, 0x1f, 0xce, 0x28, 0x1f, 0x7c, 0x38, 0xa3, 0xfc, 0xf4, 0xc3, - 0x19, 0xe5, 0x9b, 0x1f, 0xcd, 0x1c, 0xfa, 0xe0, 0xa3, 0x99, 0x43, 0xff, 0xfe, 0xd1, 0xcc, 0xa1, - 0xb7, 0x1f, 0x87, 0x0a, 0xfa, 0x1f, 0x04, 0x03, 0x3c, 0xd4, 0x37, 0xdd, 0x02, 0x1b, 0xee, 0x92, - 0x61, 0x3b, 0x28, 0xfc, 0xb9, 0xad, 0x9b, 0x56, 0xa1, 0x6e, 0xfb, 0x22, 0xba, 0xad, 0xbf, 0x66, - 0x88, 0x8b, 0xff, 0x0b, 0xbb, 0x8b, 0x9b, 0xbd, 0xf8, 0x2f, 0x12, 0xbe, 0xf8, 0x7f, 0x01, 0x00, - 0x00, 0xff, 0xff, 0xc3, 0x40, 0x50, 0x62, 0x31, 0x72, 0x00, 0x00, + 0xc5, 0x7b, 0x9b, 0xb0, 0x9f, 0x49, 0xfd, 0xbe, 0x82, 0x0f, 0x9b, 0x99, 0x1f, 0xd0, 0xbe, 0x9e, + 0x10, 0xb6, 0x90, 0x5a, 0xfd, 0x4a, 0x48, 0x72, 0x64, 0x7c, 0x49, 0x20, 0x63, 0xe4, 0x68, 0x98, + 0x78, 0xec, 0x49, 0x8e, 0x86, 0xc2, 0x57, 0x9e, 0x3f, 0x20, 0xe7, 0x83, 0xf6, 0x9e, 0x77, 0xae, + 0x27, 0xc4, 0x7a, 0x49, 0x94, 0xa0, 0xe6, 0xd1, 0xe5, 0xc8, 0x96, 0xa9, 0x48, 0x99, 0xff, 0x88, + 0x8c, 0x9c, 0x1b, 0xe4, 0xaf, 0xc7, 0xa8, 0xb5, 0xb6, 0xff, 0x42, 0x24, 0xbb, 0xb5, 0x0a, 0x69, + 0x77, 0x6a, 0xad, 0xe2, 0x9a, 0x73, 0x62, 0xad, 0xe9, 0xc5, 0xe6, 0xc1, 0x1a, 0x6d, 0xfb, 0xb1, + 0x5c, 0x1b, 0x6b, 0x54, 0x44, 0xbb, 0xe3, 0x35, 0x2a, 0x7c, 0x1b, 0x44, 0xd7, 0x68, 0xea, 0xa3, + 0xa0, 0x1f, 0x2a, 0xb8, 0x26, 0x91, 0x64, 0xe2, 0xec, 0x7a, 0xbd, 0x69, 0x99, 0xde, 0xde, 0xba, + 0x6d, 0xd7, 0x36, 0x1a, 0xc8, 0xaa, 0x08, 0x65, 0x2e, 0x25, 0x64, 0xbe, 0x26, 0xf3, 0x4b, 0x49, + 0xca, 0x1c, 0x89, 0x33, 0xbd, 0xd2, 0x16, 0x90, 0xa3, 0xaf, 0xb4, 0x05, 0xbd, 0xf1, 0xf5, 0xdb, + 0x5a, 0xdf, 0xf8, 0x57, 0x40, 0xc8, 0x3e, 0xb9, 0x0f, 0xeb, 0x97, 0x4b, 0xb7, 0xd3, 0xf5, 0xcb, + 0x25, 0x46, 0xd7, 0x2f, 0xb7, 0x8f, 0x49, 0xf9, 0xaf, 0x24, 0x21, 0x1c, 0xbf, 0x4c, 0xc9, 0x22, + 0xeb, 0xff, 0x4f, 0xc8, 0x5a, 0xcc, 0x78, 0x55, 0x23, 0x97, 0xf8, 0x8e, 0x40, 0xe2, 0x73, 0xd1, + 0xd3, 0xa3, 0x90, 0xa4, 0x76, 0x1e, 0x27, 0x8c, 0x25, 0x10, 0x4c, 0xfa, 0x9f, 0xd0, 0xb2, 0xd2, + 0xa4, 0xe9, 0x67, 0x51, 0xc0, 0xdb, 0x09, 0x05, 0xdc, 0xca, 0xbe, 0x98, 0xe5, 0x3a, 0x58, 0x16, + 0xe8, 0x60, 0x3e, 0x65, 0x45, 0x87, 0xd5, 0x40, 0xa2, 0x3b, 0x39, 0x10, 0xd3, 0xc4, 0x3f, 0x29, + 0x38, 0x51, 0x41, 0x00, 0x56, 0x6d, 0xc7, 0x40, 0x95, 0x0d, 0x16, 0xaa, 0x0a, 0x35, 0xf0, 0x28, + 0xa1, 0x81, 0xab, 0xd2, 0xd8, 0x35, 0x4e, 0x98, 0x23, 0x79, 0x51, 0x20, 0x79, 0x24, 0x77, 0xc0, + 0xa7, 0x46, 0x73, 0x07, 0xfc, 0xce, 0xb8, 0xc5, 0x3f, 0x76, 0xf4, 0x8a, 0x69, 0xd1, 0xd3, 0xe6, + 0x5d, 0xbd, 0xde, 0xd0, 0xcd, 0xaa, 0x95, 0xe2, 0xbd, 0xb3, 0x5b, 0xbc, 0x84, 0x7a, 0xa7, 0x16, + 0x2f, 0x21, 0x49, 0x2d, 0x5e, 0x02, 0xc1, 0xa4, 0xff, 0x0e, 0x49, 0xd5, 0x06, 0xb1, 0xd8, 0x3d, + 0x4b, 0xdf, 0xac, 0x89, 0x2d, 0xfc, 0x7e, 0x42, 0xe0, 0x4b, 0xc2, 0x4d, 0x3a, 0x4c, 0x90, 0x23, + 0xe3, 0xa2, 0x40, 0xc6, 0x7c, 0x74, 0x67, 0x0e, 0x53, 0xa1, 0xf9, 0xd7, 0x68, 0x63, 0xa6, 0x79, + 0xdc, 0x37, 0xcf, 0x25, 0xa1, 0xbe, 0xaf, 0xf3, 0x18, 0xf1, 0x5c, 0x12, 0x88, 0xd6, 0x6f, 0x88, + 0x90, 0x47, 0x27, 0x11, 0xd0, 0x75, 0x64, 0xf9, 0x1f, 0xeb, 0xb6, 0x69, 0x79, 0x6e, 0x8a, 0x0a, + 0x7e, 0x2d, 0xa1, 0x82, 0x3b, 0x59, 0x54, 0xc0, 0x19, 0x82, 0xa3, 0x87, 0x4c, 0x0f, 0x00, 0xd3, + 0xe8, 0xd2, 0x07, 0x80, 0x69, 0x60, 0x4c, 0x23, 0x7f, 0xa8, 0xc0, 0xc8, 0x9a, 0x5b, 0x5d, 0x45, + 0x68, 0xc5, 0x74, 0x71, 0x5a, 0x47, 0x28, 0xfc, 0x6a, 0x42, 0xf8, 0x79, 0x81, 0xf0, 0x21, 0x6a, + 0x1c, 0x39, 0x0b, 0x02, 0x39, 0xa7, 0xc2, 0x72, 0x86, 0x48, 0x68, 0x39, 0x38, 0x1a, 0x6d, 0x61, + 0xdc, 0xff, 0x37, 0xa9, 0xa1, 0x58, 0xf2, 0xec, 0xba, 0x69, 0x84, 0x0a, 0x1a, 0x56, 0x11, 0x5a, + 0x6b, 0xd6, 0x3c, 0xb3, 0x51, 0x33, 0x91, 0xb3, 0x61, 0x6c, 0xa3, 0x4a, 0x53, 0xb2, 0x5e, 0xf5, + 0x84, 0x60, 0xf7, 0x04, 0x82, 0x65, 0x1b, 0x88, 0x23, 0xf3, 0x6b, 0x02, 0x99, 0x17, 0x23, 0xe7, + 0xde, 0x4c, 0xd4, 0xb5, 0x17, 0xe1, 0x4a, 0x66, 0x60, 0xa6, 0xa9, 0x32, 0x3e, 0xbb, 0x93, 0x9b, + 0xe0, 0x75, 0xdb, 0xf5, 0x1e, 0x5a, 0xb5, 0xbd, 0x35, 0xbb, 0x22, 0x54, 0x8a, 0xfc, 0x84, 0x9e, + 0xa4, 0x43, 0x4f, 0xe8, 0xc9, 0x0e, 0xc6, 0xc1, 0x33, 0x9a, 0x09, 0xa1, 0x67, 0xf8, 0x2c, 0x4c, + 0xe0, 0x9f, 0x28, 0xaa, 0xd9, 0xc6, 0x8e, 0x5b, 0xa6, 0xe9, 0xf4, 0xc3, 0xf4, 0x27, 0x8a, 0x70, + 0xe3, 0x12, 0xc9, 0x97, 0xcb, 0x73, 0x1d, 0x9c, 0xe1, 0x82, 0x5c, 0x07, 0xa7, 0x2b, 0xe0, 0x76, + 0xf1, 0xdb, 0x37, 0xa0, 0x6b, 0xcd, 0xad, 0xaa, 0x6f, 0x41, 0x5f, 0xf0, 0x8b, 0x75, 0xa7, 0xc4, + 0x29, 0x3b, 0x0a, 0x92, 0xbf, 0x90, 0x0a, 0xc2, 0xd2, 0xd2, 0xef, 0x40, 0x3f, 0xfb, 0x09, 0x39, + 0x49, 0x32, 0x30, 0x80, 0xc9, 0xcf, 0xa7, 0xc3, 0x30, 0xda, 0x5f, 0x57, 0x60, 0x4a, 0xf4, 0xdb, + 0x5a, 0x57, 0xc4, 0x74, 0x04, 0x28, 0xf9, 0x1b, 0x6d, 0xa3, 0x30, 0x4e, 0x7e, 0x57, 0x81, 0xe3, + 0xd2, 0x5f, 0x6c, 0xba, 0x96, 0x4a, 0x9b, 0x8b, 0x97, 0xbf, 0xdd, 0x19, 0x1e, 0x63, 0xec, 0x8f, + 0x14, 0x38, 0x99, 0xfa, 0x3b, 0x0d, 0xc5, 0xd4, 0x41, 0x84, 0xb8, 0xf9, 0xe5, 0xce, 0x71, 0x19, + 0x93, 0xbf, 0x0e, 0x93, 0xdc, 0xdf, 0xe6, 0x5b, 0x10, 0xd3, 0xe6, 0xc1, 0xe7, 0xaf, 0xb5, 0x07, + 0xcf, 0xc6, 0xff, 0xa6, 0x02, 0x79, 0xc9, 0x4f, 0xe2, 0xbd, 0x24, 0x26, 0x2b, 0xc6, 0xca, 0x7f, + 0xae, 0x13, 0x2c, 0xc6, 0xd2, 0x57, 0x15, 0x38, 0xc2, 0x7f, 0xad, 0x5e, 0xc8, 0x22, 0x64, 0x08, + 0x21, 0xff, 0x72, 0x9b, 0x08, 0x8c, 0x07, 0x1b, 0x46, 0xe3, 0x6f, 0x26, 0x25, 0x0b, 0x3f, 0x06, + 0x9a, 0xbf, 0x92, 0x19, 0x34, 0x22, 0x34, 0xff, 0xd1, 0x62, 0x21, 0x4d, 0x99, 0x31, 0x04, 0x99, + 0xd0, 0xf2, 0xf7, 0x86, 0x4d, 0x18, 0x4f, 0x3e, 0x9e, 0x7b, 0x21, 0x85, 0x5a, 0x18, 0x38, 0xff, + 0x62, 0x1b, 0xc0, 0x6c, 0xd8, 0xdf, 0x56, 0xe0, 0x98, 0xf8, 0xc2, 0x52, 0x42, 0x52, 0x88, 0x94, + 0xbf, 0xd9, 0x01, 0x52, 0x64, 0x49, 0x48, 0x1e, 0xbe, 0xbf, 0x94, 0x66, 0x53, 0x3c, 0x2c, 0xd9, + 0x92, 0xc8, 0xf0, 0x56, 0xdd, 0x77, 0x65, 0xa9, 0xcf, 0xa8, 0x8b, 0x99, 0x56, 0x1d, 0x17, 0x57, + 0xe6, 0xca, 0x32, 0x3f, 0x7b, 0xfe, 0x1d, 0x05, 0xa6, 0x65, 0x15, 0xe9, 0x57, 0xb3, 0xab, 0x20, + 0xbc, 0x86, 0x6f, 0x75, 0x84, 0x16, 0xf5, 0x26, 0xdc, 0x12, 0xd6, 0x42, 0xda, 0x2a, 0x8d, 0x21, + 0x48, 0xbd, 0x89, 0xac, 0x4e, 0x14, 0x6b, 0x46, 0x56, 0x59, 0x78, 0x35, 0xd3, 0x8a, 0x8d, 0xa3, + 0xc9, 0x34, 0x93, 0xa5, 0x28, 0x30, 0xb4, 0x3f, 0x8a, 0xf3, 0xb5, 0xe9, 0xfb, 0xa3, 0x10, 0x37, + 0xc3, 0xfe, 0x98, 0x9a, 0x5a, 0x55, 0x7f, 0x4f, 0x81, 0x13, 0xf2, 0xdf, 0x59, 0x48, 0xf5, 0xf1, + 0x02, 0xc4, 0xfc, 0x9d, 0x0e, 0x11, 0x19, 0x6f, 0xbf, 0xaf, 0xc0, 0x4c, 0x4a, 0x75, 0xfa, 0xf5, + 0xb6, 0xc6, 0x08, 0x9b, 0xfd, 0x2b, 0x9d, 0x62, 0x32, 0xf6, 0xbe, 0xa1, 0x40, 0x4e, 0x58, 0x9a, + 0xbc, 0x98, 0x66, 0xcb, 0x49, 0x9c, 0x7c, 0xb1, 0x7d, 0x9c, 0x88, 0xae, 0x52, 0x1e, 0xa9, 0x5f, + 0xcf, 0x64, 0xce, 0x1c, 0x4c, 0x99, 0xae, 0x32, 0xbe, 0x2f, 0x7f, 0x0a, 0x2a, 0xa7, 0xf0, 0xf5, + 0xa2, 0xe4, 0x06, 0x3f, 0x01, 0x9d, 0x7f, 0xa9, 0x1d, 0x68, 0x36, 0xb2, 0x03, 0x63, 0x89, 0x42, + 0x52, 0xc9, 0x41, 0x20, 0x0e, 0x9b, 0x5f, 0xcc, 0x0e, 0x1b, 0xde, 0xe8, 0x93, 0x85, 0x99, 0x92, + 0x8d, 0x3e, 0x01, 0x2c, 0xdb, 0xe8, 0x85, 0xd5, 0x90, 0xd8, 0x15, 0xf3, 0xab, 0x02, 0x25, 0xae, + 0x98, 0x8b, 0x20, 0x73, 0xc5, 0xd2, 0x72, 0x3e, 0xb5, 0x06, 0x23, 0xb1, 0x6a, 0xcc, 0xf3, 0x62, + 0x52, 0x51, 0xc8, 0xfc, 0xe5, 0xac, 0x90, 0x6c, 0xb4, 0xdf, 0x50, 0xe0, 0xa8, 0xa0, 0x72, 0xf0, + 0xb2, 0xcc, 0x39, 0xf2, 0x30, 0xf2, 0xd7, 0xdb, 0xc5, 0x88, 0xb0, 0x21, 0xa8, 0xb4, 0xbb, 0x2c, + 0x3b, 0xce, 0xb6, 0xcb, 0x86, 0xbc, 0x38, 0x4d, 0x35, 0x61, 0x38, 0x5a, 0x22, 0x75, 0x4e, 0x4c, + 0x2a, 0x02, 0x98, 0x2f, 0x64, 0x04, 0x8c, 0xb8, 0x9b, 0x94, 0x3a, 0x1a, 0x89, 0x1c, 0x72, 0x4c, + 0x99, 0xbb, 0xc9, 0x56, 0x32, 0xa2, 0x6e, 0xc1, 0x50, 0xe4, 0x57, 0xff, 0xcf, 0x8a, 0x29, 0x86, + 0xe1, 0xf2, 0x0b, 0xd9, 0xe0, 0xc2, 0xce, 0x25, 0xf1, 0xe7, 0x57, 0xe6, 0xd3, 0x68, 0xb4, 0x60, + 0x65, 0xce, 0x45, 0xf4, 0x17, 0x43, 0xb0, 0xb1, 0x09, 0xfe, 0x5c, 0xc8, 0xe5, 0x34, 0x72, 0x71, + 0x0c, 0x99, 0xb1, 0xc9, 0xff, 0xb8, 0x82, 0x7f, 0xb0, 0xe6, 0x56, 0xe4, 0x48, 0x54, 0xc8, 0x83, + 0x97, 0x1d, 0xac, 0x65, 0x95, 0x34, 0xfe, 0x8e, 0xc2, 0x29, 0xa3, 0x91, 0xec, 0x28, 0x49, 0x68, + 0xd9, 0x8e, 0x22, 0xae, 0x93, 0xc1, 0xe7, 0x29, 0x71, 0x91, 0x4c, 0xda, 0x11, 0x8d, 0x87, 0x24, + 0x3b, 0x4f, 0xa5, 0x56, 0xb0, 0xf8, 0x46, 0x48, 0x82, 0xba, 0x6c, 0x46, 0x98, 0xc8, 0x4d, 0x2d, + 0x66, 0x87, 0x8d, 0x6c, 0x35, 0xf4, 0x56, 0x29, 0x9a, 0x23, 0x92, 0x6d, 0x35, 0xfc, 0x34, 0xd4, + 0xcb, 0x6d, 0x22, 0x44, 0xe6, 0x81, 0x34, 0x71, 0xd2, 0x40, 0xb2, 0x79, 0x10, 0x67, 0x9c, 0x6e, + 0x76, 0x80, 0xc4, 0xe1, 0x87, 0xe7, 0x0e, 0x65, 0x76, 0x21, 0x8c, 0xf0, 0x6f, 0x76, 0x80, 0x14, + 0x49, 0x61, 0x62, 0xeb, 0xc1, 0xe5, 0x05, 0x91, 0x82, 0x03, 0x59, 0x0a, 0x53, 0x50, 0x9e, 0x20, + 0x4b, 0x61, 0xa6, 0x54, 0x34, 0x60, 0x6b, 0xe1, 0x97, 0x33, 0x14, 0xb2, 0xd8, 0x5e, 0x08, 0x41, + 0x66, 0x2d, 0xd2, 0x7a, 0x03, 0x7c, 0x46, 0x94, 0x15, 0x1b, 0x5c, 0x95, 0x6d, 0xbb, 0x42, 0x34, + 0xd9, 0x19, 0x31, 0x43, 0x1d, 0x00, 0x09, 0xdb, 0xe5, 0x45, 0x00, 0xd7, 0xdb, 0xb2, 0x81, 0x30, + 0x6f, 0xaf, 0x74, 0x8a, 0xc9, 0xd8, 0xfb, 0x32, 0x8c, 0xe3, 0xeb, 0xec, 0x48, 0x30, 0x29, 0xd9, + 0x65, 0xf8, 0x37, 0xe0, 0xb2, 0x5d, 0x46, 0x7e, 0x67, 0x8e, 0x67, 0x8d, 0x98, 0x35, 0xf7, 0x6e, + 0x52, 0x36, 0x6b, 0x92, 0x4b, 0x69, 0xd9, 0xac, 0x65, 0xb8, 0xcb, 0xf6, 0x83, 0x5c, 0x72, 0x27, + 0x1c, 0xf8, 0x65, 0x59, 0x90, 0x1b, 0xbd, 0x45, 0x96, 0x05, 0xb9, 0xfc, 0xfb, 0x66, 0xac, 0x03, + 0x32, 0x2f, 0xfb, 0xa3, 0x83, 0x74, 0xcb, 0xcd, 0x70, 0x0f, 0x8c, 0xb3, 0x1b, 0x1c, 0xae, 0x22, + 0x17, 0xa5, 0xb2, 0xec, 0x46, 0xda, 0xf5, 0xaa, 0x2c, 0xbb, 0x91, 0xf5, 0x6a, 0x56, 0x35, 0x61, + 0x9c, 0xb4, 0x84, 0x2f, 0x67, 0xcf, 0x88, 0x09, 0x87, 0xc0, 0xf2, 0x97, 0x32, 0x81, 0xb1, 0xa1, + 0xfe, 0x5e, 0x81, 0x8b, 0x64, 0xac, 0x8c, 0x57, 0xa9, 0xb2, 0x28, 0x37, 0x13, 0x85, 0xfc, 0xab, + 0x9f, 0x94, 0x42, 0x38, 0x98, 0xe2, 0xdc, 0x6b, 0x5e, 0x4c, 0xcb, 0x47, 0x84, 0xa1, 0x65, 0xc1, + 0x94, 0xf8, 0x4a, 0x13, 0x87, 0x91, 0xbc, 0xeb, 0xcc, 0x85, 0xf4, 0xd0, 0x2c, 0x32, 0xfa, 0xb5, + 0xf6, 0xe0, 0x83, 0xf1, 0xf3, 0x3d, 0x5f, 0xf9, 0xf8, 0xfd, 0x79, 0x65, 0x79, 0xe7, 0x47, 0x1f, + 0xce, 0x28, 0x1f, 0x7c, 0x38, 0xa3, 0xfc, 0xf4, 0xc3, 0x19, 0xe5, 0x9b, 0x1f, 0xcd, 0x1c, 0xfa, + 0xe0, 0xa3, 0x99, 0x43, 0xff, 0xfe, 0xd1, 0xcc, 0xa1, 0x77, 0x1e, 0x85, 0x9e, 0x3f, 0xdc, 0x0f, + 0x86, 0x78, 0xa0, 0x6f, 0xba, 0x05, 0x36, 0xe0, 0x25, 0xc3, 0x76, 0x50, 0xf8, 0x73, 0x5b, 0x37, + 0xad, 0x42, 0xdd, 0xf6, 0x55, 0xec, 0xb6, 0xfe, 0xf6, 0x23, 0x7e, 0x2a, 0x51, 0xd8, 0x5d, 0xdc, + 0xec, 0xc5, 0x7f, 0xbf, 0xf1, 0xc5, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xd4, 0x15, 0x51, 0x1e, + 0x5f, 0x73, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -5709,7 +5809,11 @@ type MsgClient interface { UpdateTradingRewardPendingPoints(ctx context.Context, in *MsgTradingRewardPendingPointsUpdate, opts ...grpc.CallOption) (*MsgTradingRewardPendingPointsUpdateResponse, error) UpdateFeeDiscount(ctx context.Context, in *MsgFeeDiscount, opts ...grpc.CallOption) (*MsgFeeDiscountResponse, error) UpdateAtomicMarketOrderFeeMultiplierSchedule(ctx context.Context, in *MsgAtomicMarketOrderFeeMultiplierSchedule, opts ...grpc.CallOption) (*MsgAtomicMarketOrderFeeMultiplierScheduleResponse, error) + // MsgCancelPostOnlyMode defines a message to turn off the post-only mode CancelPostOnlyMode(ctx context.Context, in *MsgCancelPostOnlyMode, opts ...grpc.CallOption) (*MsgCancelPostOnlyModeResponse, error) + // MsgActivatePostOnlyMode defines a message to turn on the post-only mode for + // a number of blocks + ActivatePostOnlyMode(ctx context.Context, in *MsgActivatePostOnlyMode, opts ...grpc.CallOption) (*MsgActivatePostOnlyModeResponse, error) } type msgClient struct { @@ -6197,6 +6301,15 @@ func (c *msgClient) CancelPostOnlyMode(ctx context.Context, in *MsgCancelPostOnl return out, nil } +func (c *msgClient) ActivatePostOnlyMode(ctx context.Context, in *MsgActivatePostOnlyMode, opts ...grpc.CallOption) (*MsgActivatePostOnlyModeResponse, error) { + out := new(MsgActivatePostOnlyModeResponse) + err := c.cc.Invoke(ctx, "/injective.exchange.v2.Msg/ActivatePostOnlyMode", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. type MsgServer interface { // Deposit defines a method for transferring coins from the sender's bank @@ -6305,7 +6418,11 @@ type MsgServer interface { UpdateTradingRewardPendingPoints(context.Context, *MsgTradingRewardPendingPointsUpdate) (*MsgTradingRewardPendingPointsUpdateResponse, error) UpdateFeeDiscount(context.Context, *MsgFeeDiscount) (*MsgFeeDiscountResponse, error) UpdateAtomicMarketOrderFeeMultiplierSchedule(context.Context, *MsgAtomicMarketOrderFeeMultiplierSchedule) (*MsgAtomicMarketOrderFeeMultiplierScheduleResponse, error) + // MsgCancelPostOnlyMode defines a message to turn off the post-only mode CancelPostOnlyMode(context.Context, *MsgCancelPostOnlyMode) (*MsgCancelPostOnlyModeResponse, error) + // MsgActivatePostOnlyMode defines a message to turn on the post-only mode for + // a number of blocks + ActivatePostOnlyMode(context.Context, *MsgActivatePostOnlyMode) (*MsgActivatePostOnlyModeResponse, error) } // UnimplementedMsgServer can be embedded to have forward compatible implementations. @@ -6471,6 +6588,9 @@ func (*UnimplementedMsgServer) UpdateAtomicMarketOrderFeeMultiplierSchedule(ctx func (*UnimplementedMsgServer) CancelPostOnlyMode(ctx context.Context, req *MsgCancelPostOnlyMode) (*MsgCancelPostOnlyModeResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CancelPostOnlyMode not implemented") } +func (*UnimplementedMsgServer) ActivatePostOnlyMode(ctx context.Context, req *MsgActivatePostOnlyMode) (*MsgActivatePostOnlyModeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ActivatePostOnlyMode not implemented") +} func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) @@ -7430,6 +7550,24 @@ func _Msg_CancelPostOnlyMode_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } +func _Msg_ActivatePostOnlyMode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgActivatePostOnlyMode) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ActivatePostOnlyMode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/injective.exchange.v2.Msg/ActivatePostOnlyMode", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ActivatePostOnlyMode(ctx, req.(*MsgActivatePostOnlyMode)) + } + return interceptor(ctx, in, info, handler) +} + var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "injective.exchange.v2.Msg", HandlerType: (*MsgServer)(nil), @@ -7646,6 +7784,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "CancelPostOnlyMode", Handler: _Msg_CancelPostOnlyMode_Handler, }, + { + MethodName: "ActivatePostOnlyMode", + Handler: _Msg_ActivatePostOnlyMode_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "injective/exchange/v2/tx.proto", @@ -12668,6 +12810,64 @@ func (m *MsgCancelPostOnlyModeResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } +func (m *MsgActivatePostOnlyMode) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgActivatePostOnlyMode) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgActivatePostOnlyMode) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.BlocksAmount != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.BlocksAmount)) + i-- + dAtA[i] = 0x10 + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintTx(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgActivatePostOnlyModeResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgActivatePostOnlyModeResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgActivatePostOnlyModeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func encodeVarintTx(dAtA []byte, offset int, v uint64) int { offset -= sovTx(v) base := offset @@ -14755,6 +14955,31 @@ func (m *MsgCancelPostOnlyModeResponse) Size() (n int) { return n } +func (m *MsgActivatePostOnlyMode) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.BlocksAmount != 0 { + n += 1 + sovTx(uint64(m.BlocksAmount)) + } + return n +} + +func (m *MsgActivatePostOnlyModeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func sovTx(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -29539,6 +29764,157 @@ func (m *MsgCancelPostOnlyModeResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgActivatePostOnlyMode) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgActivatePostOnlyMode: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgActivatePostOnlyMode: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BlocksAmount", wireType) + } + m.BlocksAmount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.BlocksAmount |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgActivatePostOnlyModeResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgActivatePostOnlyModeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgActivatePostOnlyModeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipTx(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/chain/exchange/types/wasm_trade_summary.go b/chain/exchange/types/wasm_trade_summary.go index c5057bb5..c2a122e7 100644 --- a/chain/exchange/types/wasm_trade_summary.go +++ b/chain/exchange/types/wasm_trade_summary.go @@ -4,124 +4,113 @@ import ( "bytes" "sort" - "cosmossdk.io/math" + "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/ethereum/go-ethereum/common" ) -type MarketSummary struct { - TotalUserQuantity math.LegacyDec - TotalContractQuantity math.LegacyDec - TotalUserMargin math.LegacyDec - TotalContractMargin math.LegacyDec - netQuantity math.LegacyDec -} - -func NewMarketSummary() *MarketSummary { - return &MarketSummary{ - TotalUserQuantity: math.LegacyZeroDec(), - TotalContractQuantity: math.LegacyZeroDec(), - TotalUserMargin: math.LegacyZeroDec(), - TotalContractMargin: math.LegacyZeroDec(), - netQuantity: math.LegacyZeroDec(), - } -} - -func NewSyntheticTradeActionSummary() *SyntheticTradeActionSummary { - return &SyntheticTradeActionSummary{ - MarketSummary: make(map[common.Hash]*MarketSummary), - MarketIDs: make([]common.Hash, 0), - ContractAddress: sdk.AccAddress{}, - UserAddress: sdk.AccAddress{}, - } -} - type SyntheticTradeActionSummary struct { - MarketSummary map[common.Hash]*MarketSummary - MarketIDs []common.Hash + Markets map[common.Hash]bool ContractAddress sdk.Address UserAddress sdk.Address } func (s *SyntheticTradeActionSummary) GetMarketIDs() []common.Hash { - marketIDs := make([]common.Hash, 0, len(s.MarketSummary)) - for marketID := range s.MarketSummary { + marketIDs := make([]common.Hash, 0, len(s.Markets)) + + for marketID := range s.Markets { marketIDs = append(marketIDs, marketID) } sort.SliceStable(marketIDs, func(i, j int) bool { return bytes.Compare(marketIDs[i].Bytes(), marketIDs[j].Bytes()) < 0 }) - s.MarketIDs = marketIDs + return marketIDs } func (s *SyntheticTradeActionSummary) Update(t *SyntheticTrade, isForUser bool) error { - if _, ok := s.MarketSummary[t.MarketID]; !ok { - s.MarketSummary[t.MarketID] = NewMarketSummary() + if _, ok := s.Markets[t.MarketID]; !ok { + s.Markets[t.MarketID] = true } - summary := s.MarketSummary[t.MarketID] address := SubaccountIDToSdkAddress(t.SubaccountID) - if isForUser && s.UserAddress.Empty() { - s.UserAddress = address + if (isForUser && !address.Equals(s.UserAddress)) || (!isForUser && !address.Equals(s.ContractAddress)) { + return ErrBadSubaccountID } - if !isForUser && s.ContractAddress.Empty() { - s.ContractAddress = address - } + return nil +} - if (isForUser && !s.UserAddress.Equals(address)) || (!isForUser && !s.ContractAddress.Equals(address)) { - return ErrBadSubaccountID +func (a *SyntheticTradeAction) Summarize() (*SyntheticTradeActionSummary, error) { + if err := a.validateTrades(); err != nil { + return nil, err } - if t.IsBuy { - summary.netQuantity = summary.netQuantity.Add(t.Quantity) - } else { - summary.netQuantity = summary.netQuantity.Sub(t.Quantity) + summary := a.initSummary() + + if err := a.updateSummary(&summary); err != nil { + return nil, err } - if isForUser { - summary.TotalUserQuantity = summary.TotalUserQuantity.Add(t.Quantity) - summary.TotalUserMargin = summary.TotalUserMargin.Add(t.Margin) - } else { - summary.TotalContractQuantity = summary.TotalContractQuantity.Add(t.Quantity) - summary.TotalContractMargin = summary.TotalContractMargin.Add(t.Margin) + return &summary, nil +} + +func (a *SyntheticTradeAction) initSummary() SyntheticTradeActionSummary { + return SyntheticTradeActionSummary{ + Markets: make(map[common.Hash]bool), + ContractAddress: SubaccountIDToSdkAddress(a.ContractTrades[0].SubaccountID), + UserAddress: SubaccountIDToSdkAddress(a.UserTrades[0].SubaccountID), } - return nil } -// IsValid checks that all the net quantities are zero -func (s *SyntheticTradeActionSummary) IsValid() bool { - for _, v := range s.MarketSummary { - if !v.netQuantity.IsZero() { - return false +func (a *SyntheticTradeAction) validateTrades() error { + if len(a.UserTrades) == 0 || len(a.ContractTrades) == 0 { + return errors.Wrapf(ErrInvalidTrade, "no trades in action") + } + + if len(a.UserTrades) != len(a.ContractTrades) { + return errors.Wrapf( + ErrInvalidTrade, + "mismatched user and contract trades: %d vs %d", + len(a.UserTrades), + len(a.ContractTrades), + ) + } + + for i, userTrade := range a.UserTrades { + contractTrade := a.ContractTrades[i] + + if userTrade.MarketID != contractTrade.MarketID { + return errors.Wrapf(ErrInvalidTrade, "mismatched user and contract trade at index %d", i) + } + if userTrade.IsBuy == contractTrade.IsBuy { + return errors.Wrapf(ErrInvalidTrade, "mismatched user and contract trade at index %d", i) + } + if !userTrade.Quantity.Equal(contractTrade.Quantity) { + return errors.Wrapf(ErrInvalidTrade, "mismatched user and contract trade at index %d", i) + } + if !userTrade.Price.Equal(contractTrade.Price) { + return errors.Wrapf(ErrInvalidTrade, "mismatched user and contract trade at index %d", i) } } - return true -} -func (a *SyntheticTradeAction) Summarize() (*SyntheticTradeActionSummary, error) { - summary := NewSyntheticTradeActionSummary() + return nil +} +func (a *SyntheticTradeAction) updateSummary(summary *SyntheticTradeActionSummary) error { for _, t := range a.UserTrades { if err := summary.Update(t, true); err != nil { - return nil, err + return err } } for _, t := range a.ContractTrades { if err := summary.Update(t, false); err != nil { - return nil, err + return err } } - // ensure that sum(buy quantity) == sum(sell quantity) for all markets - if !summary.IsValid() { - return nil, ErrInvalidQuantity - } - - summary.GetMarketIDs() - return summary, nil + return nil } diff --git a/chain/exchange/types/wasm_trades.go b/chain/exchange/types/wasm_trades.go index ee6912e1..4a3fd8b8 100644 --- a/chain/exchange/types/wasm_trades.go +++ b/chain/exchange/types/wasm_trades.go @@ -67,10 +67,13 @@ func (t *SyntheticTrade) Validate() error { return ErrInvalidPrice } - // Margin can be 0 or even negative! - if t.Margin.IsNil() { + if t.Margin.IsNil() || t.Margin.IsNegative() { return ErrInvalidMargin } return nil } + +func (t *SyntheticTrade) IsReduceOnly() bool { + return t.Margin.IsZero() +} diff --git a/chain/oracle/types/codec.go b/chain/oracle/types/codec.go index bcdcebe3..14457332 100644 --- a/chain/oracle/types/codec.go +++ b/chain/oracle/types/codec.go @@ -16,34 +16,32 @@ import ( // on the provided LegacyAmino codec. These types are used for Amino JSON serialization. func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgRelayPriceFeedPrice{}, "oracle/MsgRelayPriceFeedPrice", nil) - cdc.RegisterConcrete(&MsgRelayBandRates{}, "oracle/MsgRelayBandRates", nil) cdc.RegisterConcrete(&MsgRelayCoinbaseMessages{}, "oracle/MsgRelayCoinbaseMessages", nil) - cdc.RegisterConcrete(&MsgRequestBandIBCRates{}, "oracle/MsgRequestBandIBCRates", nil) cdc.RegisterConcrete(&MsgRelayProviderPrices{}, "oracle/MsgRelayProviderPrices", nil) cdc.RegisterConcrete(&MsgRelayPythPrices{}, "oracle/MsgRelayPythPrices", nil) cdc.RegisterConcrete(&MsgRelayStorkPrices{}, "oracle/MsgRelayStorkPrices", nil) cdc.RegisterConcrete(&MsgUpdateParams{}, "oracle/MsgUpdateParams", nil) - cdc.RegisterConcrete(&GrantBandOraclePrivilegeProposal{}, "oracle/GrantBandOraclePrivilegeProposal", nil) - cdc.RegisterConcrete(&RevokeBandOraclePrivilegeProposal{}, "oracle/RevokeBandOraclePrivilegeProposal", nil) cdc.RegisterConcrete(&GrantPriceFeederPrivilegeProposal{}, "oracle/GrantPriceFeederPrivilegeProposal", nil) cdc.RegisterConcrete(&RevokePriceFeederPrivilegeProposal{}, "oracle/RevokePriceFeederPrivilegeProposal", nil) - cdc.RegisterConcrete(&AuthorizeBandOracleRequestProposal{}, "oracle/AuthorizeBandOracleRequestProposal", nil) - cdc.RegisterConcrete(&UpdateBandOracleRequestProposal{}, "oracle/UpdateBandOracleRequestProposal", nil) - cdc.RegisterConcrete(&EnableBandIBCProposal{}, "oracle/EnableBandIBCProposal", nil) cdc.RegisterConcrete(&GrantProviderPrivilegeProposal{}, "oracle/GrantProviderPrivilegeProposal", nil) cdc.RegisterConcrete(&RevokeProviderPrivilegeProposal{}, "oracle/RevokeProviderPrivilegeProposal", nil) cdc.RegisterConcrete(&GrantStorkPublisherPrivilegeProposal{}, "oracle/GrantStorkPublisherPrivilegeProposal", nil) cdc.RegisterConcrete(&RevokeStorkPublisherPrivilegeProposal{}, "oracle/RevokeStorkPublisherPrivilegeProposal", nil) cdc.RegisterConcrete(&Params{}, "oracle/Params", nil) + + // Deprecated: Band oracle proposal types kept for backward compatibility + cdc.RegisterConcrete(&GrantBandOraclePrivilegeProposal{}, "oracle/GrantBandOraclePrivilegeProposal", nil) //nolint:staticcheck // deprecated + cdc.RegisterConcrete(&RevokeBandOraclePrivilegeProposal{}, "oracle/RevokeBandOraclePrivilegeProposal", nil) //nolint:staticcheck // deprecated + cdc.RegisterConcrete(&AuthorizeBandOracleRequestProposal{}, "oracle/AuthorizeBandOracleRequestProposal", nil) //nolint:staticcheck // deprecated + cdc.RegisterConcrete(&UpdateBandOracleRequestProposal{}, "oracle/UpdateBandOracleRequestProposal", nil) //nolint:staticcheck // deprecated + cdc.RegisterConcrete(&EnableBandIBCProposal{}, "oracle/EnableBandIBCProposal", nil) //nolint:staticcheck // deprecated } func RegisterInterfaces(registry types.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), &MsgRelayPriceFeedPrice{}, - &MsgRelayBandRates{}, &MsgRelayCoinbaseMessages{}, - &MsgRequestBandIBCRates{}, &MsgRelayProviderPrices{}, &MsgRelayPythPrices{}, &MsgRelayStorkPrices{}, @@ -51,17 +49,18 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { ) registry.RegisterImplementations((*govtypes.Content)(nil), - &GrantBandOraclePrivilegeProposal{}, - &RevokeBandOraclePrivilegeProposal{}, &GrantPriceFeederPrivilegeProposal{}, &RevokePriceFeederPrivilegeProposal{}, - &AuthorizeBandOracleRequestProposal{}, - &UpdateBandOracleRequestProposal{}, - &EnableBandIBCProposal{}, &GrantProviderPrivilegeProposal{}, &RevokeProviderPrivilegeProposal{}, &GrantStorkPublisherPrivilegeProposal{}, &RevokeStorkPublisherPrivilegeProposal{}, + // Deprecated: Band oracle proposal types kept for backward compatibility + &GrantBandOraclePrivilegeProposal{}, //nolint:staticcheck // deprecated + &RevokeBandOraclePrivilegeProposal{}, //nolint:staticcheck // deprecated + &AuthorizeBandOracleRequestProposal{}, //nolint:staticcheck // deprecated + &UpdateBandOracleRequestProposal{}, //nolint:staticcheck // deprecated + &EnableBandIBCProposal{}, //nolint:staticcheck // deprecated ) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) diff --git a/chain/oracle/types/errors.go b/chain/oracle/types/errors.go index 87bb055b..1492790d 100644 --- a/chain/oracle/types/errors.go +++ b/chain/oracle/types/errors.go @@ -48,4 +48,6 @@ var ( ErrEmptyStorkSender = errors.Register(ModuleName, 41, "sender stork is empty") ErrInvalidStorkSignature = errors.Register(ModuleName, 42, "invalid stork signature") ErrStorkAssetIdNotUnique = errors.Register(ModuleName, 43, "stork asset id not unique") + ErrChainlinkVerificationFailed = errors.Register(ModuleName, 44, "chainlink report verification failed") + ErrBandOracleDeprecated = errors.Register(ModuleName, 45, "Band oracle is deprecated and no longer supported") ) diff --git a/chain/oracle/types/events.pb.go b/chain/oracle/types/events.pb.go index 7aeda9c2..e8c3cda5 100644 --- a/chain/oracle/types/events.pb.go +++ b/chain/oracle/types/events.pb.go @@ -637,6 +637,50 @@ func (m *EventSetPythPrices) GetPrices() []*PythPriceState { return nil } +type EventSetChainlinkDataStreamsPrices struct { + Prices []*ChainlinkDataStreamsPriceState `protobuf:"bytes,1,rep,name=prices,proto3" json:"prices,omitempty"` +} + +func (m *EventSetChainlinkDataStreamsPrices) Reset() { *m = EventSetChainlinkDataStreamsPrices{} } +func (m *EventSetChainlinkDataStreamsPrices) String() string { return proto.CompactTextString(m) } +func (*EventSetChainlinkDataStreamsPrices) ProtoMessage() {} +func (*EventSetChainlinkDataStreamsPrices) Descriptor() ([]byte, []int) { + return fileDescriptor_c42b07097291dfa0, []int{11} +} +func (m *EventSetChainlinkDataStreamsPrices) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventSetChainlinkDataStreamsPrices) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EventSetChainlinkDataStreamsPrices.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *EventSetChainlinkDataStreamsPrices) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventSetChainlinkDataStreamsPrices.Merge(m, src) +} +func (m *EventSetChainlinkDataStreamsPrices) XXX_Size() int { + return m.Size() +} +func (m *EventSetChainlinkDataStreamsPrices) XXX_DiscardUnknown() { + xxx_messageInfo_EventSetChainlinkDataStreamsPrices.DiscardUnknown(m) +} + +var xxx_messageInfo_EventSetChainlinkDataStreamsPrices proto.InternalMessageInfo + +func (m *EventSetChainlinkDataStreamsPrices) GetPrices() []*ChainlinkDataStreamsPriceState { + if m != nil { + return m.Prices + } + return nil +} + func init() { proto.RegisterType((*SetChainlinkPriceEvent)(nil), "injective.oracle.v1beta1.SetChainlinkPriceEvent") proto.RegisterType((*SetBandPriceEvent)(nil), "injective.oracle.v1beta1.SetBandPriceEvent") @@ -649,6 +693,7 @@ func init() { proto.RegisterType((*SetCoinbasePriceEvent)(nil), "injective.oracle.v1beta1.SetCoinbasePriceEvent") proto.RegisterType((*EventSetStorkPrices)(nil), "injective.oracle.v1beta1.EventSetStorkPrices") proto.RegisterType((*EventSetPythPrices)(nil), "injective.oracle.v1beta1.EventSetPythPrices") + proto.RegisterType((*EventSetChainlinkDataStreamsPrices)(nil), "injective.oracle.v1beta1.EventSetChainlinkDataStreamsPrices") } func init() { @@ -656,51 +701,52 @@ func init() { } var fileDescriptor_c42b07097291dfa0 = []byte{ - // 689 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x3f, 0x6f, 0x13, 0x4b, - 0x10, 0xf7, 0xda, 0x8e, 0x13, 0x6f, 0x5e, 0xf3, 0xee, 0xf9, 0x85, 0x53, 0x02, 0x8e, 0x31, 0x42, - 0x32, 0x05, 0x77, 0x0a, 0x54, 0x40, 0x43, 0x1c, 0x82, 0x64, 0x29, 0x45, 0x74, 0x8e, 0x10, 0xa2, - 0x89, 0xd6, 0x7b, 0x13, 0x7b, 0xf1, 0xdd, 0xad, 0xb3, 0xbb, 0x36, 0xf2, 0x37, 0xa0, 0xa0, 0xa0, - 0xa3, 0xe5, 0xb3, 0x50, 0xa5, 0x4c, 0x89, 0x28, 0x22, 0x94, 0x48, 0x7c, 0x0e, 0xb4, 0x7b, 0x6b, - 0xfb, 0x62, 0xc5, 0xc8, 0x11, 0xdd, 0xcd, 0xbf, 0xdf, 0xfc, 0x66, 0x6e, 0x66, 0x16, 0x3f, 0x64, - 0xc9, 0x7b, 0xa0, 0x8a, 0x8d, 0xc0, 0xe7, 0x82, 0xd0, 0x08, 0xfc, 0xd1, 0x4e, 0x07, 0x14, 0xd9, - 0xf1, 0x61, 0x04, 0x89, 0x92, 0xde, 0x40, 0x70, 0xc5, 0x1d, 0x77, 0xea, 0xe6, 0xa5, 0x6e, 0x9e, - 0x75, 0xdb, 0xac, 0x74, 0x79, 0x97, 0x1b, 0x27, 0x5f, 0x7f, 0xa5, 0xfe, 0x9b, 0x55, 0xca, 0x65, - 0xcc, 0xa5, 0xdf, 0x21, 0x72, 0x86, 0x48, 0x39, 0x4b, 0xac, 0x7d, 0x71, 0x5a, 0x0b, 0x6f, 0xdc, - 0xea, 0x9f, 0x10, 0xde, 0x68, 0x83, 0xda, 0xeb, 0x11, 0x96, 0x44, 0x2c, 0xe9, 0x1f, 0x0a, 0x46, - 0x61, 0x5f, 0x13, 0x73, 0xee, 0xe0, 0xd5, 0x13, 0x80, 0xf0, 0x98, 0x85, 0x2e, 0xaa, 0xa1, 0x46, - 0x39, 0x28, 0x69, 0xb1, 0x15, 0x3a, 0x2f, 0x70, 0x89, 0x24, 0xf2, 0x03, 0x08, 0x37, 0xaf, 0xf5, - 0xcd, 0x07, 0x67, 0x17, 0xdb, 0xb9, 0x1f, 0x17, 0xdb, 0x5b, 0x29, 0x25, 0x19, 0xf6, 0x3d, 0xc6, - 0xfd, 0x98, 0xa8, 0x9e, 0x77, 0x00, 0x5d, 0x42, 0xc7, 0xaf, 0x80, 0x06, 0x36, 0xc4, 0xb9, 0x8b, - 0xcb, 0x8a, 0xc5, 0x20, 0x15, 0x89, 0x07, 0x6e, 0xa1, 0x86, 0x1a, 0xc5, 0x60, 0xa6, 0xa8, 0x7f, - 0x43, 0xf8, 0xdf, 0x36, 0xa8, 0x26, 0x49, 0xc2, 0x0c, 0x13, 0x17, 0xaf, 0x0a, 0x88, 0xc8, 0x18, - 0x84, 0x65, 0x32, 0x11, 0x9d, 0x0d, 0x5c, 0x92, 0xe3, 0xb8, 0xc3, 0xa3, 0x94, 0x4a, 0x60, 0x25, - 0xe7, 0x19, 0x5e, 0x19, 0xe8, 0x78, 0x93, 0x61, 0x49, 0x86, 0x69, 0x84, 0x73, 0x1f, 0xff, 0x23, - 0x40, 0xf2, 0x68, 0x04, 0xc7, 0x9a, 0x97, 0x5b, 0x34, 0x1c, 0xd7, 0xad, 0xee, 0x88, 0xc5, 0xe0, - 0xdc, 0xc3, 0x58, 0xc0, 0xe9, 0x10, 0xa4, 0xd2, 0xcd, 0x59, 0x49, 0x8b, 0xb0, 0x9a, 0x56, 0x58, - 0xff, 0x85, 0x70, 0xc5, 0x16, 0xd1, 0x6a, 0xee, 0x2d, 0x55, 0x87, 0x8b, 0x57, 0x53, 0xe6, 0xd2, - 0xcd, 0xd7, 0x0a, 0xda, 0x62, 0x45, 0xdd, 0x6c, 0xc3, 0x4b, 0xba, 0x05, 0x6d, 0x58, 0xb2, 0xd9, - 0x69, 0xc8, 0xdf, 0xd7, 0xe2, 0x6c, 0xe1, 0x32, 0x8d, 0x18, 0x24, 0xc6, 0x5a, 0xaa, 0xa1, 0x46, - 0x21, 0x58, 0x4b, 0x15, 0xad, 0xb0, 0x7e, 0x84, 0x37, 0x4c, 0x61, 0xb6, 0xd2, 0x5d, 0xda, 0x6f, - 0x0f, 0x29, 0x05, 0x29, 0x35, 0x2a, 0xa1, 0xfd, 0x63, 0x01, 0x72, 0x18, 0x29, 0x5b, 0x6c, 0x99, - 0xd0, 0x7e, 0x60, 0x14, 0xd7, 0x51, 0xf3, 0x73, 0xa8, 0x87, 0xb8, 0x32, 0x87, 0xba, 0x2f, 0x04, - 0x17, 0x3a, 0x48, 0x63, 0x82, 0x16, 0x2c, 0xe4, 0x1a, 0xc9, 0x18, 0x17, 0x23, 0x3e, 0xc7, 0x5b, - 0x59, 0xc4, 0x00, 0xe4, 0x80, 0x27, 0xd2, 0xd4, 0xcf, 0x87, 0x73, 0x6c, 0xd0, 0x5c, 0xec, 0x97, - 0x74, 0x41, 0xcc, 0x5f, 0x7c, 0x0d, 0xb0, 0xdc, 0x58, 0x3a, 0xb8, 0xa8, 0xf7, 0xd2, 0x0e, 0xa5, - 0xf9, 0x76, 0x2a, 0x78, 0xe5, 0x74, 0xc8, 0x95, 0x1d, 0xc9, 0x20, 0x15, 0x66, 0x83, 0x5a, 0xbc, - 0xed, 0xa0, 0xd6, 0xbf, 0x22, 0xfc, 0xbf, 0x61, 0xc6, 0x47, 0x2c, 0x04, 0x91, 0x21, 0xb6, 0x89, - 0xd7, 0x06, 0x56, 0x3b, 0x69, 0xd4, 0x44, 0xce, 0x92, 0xce, 0x2f, 0xda, 0xa5, 0xc2, 0xcd, 0xbb, - 0x74, 0x7b, 0x8a, 0x1f, 0x53, 0x8a, 0x7b, 0x9c, 0x25, 0xba, 0x07, 0x19, 0x8a, 0xb3, 0x64, 0xe8, - 0xe6, 0x64, 0xf9, 0x5b, 0x2f, 0xee, 0x9f, 0x2f, 0xcb, 0x5b, 0xfc, 0x9f, 0xc9, 0xdc, 0x06, 0xd5, - 0x56, 0x5c, 0xa4, 0x87, 0x4e, 0x3a, 0xbb, 0xd3, 0xf5, 0x42, 0xb5, 0x42, 0x63, 0xfd, 0xc9, 0x23, - 0x6f, 0xd1, 0x1d, 0xf6, 0x66, 0x61, 0x6d, 0x45, 0x14, 0x4c, 0x96, 0xac, 0xfe, 0x06, 0x3b, 0x13, - 0xe4, 0xc3, 0xb1, 0xea, 0x59, 0xe0, 0x97, 0x73, 0xc0, 0x8d, 0xc5, 0xc0, 0xd3, 0xa8, 0x6b, 0xb8, - 0xcd, 0x93, 0xb3, 0xcb, 0x2a, 0x3a, 0xbf, 0xac, 0xa2, 0x9f, 0x97, 0x55, 0xf4, 0xf9, 0xaa, 0x9a, - 0x3b, 0xbf, 0xaa, 0xe6, 0xbe, 0x5f, 0x55, 0x73, 0xef, 0x0e, 0xba, 0x4c, 0xf5, 0x86, 0x1d, 0x8f, - 0xf2, 0xd8, 0x6f, 0x4d, 0x50, 0x0f, 0x48, 0x47, 0xfa, 0xd3, 0x1c, 0x8f, 0x29, 0x17, 0x90, 0x15, - 0xf5, 0x81, 0xf7, 0x63, 0x1e, 0x0e, 0x23, 0x90, 0x93, 0x17, 0x41, 0x8d, 0x07, 0x20, 0x3b, 0x25, - 0xf3, 0x12, 0x3c, 0xfd, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x2b, 0x3f, 0x45, 0xd4, 0xa9, 0x06, 0x00, - 0x00, + // 716 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0xbd, 0x6e, 0x13, 0x4b, + 0x14, 0xf6, 0xda, 0x8e, 0x13, 0x4f, 0x6e, 0x73, 0xf7, 0xfa, 0x86, 0x55, 0x02, 0x8e, 0x31, 0x42, + 0x32, 0x05, 0xbb, 0x0a, 0x34, 0xfc, 0x34, 0xc4, 0x49, 0x90, 0x2c, 0xa5, 0xb0, 0xd6, 0x11, 0x42, + 0x34, 0xd1, 0x78, 0xf6, 0xc4, 0x1e, 0xbc, 0xbb, 0xe3, 0xcc, 0x8c, 0x8d, 0xfc, 0x06, 0x14, 0x14, + 0x74, 0xb4, 0x3c, 0x0b, 0x55, 0xca, 0x94, 0x88, 0x22, 0x42, 0x89, 0xc4, 0x73, 0xa0, 0x99, 0x9d, + 0xb5, 0x1d, 0x2b, 0x8b, 0x1c, 0xd1, 0xf9, 0xfc, 0x7d, 0xdf, 0x77, 0x8e, 0xcf, 0x99, 0x45, 0x0f, + 0x69, 0xfc, 0x1e, 0x88, 0xa4, 0x63, 0xf0, 0x18, 0xc7, 0x24, 0x04, 0x6f, 0xbc, 0xd3, 0x05, 0x89, + 0x77, 0x3c, 0x18, 0x43, 0x2c, 0x85, 0x3b, 0xe4, 0x4c, 0x32, 0xdb, 0x99, 0xa6, 0xb9, 0x49, 0x9a, + 0x6b, 0xd2, 0x36, 0x2b, 0x3d, 0xd6, 0x63, 0x3a, 0xc9, 0x53, 0xbf, 0x92, 0xfc, 0xcd, 0x2a, 0x61, + 0x22, 0x62, 0xc2, 0xeb, 0x62, 0x31, 0x43, 0x24, 0x8c, 0xc6, 0x26, 0x9e, 0x4d, 0x6b, 0xe0, 0x75, + 0x5a, 0xfd, 0x93, 0x85, 0x36, 0x3a, 0x20, 0xf7, 0xfa, 0x98, 0xc6, 0x21, 0x8d, 0x07, 0x6d, 0x4e, + 0x09, 0x1c, 0x28, 0x61, 0xf6, 0x1d, 0xb4, 0x7a, 0x02, 0x10, 0x1c, 0xd3, 0xc0, 0xb1, 0x6a, 0x56, + 0xa3, 0xec, 0x97, 0x94, 0xd9, 0x0a, 0xec, 0x97, 0xa8, 0x84, 0x63, 0xf1, 0x01, 0xb8, 0x93, 0x57, + 0xfe, 0xe6, 0x83, 0xb3, 0x8b, 0xed, 0xdc, 0x8f, 0x8b, 0xed, 0xad, 0x44, 0x92, 0x08, 0x06, 0x2e, + 0x65, 0x5e, 0x84, 0x65, 0xdf, 0x3d, 0x84, 0x1e, 0x26, 0x93, 0x7d, 0x20, 0xbe, 0x29, 0xb1, 0xef, + 0xa2, 0xb2, 0xa4, 0x11, 0x08, 0x89, 0xa3, 0xa1, 0x53, 0xa8, 0x59, 0x8d, 0xa2, 0x3f, 0x73, 0xd4, + 0xbf, 0x59, 0xe8, 0xdf, 0x0e, 0xc8, 0x26, 0x8e, 0x83, 0x39, 0x25, 0x0e, 0x5a, 0xe5, 0x10, 0xe2, + 0x09, 0x70, 0xa3, 0x24, 0x35, 0xed, 0x0d, 0x54, 0x12, 0x93, 0xa8, 0xcb, 0xc2, 0x44, 0x8a, 0x6f, + 0x2c, 0xfb, 0x39, 0x5a, 0x19, 0xaa, 0x7a, 0xcd, 0xb0, 0xa4, 0xc2, 0xa4, 0xc2, 0xbe, 0x8f, 0xfe, + 0xe1, 0x20, 0x58, 0x38, 0x86, 0x63, 0xa5, 0xcb, 0x29, 0x6a, 0x8d, 0xeb, 0xc6, 0x77, 0x44, 0x23, + 0xb0, 0xef, 0x21, 0xc4, 0xe1, 0x74, 0x04, 0x42, 0xaa, 0xe1, 0xac, 0x24, 0x4d, 0x18, 0x4f, 0x2b, + 0xa8, 0xff, 0xb2, 0x50, 0xc5, 0x34, 0xd1, 0x6a, 0xee, 0x2d, 0xd5, 0x87, 0x83, 0x56, 0x13, 0xe5, + 0xc2, 0xc9, 0xd7, 0x0a, 0x2a, 0x62, 0x4c, 0x35, 0x6c, 0xad, 0x4b, 0x38, 0x05, 0x15, 0x58, 0x72, + 0xd8, 0x49, 0xc9, 0xdf, 0xf7, 0x62, 0x6f, 0xa1, 0x32, 0x09, 0x29, 0xc4, 0x3a, 0x5a, 0xaa, 0x59, + 0x8d, 0x82, 0xbf, 0x96, 0x38, 0x5a, 0x41, 0xfd, 0x08, 0x6d, 0xe8, 0xc6, 0x4c, 0xa7, 0xbb, 0x64, + 0xd0, 0x19, 0x11, 0x02, 0x42, 0x28, 0x54, 0x4c, 0x06, 0xc7, 0x1c, 0xc4, 0x28, 0x94, 0xa6, 0xd9, + 0x32, 0x26, 0x03, 0x5f, 0x3b, 0xae, 0xa3, 0xe6, 0x17, 0x50, 0xdb, 0xa8, 0xb2, 0x80, 0x7a, 0xc0, + 0x39, 0xe3, 0xaa, 0x48, 0x61, 0x82, 0x32, 0x0c, 0xe4, 0x1a, 0x9e, 0x0b, 0x66, 0x23, 0xbe, 0x40, + 0x5b, 0xf3, 0x88, 0x3e, 0x88, 0x21, 0x8b, 0x85, 0xee, 0x9f, 0x8d, 0x16, 0xd4, 0x58, 0x0b, 0xb5, + 0x5f, 0x92, 0x03, 0xd1, 0xff, 0xe2, 0x6b, 0x80, 0xe5, 0xd6, 0xd2, 0x46, 0x45, 0x75, 0x97, 0x66, + 0x29, 0xf5, 0x6f, 0xbb, 0x82, 0x56, 0x4e, 0x47, 0x4c, 0x9a, 0x95, 0xf4, 0x13, 0x63, 0xb6, 0xa8, + 0xc5, 0xdb, 0x2e, 0x6a, 0xfd, 0xab, 0x85, 0xfe, 0xd7, 0xca, 0xd8, 0x98, 0x06, 0xc0, 0xe7, 0x84, + 0x6d, 0xa2, 0xb5, 0xa1, 0xf1, 0xa6, 0x83, 0x4a, 0xed, 0x79, 0xd1, 0xf9, 0xac, 0x5b, 0x2a, 0xdc, + 0x7c, 0x4b, 0xb7, 0x97, 0xf8, 0x31, 0x91, 0xb8, 0xc7, 0x68, 0xac, 0x66, 0x30, 0x27, 0x71, 0x46, + 0x66, 0xdd, 0x4c, 0x96, 0xbf, 0xf5, 0xe1, 0xfe, 0xf9, 0x65, 0x79, 0x8b, 0xfe, 0xd3, 0xcc, 0x1d, + 0x90, 0x1d, 0xc9, 0x78, 0xf2, 0xd0, 0x09, 0x7b, 0x77, 0x7a, 0x5e, 0x56, 0xad, 0xd0, 0x58, 0x7f, + 0xf2, 0xc8, 0xcd, 0x7a, 0x87, 0xdd, 0x59, 0x59, 0x47, 0x62, 0x09, 0xe9, 0x91, 0xd5, 0xdf, 0x20, + 0x3b, 0x45, 0x6e, 0x4f, 0x64, 0xdf, 0x00, 0xbf, 0x5a, 0x00, 0x6e, 0x64, 0x03, 0x4f, 0xab, 0xae, + 0xe3, 0x8e, 0x51, 0x3d, 0xc5, 0x9d, 0x3e, 0xcf, 0xfb, 0x58, 0xe2, 0x8e, 0xe4, 0x80, 0x23, 0x61, + 0x78, 0xda, 0x0b, 0x3c, 0xcf, 0xb2, 0x79, 0x32, 0x51, 0xae, 0xf1, 0x36, 0x4f, 0xce, 0x2e, 0xab, + 0xd6, 0xf9, 0x65, 0xd5, 0xfa, 0x79, 0x59, 0xb5, 0x3e, 0x5f, 0x55, 0x73, 0xe7, 0x57, 0xd5, 0xdc, + 0xf7, 0xab, 0x6a, 0xee, 0xdd, 0x61, 0x8f, 0xca, 0xfe, 0xa8, 0xeb, 0x12, 0x16, 0x79, 0xad, 0x94, + 0xe5, 0x10, 0x77, 0x85, 0x37, 0xe5, 0x7c, 0x4c, 0x18, 0x87, 0x79, 0x53, 0x71, 0x7a, 0x11, 0x0b, + 0x46, 0x21, 0x88, 0xf4, 0x4b, 0x24, 0x27, 0x43, 0x10, 0xdd, 0x92, 0xfe, 0x02, 0x3d, 0xfd, 0x1d, + 0x00, 0x00, 0xff, 0xff, 0x82, 0x00, 0xff, 0xbc, 0x21, 0x07, 0x00, 0x00, } func (m *SetChainlinkPriceEvent) Marshal() (dAtA []byte, err error) { @@ -1198,6 +1244,43 @@ func (m *EventSetPythPrices) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *EventSetChainlinkDataStreamsPrices) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EventSetChainlinkDataStreamsPrices) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventSetChainlinkDataStreamsPrices) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Prices) > 0 { + for iNdEx := len(m.Prices) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Prices[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func encodeVarintEvents(dAtA []byte, offset int, v uint64) int { offset -= sovEvents(v) base := offset @@ -1424,6 +1507,21 @@ func (m *EventSetPythPrices) Size() (n int) { return n } +func (m *EventSetChainlinkDataStreamsPrices) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Prices) > 0 { + for _, e := range m.Prices { + l = e.Size() + n += 1 + l + sovEvents(uint64(l)) + } + } + return n +} + func sovEvents(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -2892,6 +2990,90 @@ func (m *EventSetPythPrices) Unmarshal(dAtA []byte) error { } return nil } +func (m *EventSetChainlinkDataStreamsPrices) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EventSetChainlinkDataStreamsPrices: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventSetChainlinkDataStreamsPrices: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Prices", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Prices = append(m.Prices, &ChainlinkDataStreamsPriceState{}) + if err := m.Prices[len(m.Prices)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipEvents(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/chain/oracle/types/genesis.pb.go b/chain/oracle/types/genesis.pb.go index 537005eb..6b5d440c 100644 --- a/chain/oracle/types/genesis.pb.go +++ b/chain/oracle/types/genesis.pb.go @@ -26,23 +26,24 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // GenesisState defines the oracle module's genesis state. type GenesisState struct { // params defines all the parameters of related to oracle. - Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` - BandRelayers []string `protobuf:"bytes,2,rep,name=band_relayers,json=bandRelayers,proto3" json:"band_relayers,omitempty"` - BandPriceStates []*BandPriceState `protobuf:"bytes,3,rep,name=band_price_states,json=bandPriceStates,proto3" json:"band_price_states,omitempty"` - PriceFeedPriceStates []*PriceFeedState `protobuf:"bytes,4,rep,name=price_feed_price_states,json=priceFeedPriceStates,proto3" json:"price_feed_price_states,omitempty"` - CoinbasePriceStates []*CoinbasePriceState `protobuf:"bytes,5,rep,name=coinbase_price_states,json=coinbasePriceStates,proto3" json:"coinbase_price_states,omitempty"` - BandIbcPriceStates []*BandPriceState `protobuf:"bytes,6,rep,name=band_ibc_price_states,json=bandIbcPriceStates,proto3" json:"band_ibc_price_states,omitempty"` - BandIbcOracleRequests []*BandOracleRequest `protobuf:"bytes,7,rep,name=band_ibc_oracle_requests,json=bandIbcOracleRequests,proto3" json:"band_ibc_oracle_requests,omitempty"` - BandIbcParams BandIBCParams `protobuf:"bytes,8,opt,name=band_ibc_params,json=bandIbcParams,proto3" json:"band_ibc_params"` - BandIbcLatestClientId uint64 `protobuf:"varint,9,opt,name=band_ibc_latest_client_id,json=bandIbcLatestClientId,proto3" json:"band_ibc_latest_client_id,omitempty"` - CalldataRecords []*CalldataRecord `protobuf:"bytes,10,rep,name=calldata_records,json=calldataRecords,proto3" json:"calldata_records,omitempty"` - BandIbcLatestRequestId uint64 `protobuf:"varint,11,opt,name=band_ibc_latest_request_id,json=bandIbcLatestRequestId,proto3" json:"band_ibc_latest_request_id,omitempty"` - ChainlinkPriceStates []*ChainlinkPriceState `protobuf:"bytes,12,rep,name=chainlink_price_states,json=chainlinkPriceStates,proto3" json:"chainlink_price_states,omitempty"` - HistoricalPriceRecords []*PriceRecords `protobuf:"bytes,13,rep,name=historical_price_records,json=historicalPriceRecords,proto3" json:"historical_price_records,omitempty"` - ProviderStates []*ProviderState `protobuf:"bytes,14,rep,name=provider_states,json=providerStates,proto3" json:"provider_states,omitempty"` - PythPriceStates []*PythPriceState `protobuf:"bytes,15,rep,name=pyth_price_states,json=pythPriceStates,proto3" json:"pyth_price_states,omitempty"` - StorkPriceStates []*StorkPriceState `protobuf:"bytes,16,rep,name=stork_price_states,json=storkPriceStates,proto3" json:"stork_price_states,omitempty"` - StorkPublishers []string `protobuf:"bytes,17,rep,name=stork_publishers,json=storkPublishers,proto3" json:"stork_publishers,omitempty"` + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + BandRelayers []string `protobuf:"bytes,2,rep,name=band_relayers,json=bandRelayers,proto3" json:"band_relayers,omitempty"` // Deprecated: Do not use. + BandPriceStates []*BandPriceState `protobuf:"bytes,3,rep,name=band_price_states,json=bandPriceStates,proto3" json:"band_price_states,omitempty"` // Deprecated: Do not use. + PriceFeedPriceStates []*PriceFeedState `protobuf:"bytes,4,rep,name=price_feed_price_states,json=priceFeedPriceStates,proto3" json:"price_feed_price_states,omitempty"` + CoinbasePriceStates []*CoinbasePriceState `protobuf:"bytes,5,rep,name=coinbase_price_states,json=coinbasePriceStates,proto3" json:"coinbase_price_states,omitempty"` + BandIbcPriceStates []*BandPriceState `protobuf:"bytes,6,rep,name=band_ibc_price_states,json=bandIbcPriceStates,proto3" json:"band_ibc_price_states,omitempty"` // Deprecated: Do not use. + BandIbcOracleRequests []*BandOracleRequest `protobuf:"bytes,7,rep,name=band_ibc_oracle_requests,json=bandIbcOracleRequests,proto3" json:"band_ibc_oracle_requests,omitempty"` // Deprecated: Do not use. + BandIbcParams BandIBCParams `protobuf:"bytes,8,opt,name=band_ibc_params,json=bandIbcParams,proto3" json:"band_ibc_params"` // Deprecated: Do not use. + BandIbcLatestClientId uint64 `protobuf:"varint,9,opt,name=band_ibc_latest_client_id,json=bandIbcLatestClientId,proto3" json:"band_ibc_latest_client_id,omitempty"` // Deprecated: Do not use. + CalldataRecords []*CalldataRecord `protobuf:"bytes,10,rep,name=calldata_records,json=calldataRecords,proto3" json:"calldata_records,omitempty"` // Deprecated: Do not use. + BandIbcLatestRequestId uint64 `protobuf:"varint,11,opt,name=band_ibc_latest_request_id,json=bandIbcLatestRequestId,proto3" json:"band_ibc_latest_request_id,omitempty"` // Deprecated: Do not use. + ChainlinkPriceStates []*ChainlinkPriceState `protobuf:"bytes,12,rep,name=chainlink_price_states,json=chainlinkPriceStates,proto3" json:"chainlink_price_states,omitempty"` + HistoricalPriceRecords []*PriceRecords `protobuf:"bytes,13,rep,name=historical_price_records,json=historicalPriceRecords,proto3" json:"historical_price_records,omitempty"` + ProviderStates []*ProviderState `protobuf:"bytes,14,rep,name=provider_states,json=providerStates,proto3" json:"provider_states,omitempty"` + PythPriceStates []*PythPriceState `protobuf:"bytes,15,rep,name=pyth_price_states,json=pythPriceStates,proto3" json:"pyth_price_states,omitempty"` + StorkPriceStates []*StorkPriceState `protobuf:"bytes,16,rep,name=stork_price_states,json=storkPriceStates,proto3" json:"stork_price_states,omitempty"` + StorkPublishers []string `protobuf:"bytes,17,rep,name=stork_publishers,json=storkPublishers,proto3" json:"stork_publishers,omitempty"` + ChainlinkDataStreamsPriceStates []*ChainlinkDataStreamsPriceState `protobuf:"bytes,18,rep,name=chainlink_data_streams_price_states,json=chainlinkDataStreamsPriceStates,proto3" json:"chainlink_data_streams_price_states,omitempty"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -85,6 +86,7 @@ func (m *GenesisState) GetParams() Params { return Params{} } +// Deprecated: Do not use. func (m *GenesisState) GetBandRelayers() []string { if m != nil { return m.BandRelayers @@ -92,6 +94,7 @@ func (m *GenesisState) GetBandRelayers() []string { return nil } +// Deprecated: Do not use. func (m *GenesisState) GetBandPriceStates() []*BandPriceState { if m != nil { return m.BandPriceStates @@ -113,6 +116,7 @@ func (m *GenesisState) GetCoinbasePriceStates() []*CoinbasePriceState { return nil } +// Deprecated: Do not use. func (m *GenesisState) GetBandIbcPriceStates() []*BandPriceState { if m != nil { return m.BandIbcPriceStates @@ -120,6 +124,7 @@ func (m *GenesisState) GetBandIbcPriceStates() []*BandPriceState { return nil } +// Deprecated: Do not use. func (m *GenesisState) GetBandIbcOracleRequests() []*BandOracleRequest { if m != nil { return m.BandIbcOracleRequests @@ -127,6 +132,7 @@ func (m *GenesisState) GetBandIbcOracleRequests() []*BandOracleRequest { return nil } +// Deprecated: Do not use. func (m *GenesisState) GetBandIbcParams() BandIBCParams { if m != nil { return m.BandIbcParams @@ -134,6 +140,7 @@ func (m *GenesisState) GetBandIbcParams() BandIBCParams { return BandIBCParams{} } +// Deprecated: Do not use. func (m *GenesisState) GetBandIbcLatestClientId() uint64 { if m != nil { return m.BandIbcLatestClientId @@ -141,6 +148,7 @@ func (m *GenesisState) GetBandIbcLatestClientId() uint64 { return 0 } +// Deprecated: Do not use. func (m *GenesisState) GetCalldataRecords() []*CalldataRecord { if m != nil { return m.CalldataRecords @@ -148,6 +156,7 @@ func (m *GenesisState) GetCalldataRecords() []*CalldataRecord { return nil } +// Deprecated: Do not use. func (m *GenesisState) GetBandIbcLatestRequestId() uint64 { if m != nil { return m.BandIbcLatestRequestId @@ -197,6 +206,13 @@ func (m *GenesisState) GetStorkPublishers() []string { return nil } +func (m *GenesisState) GetChainlinkDataStreamsPriceStates() []*ChainlinkDataStreamsPriceState { + if m != nil { + return m.ChainlinkDataStreamsPriceStates + } + return nil +} + type CalldataRecord struct { ClientId uint64 `protobuf:"varint,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` Calldata []byte `protobuf:"bytes,2,opt,name=calldata,proto3" json:"calldata,omitempty"` @@ -259,50 +275,53 @@ func init() { } var fileDescriptor_f7e14cf80151b4d2 = []byte{ - // 681 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x95, 0xcf, 0x4f, 0x13, 0x41, - 0x14, 0xc7, 0xbb, 0x80, 0x08, 0x43, 0xa1, 0x65, 0x04, 0x5c, 0x6b, 0x52, 0x1b, 0x8c, 0x50, 0xa2, - 0x74, 0x03, 0x5e, 0x8c, 0x07, 0x0f, 0x6d, 0xa2, 0x69, 0x42, 0x22, 0x59, 0x34, 0x26, 0x7a, 0x58, - 0x67, 0x67, 0x87, 0x76, 0x74, 0xd9, 0x5d, 0x67, 0xa6, 0x24, 0xfd, 0x2f, 0xfc, 0xb3, 0x38, 0x72, - 0xf4, 0x64, 0x0c, 0xf8, 0x87, 0x98, 0xf9, 0xb1, 0xcb, 0x0e, 0xa4, 0x6d, 0xbc, 0xed, 0x7b, 0xfb, - 0xde, 0xe7, 0x7d, 0xdf, 0xdb, 0xb7, 0x33, 0x60, 0x87, 0x26, 0xdf, 0x08, 0x16, 0xf4, 0x9c, 0x78, - 0x29, 0x43, 0x38, 0x26, 0xde, 0xf9, 0x41, 0x48, 0x04, 0x3a, 0xf0, 0x06, 0x24, 0x21, 0x9c, 0xf2, - 0x4e, 0xc6, 0x52, 0x91, 0x42, 0xb7, 0x88, 0xeb, 0xe8, 0xb8, 0x8e, 0x89, 0x6b, 0x3c, 0x9b, 0x48, - 0x30, 0x81, 0x0a, 0xd0, 0xd8, 0x18, 0xa4, 0x83, 0x54, 0x3d, 0x7a, 0xf2, 0x49, 0x7b, 0xb7, 0xff, - 0x02, 0x50, 0x7d, 0xa7, 0x0b, 0x9d, 0x08, 0x24, 0x08, 0x7c, 0x03, 0x16, 0x33, 0xc4, 0xd0, 0x19, - 0x77, 0x9d, 0x96, 0xd3, 0x5e, 0x39, 0x6c, 0x75, 0x26, 0x15, 0xee, 0x1c, 0xab, 0xb8, 0xee, 0xc2, - 0xc5, 0xef, 0x27, 0x15, 0xdf, 0x64, 0xc1, 0xa7, 0x60, 0x35, 0x44, 0x49, 0x14, 0x30, 0x12, 0xa3, - 0x31, 0x61, 0xdc, 0x9d, 0x6b, 0xcd, 0xb7, 0x97, 0xfd, 0xaa, 0x74, 0xfa, 0xc6, 0x07, 0x3f, 0x80, - 0x75, 0x15, 0x94, 0x31, 0x8a, 0x49, 0xc0, 0x65, 0x61, 0xee, 0xce, 0xb7, 0xe6, 0xdb, 0x2b, 0x87, - 0xed, 0xc9, 0xf5, 0xba, 0x28, 0x89, 0x8e, 0x65, 0x86, 0x52, 0xea, 0xd7, 0x42, 0xcb, 0xe6, 0x30, - 0x00, 0x0f, 0x35, 0xf0, 0x94, 0x90, 0x5b, 0xec, 0x85, 0x59, 0x6c, 0xc5, 0x79, 0x4b, 0x48, 0xa4, - 0xd9, 0x1b, 0x59, 0x6e, 0x97, 0x0b, 0x7c, 0x05, 0x9b, 0x38, 0xa5, 0x49, 0x88, 0x38, 0xb1, 0xf1, - 0xf7, 0x14, 0xfe, 0xc5, 0x64, 0x7c, 0xcf, 0xa4, 0x95, 0xe4, 0x3f, 0xc0, 0x77, 0x7c, 0x1c, 0x7e, - 0x01, 0x9b, 0x6a, 0x30, 0x34, 0xc4, 0x76, 0x85, 0xc5, 0xff, 0x1c, 0x0e, 0x94, 0x98, 0x7e, 0x88, - 0xcb, 0xf0, 0x08, 0xb8, 0x05, 0x5c, 0x67, 0x07, 0x8c, 0xfc, 0x18, 0x11, 0x2e, 0xb8, 0x7b, 0x5f, - 0xf1, 0x9f, 0x4f, 0xe7, 0xbf, 0x57, 0x2e, 0x5f, 0xe7, 0xf8, 0x9b, 0xa6, 0x84, 0xe5, 0xe5, 0xf0, - 0x23, 0xa8, 0xdd, 0xb4, 0xa0, 0x37, 0x69, 0x49, 0x6d, 0xd2, 0xee, 0x74, 0x78, 0xbf, 0xdb, 0xb3, - 0x16, 0x6a, 0x35, 0xef, 0x40, 0xef, 0xd5, 0x2b, 0xf0, 0xa8, 0xc0, 0xc6, 0xb2, 0x1d, 0x11, 0xe0, - 0x98, 0x92, 0x44, 0x04, 0x34, 0x72, 0x97, 0x5b, 0x4e, 0x7b, 0xa1, 0x10, 0x74, 0xa4, 0x5e, 0xf7, - 0xd4, 0xdb, 0x7e, 0x04, 0x4f, 0x40, 0x1d, 0xa3, 0x38, 0x8e, 0x90, 0x40, 0x01, 0x23, 0x38, 0x65, - 0x11, 0x77, 0xc1, 0xac, 0x71, 0xf6, 0x4c, 0x86, 0xaf, 0x12, 0xfc, 0x1a, 0xb6, 0x6c, 0x0e, 0x5f, - 0x83, 0xc6, 0x6d, 0x39, 0x66, 0x96, 0x52, 0xcf, 0x8a, 0xd2, 0xb3, 0x65, 0xe9, 0x31, 0x03, 0xea, - 0x47, 0x10, 0x83, 0x2d, 0x3c, 0x44, 0x34, 0x89, 0x69, 0xf2, 0xdd, 0xfe, 0xca, 0x55, 0x25, 0x6b, - 0x7f, 0x8a, 0xac, 0x3c, 0xaf, 0xf4, 0xa9, 0x37, 0xf0, 0x5d, 0xa7, 0xdc, 0x55, 0x77, 0x48, 0xb9, - 0x48, 0x19, 0xc5, 0x28, 0x36, 0x55, 0xf2, 0xee, 0x57, 0x55, 0x99, 0x9d, 0x19, 0x7f, 0x83, 0x69, - 0xd5, 0xdf, 0xba, 0xe1, 0x94, 0xfd, 0xf0, 0x18, 0xd4, 0x32, 0x96, 0x9e, 0xd3, 0x88, 0xb0, 0x5c, - 0xff, 0x9a, 0x02, 0xef, 0x4e, 0x03, 0xeb, 0x04, 0xad, 0x7c, 0x2d, 0x2b, 0x9b, 0xea, 0x58, 0xc8, - 0xc6, 0x62, 0x68, 0xcf, 0xa4, 0x36, 0xf3, 0xd7, 0x1d, 0x8b, 0x61, 0xf9, 0x58, 0xc8, 0x2c, 0x9b, - 0xc3, 0x4f, 0x00, 0x4a, 0xfd, 0xb7, 0x46, 0x5d, 0x57, 0xd8, 0xbd, 0xc9, 0xd8, 0x13, 0x99, 0x53, - 0xe2, 0xd6, 0xb9, 0xed, 0xe0, 0x70, 0x0f, 0xd4, 0x0d, 0x78, 0x14, 0xc6, 0x94, 0x0f, 0xe5, 0x69, - 0xb7, 0xae, 0x4e, 0xbb, 0x9a, 0x8e, 0x2d, 0xdc, 0xdb, 0x7d, 0xb0, 0x66, 0x6f, 0x14, 0x7c, 0x0c, - 0x96, 0x6f, 0xf6, 0xd7, 0x51, 0xfb, 0xb2, 0x84, 0xf3, 0x95, 0x6d, 0x80, 0xa5, 0x7c, 0xe1, 0xdc, - 0xb9, 0x96, 0xd3, 0xae, 0xfa, 0x85, 0xdd, 0x3d, 0xbd, 0xb8, 0x6a, 0x3a, 0x97, 0x57, 0x4d, 0xe7, - 0xcf, 0x55, 0xd3, 0xf9, 0x79, 0xdd, 0xac, 0x5c, 0x5e, 0x37, 0x2b, 0xbf, 0xae, 0x9b, 0x95, 0xcf, - 0x47, 0x03, 0x2a, 0x86, 0xa3, 0xb0, 0x83, 0xd3, 0x33, 0xaf, 0x9f, 0xb7, 0x75, 0x84, 0x42, 0xee, - 0x15, 0x4d, 0xee, 0xe3, 0x94, 0x91, 0xb2, 0x29, 0x57, 0xc7, 0x3b, 0x4b, 0xa3, 0x51, 0x4c, 0x78, - 0x7e, 0x7d, 0x88, 0x71, 0x46, 0x78, 0xb8, 0xa8, 0x2e, 0x88, 0x97, 0xff, 0x02, 0x00, 0x00, 0xff, - 0xff, 0xe6, 0xf9, 0xcd, 0x82, 0xa1, 0x06, 0x00, 0x00, + // 734 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4f, 0x4f, 0xdb, 0x4e, + 0x10, 0x8d, 0x21, 0xbf, 0xfc, 0x60, 0x09, 0x24, 0x6c, 0x81, 0xba, 0xa9, 0x14, 0x22, 0xaa, 0x42, + 0x50, 0x4b, 0x2c, 0xe8, 0xa5, 0x87, 0x8a, 0x43, 0x52, 0xb5, 0x8a, 0x84, 0x54, 0x64, 0x2a, 0x51, + 0xf5, 0xe2, 0xae, 0xd7, 0x4b, 0xbc, 0xad, 0x63, 0xbb, 0xbb, 0x1b, 0xa4, 0x7c, 0x81, 0x5e, 0x7a, + 0xe9, 0xc7, 0xe2, 0xc8, 0xb1, 0xa7, 0xaa, 0x82, 0x2f, 0x52, 0xed, 0xfa, 0x4f, 0xbc, 0xa0, 0x24, + 0x55, 0x6f, 0x9e, 0xf1, 0xcc, 0x7b, 0x6f, 0xc6, 0x6f, 0xbd, 0x60, 0x97, 0x86, 0x9f, 0x09, 0x16, + 0xf4, 0x92, 0x58, 0x11, 0x43, 0x38, 0x20, 0xd6, 0xe5, 0xa1, 0x4b, 0x04, 0x3a, 0xb4, 0x06, 0x24, + 0x24, 0x9c, 0xf2, 0x4e, 0xcc, 0x22, 0x11, 0x41, 0x33, 0xaf, 0xeb, 0x24, 0x75, 0x9d, 0xb4, 0xae, + 0xf1, 0x74, 0x2a, 0x42, 0x5a, 0xa8, 0x00, 0x1a, 0x1b, 0x83, 0x68, 0x10, 0xa9, 0x47, 0x4b, 0x3e, + 0x25, 0xd9, 0x9d, 0xef, 0x55, 0x50, 0x7d, 0x9b, 0x10, 0x9d, 0x09, 0x24, 0x08, 0x3c, 0x06, 0x95, + 0x18, 0x31, 0x34, 0xe4, 0xa6, 0xd1, 0x32, 0xda, 0x2b, 0x47, 0xad, 0xce, 0x34, 0xe2, 0xce, 0xa9, + 0xaa, 0xeb, 0x96, 0xaf, 0x7e, 0x6d, 0x97, 0xec, 0xb4, 0x0b, 0xee, 0x81, 0x55, 0x17, 0x85, 0x9e, + 0xc3, 0x48, 0x80, 0xc6, 0x84, 0x71, 0x73, 0xa1, 0xb5, 0xd8, 0x5e, 0xee, 0x2e, 0x98, 0x86, 0x5d, + 0x95, 0x2f, 0xec, 0x34, 0x0f, 0x3f, 0x80, 0x75, 0x55, 0x18, 0x33, 0x8a, 0x89, 0xc3, 0x25, 0x39, + 0x37, 0x17, 0x5b, 0x8b, 0xed, 0x95, 0xa3, 0xf6, 0x74, 0xce, 0x2e, 0x0a, 0xbd, 0x53, 0xd9, 0xa1, + 0xd4, 0x2a, 0xd8, 0x9a, 0xab, 0xe5, 0x38, 0x74, 0xc0, 0xc3, 0x04, 0xf4, 0x82, 0x90, 0x3b, 0xf8, + 0xe5, 0x79, 0xf8, 0x0a, 0xe7, 0x0d, 0x21, 0x9e, 0xc2, 0xb2, 0x37, 0xe2, 0x2c, 0x2e, 0x12, 0x7c, + 0x02, 0x9b, 0x38, 0xa2, 0xa1, 0x8b, 0x38, 0xd1, 0xe1, 0xff, 0x53, 0xf0, 0xcf, 0xa7, 0xc3, 0xf7, + 0xd2, 0xb6, 0x09, 0x9a, 0xfd, 0x00, 0xdf, 0xcb, 0xc9, 0x11, 0x36, 0xd5, 0x72, 0xa8, 0x8b, 0x75, + 0x86, 0xca, 0x3f, 0x2c, 0x08, 0x4a, 0xa8, 0xbe, 0x8b, 0x8b, 0x04, 0x3e, 0x30, 0x73, 0x82, 0x04, + 0xc1, 0x61, 0xe4, 0xeb, 0x88, 0x70, 0xc1, 0xcd, 0xff, 0x15, 0xc7, 0xb3, 0xd9, 0x1c, 0xef, 0x54, + 0xca, 0x4e, 0x7a, 0x14, 0xcd, 0x66, 0x4a, 0xa3, 0xbd, 0xe1, 0xf0, 0x1c, 0xd4, 0x26, 0xa3, 0x24, + 0xce, 0x5a, 0x52, 0xce, 0xda, 0x9b, 0x4d, 0xd0, 0xef, 0xf6, 0x52, 0x83, 0x55, 0xa4, 0xc1, 0x4c, + 0xc3, 0x5e, 0xcd, 0xe6, 0x48, 0x9c, 0xf6, 0x0a, 0x3c, 0xca, 0x81, 0x03, 0x39, 0x94, 0x70, 0x70, + 0x40, 0x49, 0x28, 0x1c, 0xea, 0x99, 0xcb, 0x2d, 0xa3, 0x5d, 0xd6, 0x64, 0x9d, 0xa8, 0x92, 0x9e, + 0xaa, 0xe8, 0x7b, 0xf0, 0x1c, 0xd4, 0x31, 0x0a, 0x02, 0x0f, 0x09, 0xe4, 0x30, 0x82, 0x23, 0xe6, + 0x71, 0x13, 0xcc, 0x5b, 0x6e, 0x2f, 0xed, 0xb0, 0x55, 0x43, 0xe2, 0x3e, 0xac, 0xe5, 0x38, 0x3c, + 0x06, 0x8d, 0xbb, 0xb2, 0xd2, 0xcd, 0x4a, 0x5d, 0x2b, 0xb9, 0xae, 0x2d, 0x4d, 0x57, 0xba, 0xae, + 0xbe, 0x07, 0x31, 0xd8, 0xc2, 0x3e, 0xa2, 0x61, 0x40, 0xc3, 0x2f, 0xfa, 0xb7, 0xaf, 0x2a, 0x79, + 0x07, 0x33, 0xe4, 0x65, 0x7d, 0x05, 0x7b, 0x6d, 0xe0, 0xfb, 0x49, 0xe9, 0x60, 0xd3, 0xa7, 0x5c, + 0x44, 0x8c, 0x62, 0x14, 0xa4, 0x2c, 0xd9, 0x16, 0x56, 0x15, 0xcd, 0xee, 0x9c, 0x33, 0x92, 0x8e, + 0x6b, 0x6f, 0x4d, 0x70, 0x8a, 0x79, 0x78, 0x0a, 0x6a, 0x31, 0x8b, 0x2e, 0xa9, 0x47, 0x58, 0xa6, + 0x7f, 0x4d, 0x01, 0xef, 0xcd, 0x02, 0x4e, 0x1a, 0x12, 0xe5, 0x6b, 0x71, 0x31, 0xe4, 0xf0, 0x3d, + 0x58, 0x8f, 0xc7, 0xc2, 0xd7, 0x77, 0x52, 0x9b, 0x7b, 0xa0, 0xc7, 0xc2, 0x2f, 0xac, 0xa3, 0x16, + 0x6b, 0xb1, 0xb4, 0x27, 0x94, 0xfa, 0xef, 0xac, 0xba, 0xae, 0x60, 0xf7, 0xa7, 0xc3, 0x9e, 0xc9, + 0x9e, 0x02, 0x6e, 0x9d, 0xeb, 0x09, 0x0e, 0xf7, 0x41, 0x3d, 0x05, 0x1e, 0xb9, 0x01, 0xe5, 0xbe, + 0xfc, 0x17, 0xae, 0xcb, 0x7f, 0xa1, 0x5d, 0x4b, 0x6a, 0xf3, 0x34, 0xfc, 0x66, 0x80, 0x27, 0x93, + 0x6f, 0xae, 0x2c, 0xc9, 0x05, 0x23, 0x68, 0xc8, 0x75, 0x55, 0x50, 0xa9, 0x7a, 0xf9, 0x17, 0x06, + 0x78, 0x8d, 0x04, 0x3a, 0x4b, 0x20, 0x0a, 0x22, 0xb7, 0xf1, 0xcc, 0xf7, 0x7c, 0xa7, 0x0f, 0xd6, + 0x74, 0x8b, 0xc3, 0xc7, 0x60, 0x79, 0x72, 0xa8, 0xe4, 0x8d, 0x50, 0xb6, 0x97, 0x70, 0x76, 0x86, + 0x1a, 0x60, 0x29, 0x73, 0xbf, 0xb9, 0xd0, 0x32, 0xda, 0x55, 0x3b, 0x8f, 0xbb, 0x17, 0x57, 0x37, + 0x4d, 0xe3, 0xfa, 0xa6, 0x69, 0xfc, 0xbe, 0x69, 0x1a, 0x3f, 0x6e, 0x9b, 0xa5, 0xeb, 0xdb, 0x66, + 0xe9, 0xe7, 0x6d, 0xb3, 0xf4, 0xf1, 0x64, 0x40, 0x85, 0x3f, 0x72, 0x3b, 0x38, 0x1a, 0x5a, 0xfd, + 0x6c, 0x92, 0x13, 0xe4, 0x72, 0x2b, 0x9f, 0xeb, 0x00, 0x47, 0x8c, 0x14, 0x43, 0xa9, 0xdb, 0x1a, + 0x46, 0xde, 0x28, 0x20, 0x3c, 0xbb, 0xe5, 0xc4, 0x38, 0x26, 0xdc, 0xad, 0xa8, 0x7b, 0xec, 0xc5, + 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa3, 0xa9, 0x50, 0x8f, 0x48, 0x07, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -325,6 +344,22 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.ChainlinkDataStreamsPriceStates) > 0 { + for iNdEx := len(m.ChainlinkDataStreamsPriceStates) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ChainlinkDataStreamsPriceStates[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + } + } if len(m.StorkPublishers) > 0 { for iNdEx := len(m.StorkPublishers) - 1; iNdEx >= 0; iNdEx-- { i -= len(m.StorkPublishers[iNdEx]) @@ -674,6 +709,12 @@ func (m *GenesisState) Size() (n int) { n += 2 + l + sovGenesis(uint64(l)) } } + if len(m.ChainlinkDataStreamsPriceStates) > 0 { + for _, e := range m.ChainlinkDataStreamsPriceStates { + l = e.Size() + n += 2 + l + sovGenesis(uint64(l)) + } + } return n } @@ -1270,6 +1311,40 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { } m.StorkPublishers = append(m.StorkPublishers, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainlinkDataStreamsPriceStates", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainlinkDataStreamsPriceStates = append(m.ChainlinkDataStreamsPriceStates, &ChainlinkDataStreamsPriceState{}) + if err := m.ChainlinkDataStreamsPriceStates[len(m.ChainlinkDataStreamsPriceStates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) diff --git a/chain/oracle/types/msgs.go b/chain/oracle/types/msgs.go index ba4f9b5b..05d91510 100644 --- a/chain/oracle/types/msgs.go +++ b/chain/oracle/types/msgs.go @@ -24,17 +24,17 @@ const ( TypeMsgRelayProviderPrices = "relayProviderPrices" TypeMsgRelayPythPrices = "relayPythPrices" TypeMsgRelayStorkPrices = "relayStorkPrices" + TypeMsgRelayChainlinkPrices = "relayChainlinkPrices" TypeMsgUpdateParams = "updateParams" ) var ( _ sdk.Msg = &MsgRelayPriceFeedPrice{} - _ sdk.Msg = &MsgRelayBandRates{} _ sdk.Msg = &MsgRelayCoinbaseMessages{} - _ sdk.Msg = &MsgRequestBandIBCRates{} _ sdk.Msg = &MsgRelayProviderPrices{} _ sdk.Msg = &MsgRelayPythPrices{} _ sdk.Msg = &MsgRelayStorkPrices{} + _ sdk.Msg = &MsgRelayChainlinkPrices{} _ sdk.Msg = &MsgUpdateParams{} ) @@ -109,46 +109,6 @@ func (msg MsgRelayPriceFeedPrice) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{sender} } -// Route implements the sdk.Msg interface. It should return the name of the module -func (msg MsgRelayBandRates) Route() string { return RouterKey } - -// Type implements the sdk.Msg interface. It should return the action. -func (msg MsgRelayBandRates) Type() string { return TypeMsgRelayBandRates } - -// ValidateBasic implements the sdk.Msg interface for MsgRelay. -func (msg MsgRelayBandRates) ValidateBasic() error { - if msg.Relayer == "" { - return ErrEmptyRelayerAddr - } - - // check that the sizes of symbols,rates,resolveTimes,requestIDs are equal - symbolsCount := len(msg.Symbols) - if len(msg.Rates) != symbolsCount { - return ErrBadRatesCount - } - if len(msg.ResolveTimes) != symbolsCount { - return ErrBadResolveTimesCount - } - if len(msg.RequestIDs) != symbolsCount { - return ErrBadRequestIDsCount - } - return nil -} - -// GetSignBytes implements the sdk.Msg interface. It encodes the message for signing -func (msg *MsgRelayBandRates) GetSignBytes() []byte { - return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(msg)) -} - -// GetSigners implements the sdk.Msg interface. It defines whose signature is required -func (msg MsgRelayBandRates) GetSigners() []sdk.AccAddress { - sender, err := sdk.AccAddressFromBech32(msg.Relayer) - if err != nil { - panic(err) - } - return []sdk.AccAddress{sender} -} - // Route implements the sdk.Msg interface. It should return the name of the module func (msg MsgRelayCoinbaseMessages) Route() string { return RouterKey } @@ -183,54 +143,6 @@ func (msg MsgRelayCoinbaseMessages) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{sender} } -// NewMsgRequestBandIBCRates creates a new MsgRequestBandIBCRates instance. -func NewMsgRequestBandIBCRates( - sender sdk.AccAddress, - requestID uint64, -) *MsgRequestBandIBCRates { - return &MsgRequestBandIBCRates{ - Sender: sender.String(), - RequestId: requestID, - } -} - -// Route implements the sdk.Msg interface for MsgRequestData. -func (msg MsgRequestBandIBCRates) Route() string { return RouterKey } - -// Type implements the sdk.Msg interface for MsgRequestData. -func (msg MsgRequestBandIBCRates) Type() string { return TypeMsgRequestBandIBCRates } - -// ValidateBasic implements the sdk.Msg interface for MsgRequestData. -func (msg MsgRequestBandIBCRates) ValidateBasic() error { - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - return err - } - if sender.Empty() { - return errors.Wrapf(ErrInvalidBandIBCRequest, "MsgRequestBandIBCRates: Sender address must not be empty.") - } - - if msg.RequestId == 0 { - return errors.Wrapf(ErrInvalidBandIBCRequest, "MsgRequestBandIBCRates: requestID should be greater than zero") - } - return nil -} - -// GetSigners implements the sdk.Msg interface for MsgRequestData. -func (msg MsgRequestBandIBCRates) GetSigners() []sdk.AccAddress { - sender, err := sdk.AccAddressFromBech32(msg.Sender) - if err != nil { - panic(err) - } - return []sdk.AccAddress{sender} -} - -// GetSignBytes implements the sdk.Msg interface for MsgRequestData. -func (msg MsgRequestBandIBCRates) GetSignBytes() []byte { - bz := ModuleCdc.MustMarshalJSON(&msg) - return sdk.MustSortJSON(bz) -} - // Route implements the sdk.Msg interface. It should return the name of the module func (msg MsgRelayProviderPrices) Route() string { return RouterKey } @@ -341,7 +253,7 @@ func (msg MsgRelayStorkPrices) ValidateBasic() error { oldestTimestamp := ^uint64(0) // max uint64 for i := range assetPair.SignedPrices { p := assetPair.SignedPrices[i] - // convert timestamp to nanoseconds to validate conditions + // convert timestamp to nanoseconds to validate conditions timestamp := ConvertTimestampToNanoSecond(p.Timestamp) if timestamp > newestTimestamp { newestTimestamp = timestamp @@ -400,3 +312,32 @@ func ConvertTimestampToNanoSecond(timestamp uint64) (nanoSeconds uint64) { return timestamp * 1_000_000_000 } } + +// Route implements the sdk.Msg interface. It should return the name of the module +func (MsgRelayChainlinkPrices) Route() string { return RouterKey } + +// Type implements the sdk.Msg interface. It should return the action. +func (MsgRelayChainlinkPrices) Type() string { return TypeMsgRelayChainlinkPrices } + +// ValidateBasic implements the sdk.Msg interface for MsgRelayChainlinkPrices. +func (msg MsgRelayChainlinkPrices) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { + return err + } + + return nil +} + +// GetSignBytes implements the sdk.Msg interface. It encodes the message for signing +func (msg *MsgRelayChainlinkPrices) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(msg)) +} + +// GetSigners implements the sdk.Msg interface. It defines whose signature is required +func (msg MsgRelayChainlinkPrices) GetSigners() []sdk.AccAddress { + sender, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + panic(err) + } + return []sdk.AccAddress{sender} +} diff --git a/chain/oracle/types/oracle.go b/chain/oracle/types/oracle.go index a8c3335a..332c8c8e 100644 --- a/chain/oracle/types/oracle.go +++ b/chain/oracle/types/oracle.go @@ -23,10 +23,6 @@ func GetOracleType(oracleTypeStr string) (OracleType, error) { var oracleType OracleType switch oracleTypeStr { - case "band": - oracleType = OracleType_Band - case "bandibc": - oracleType = OracleType_BandIBC case "pricefeed": oracleType = OracleType_PriceFeed case "coinbase": @@ -37,8 +33,10 @@ func GetOracleType(oracleTypeStr string) (OracleType, error) { oracleType = OracleType_Pyth case "stork": oracleType = OracleType_Stork + case "chainlinkdatastreams": + oracleType = OracleType_ChainlinkDataStreams default: - return OracleType_Band, errors.Wrapf(ErrUnsupportedOracleType, "%s", oracleTypeStr) + return OracleType_Unspecified, errors.Wrapf(ErrUnsupportedOracleType, "%s", oracleTypeStr) } return oracleType, nil } diff --git a/chain/oracle/types/oracle.pb.go b/chain/oracle/types/oracle.pb.go index fe23bfa5..c121438f 100644 --- a/chain/oracle/types/oracle.pb.go +++ b/chain/oracle/types/oracle.pb.go @@ -32,19 +32,20 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type OracleType int32 const ( - OracleType_Unspecified OracleType = 0 - OracleType_Band OracleType = 1 - OracleType_PriceFeed OracleType = 2 - OracleType_Coinbase OracleType = 3 - OracleType_Chainlink OracleType = 4 - OracleType_Razor OracleType = 5 - OracleType_Dia OracleType = 6 - OracleType_API3 OracleType = 7 - OracleType_Uma OracleType = 8 - OracleType_Pyth OracleType = 9 - OracleType_BandIBC OracleType = 10 - OracleType_Provider OracleType = 11 - OracleType_Stork OracleType = 12 + OracleType_Unspecified OracleType = 0 + OracleType_Band OracleType = 1 // Deprecated: Do not use. + OracleType_PriceFeed OracleType = 2 + OracleType_Coinbase OracleType = 3 + OracleType_Chainlink OracleType = 4 + OracleType_Razor OracleType = 5 + OracleType_Dia OracleType = 6 + OracleType_API3 OracleType = 7 + OracleType_Uma OracleType = 8 + OracleType_Pyth OracleType = 9 + OracleType_BandIBC OracleType = 10 // Deprecated: Do not use. + OracleType_Provider OracleType = 11 + OracleType_Stork OracleType = 12 + OracleType_ChainlinkDataStreams OracleType = 13 ) var OracleType_name = map[int32]string{ @@ -61,22 +62,24 @@ var OracleType_name = map[int32]string{ 10: "BandIBC", 11: "Provider", 12: "Stork", + 13: "ChainlinkDataStreams", } var OracleType_value = map[string]int32{ - "Unspecified": 0, - "Band": 1, - "PriceFeed": 2, - "Coinbase": 3, - "Chainlink": 4, - "Razor": 5, - "Dia": 6, - "API3": 7, - "Uma": 8, - "Pyth": 9, - "BandIBC": 10, - "Provider": 11, - "Stork": 12, + "Unspecified": 0, + "Band": 1, + "PriceFeed": 2, + "Coinbase": 3, + "Chainlink": 4, + "Razor": 5, + "Dia": 6, + "API3": 7, + "Uma": 8, + "Pyth": 9, + "BandIBC": 10, + "Provider": 11, + "Stork": 12, + "ChainlinkDataStreams": 13, } func (x OracleType) String() string { @@ -88,7 +91,10 @@ func (OracleType) EnumDescriptor() ([]byte, []int) { } type Params struct { - PythContract string `protobuf:"bytes,1,opt,name=pyth_contract,json=pythContract,proto3" json:"pyth_contract,omitempty"` + PythContract string `protobuf:"bytes,1,opt,name=pyth_contract,json=pythContract,proto3" json:"pyth_contract,omitempty"` + ChainlinkVerifierProxyContract string `protobuf:"bytes,2,opt,name=chainlink_verifier_proxy_contract,json=chainlinkVerifierProxyContract,proto3" json:"chainlink_verifier_proxy_contract,omitempty"` + AcceptUnverifiedChainlinkDataStreamsReports bool `protobuf:"varint,3,opt,name=accept_unverified_chainlink_data_streams_reports,json=acceptUnverifiedChainlinkDataStreamsReports,proto3" json:"accept_unverified_chainlink_data_streams_reports,omitempty"` + ChainlinkDataStreamsVerificationGasLimit uint64 `protobuf:"varint,4,opt,name=chainlink_data_streams_verification_gas_limit,json=chainlinkDataStreamsVerificationGasLimit,proto3" json:"chainlink_data_streams_verification_gas_limit,omitempty"` } func (m *Params) Reset() { *m = Params{} } @@ -131,6 +137,27 @@ func (m *Params) GetPythContract() string { return "" } +func (m *Params) GetChainlinkVerifierProxyContract() string { + if m != nil { + return m.ChainlinkVerifierProxyContract + } + return "" +} + +func (m *Params) GetAcceptUnverifiedChainlinkDataStreamsReports() bool { + if m != nil { + return m.AcceptUnverifiedChainlinkDataStreamsReports + } + return false +} + +func (m *Params) GetChainlinkDataStreamsVerificationGasLimit() uint64 { + if m != nil { + return m.ChainlinkDataStreamsVerificationGasLimit + } + return 0 +} + type OracleInfo struct { Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"` OracleType OracleType `protobuf:"varint,2,opt,name=oracle_type,json=oracleType,proto3,enum=injective.oracle.v1beta1.OracleType" json:"oracle_type,omitempty"` @@ -244,6 +271,9 @@ func (m *ChainlinkPriceState) GetPriceState() PriceState { return PriceState{} } +// DEPRECATED! Oracle price from Band is no longer supported +// +// Deprecated: Do not use. type BandPriceState struct { Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"` Rate cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=rate,proto3,customtype=cosmossdk.io/math.Int" json:"rate"` @@ -881,6 +911,78 @@ func (m *PythPriceState) GetPriceState() PriceState { return PriceState{} } +type ChainlinkDataStreamsPriceState struct { + FeedId string `protobuf:"bytes,1,opt,name=feed_id,json=feedId,proto3" json:"feed_id,omitempty"` + ReportPrice cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=report_price,json=reportPrice,proto3,customtype=cosmossdk.io/math.Int" json:"report_price"` + ValidFromTimestamp uint64 `protobuf:"varint,3,opt,name=valid_from_timestamp,json=validFromTimestamp,proto3" json:"valid_from_timestamp,omitempty"` + ObservationsTimestamp uint64 `protobuf:"varint,4,opt,name=observations_timestamp,json=observationsTimestamp,proto3" json:"observations_timestamp,omitempty"` + PriceState PriceState `protobuf:"bytes,5,opt,name=price_state,json=priceState,proto3" json:"price_state"` +} + +func (m *ChainlinkDataStreamsPriceState) Reset() { *m = ChainlinkDataStreamsPriceState{} } +func (m *ChainlinkDataStreamsPriceState) String() string { return proto.CompactTextString(m) } +func (*ChainlinkDataStreamsPriceState) ProtoMessage() {} +func (*ChainlinkDataStreamsPriceState) Descriptor() ([]byte, []int) { + return fileDescriptor_1c8fbf1e7a765423, []int{14} +} +func (m *ChainlinkDataStreamsPriceState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ChainlinkDataStreamsPriceState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ChainlinkDataStreamsPriceState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ChainlinkDataStreamsPriceState) XXX_Merge(src proto.Message) { + xxx_messageInfo_ChainlinkDataStreamsPriceState.Merge(m, src) +} +func (m *ChainlinkDataStreamsPriceState) XXX_Size() int { + return m.Size() +} +func (m *ChainlinkDataStreamsPriceState) XXX_DiscardUnknown() { + xxx_messageInfo_ChainlinkDataStreamsPriceState.DiscardUnknown(m) +} + +var xxx_messageInfo_ChainlinkDataStreamsPriceState proto.InternalMessageInfo + +func (m *ChainlinkDataStreamsPriceState) GetFeedId() string { + if m != nil { + return m.FeedId + } + return "" +} + +func (m *ChainlinkDataStreamsPriceState) GetValidFromTimestamp() uint64 { + if m != nil { + return m.ValidFromTimestamp + } + return 0 +} + +func (m *ChainlinkDataStreamsPriceState) GetObservationsTimestamp() uint64 { + if m != nil { + return m.ObservationsTimestamp + } + return 0 +} + +func (m *ChainlinkDataStreamsPriceState) GetPriceState() PriceState { + if m != nil { + return m.PriceState + } + return PriceState{} +} + +// DEPRECATED! Oracle price from Band is no longer supported +// +// Deprecated: Do not use. type BandOracleRequest struct { // Unique Identifier for band ibc oracle request RequestId uint64 `protobuf:"varint,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` @@ -912,7 +1014,7 @@ func (m *BandOracleRequest) Reset() { *m = BandOracleRequest{} } func (m *BandOracleRequest) String() string { return proto.CompactTextString(m) } func (*BandOracleRequest) ProtoMessage() {} func (*BandOracleRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_1c8fbf1e7a765423, []int{14} + return fileDescriptor_1c8fbf1e7a765423, []int{15} } func (m *BandOracleRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1004,6 +1106,9 @@ func (m *BandOracleRequest) GetMinSourceCount() uint64 { return 0 } +// DEPRECATED! Oracle price from Band is no longer supported +// +// Deprecated: Do not use. type BandIBCParams struct { // true if Band IBC should be enabled BandIbcEnabled bool `protobuf:"varint,1,opt,name=band_ibc_enabled,json=bandIbcEnabled,proto3" json:"band_ibc_enabled,omitempty"` @@ -1023,7 +1128,7 @@ func (m *BandIBCParams) Reset() { *m = BandIBCParams{} } func (m *BandIBCParams) String() string { return proto.CompactTextString(m) } func (*BandIBCParams) ProtoMessage() {} func (*BandIBCParams) Descriptor() ([]byte, []int) { - return fileDescriptor_1c8fbf1e7a765423, []int{15} + return fileDescriptor_1c8fbf1e7a765423, []int{16} } func (m *BandIBCParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1104,7 +1209,7 @@ func (m *SymbolPriceTimestamp) Reset() { *m = SymbolPriceTimestamp{} } func (m *SymbolPriceTimestamp) String() string { return proto.CompactTextString(m) } func (*SymbolPriceTimestamp) ProtoMessage() {} func (*SymbolPriceTimestamp) Descriptor() ([]byte, []int) { - return fileDescriptor_1c8fbf1e7a765423, []int{16} + return fileDescriptor_1c8fbf1e7a765423, []int{17} } func (m *SymbolPriceTimestamp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1162,7 +1267,7 @@ func (m *LastPriceTimestamps) Reset() { *m = LastPriceTimestamps{} } func (m *LastPriceTimestamps) String() string { return proto.CompactTextString(m) } func (*LastPriceTimestamps) ProtoMessage() {} func (*LastPriceTimestamps) Descriptor() ([]byte, []int) { - return fileDescriptor_1c8fbf1e7a765423, []int{17} + return fileDescriptor_1c8fbf1e7a765423, []int{18} } func (m *LastPriceTimestamps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1208,7 +1313,7 @@ func (m *PriceRecords) Reset() { *m = PriceRecords{} } func (m *PriceRecords) String() string { return proto.CompactTextString(m) } func (*PriceRecords) ProtoMessage() {} func (*PriceRecords) Descriptor() ([]byte, []int) { - return fileDescriptor_1c8fbf1e7a765423, []int{18} + return fileDescriptor_1c8fbf1e7a765423, []int{19} } func (m *PriceRecords) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1267,7 +1372,7 @@ func (m *PriceRecord) Reset() { *m = PriceRecord{} } func (m *PriceRecord) String() string { return proto.CompactTextString(m) } func (*PriceRecord) ProtoMessage() {} func (*PriceRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_1c8fbf1e7a765423, []int{19} + return fileDescriptor_1c8fbf1e7a765423, []int{20} } func (m *PriceRecord) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1335,7 +1440,7 @@ func (m *MetadataStatistics) Reset() { *m = MetadataStatistics{} } func (m *MetadataStatistics) String() string { return proto.CompactTextString(m) } func (*MetadataStatistics) ProtoMessage() {} func (*MetadataStatistics) Descriptor() ([]byte, []int) { - return fileDescriptor_1c8fbf1e7a765423, []int{20} + return fileDescriptor_1c8fbf1e7a765423, []int{21} } func (m *MetadataStatistics) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1408,7 +1513,7 @@ func (m *PriceAttestation) Reset() { *m = PriceAttestation{} } func (m *PriceAttestation) String() string { return proto.CompactTextString(m) } func (*PriceAttestation) ProtoMessage() {} func (*PriceAttestation) Descriptor() ([]byte, []int) { - return fileDescriptor_1c8fbf1e7a765423, []int{21} + return fileDescriptor_1c8fbf1e7a765423, []int{22} } func (m *PriceAttestation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1502,7 +1607,7 @@ func (m *AssetPair) Reset() { *m = AssetPair{} } func (m *AssetPair) String() string { return proto.CompactTextString(m) } func (*AssetPair) ProtoMessage() {} func (*AssetPair) Descriptor() ([]byte, []int) { - return fileDescriptor_1c8fbf1e7a765423, []int{22} + return fileDescriptor_1c8fbf1e7a765423, []int{23} } func (m *AssetPair) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1556,7 +1661,7 @@ func (m *SignedPriceOfAssetPair) Reset() { *m = SignedPriceOfAssetPair{} func (m *SignedPriceOfAssetPair) String() string { return proto.CompactTextString(m) } func (*SignedPriceOfAssetPair) ProtoMessage() {} func (*SignedPriceOfAssetPair) Descriptor() ([]byte, []int) { - return fileDescriptor_1c8fbf1e7a765423, []int{23} + return fileDescriptor_1c8fbf1e7a765423, []int{24} } func (m *SignedPriceOfAssetPair) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1606,6 +1711,74 @@ func (m *SignedPriceOfAssetPair) GetSignature() []byte { return nil } +type ChainlinkReport struct { + FeedId []byte `protobuf:"bytes,1,opt,name=feed_id,json=feedId,proto3" json:"feed_id,omitempty"` + FullReport []byte `protobuf:"bytes,2,opt,name=full_report,json=fullReport,proto3" json:"full_report,omitempty"` + ValidFromTimestamp uint64 `protobuf:"varint,3,opt,name=valid_from_timestamp,json=validFromTimestamp,proto3" json:"valid_from_timestamp,omitempty"` + ObservationsTimestamp uint64 `protobuf:"varint,4,opt,name=observations_timestamp,json=observationsTimestamp,proto3" json:"observations_timestamp,omitempty"` +} + +func (m *ChainlinkReport) Reset() { *m = ChainlinkReport{} } +func (m *ChainlinkReport) String() string { return proto.CompactTextString(m) } +func (*ChainlinkReport) ProtoMessage() {} +func (*ChainlinkReport) Descriptor() ([]byte, []int) { + return fileDescriptor_1c8fbf1e7a765423, []int{25} +} +func (m *ChainlinkReport) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ChainlinkReport) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ChainlinkReport.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ChainlinkReport) XXX_Merge(src proto.Message) { + xxx_messageInfo_ChainlinkReport.Merge(m, src) +} +func (m *ChainlinkReport) XXX_Size() int { + return m.Size() +} +func (m *ChainlinkReport) XXX_DiscardUnknown() { + xxx_messageInfo_ChainlinkReport.DiscardUnknown(m) +} + +var xxx_messageInfo_ChainlinkReport proto.InternalMessageInfo + +func (m *ChainlinkReport) GetFeedId() []byte { + if m != nil { + return m.FeedId + } + return nil +} + +func (m *ChainlinkReport) GetFullReport() []byte { + if m != nil { + return m.FullReport + } + return nil +} + +func (m *ChainlinkReport) GetValidFromTimestamp() uint64 { + if m != nil { + return m.ValidFromTimestamp + } + return 0 +} + +func (m *ChainlinkReport) GetObservationsTimestamp() uint64 { + if m != nil { + return m.ObservationsTimestamp + } + return 0 +} + func init() { proto.RegisterEnum("injective.oracle.v1beta1.OracleType", OracleType_name, OracleType_value) golang_proto.RegisterEnum("injective.oracle.v1beta1.OracleType", OracleType_name, OracleType_value) @@ -1637,6 +1810,8 @@ func init() { golang_proto.RegisterType((*PriceState)(nil), "injective.oracle.v1beta1.PriceState") proto.RegisterType((*PythPriceState)(nil), "injective.oracle.v1beta1.PythPriceState") golang_proto.RegisterType((*PythPriceState)(nil), "injective.oracle.v1beta1.PythPriceState") + proto.RegisterType((*ChainlinkDataStreamsPriceState)(nil), "injective.oracle.v1beta1.ChainlinkDataStreamsPriceState") + golang_proto.RegisterType((*ChainlinkDataStreamsPriceState)(nil), "injective.oracle.v1beta1.ChainlinkDataStreamsPriceState") proto.RegisterType((*BandOracleRequest)(nil), "injective.oracle.v1beta1.BandOracleRequest") golang_proto.RegisterType((*BandOracleRequest)(nil), "injective.oracle.v1beta1.BandOracleRequest") proto.RegisterType((*BandIBCParams)(nil), "injective.oracle.v1beta1.BandIBCParams") @@ -1657,6 +1832,8 @@ func init() { golang_proto.RegisterType((*AssetPair)(nil), "injective.oracle.v1beta1.AssetPair") proto.RegisterType((*SignedPriceOfAssetPair)(nil), "injective.oracle.v1beta1.SignedPriceOfAssetPair") golang_proto.RegisterType((*SignedPriceOfAssetPair)(nil), "injective.oracle.v1beta1.SignedPriceOfAssetPair") + proto.RegisterType((*ChainlinkReport)(nil), "injective.oracle.v1beta1.ChainlinkReport") + golang_proto.RegisterType((*ChainlinkReport)(nil), "injective.oracle.v1beta1.ChainlinkReport") } func init() { @@ -1667,120 +1844,134 @@ func init() { } var fileDescriptor_1c8fbf1e7a765423 = []byte{ - // 1794 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0xcd, 0x8f, 0x1c, 0x47, - 0x15, 0xdf, 0x9e, 0xef, 0x7e, 0xf3, 0xb1, 0xed, 0xda, 0xb5, 0x19, 0x3b, 0xc9, 0xec, 0xd2, 0xc1, - 0x30, 0xb2, 0x92, 0x19, 0xdb, 0x39, 0x20, 0x07, 0x84, 0xe2, 0x5d, 0xdb, 0x68, 0xe4, 0x85, 0xac, - 0x7a, 0x6d, 0x90, 0xb8, 0x0c, 0x35, 0xdd, 0x35, 0x3b, 0x95, 0xed, 0xaf, 0x74, 0xf5, 0x6c, 0x3c, - 0x96, 0xb8, 0xe6, 0xc0, 0x05, 0xfe, 0x01, 0x24, 0xce, 0x39, 0x71, 0x80, 0x13, 0x12, 0x42, 0x9c, - 0x72, 0x23, 0xa7, 0x08, 0x71, 0x08, 0x60, 0x1f, 0x40, 0x5c, 0xf9, 0x07, 0xd0, 0xab, 0xaa, 0xee, - 0xe9, 0xdd, 0x8d, 0xbd, 0x3b, 0x04, 0x5f, 0x76, 0xab, 0x5e, 0xbd, 0xf7, 0xea, 0xf7, 0x3e, 0xea, - 0xbd, 0xd7, 0x03, 0xd7, 0x79, 0xf8, 0x01, 0x73, 0x53, 0x7e, 0xcc, 0x86, 0x51, 0x42, 0x5d, 0x9f, - 0x0d, 0x8f, 0x6f, 0x4d, 0x58, 0x4a, 0x6f, 0xe9, 0xed, 0x20, 0x4e, 0xa2, 0x34, 0x22, 0xdd, 0x9c, - 0x6d, 0xa0, 0xe9, 0x9a, 0xed, 0xda, 0xe6, 0x61, 0x74, 0x18, 0x49, 0xa6, 0x21, 0xae, 0x14, 0xff, - 0xb5, 0x9e, 0x1b, 0x89, 0x20, 0x12, 0xc3, 0x09, 0x15, 0x4b, 0x8d, 0x6e, 0xc4, 0x43, 0x7d, 0x7e, - 0x89, 0x06, 0x3c, 0x8c, 0x86, 0xf2, 0xaf, 0x22, 0xd9, 0xf7, 0xa1, 0xb6, 0x4f, 0x13, 0x1a, 0x08, - 0xf2, 0x26, 0xb4, 0xe3, 0x45, 0x3a, 0x1b, 0xbb, 0x51, 0x98, 0x26, 0xd4, 0x4d, 0xbb, 0xc6, 0xb6, - 0xd1, 0x37, 0x9d, 0x16, 0x12, 0x77, 0x35, 0xed, 0xdd, 0x2b, 0xff, 0xfa, 0xf5, 0x96, 0xf1, 0xf3, - 0x7f, 0xfe, 0xe6, 0x46, 0x5b, 0xe3, 0x56, 0xc2, 0xf6, 0x11, 0xc0, 0xfb, 0x92, 0x30, 0x0a, 0xa7, - 0x11, 0xb9, 0x02, 0x35, 0xb1, 0x08, 0x26, 0x91, 0xaf, 0x75, 0xe8, 0x1d, 0xb9, 0x0f, 0x4d, 0x25, - 0x36, 0x4e, 0x17, 0x31, 0xeb, 0x96, 0xb6, 0x8d, 0x7e, 0xe7, 0xf6, 0x37, 0x06, 0x2f, 0xb2, 0x72, - 0xa0, 0x54, 0x3e, 0x5a, 0xc4, 0xcc, 0x81, 0x28, 0x5f, 0xdb, 0x9f, 0x1b, 0xb0, 0xb1, 0x3b, 0xa3, - 0x3c, 0xf4, 0x79, 0x78, 0xb4, 0x9f, 0x70, 0x97, 0x1d, 0xa4, 0x34, 0x65, 0xe4, 0x6b, 0x50, 0x9f, - 0x32, 0xe6, 0x8d, 0xb9, 0x97, 0xdd, 0x8b, 0xdb, 0x91, 0x47, 0xbe, 0x03, 0x35, 0x1a, 0x8a, 0x8f, - 0x58, 0x22, 0xaf, 0x34, 0x77, 0xde, 0xfc, 0xf4, 0x8b, 0xad, 0xb5, 0xbf, 0x7e, 0xb1, 0xf5, 0x9a, - 0xf2, 0x97, 0xf0, 0x8e, 0x06, 0x3c, 0x1a, 0x06, 0x34, 0x9d, 0x0d, 0xf6, 0xd8, 0x21, 0x75, 0x17, - 0xf7, 0x98, 0xeb, 0x68, 0x11, 0xf2, 0x3a, 0x98, 0x29, 0x0f, 0x98, 0x48, 0x69, 0x10, 0x77, 0xcb, - 0xdb, 0x46, 0xbf, 0xe2, 0x2c, 0x09, 0xe4, 0x21, 0x34, 0x63, 0x44, 0x30, 0x16, 0x08, 0xa1, 0x5b, - 0xd9, 0x36, 0xfa, 0xcd, 0x97, 0x99, 0xb4, 0x84, 0xbb, 0x53, 0x41, 0x14, 0x0e, 0xc4, 0x39, 0xc5, - 0xfe, 0xb7, 0x01, 0x9d, 0x1d, 0x1a, 0x7a, 0x05, 0x9b, 0x5e, 0xe4, 0xca, 0x5b, 0x50, 0x49, 0xf0, - 0x42, 0x65, 0xd0, 0x1b, 0xda, 0xa0, 0xcb, 0x67, 0x0d, 0x1a, 0x85, 0xa9, 0x23, 0x59, 0xc9, 0xd7, - 0xa1, 0x95, 0x30, 0x11, 0xf9, 0xc7, 0x6c, 0x8c, 0xf8, 0xb5, 0x2d, 0x4d, 0x4d, 0x7b, 0xc4, 0x03, - 0x46, 0xde, 0x00, 0x48, 0xd8, 0x87, 0x73, 0x26, 0xd2, 0xf1, 0xe8, 0x9e, 0x34, 0xa6, 0xe2, 0x98, - 0x9a, 0x32, 0xba, 0x77, 0xda, 0xd8, 0xea, 0x57, 0x32, 0xf6, 0x57, 0x06, 0x74, 0x24, 0xc3, 0x03, - 0xc6, 0x3c, 0x65, 0x2c, 0x81, 0x0a, 0xa6, 0xae, 0x36, 0x55, 0xae, 0xc9, 0x26, 0x54, 0x3f, 0x9c, - 0x47, 0x99, 0xa5, 0x8e, 0xda, 0x60, 0x26, 0x15, 0x91, 0x94, 0x2f, 0x8e, 0xa4, 0x88, 0x81, 0x5c, - 0x83, 0x46, 0xc2, 0x7c, 0xba, 0x60, 0x89, 0xe8, 0x56, 0xb6, 0xcb, 0x7d, 0xd3, 0xc9, 0xf7, 0xf6, - 0x03, 0x68, 0xed, 0x27, 0xd1, 0x31, 0xf7, 0x58, 0x22, 0x93, 0xfa, 0x1a, 0x34, 0x62, 0xbd, 0xd7, - 0x00, 0xf3, 0xfd, 0x09, 0x3d, 0xa5, 0x53, 0x7a, 0xfe, 0x60, 0x40, 0x3b, 0x53, 0xa4, 0x6e, 0x7d, - 0x08, 0xed, 0x4c, 0x72, 0xcc, 0xc3, 0x69, 0x24, 0xd5, 0x35, 0x6f, 0x7f, 0xf3, 0x65, 0xf0, 0x97, - 0x40, 0x9c, 0x56, 0x5c, 0x84, 0xf5, 0x53, 0xb8, 0x9c, 0x2b, 0x2b, 0xb8, 0x44, 0xe1, 0x68, 0xde, - 0x7e, 0xeb, 0x7c, 0xa5, 0x05, 0xdf, 0x6c, 0xc4, 0x67, 0x68, 0xc2, 0x9e, 0x01, 0x39, 0xcb, 0xfa, - 0xc2, 0xc4, 0x7c, 0x17, 0xaa, 0x2a, 0x26, 0xa5, 0x15, 0x62, 0xa2, 0x44, 0xec, 0x3b, 0xe8, 0x29, - 0x9d, 0x11, 0xd2, 0xb8, 0x0b, 0x27, 0x84, 0xfd, 0xb0, 0x90, 0x4c, 0x72, 0x41, 0xee, 0x40, 0x55, - 0xfa, 0x43, 0x09, 0x5f, 0xec, 0xcd, 0x2b, 0x09, 0xfb, 0xf7, 0x06, 0x90, 0xdd, 0x88, 0x87, 0x78, - 0x5f, 0xc1, 0x64, 0x02, 0x95, 0x23, 0x1e, 0x66, 0xc5, 0x45, 0xae, 0x4f, 0x56, 0x87, 0xd2, 0xe9, - 0xea, 0x60, 0x41, 0xf9, 0x88, 0x2d, 0x64, 0x7a, 0x9a, 0x0e, 0x2e, 0x11, 0xfd, 0x31, 0xf5, 0xe7, - 0x4c, 0x3f, 0x2e, 0xb5, 0xf9, 0xff, 0x3e, 0xac, 0x3f, 0x1b, 0xb0, 0x7e, 0x90, 0x46, 0x49, 0xb1, - 0x34, 0x9e, 0x80, 0x69, 0x9c, 0x86, 0xb9, 0x8c, 0x65, 0xe9, 0x44, 0x2c, 0xef, 0x64, 0x60, 0xcb, - 0x2b, 0xb8, 0xf0, 0x15, 0x58, 0xf4, 0x3b, 0x03, 0xa0, 0x60, 0xcc, 0xff, 0x1e, 0x59, 0xf2, 0x43, - 0xb0, 0xdc, 0x79, 0x30, 0xf7, 0x29, 0x62, 0x50, 0xef, 0x65, 0x95, 0x9e, 0xb0, 0xbe, 0x14, 0x56, - 0x49, 0x76, 0xa6, 0x39, 0x94, 0x0b, 0x7e, 0xb5, 0x3f, 0x2f, 0x41, 0x67, 0x7f, 0x91, 0xce, 0x0a, - 0xd8, 0xaf, 0x62, 0x15, 0x41, 0xbf, 0xe4, 0x4d, 0xaa, 0x2e, 0xf7, 0x23, 0x8f, 0xbc, 0x07, 0x26, - 0x0b, 0xe8, 0xea, 0xa0, 0x1a, 0x2c, 0xa0, 0x0a, 0xcd, 0xf7, 0x00, 0xd7, 0xd8, 0xc1, 0xa7, 0xab, - 0x84, 0xac, 0xce, 0x02, 0xba, 0x1b, 0x85, 0x53, 0xf2, 0x6d, 0xa8, 0x48, 0xd9, 0xca, 0xc5, 0x65, - 0xa5, 0x00, 0xb6, 0x96, 0x78, 0x3e, 0xf1, 0xb9, 0x98, 0xa9, 0xd6, 0x52, 0x55, 0xad, 0x45, 0xd3, - 0x64, 0x6b, 0x39, 0x95, 0x10, 0xb5, 0xaf, 0x94, 0x10, 0x1f, 0x97, 0xe1, 0x12, 0x36, 0x4a, 0x35, - 0x20, 0x38, 0xaa, 0x41, 0x15, 0xbb, 0x97, 0xf6, 0x6e, 0xa1, 0x7b, 0x79, 0xa4, 0x0f, 0x96, 0x9e, - 0x3e, 0x84, 0x9b, 0xf0, 0x58, 0x32, 0x95, 0x64, 0xc8, 0x3a, 0x8a, 0x7e, 0x20, 0xc9, 0x23, 0x8f, - 0x74, 0xa1, 0xae, 0x5e, 0x80, 0xe8, 0x96, 0x65, 0x35, 0xcf, 0xb6, 0xe4, 0x35, 0x30, 0xa9, 0x38, - 0x1a, 0xbb, 0xd1, 0x3c, 0x4c, 0xf5, 0x13, 0x6e, 0x50, 0x71, 0xb4, 0x8b, 0x7b, 0x3c, 0x0c, 0x78, - 0xa8, 0x0f, 0x95, 0x0b, 0x1a, 0x01, 0x0f, 0xd5, 0xe1, 0x0c, 0xcc, 0x29, 0x63, 0x63, 0x9f, 0x07, - 0x3c, 0xed, 0xd6, 0x64, 0x6d, 0xbe, 0x3a, 0x50, 0x9e, 0x1d, 0x60, 0x9d, 0xc9, 0x0d, 0xc7, 0xc2, - 0xb3, 0x73, 0x13, 0x4d, 0xfe, 0xe4, 0x6f, 0x5b, 0xfd, 0x43, 0x9e, 0xce, 0xe6, 0x93, 0x81, 0x1b, - 0x05, 0x43, 0x3d, 0xdc, 0xa9, 0x7f, 0x6f, 0x0b, 0xef, 0x68, 0x88, 0x53, 0x94, 0x90, 0x02, 0xc2, - 0x69, 0x4c, 0x19, 0xdb, 0x43, 0xe5, 0x64, 0x0b, 0x3d, 0xcd, 0x62, 0x9a, 0xb0, 0xf1, 0x21, 0x15, - 0xdd, 0xba, 0x04, 0x02, 0x9a, 0xf4, 0x7d, 0x2a, 0x90, 0x81, 0x3d, 0x61, 0xee, 0x3c, 0x55, 0x0c, - 0x0d, 0xc5, 0xa0, 0x49, 0xc8, 0xd0, 0x07, 0x0b, 0x0d, 0x11, 0xd1, 0x3c, 0x71, 0x99, 0xb6, 0xc7, - 0x94, 0x5c, 0x9d, 0x80, 0x87, 0x07, 0x92, 0x2c, 0xad, 0xb2, 0x3f, 0x2e, 0x41, 0x1b, 0x03, 0x31, - 0xda, 0xd9, 0xd5, 0x63, 0x64, 0x1f, 0xac, 0x09, 0x0d, 0xbd, 0x31, 0x9f, 0xb8, 0x63, 0x16, 0xd2, - 0x89, 0xcf, 0x54, 0x28, 0x1a, 0x4e, 0x07, 0xe9, 0xa3, 0x89, 0x7b, 0x5f, 0x51, 0xc9, 0x4d, 0xd8, - 0x44, 0xa6, 0x3c, 0x64, 0x61, 0xca, 0x92, 0x63, 0xea, 0xeb, 0x98, 0x10, 0x3e, 0x71, 0x75, 0x60, - 0x47, 0xfa, 0x84, 0xbc, 0x05, 0x48, 0xcd, 0x71, 0xcd, 0x68, 0x18, 0x32, 0x5f, 0x57, 0x57, 0x8b, - 0x4f, 0x5c, 0x8d, 0x4c, 0xd1, 0xd1, 0x4c, 0xe4, 0x3e, 0x66, 0x89, 0xe0, 0x51, 0xa8, 0x92, 0xda, - 0x01, 0x3e, 0x71, 0x7f, 0xa4, 0x28, 0xa4, 0xa7, 0x18, 0xe2, 0x28, 0x91, 0xb9, 0x50, 0x95, 0x0c, - 0x26, 0x9f, 0xb8, 0xfb, 0x51, 0x82, 0x69, 0x70, 0x03, 0x2e, 0xf9, 0x32, 0xd1, 0xc7, 0x3a, 0x6f, - 0xb8, 0x27, 0x64, 0xe8, 0xca, 0xce, 0xba, 0x3a, 0xd0, 0x33, 0xaf, 0x27, 0xec, 0x5f, 0x18, 0xb0, - 0x79, 0x20, 0x93, 0x44, 0x26, 0xee, 0xa3, 0xbc, 0xb6, 0x7e, 0x17, 0x6a, 0x4a, 0x5a, 0x7a, 0xe1, - 0xa2, 0xe3, 0xae, 0x96, 0xc1, 0x94, 0x52, 0xa9, 0x97, 0x25, 0xab, 0xe9, 0x34, 0x14, 0x61, 0xe4, - 0x9d, 0x53, 0x7c, 0x16, 0xb0, 0xb1, 0x47, 0x45, 0x7a, 0x12, 0x8e, 0x20, 0x13, 0xb8, 0xec, 0x53, - 0x91, 0xea, 0x59, 0x21, 0x67, 0x17, 0x5d, 0x43, 0xe6, 0xe4, 0xe0, 0xc5, 0xf0, 0xbe, 0xcc, 0x3c, - 0x67, 0xc3, 0x3f, 0x7b, 0x87, 0xfd, 0x27, 0x03, 0x67, 0x27, 0xee, 0x32, 0x87, 0xb9, 0x51, 0xe2, - 0x89, 0x57, 0xe9, 0x84, 0x1f, 0xc3, 0xa6, 0x8f, 0x63, 0x4a, 0x66, 0x51, 0xa2, 0xae, 0x94, 0x0f, - 0xb7, 0x79, 0xfb, 0xfa, 0x39, 0x05, 0x46, 0x01, 0x74, 0x88, 0x52, 0x51, 0xc4, 0x6c, 0x4f, 0xa1, - 0x59, 0xd8, 0x9f, 0xed, 0xa0, 0x45, 0x67, 0x2f, 0x5b, 0x52, 0x69, 0xe5, 0x61, 0xe3, 0x3f, 0x65, - 0x20, 0x3f, 0x60, 0x29, 0xf5, 0x68, 0x4a, 0xb1, 0xba, 0x71, 0x91, 0x72, 0x57, 0x3e, 0xd2, 0xc3, - 0x24, 0x9a, 0xc7, 0xfa, 0xf9, 0xe1, 0x8d, 0x6d, 0x07, 0x24, 0x49, 0x15, 0x94, 0x01, 0x6c, 0x68, - 0x5b, 0xc7, 0x82, 0x06, 0x31, 0x96, 0x35, 0xfe, 0x54, 0x01, 0x68, 0x3b, 0x97, 0xf4, 0xd1, 0x81, - 0x3c, 0x39, 0xe0, 0x4f, 0x19, 0x16, 0xf7, 0x80, 0xd1, 0x70, 0x95, 0xc6, 0x20, 0x05, 0x50, 0x30, - 0xfd, 0x88, 0xc6, 0x2b, 0x75, 0x05, 0x14, 0x20, 0xdf, 0x82, 0xf5, 0x29, 0x4f, 0x44, 0xba, 0xcc, - 0x32, 0xf9, 0xc6, 0xca, 0x4e, 0x47, 0x92, 0x97, 0x6f, 0xe4, 0x3a, 0x74, 0x64, 0x4e, 0x2e, 0xf9, - 0x6a, 0x92, 0xaf, 0x8d, 0xd4, 0x25, 0xdb, 0x7b, 0xaa, 0xbe, 0x2a, 0x47, 0xd7, 0x57, 0x68, 0x90, - 0x01, 0x0f, 0x55, 0x83, 0x44, 0x0d, 0xf4, 0x89, 0xd6, 0xd0, 0x58, 0x45, 0x03, 0x7d, 0xa2, 0x34, - 0x3c, 0x80, 0x56, 0xc0, 0x3c, 0x4e, 0x33, 0x18, 0xe6, 0xc5, 0x95, 0x34, 0x95, 0xa0, 0xd4, 0x63, - 0xff, 0xc3, 0x00, 0x4b, 0xae, 0xee, 0xa6, 0x98, 0x79, 0x34, 0xc5, 0x82, 0xf4, 0x92, 0xe1, 0x60, - 0xb3, 0x98, 0x60, 0xe5, 0x6c, 0x9c, 0x21, 0xba, 0x61, 0xab, 0x4f, 0x39, 0xd5, 0x8b, 0x09, 0x54, - 0xd8, 0x93, 0x38, 0x92, 0xe1, 0xaa, 0x3a, 0x72, 0x8d, 0x2f, 0x68, 0x39, 0x5a, 0xa8, 0x18, 0x2c, - 0xa7, 0x86, 0xab, 0x85, 0xa9, 0xa1, 0x26, 0x15, 0xe5, 0x03, 0x81, 0x3e, 0x92, 0xfa, 0xea, 0x52, - 0x1f, 0x1e, 0xdd, 0x47, 0x95, 0xa7, 0x5b, 0x7e, 0x43, 0x6a, 0x2d, 0xb6, 0x7c, 0xfb, 0x67, 0x60, - 0xde, 0x15, 0x82, 0xa5, 0xfb, 0x94, 0x27, 0xa8, 0x8a, 0xe2, 0xa6, 0x60, 0x9b, 0xdc, 0x8f, 0x3c, - 0xf2, 0x18, 0xda, 0x82, 0x1f, 0x86, 0xcc, 0x53, 0x00, 0xb3, 0x4f, 0x97, 0x9b, 0x2f, 0x29, 0x45, - 0x92, 0x5d, 0xc2, 0x7f, 0x7f, 0x9a, 0xdf, 0xe1, 0xb4, 0xc4, 0x92, 0x2e, 0xec, 0xdf, 0x1a, 0x70, - 0xe5, 0xcb, 0x19, 0xe5, 0x6f, 0x1d, 0x0a, 0x28, 0x4b, 0xc6, 0x38, 0xa1, 0x67, 0xbf, 0x75, 0x64, - 0xc4, 0x87, 0x6c, 0x71, 0xce, 0x68, 0x9f, 0xbf, 0xf8, 0xf2, 0xca, 0x43, 0xe8, 0xeb, 0x60, 0x22, - 0x50, 0x9a, 0xce, 0x13, 0xf5, 0x1d, 0xd0, 0x72, 0x96, 0x84, 0x1b, 0x9f, 0x18, 0xd9, 0x6f, 0x29, - 0x58, 0x04, 0xc9, 0x3a, 0x34, 0x1f, 0x87, 0x22, 0x66, 0x2e, 0x9f, 0x72, 0xe6, 0x59, 0x6b, 0xa4, - 0x01, 0x15, 0xec, 0xb8, 0x96, 0x41, 0xda, 0x60, 0xe6, 0xdf, 0x3c, 0x56, 0x89, 0xb4, 0xa0, 0x91, - 0x7d, 0xb4, 0x58, 0x65, 0x3c, 0xcc, 0x7f, 0x23, 0xb1, 0x2a, 0xc4, 0x84, 0xaa, 0x43, 0x9f, 0x46, - 0x89, 0x55, 0x25, 0x75, 0x28, 0xdf, 0xe3, 0xd4, 0xaa, 0xa1, 0xa6, 0xbb, 0xfb, 0xa3, 0x77, 0xac, - 0x3a, 0x92, 0x1e, 0x07, 0xd4, 0x6a, 0x20, 0x09, 0x07, 0x56, 0xcb, 0x24, 0x4d, 0xa8, 0xeb, 0xc6, - 0x6e, 0x01, 0xaa, 0xce, 0x3e, 0x01, 0xad, 0x26, 0xea, 0x92, 0xdf, 0x17, 0x56, 0x6b, 0xe7, 0x83, - 0x4f, 0x9f, 0xf5, 0x8c, 0xcf, 0x9e, 0xf5, 0x8c, 0xbf, 0x3f, 0xeb, 0x19, 0xbf, 0x7c, 0xde, 0x5b, - 0xfb, 0xe3, 0xf3, 0x9e, 0xf1, 0xd9, 0xf3, 0xde, 0xda, 0x5f, 0x9e, 0xf7, 0xd6, 0x7e, 0xb2, 0x57, - 0x98, 0x5e, 0x46, 0x59, 0x2c, 0xf7, 0xe8, 0x44, 0x0c, 0xf3, 0xc8, 0xbe, 0xed, 0x46, 0x09, 0x2b, - 0x6e, 0x11, 0xf3, 0x30, 0x88, 0xbc, 0xb9, 0xcf, 0x44, 0xf6, 0xe3, 0x98, 0x9c, 0x73, 0x26, 0x35, - 0xf9, 0x8b, 0xd5, 0x3b, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x3f, 0xe6, 0xeb, 0x89, 0x3d, 0x13, - 0x00, 0x00, + // 2029 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4f, 0x6f, 0x1c, 0x49, + 0x15, 0x4f, 0xcf, 0x8c, 0xe7, 0xcf, 0x9b, 0x19, 0xbb, 0x53, 0x71, 0xc2, 0x24, 0xbb, 0x3b, 0xce, + 0xce, 0x12, 0xb0, 0xc2, 0x66, 0x26, 0xc9, 0x0a, 0xa1, 0x04, 0x84, 0x12, 0x3b, 0xc9, 0x6a, 0x94, + 0xc0, 0x5a, 0xed, 0x24, 0x48, 0x5c, 0x9a, 0x9a, 0xee, 0x1a, 0xbb, 0xd6, 0xdd, 0x5d, 0xbd, 0x5d, + 0x3d, 0x5e, 0x4f, 0x24, 0xbe, 0x40, 0x2e, 0xf0, 0x05, 0x90, 0x38, 0x73, 0x02, 0x09, 0x4e, 0x48, + 0x08, 0x71, 0xda, 0x03, 0x12, 0x7b, 0x5a, 0xad, 0x38, 0x2c, 0x90, 0x1c, 0xe0, 0xc4, 0x85, 0x2f, + 0x80, 0x5e, 0x55, 0x75, 0x4f, 0xfb, 0x5f, 0xec, 0x21, 0xec, 0x5e, 0xec, 0xae, 0x57, 0xef, 0xbd, + 0x7a, 0xff, 0xea, 0xbd, 0x5f, 0x0d, 0x5c, 0xe1, 0xd1, 0x87, 0xcc, 0x4b, 0xf9, 0x2e, 0x1b, 0x88, + 0x84, 0x7a, 0x01, 0x1b, 0xec, 0xde, 0x18, 0xb1, 0x94, 0xde, 0x30, 0xcb, 0x7e, 0x9c, 0x88, 0x54, + 0x90, 0x4e, 0xce, 0xd6, 0x37, 0x74, 0xc3, 0x76, 0x69, 0x79, 0x4b, 0x6c, 0x09, 0xc5, 0x34, 0xc0, + 0x2f, 0xcd, 0x7f, 0xa9, 0xeb, 0x09, 0x19, 0x0a, 0x39, 0x18, 0x51, 0x39, 0xd3, 0xe8, 0x09, 0x1e, + 0x99, 0xfd, 0xb3, 0x34, 0xe4, 0x91, 0x18, 0xa8, 0xbf, 0x9a, 0xd4, 0xfb, 0xbc, 0x04, 0xd5, 0x0d, + 0x9a, 0xd0, 0x50, 0x92, 0x77, 0xa0, 0x1d, 0x4f, 0xd3, 0x6d, 0xd7, 0x13, 0x51, 0x9a, 0x50, 0x2f, + 0xed, 0x58, 0x97, 0xad, 0xd5, 0x86, 0xd3, 0x42, 0xe2, 0xba, 0xa1, 0x91, 0x21, 0xbc, 0xed, 0x6d, + 0x53, 0x1e, 0x05, 0x3c, 0xda, 0x71, 0x77, 0x59, 0xc2, 0xc7, 0x9c, 0x25, 0x6e, 0x9c, 0x88, 0xbd, + 0xe9, 0x4c, 0xb0, 0xa4, 0x04, 0xbb, 0x39, 0xe3, 0x53, 0xc3, 0xb7, 0x81, 0x6c, 0xb9, 0x2a, 0x06, + 0xd7, 0xa9, 0xe7, 0xb1, 0x38, 0x75, 0x27, 0x91, 0xd1, 0xe4, 0xbb, 0x33, 0xe5, 0x3e, 0x4d, 0xa9, + 0x2b, 0xd3, 0x84, 0xd1, 0x50, 0xba, 0x09, 0x8b, 0x45, 0x92, 0xca, 0x4e, 0xf9, 0xb2, 0xb5, 0x5a, + 0x77, 0xbe, 0xa5, 0xe5, 0x9e, 0xe4, 0x62, 0xeb, 0x99, 0xd4, 0x3d, 0x9a, 0xd2, 0x4d, 0x2d, 0xe3, + 0x68, 0x11, 0xe2, 0xc2, 0xb5, 0x63, 0x94, 0x6a, 0x69, 0x8f, 0xa6, 0x5c, 0x44, 0xee, 0x16, 0x95, + 0x6e, 0xc0, 0x43, 0x9e, 0x76, 0x2a, 0x97, 0xad, 0xd5, 0x8a, 0xb3, 0xea, 0x1d, 0xa1, 0xf3, 0x69, + 0x41, 0xe2, 0x7d, 0x2a, 0x1f, 0x21, 0xff, 0xed, 0x0b, 0xff, 0xfa, 0xe5, 0x8a, 0xf5, 0xfc, 0x9f, + 0xbf, 0xbe, 0xda, 0x36, 0xb9, 0xd4, 0xf1, 0xec, 0xed, 0x00, 0x7c, 0xa0, 0x08, 0xc3, 0x68, 0x2c, + 0xc8, 0x05, 0xa8, 0xca, 0x69, 0x38, 0x12, 0x81, 0x09, 0xab, 0x59, 0x91, 0xfb, 0xd0, 0xd4, 0x62, + 0x6e, 0x3a, 0x8d, 0x99, 0x0a, 0xdd, 0xe2, 0xcd, 0xaf, 0xf7, 0x8f, 0xcb, 0x7c, 0x5f, 0xab, 0x7c, + 0x3c, 0x8d, 0x99, 0x03, 0x22, 0xff, 0xee, 0x7d, 0x66, 0xc1, 0xb9, 0x3c, 0x0a, 0x1b, 0x09, 0xf7, + 0xd8, 0x66, 0x4a, 0x53, 0x46, 0xbe, 0x06, 0xb5, 0x31, 0x63, 0xbe, 0xcb, 0xfd, 0xec, 0x5c, 0x5c, + 0x0e, 0x7d, 0xf2, 0x5d, 0xa8, 0xd2, 0x48, 0x7e, 0xcc, 0x12, 0x9d, 0xad, 0xb5, 0x77, 0x3e, 0xf9, + 0x62, 0xe5, 0xcc, 0x5f, 0xbf, 0x58, 0x79, 0x43, 0xd7, 0x90, 0xf4, 0x77, 0xfa, 0x5c, 0x0c, 0x42, + 0x9a, 0x6e, 0xf7, 0x1f, 0xb1, 0x2d, 0xea, 0x4d, 0xef, 0x31, 0xcf, 0x31, 0x22, 0xe4, 0x4d, 0x68, + 0xa4, 0x3c, 0x64, 0x32, 0xa5, 0x61, 0xac, 0x72, 0x52, 0x71, 0x66, 0x04, 0xf2, 0x10, 0x9a, 0x31, + 0x5a, 0xe0, 0x4a, 0x34, 0x41, 0xc5, 0xb3, 0xf9, 0x2a, 0x97, 0x66, 0xe6, 0xae, 0x55, 0xd0, 0x0a, + 0x07, 0xe2, 0x9c, 0xd2, 0xfb, 0xb7, 0x05, 0x8b, 0x6b, 0x34, 0xf2, 0x0b, 0x3e, 0x1d, 0x17, 0xca, + 0x1b, 0x50, 0x49, 0xf0, 0x40, 0xed, 0xd0, 0x5b, 0xc6, 0xa1, 0xf3, 0x87, 0x1d, 0x1a, 0x46, 0xa9, + 0xa3, 0x58, 0xc9, 0xdb, 0xd0, 0x4a, 0x98, 0x14, 0xc1, 0x2e, 0x73, 0xd1, 0x7e, 0xe3, 0x4b, 0xd3, + 0xd0, 0x1e, 0xf3, 0x90, 0x91, 0xb7, 0x00, 0x12, 0xf6, 0xd1, 0x84, 0xc9, 0xd4, 0x1d, 0xde, 0x33, + 0xc5, 0xd1, 0x30, 0x94, 0xe1, 0xbd, 0x83, 0xce, 0x2e, 0xbc, 0x8e, 0xb3, 0xb7, 0x4b, 0x1d, 0xab, + 0xf7, 0x0b, 0x0b, 0x16, 0x15, 0xd3, 0x03, 0xc6, 0x7c, 0xed, 0x30, 0x81, 0x0a, 0x5e, 0x69, 0xe3, + 0xae, 0xfa, 0x26, 0xcb, 0xb0, 0xf0, 0xd1, 0x44, 0x64, 0xde, 0x3a, 0x7a, 0x81, 0xd5, 0x54, 0xb4, + 0xa6, 0x7c, 0x7a, 0x6b, 0x8a, 0x76, 0x90, 0x4b, 0x50, 0x4f, 0x58, 0x40, 0xa7, 0x2c, 0x91, 0x9d, + 0xca, 0xe5, 0xf2, 0x6a, 0xc3, 0xc9, 0xd7, 0xbd, 0x07, 0xd0, 0xda, 0x48, 0xc4, 0x2e, 0xf7, 0x59, + 0xa2, 0x0a, 0xfb, 0x12, 0xd4, 0x63, 0xb3, 0x36, 0x06, 0xe6, 0xeb, 0x7d, 0x7a, 0x4a, 0x07, 0xf4, + 0xfc, 0xc1, 0x82, 0x76, 0xa6, 0x48, 0x9f, 0xfa, 0x10, 0xda, 0x99, 0xa4, 0xcb, 0xa3, 0xb1, 0x50, + 0xea, 0x9a, 0x37, 0xbf, 0xf1, 0x2a, 0xf3, 0x67, 0x86, 0x38, 0xad, 0xb8, 0x68, 0xd6, 0x4f, 0xe0, + 0x7c, 0xae, 0xac, 0x10, 0x12, 0x6d, 0x47, 0xf3, 0xe6, 0xbb, 0x27, 0x2b, 0x2d, 0xc4, 0xe6, 0x5c, + 0x7c, 0x88, 0x26, 0x7b, 0xdb, 0x40, 0x0e, 0xb3, 0x1e, 0x5b, 0x9c, 0xb7, 0x61, 0x41, 0xe7, 0xa4, + 0x34, 0x47, 0x4e, 0xb4, 0x48, 0xef, 0x16, 0x46, 0xca, 0x54, 0x84, 0x72, 0xee, 0xd4, 0x05, 0xd1, + 0x7b, 0x58, 0x28, 0x26, 0xf5, 0x41, 0x6e, 0xc1, 0x82, 0x8a, 0x87, 0x16, 0x3e, 0xdd, 0xbd, 0xd7, + 0x12, 0xbd, 0xdf, 0x5b, 0x40, 0xd6, 0x05, 0x8f, 0xf0, 0xbc, 0x82, 0xcb, 0x04, 0x2a, 0x3b, 0x3c, + 0xca, 0x1a, 0x8c, 0xfa, 0xde, 0xdf, 0x21, 0x4a, 0x07, 0x3b, 0x84, 0x0d, 0xe5, 0x1d, 0x36, 0x55, + 0xe5, 0xd9, 0x70, 0xf0, 0x13, 0xad, 0xdf, 0xa5, 0xc1, 0x84, 0x99, 0x0b, 0xa6, 0x17, 0xff, 0xd7, + 0xcb, 0xd5, 0xfb, 0x8b, 0x05, 0x4b, 0x9b, 0xa9, 0x48, 0x8a, 0xed, 0x71, 0x9f, 0x99, 0xd6, 0x41, + 0x33, 0x67, 0xb9, 0x2c, 0xed, 0xcb, 0xe5, 0xad, 0xcc, 0xd8, 0xf2, 0x1c, 0x21, 0xfc, 0x12, 0x3c, + 0xfa, 0x9d, 0x05, 0x50, 0x70, 0xe6, 0x7f, 0xcf, 0x2c, 0xf9, 0x21, 0xd8, 0xde, 0x24, 0x9c, 0x04, + 0x14, 0x6d, 0xd0, 0xf7, 0x65, 0x9e, 0xb9, 0xb0, 0x34, 0x13, 0xd6, 0x45, 0x76, 0x68, 0x40, 0x94, + 0x0b, 0x71, 0xed, 0x7d, 0x56, 0x82, 0xc5, 0x8d, 0x69, 0xba, 0x5d, 0xb0, 0xfd, 0x22, 0x76, 0x11, + 0x8c, 0x4b, 0x3e, 0xa8, 0x6a, 0x6a, 0x3d, 0xf4, 0xc9, 0x1d, 0x68, 0xb0, 0x90, 0xce, 0x6f, 0x54, + 0x9d, 0x85, 0x54, 0x5b, 0xf3, 0x7d, 0xc0, 0x6f, 0xc4, 0x27, 0xe3, 0x79, 0x52, 0x56, 0x63, 0x21, + 0x5d, 0x17, 0xd1, 0x98, 0x7c, 0x07, 0x2a, 0x4a, 0xb6, 0x72, 0x7a, 0x59, 0x25, 0x80, 0xe3, 0x25, + 0x9e, 0x8c, 0x02, 0x2e, 0xb7, 0xf5, 0x78, 0x59, 0xd0, 0xe3, 0xc5, 0xd0, 0xd4, 0x78, 0x39, 0x50, + 0x10, 0xd5, 0xd7, 0x2a, 0x88, 0xdf, 0x94, 0xa0, 0x7b, 0x14, 0x16, 0x3a, 0x0d, 0x20, 0xb8, 0x83, + 0xa3, 0x10, 0x21, 0xd3, 0xbe, 0x48, 0x9f, 0x30, 0x45, 0x9b, 0x5a, 0x44, 0x87, 0xf9, 0x3a, 0x2c, + 0xef, 0xd2, 0x80, 0xfb, 0xee, 0x38, 0x11, 0xa1, 0x7b, 0x10, 0x20, 0x10, 0xb5, 0xf7, 0x20, 0x11, + 0xe1, 0xe3, 0xfc, 0x82, 0x7d, 0x1b, 0x2e, 0x88, 0x91, 0x64, 0xc9, 0xae, 0x42, 0x54, 0xb2, 0x20, + 0xa3, 0xdb, 0xc0, 0xf9, 0xe2, 0xee, 0xe3, 0xe3, 0x00, 0xc6, 0xeb, 0x5d, 0xa2, 0xe7, 0x65, 0x38, + 0x8b, 0x00, 0x43, 0x03, 0x2b, 0x47, 0x0f, 0xf6, 0xe2, 0xd4, 0x37, 0x91, 0x2a, 0x4c, 0x7d, 0x9f, + 0xac, 0x82, 0x6d, 0x50, 0x9b, 0xf4, 0x12, 0x1e, 0x2b, 0xa6, 0x92, 0x2a, 0xf3, 0x45, 0x4d, 0xdf, + 0x54, 0xe4, 0xa1, 0x4f, 0x3a, 0x50, 0xd3, 0x5d, 0x03, 0xc1, 0x2b, 0x4e, 0xc0, 0x6c, 0x49, 0xde, + 0x80, 0x06, 0x95, 0x3b, 0xae, 0x27, 0x26, 0x51, 0x06, 0x3a, 0xeb, 0x54, 0xee, 0xac, 0xe3, 0x1a, + 0x37, 0x43, 0x1e, 0x99, 0x4d, 0x5d, 0x36, 0xf5, 0x90, 0x47, 0x7a, 0x73, 0x1b, 0x1a, 0x63, 0xc6, + 0x0c, 0x5c, 0xad, 0xaa, 0x79, 0x76, 0xb1, 0xaf, 0x13, 0xd4, 0xc7, 0xde, 0x9c, 0x3b, 0x8e, 0xcd, + 0x7a, 0xed, 0x3a, 0xba, 0xfc, 0xab, 0xbf, 0xad, 0xac, 0x6e, 0xf1, 0x74, 0x7b, 0x32, 0xea, 0x7b, + 0x22, 0x1c, 0x98, 0x87, 0x82, 0xfe, 0x77, 0x4d, 0xfa, 0x3b, 0x03, 0x44, 0x9f, 0x52, 0x09, 0x48, + 0xa7, 0x3e, 0x66, 0x4c, 0x61, 0x5b, 0xb2, 0x82, 0x91, 0x66, 0x31, 0x4d, 0x18, 0x02, 0xe4, 0x4e, + 0x4d, 0x19, 0x02, 0x86, 0xf4, 0x3e, 0x95, 0xc8, 0xc0, 0xf6, 0x98, 0x37, 0x49, 0x35, 0x43, 0x5d, + 0x33, 0x18, 0x12, 0x32, 0xac, 0x82, 0x8d, 0x8e, 0x48, 0x31, 0x49, 0x3c, 0x66, 0xfc, 0x69, 0x28, + 0xae, 0xc5, 0x90, 0x47, 0x9b, 0x8a, 0xac, 0xbc, 0x52, 0xe0, 0xe7, 0x79, 0x09, 0xda, 0x98, 0x8c, + 0xe1, 0xda, 0xba, 0x79, 0x95, 0xac, 0x82, 0x3d, 0xa2, 0x91, 0xef, 0xf2, 0x91, 0xe7, 0xb2, 0x88, + 0x8e, 0x02, 0xa6, 0xd3, 0x51, 0x77, 0x16, 0x91, 0x3e, 0x1c, 0x79, 0xf7, 0x35, 0x15, 0xcb, 0x0f, + 0x99, 0xf2, 0xb4, 0x45, 0x29, 0x96, 0x4e, 0x60, 0xf2, 0x42, 0xf8, 0xc8, 0x33, 0xc9, 0x1d, 0x9a, + 0x1d, 0xf2, 0x2e, 0x20, 0x35, 0xb7, 0x6d, 0x9b, 0x46, 0x11, 0x0b, 0xcc, 0x54, 0xb2, 0xf9, 0xc8, + 0x33, 0xd6, 0x69, 0x3a, 0xba, 0x8a, 0xdc, 0xbb, 0x2c, 0x91, 0x5c, 0x44, 0xba, 0x19, 0x38, 0xc0, + 0x47, 0xde, 0x53, 0x4d, 0x21, 0x5d, 0xcd, 0xa0, 0xee, 0x10, 0xf7, 0x55, 0xd6, 0x1a, 0x4e, 0x83, + 0x8f, 0xbc, 0x0d, 0x91, 0x60, 0x29, 0x5c, 0x85, 0xb3, 0x81, 0x6a, 0x10, 0xae, 0xa9, 0x1d, 0xee, + 0x4b, 0x95, 0xbe, 0xb2, 0xb3, 0xa4, 0x37, 0xcc, 0x7b, 0xc1, 0x97, 0x2a, 0x18, 0x3f, 0xb3, 0x60, + 0x79, 0x53, 0x15, 0x8b, 0x2a, 0xe0, 0x59, 0xfd, 0x7f, 0x0f, 0xaa, 0x5a, 0x83, 0x8a, 0xc4, 0x69, + 0x9f, 0x0b, 0x46, 0x06, 0x4b, 0x4b, 0x97, 0x60, 0x56, 0xb4, 0x0d, 0xa7, 0xae, 0x09, 0x43, 0xff, + 0x84, 0xc6, 0x3d, 0x85, 0x73, 0x8f, 0xa8, 0x4c, 0xf7, 0x9b, 0x23, 0xc9, 0x08, 0xce, 0x07, 0x54, + 0x9a, 0xc6, 0x31, 0xbb, 0xc4, 0xb2, 0x63, 0xa9, 0xda, 0xec, 0x1f, 0x6f, 0xde, 0x51, 0xee, 0x39, + 0xe7, 0x82, 0xc3, 0x67, 0xf4, 0xfe, 0x64, 0x21, 0xee, 0xe4, 0x1e, 0x73, 0x98, 0x27, 0x12, 0x5f, + 0x7e, 0x99, 0x41, 0xf8, 0x11, 0x2c, 0x07, 0x08, 0xf1, 0x32, 0x8f, 0x12, 0x7d, 0xa4, 0xba, 0xc0, + 0xcd, 0x9b, 0x57, 0x4e, 0x68, 0x34, 0xda, 0x40, 0x87, 0x68, 0x15, 0x45, 0x9b, 0x7b, 0x63, 0x68, + 0x16, 0xd6, 0x87, 0xd1, 0x47, 0x31, 0xd8, 0xb3, 0x71, 0x5e, 0x9a, 0x1b, 0xa8, 0xfd, 0xa7, 0x0c, + 0xe4, 0x07, 0x2c, 0xa5, 0xbe, 0x1a, 0x01, 0x34, 0xe5, 0x32, 0xe5, 0x9e, 0xba, 0xac, 0x5b, 0x89, + 0x98, 0xc4, 0xe6, 0x1a, 0xe2, 0x89, 0x6d, 0x07, 0x14, 0x49, 0x37, 0x96, 0x3e, 0x9c, 0x33, 0xbe, + 0xba, 0x92, 0x86, 0x31, 0xb6, 0x37, 0xfe, 0x4c, 0x1b, 0xd0, 0x76, 0xce, 0x9a, 0xad, 0x4d, 0xb5, + 0xb3, 0xc9, 0x9f, 0x31, 0x1c, 0x8c, 0x21, 0xa3, 0xd1, 0x3c, 0x43, 0x55, 0x09, 0xa0, 0x60, 0xfa, + 0x31, 0x8d, 0xe7, 0x9a, 0xa8, 0x28, 0x40, 0xbe, 0x09, 0x4b, 0x63, 0x9e, 0xc8, 0xb4, 0x30, 0x2a, + 0x16, 0x74, 0xdf, 0x55, 0xe4, 0xd9, 0x1d, 0xb9, 0x02, 0x8b, 0xaa, 0x26, 0x67, 0x7c, 0x55, 0xc5, + 0xd7, 0x46, 0xea, 0x8c, 0xed, 0x8e, 0xee, 0xb3, 0x3a, 0xd0, 0xb5, 0x39, 0xc0, 0x45, 0xc8, 0x23, + 0x3d, 0xf5, 0x50, 0x03, 0xdd, 0x33, 0x1a, 0xea, 0xf3, 0x68, 0xa0, 0x7b, 0x5a, 0xc3, 0x03, 0x68, + 0x85, 0xcc, 0xe7, 0x34, 0x33, 0xa3, 0x71, 0x7a, 0x25, 0x4d, 0x2d, 0xa8, 0xf4, 0xf4, 0xfe, 0x61, + 0x81, 0xad, 0xbe, 0xee, 0xa6, 0x58, 0x79, 0x6a, 0x6a, 0xbe, 0x0a, 0x58, 0x2d, 0x17, 0x0b, 0xac, + 0x9c, 0x41, 0x41, 0x62, 0xc0, 0x8e, 0x9e, 0xda, 0x1a, 0xc7, 0x10, 0xa8, 0xb0, 0xbd, 0x58, 0xa8, + 0x74, 0x2d, 0x38, 0xea, 0x1b, 0x6f, 0xd0, 0x0c, 0x96, 0xe9, 0x1c, 0xcc, 0x10, 0xd7, 0xc5, 0x02, + 0xe2, 0xaa, 0x2a, 0x45, 0x39, 0x98, 0x32, 0x5b, 0x4a, 0x5f, 0x4d, 0xe9, 0xc3, 0xad, 0xfb, 0xa8, + 0xf2, 0x20, 0x5c, 0xaa, 0x2b, 0xad, 0x45, 0xb8, 0xd4, 0xfb, 0x29, 0x34, 0xee, 0x4a, 0xc9, 0xd2, + 0x0d, 0xca, 0x13, 0x54, 0x45, 0x71, 0x51, 0xf0, 0x4d, 0xad, 0x87, 0x3e, 0x79, 0x02, 0x6d, 0xc9, + 0xb7, 0x22, 0xe6, 0x6b, 0x03, 0xb3, 0x67, 0xdf, 0xf5, 0x57, 0xb4, 0x22, 0xc5, 0xae, 0xcc, 0xff, + 0x60, 0x9c, 0x9f, 0xe1, 0xb4, 0xe4, 0x8c, 0x2e, 0x7b, 0xbf, 0xb5, 0xe0, 0xc2, 0xd1, 0x8c, 0xea, + 0xe7, 0x33, 0x6d, 0x28, 0x4b, 0x5c, 0x7c, 0xdd, 0x64, 0x3f, 0x9f, 0x65, 0xc4, 0x87, 0x6c, 0x7a, + 0xc2, 0xb3, 0x28, 0xbf, 0xf1, 0xe5, 0xb9, 0x01, 0xfc, 0x9b, 0xd0, 0x40, 0x43, 0x69, 0x3a, 0x49, + 0xf4, 0x1b, 0xaa, 0xe5, 0xcc, 0x08, 0x68, 0xf6, 0x52, 0x8e, 0x0b, 0xf5, 0x0f, 0x63, 0x07, 0x81, + 0x60, 0x2b, 0x07, 0x82, 0x2b, 0xd0, 0x1c, 0x4f, 0x82, 0xc0, 0xfc, 0xe6, 0xa6, 0xac, 0x6c, 0x39, + 0x80, 0x24, 0x23, 0xf9, 0x55, 0xe1, 0xbc, 0xab, 0x7f, 0xb6, 0xb2, 0x9f, 0xd0, 0xb0, 0x77, 0x93, + 0x25, 0x68, 0x3e, 0x89, 0x64, 0xcc, 0x3c, 0xf5, 0x9b, 0x9f, 0x7d, 0x86, 0xb4, 0xa0, 0x82, 0x60, + 0xc1, 0xb6, 0x2e, 0x95, 0xea, 0x16, 0x69, 0x43, 0x23, 0x7f, 0xea, 0xda, 0x25, 0xd2, 0x82, 0x7a, + 0xf6, 0x56, 0xb5, 0xcb, 0xb8, 0x99, 0x07, 0xc0, 0xae, 0x90, 0x06, 0x2c, 0x38, 0xf4, 0x99, 0x48, + 0xec, 0x05, 0x52, 0x83, 0xf2, 0x3d, 0x4e, 0xed, 0x2a, 0xa9, 0x43, 0xe5, 0xee, 0xc6, 0xf0, 0x3d, + 0xbb, 0x86, 0xa4, 0x27, 0x21, 0xb5, 0xeb, 0x48, 0xc2, 0x77, 0x8a, 0xdd, 0x20, 0x4b, 0x50, 0x33, + 0xb8, 0xc4, 0x06, 0x75, 0x5a, 0x0b, 0xea, 0xd9, 0xeb, 0xdf, 0x6e, 0xa2, 0x3e, 0xf5, 0xb4, 0xb4, + 0x5b, 0xa4, 0x03, 0xcb, 0x47, 0x41, 0x70, 0xbb, 0xbd, 0xf6, 0xe1, 0x27, 0x2f, 0xba, 0xd6, 0xa7, + 0x2f, 0xba, 0xd6, 0xdf, 0x5f, 0x74, 0xad, 0x9f, 0xbf, 0xec, 0x9e, 0xf9, 0xe3, 0xcb, 0xae, 0xf5, + 0xe9, 0xcb, 0xee, 0x99, 0xcf, 0x5f, 0x76, 0xcf, 0xfc, 0xf8, 0x51, 0x01, 0x9e, 0x0d, 0xb3, 0x22, + 0x7d, 0x44, 0x47, 0x72, 0x90, 0x97, 0xec, 0x35, 0x4f, 0x24, 0xac, 0xb8, 0xc4, 0x73, 0x06, 0xa1, + 0xf0, 0x27, 0x01, 0x93, 0xd9, 0x2f, 0xc9, 0x0a, 0xc8, 0x8d, 0xaa, 0xea, 0xe7, 0xdd, 0xf7, 0xfe, + 0x1b, 0x00, 0x00, 0xff, 0xff, 0xc0, 0x82, 0xc0, 0x20, 0x6a, 0x16, 0x00, 0x00, } func (this *Params) Equal(that interface{}) bool { @@ -1805,6 +1996,15 @@ func (this *Params) Equal(that interface{}) bool { if this.PythContract != that1.PythContract { return false } + if this.ChainlinkVerifierProxyContract != that1.ChainlinkVerifierProxyContract { + return false + } + if this.AcceptUnverifiedChainlinkDataStreamsReports != that1.AcceptUnverifiedChainlinkDataStreamsReports { + return false + } + if this.ChainlinkDataStreamsVerificationGasLimit != that1.ChainlinkDataStreamsVerificationGasLimit { + return false + } return true } func (m *Params) Marshal() (dAtA []byte, err error) { @@ -1827,6 +2027,28 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.ChainlinkDataStreamsVerificationGasLimit != 0 { + i = encodeVarintOracle(dAtA, i, uint64(m.ChainlinkDataStreamsVerificationGasLimit)) + i-- + dAtA[i] = 0x20 + } + if m.AcceptUnverifiedChainlinkDataStreamsReports { + i-- + if m.AcceptUnverifiedChainlinkDataStreamsReports { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if len(m.ChainlinkVerifierProxyContract) > 0 { + i -= len(m.ChainlinkVerifierProxyContract) + copy(dAtA[i:], m.ChainlinkVerifierProxyContract) + i = encodeVarintOracle(dAtA, i, uint64(len(m.ChainlinkVerifierProxyContract))) + i-- + dAtA[i] = 0x12 + } if len(m.PythContract) > 0 { i -= len(m.PythContract) copy(dAtA[i:], m.PythContract) @@ -2480,6 +2702,66 @@ func (m *PythPriceState) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ChainlinkDataStreamsPriceState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ChainlinkDataStreamsPriceState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ChainlinkDataStreamsPriceState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.PriceState.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintOracle(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if m.ObservationsTimestamp != 0 { + i = encodeVarintOracle(dAtA, i, uint64(m.ObservationsTimestamp)) + i-- + dAtA[i] = 0x20 + } + if m.ValidFromTimestamp != 0 { + i = encodeVarintOracle(dAtA, i, uint64(m.ValidFromTimestamp)) + i-- + dAtA[i] = 0x18 + } + { + size := m.ReportPrice.Size() + i -= size + if _, err := m.ReportPrice.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintOracle(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.FeedId) > 0 { + i -= len(m.FeedId) + copy(dAtA[i:], m.FeedId) + i = encodeVarintOracle(dAtA, i, uint64(len(m.FeedId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *BandOracleRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2582,21 +2864,21 @@ func (m *BandIBCParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { var l int _ = l if len(m.LegacyOracleIds) > 0 { - dAtA10 := make([]byte, len(m.LegacyOracleIds)*10) - var j9 int + dAtA11 := make([]byte, len(m.LegacyOracleIds)*10) + var j10 int for _, num1 := range m.LegacyOracleIds { num := uint64(num1) for num >= 1<<7 { - dAtA10[j9] = uint8(uint64(num)&0x7f | 0x80) + dAtA11[j10] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j9++ + j10++ } - dAtA10[j9] = uint8(num) - j9++ + dAtA11[j10] = uint8(num) + j10++ } - i -= j9 - copy(dAtA[i:], dAtA10[:j9]) - i = encodeVarintOracle(dAtA, i, uint64(j9)) + i -= j10 + copy(dAtA[i:], dAtA11[:j10]) + i = encodeVarintOracle(dAtA, i, uint64(j10)) i-- dAtA[i] = 0x32 } @@ -3057,6 +3339,53 @@ func (m *SignedPriceOfAssetPair) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } +func (m *ChainlinkReport) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ChainlinkReport) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ChainlinkReport) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ObservationsTimestamp != 0 { + i = encodeVarintOracle(dAtA, i, uint64(m.ObservationsTimestamp)) + i-- + dAtA[i] = 0x20 + } + if m.ValidFromTimestamp != 0 { + i = encodeVarintOracle(dAtA, i, uint64(m.ValidFromTimestamp)) + i-- + dAtA[i] = 0x18 + } + if len(m.FullReport) > 0 { + i -= len(m.FullReport) + copy(dAtA[i:], m.FullReport) + i = encodeVarintOracle(dAtA, i, uint64(len(m.FullReport))) + i-- + dAtA[i] = 0x12 + } + if len(m.FeedId) > 0 { + i -= len(m.FeedId) + copy(dAtA[i:], m.FeedId) + i = encodeVarintOracle(dAtA, i, uint64(len(m.FeedId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintOracle(dAtA []byte, offset int, v uint64) int { offset -= sovOracle(v) base := offset @@ -3078,6 +3407,16 @@ func (m *Params) Size() (n int) { if l > 0 { n += 1 + l + sovOracle(uint64(l)) } + l = len(m.ChainlinkVerifierProxyContract) + if l > 0 { + n += 1 + l + sovOracle(uint64(l)) + } + if m.AcceptUnverifiedChainlinkDataStreamsReports { + n += 2 + } + if m.ChainlinkDataStreamsVerificationGasLimit != 0 { + n += 1 + sovOracle(uint64(m.ChainlinkDataStreamsVerificationGasLimit)) + } return n } @@ -3335,6 +3674,29 @@ func (m *PythPriceState) Size() (n int) { return n } +func (m *ChainlinkDataStreamsPriceState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.FeedId) + if l > 0 { + n += 1 + l + sovOracle(uint64(l)) + } + l = m.ReportPrice.Size() + n += 1 + l + sovOracle(uint64(l)) + if m.ValidFromTimestamp != 0 { + n += 1 + sovOracle(uint64(m.ValidFromTimestamp)) + } + if m.ObservationsTimestamp != 0 { + n += 1 + sovOracle(uint64(m.ObservationsTimestamp)) + } + l = m.PriceState.Size() + n += 1 + l + sovOracle(uint64(l)) + return n +} + func (m *BandOracleRequest) Size() (n int) { if m == nil { return 0 @@ -3587,12 +3949,35 @@ func (m *SignedPriceOfAssetPair) Size() (n int) { return n } -func sovOracle(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozOracle(x uint64) (n int) { - return sovOracle(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} +func (m *ChainlinkReport) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.FeedId) + if l > 0 { + n += 1 + l + sovOracle(uint64(l)) + } + l = len(m.FullReport) + if l > 0 { + n += 1 + l + sovOracle(uint64(l)) + } + if m.ValidFromTimestamp != 0 { + n += 1 + sovOracle(uint64(m.ValidFromTimestamp)) + } + if m.ObservationsTimestamp != 0 { + n += 1 + sovOracle(uint64(m.ObservationsTimestamp)) + } + return n +} + +func sovOracle(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozOracle(x uint64) (n int) { + return sovOracle(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} func (m *Params) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3654,6 +4039,77 @@ func (m *Params) Unmarshal(dAtA []byte) error { } m.PythContract = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainlinkVerifierProxyContract", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthOracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthOracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainlinkVerifierProxyContract = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AcceptUnverifiedChainlinkDataStreamsReports", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AcceptUnverifiedChainlinkDataStreamsReports = bool(v != 0) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainlinkDataStreamsVerificationGasLimit", wireType) + } + m.ChainlinkDataStreamsVerificationGasLimit = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ChainlinkDataStreamsVerificationGasLimit |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipOracle(dAtA[iNdEx:]) @@ -5589,6 +6045,193 @@ func (m *PythPriceState) Unmarshal(dAtA []byte) error { } return nil } +func (m *ChainlinkDataStreamsPriceState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ChainlinkDataStreamsPriceState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ChainlinkDataStreamsPriceState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FeedId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthOracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthOracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FeedId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReportPrice", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthOracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthOracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ReportPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidFromTimestamp", wireType) + } + m.ValidFromTimestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ValidFromTimestamp |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservationsTimestamp", wireType) + } + m.ObservationsTimestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ObservationsTimestamp |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PriceState", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthOracle + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthOracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PriceState.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipOracle(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthOracle + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *BandOracleRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -7337,6 +7980,162 @@ func (m *SignedPriceOfAssetPair) Unmarshal(dAtA []byte) error { } return nil } +func (m *ChainlinkReport) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ChainlinkReport: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ChainlinkReport: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FeedId", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthOracle + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthOracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FeedId = append(m.FeedId[:0], dAtA[iNdEx:postIndex]...) + if m.FeedId == nil { + m.FeedId = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FullReport", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthOracle + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthOracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FullReport = append(m.FullReport[:0], dAtA[iNdEx:postIndex]...) + if m.FullReport == nil { + m.FullReport = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidFromTimestamp", wireType) + } + m.ValidFromTimestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ValidFromTimestamp |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservationsTimestamp", wireType) + } + m.ObservationsTimestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ObservationsTimestamp |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipOracle(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthOracle + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipOracle(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/chain/oracle/types/params.go b/chain/oracle/types/params.go index 32aabfb1..d7ab55c0 100644 --- a/chain/oracle/types/params.go +++ b/chain/oracle/types/params.go @@ -6,6 +6,7 @@ import ( "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + "github.com/ethereum/go-ethereum/common" ) var _ paramtypes.ParamSet = &Params{} @@ -51,7 +52,10 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { // DefaultParams returns a default set of parameters. func DefaultParams() Params { return Params{ - PythContract: "", + PythContract: "", + ChainlinkVerifierProxyContract: "", + AcceptUnverifiedChainlinkDataStreamsReports: true, + ChainlinkDataStreamsVerificationGasLimit: 500_000, } } @@ -65,8 +69,14 @@ func DefaultBandIBCParams() BandIBCParams { } } -// Validate performs basic validation on auction parameters. +// Validate performs basic validation on oracle parameters. func (p Params) Validate() error { + if err := validatePythContract(p.PythContract); err != nil { + return fmt.Errorf("pyth_contract is incorrect: %w", err) + } + if err := ValidateChainlinkVerifierProxyContract(p.ChainlinkVerifierProxyContract); err != nil { + return fmt.Errorf("chainlink_verifier_proxy_contract is incorrect: %w", err) + } return nil } @@ -102,3 +112,21 @@ func validatePythContract(i interface{}) error { return nil } + +// ValidateChainlinkVerifierProxyContract validates the Chainlink verifier proxy contract address. +func ValidateChainlinkVerifierProxyContract(i any) error { + v, ok := i.(string) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if v == "" { + return nil + } + + if !common.IsHexAddress(v) { + return fmt.Errorf("invalid Ethereum address: %s", v) + } + + return nil +} diff --git a/chain/oracle/types/proposal.go b/chain/oracle/types/proposal.go index 2a6e8ce2..13a8ea21 100644 --- a/chain/oracle/types/proposal.go +++ b/chain/oracle/types/proposal.go @@ -4,16 +4,10 @@ import ( "fmt" "strings" - "cosmossdk.io/errors" sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" - bandobi "github.com/bandprotocol/bandchain-packet/obi" "github.com/ethereum/go-ethereum/common" - - bandprice "github.com/InjectiveLabs/sdk-go/chain/oracle/bandchain/hooks/price" - bandoracle "github.com/InjectiveLabs/sdk-go/chain/oracle/bandchain/oracle/types" ) // constants @@ -46,73 +40,19 @@ func init() { } // Implements Proposal Interface -var _ govtypes.Content = &GrantBandOraclePrivilegeProposal{} -var _ govtypes.Content = &RevokeBandOraclePrivilegeProposal{} var _ govtypes.Content = &GrantPriceFeederPrivilegeProposal{} var _ govtypes.Content = &RevokePriceFeederPrivilegeProposal{} -var _ govtypes.Content = &AuthorizeBandOracleRequestProposal{} -var _ govtypes.Content = &UpdateBandOracleRequestProposal{} -var _ govtypes.Content = &EnableBandIBCProposal{} var _ govtypes.Content = &GrantProviderPrivilegeProposal{} var _ govtypes.Content = &RevokeProviderPrivilegeProposal{} var _ govtypes.Content = &GrantStorkPublisherPrivilegeProposal{} var _ govtypes.Content = &RevokeStorkPublisherPrivilegeProposal{} -// GetTitle returns the title of this proposal. -func (p *GrantBandOraclePrivilegeProposal) GetTitle() string { - return p.Title -} - -// GetDescription returns the description of this proposal. -func (p *GrantBandOraclePrivilegeProposal) GetDescription() string { - return p.Description -} - -// ProposalRoute returns router key of this proposal. -func (p *GrantBandOraclePrivilegeProposal) ProposalRoute() string { return RouterKey } - -// ProposalType returns proposal type of this proposal. -func (p *GrantBandOraclePrivilegeProposal) ProposalType() string { - return ProposalTypeGrantBandOraclePrivilege -} - -// ValidateBasic returns ValidateBasic result of this proposal. -func (p *GrantBandOraclePrivilegeProposal) ValidateBasic() error { - for _, relayer := range p.Relayers { - if _, err := sdk.AccAddressFromBech32(relayer); err != nil { - return err - } - } - return govtypes.ValidateAbstract(p) -} - -// GetTitle returns the title of this proposal. -func (p *RevokeBandOraclePrivilegeProposal) GetTitle() string { - return p.Title -} - -// GetDescription returns the description of this proposal. -func (p *RevokeBandOraclePrivilegeProposal) GetDescription() string { - return p.Description -} - -// ProposalRoute returns router key of this proposal. -func (p *RevokeBandOraclePrivilegeProposal) ProposalRoute() string { return RouterKey } - -// ProposalType returns proposal type of this proposal. -func (p *RevokeBandOraclePrivilegeProposal) ProposalType() string { - return ProposalTypeRevokeBandOraclePrivilege -} - -// ValidateBasic returns ValidateBasic result of this proposal. -func (p *RevokeBandOraclePrivilegeProposal) ValidateBasic() error { - for _, relayer := range p.Relayers { - if _, err := sdk.AccAddressFromBech32(relayer); err != nil { - return err - } - } - return govtypes.ValidateAbstract(p) -} +// Deprecated: Band oracle proposal types kept for backward compatibility +var _ govtypes.Content = &GrantBandOraclePrivilegeProposal{} //nolint:staticcheck // deprecated +var _ govtypes.Content = &RevokeBandOraclePrivilegeProposal{} //nolint:staticcheck // deprecated +var _ govtypes.Content = &AuthorizeBandOracleRequestProposal{} //nolint:staticcheck // deprecated +var _ govtypes.Content = &UpdateBandOracleRequestProposal{} //nolint:staticcheck // deprecated +var _ govtypes.Content = &EnableBandIBCProposal{} //nolint:staticcheck // deprecated // GetTitle returns the title of this proposal. func (p *GrantPriceFeederPrivilegeProposal) GetTitle() string { @@ -261,223 +201,146 @@ func (p *RevokeProviderPrivilegeProposal) ValidateBasic() error { } // GetTitle returns the title of this proposal. -func (p *AuthorizeBandOracleRequestProposal) GetTitle() string { +func (p *GrantStorkPublisherPrivilegeProposal) GetTitle() string { return p.Title } // GetDescription returns the description of this proposal. -func (p *AuthorizeBandOracleRequestProposal) GetDescription() string { +func (p *GrantStorkPublisherPrivilegeProposal) GetDescription() string { return p.Description } // ProposalRoute returns router key of this proposal. -func (p *AuthorizeBandOracleRequestProposal) ProposalRoute() string { return RouterKey } +func (p *GrantStorkPublisherPrivilegeProposal) ProposalRoute() string { return RouterKey } // ProposalType returns proposal type of this proposal. -func (p *AuthorizeBandOracleRequestProposal) ProposalType() string { - return ProposalTypeRevokePriceFeederOraclePrivilege +func (p *GrantStorkPublisherPrivilegeProposal) ProposalType() string { + return ProposalTypeGrantBandOraclePrivilege } // ValidateBasic returns ValidateBasic result of this proposal. -func (p *AuthorizeBandOracleRequestProposal) ValidateBasic() error { - if p.Request.OracleScriptId <= 0 { - return errors.Wrapf(ErrInvalidBandIBCRequest, "AuthorizeBandOracleRequestProposal: Oracle script id (%d) must be positive.", p.Request.OracleScriptId) - } - - if len(p.Request.Symbols) == 0 { - return errors.Wrap(ErrBadSymbolsCount, "AuthorizeBandOracleRequestProposal") - } - - callData, err := bandobi.Encode(bandprice.SymbolInput{ - Symbols: p.Request.Symbols, - MinimumSourceCount: uint8(p.Request.MinCount), - }) - if err != nil { - return err - } - - if len(callData) > bandoracle.MaxDataSize { - return bandoracle.WrapMaxError(bandoracle.ErrTooLargeCalldata, len(callData), bandoracle.MaxDataSize) - } - - if p.Request.MinCount <= 0 { - return errors.Wrapf(bandoracle.ErrInvalidMinCount, "AuthorizeBandOracleRequestProposal: Minimum validator count (%d) must be positive.", p.Request.MinCount) - } - - if p.Request.AskCount <= 0 { - return errors.Wrapf(bandoracle.ErrInvalidAskCount, "AuthorizeBandOracleRequestProposal: Request validator count (%d) must be positive.", p.Request.AskCount) - } - - if p.Request.AskCount < p.Request.MinCount { - return errors.Wrapf(bandoracle.ErrInvalidAskCount, "AuthorizeBandOracleRequestProposal: Request validator count (%d) must not be less than sufficient validator count (%d).", p.Request.AskCount, p.Request.MinCount) - } - - if !p.Request.FeeLimit.IsValid() { - return errors.Wrapf(sdkerrors.ErrInvalidCoins, "AuthorizeBandOracleRequestProposal: Invalid Fee Limit (%s)", p.Request.GetFeeLimit().String()) - } - - if p.Request.PrepareGas <= 0 { - return errors.Wrapf(bandoracle.ErrInvalidOwasmGas, "AuthorizeBandOracleRequestProposal: Invalid Prepare Gas (%d)", p.Request.GetPrepareGas()) - } - - if p.Request.ExecuteGas <= 0 { - return errors.Wrapf(bandoracle.ErrInvalidOwasmGas, "AuthorizeBandOracleRequestProposal: Invalid Execute Gas (%d)", p.Request.ExecuteGas) - } - - if p.Request.PrepareGas+p.Request.ExecuteGas > bandoracle.MaximumOwasmGas { - return errors.Wrapf(bandoracle.ErrInvalidOwasmGas, "AuthorizeBandOracleRequestProposal: Sum of prepare gas and execute gas (%d) exceeds Maximum gas (%d)", (p.Request.PrepareGas + p.Request.ExecuteGas), bandoracle.MaximumOwasmGas) +func (p *GrantStorkPublisherPrivilegeProposal) ValidateBasic() error { + for _, publisher := range p.StorkPublishers { + if !common.IsHexAddress(publisher) { + return fmt.Errorf("invalid publisher address: %s", publisher) + } } - return govtypes.ValidateAbstract(p) + return nil } // GetTitle returns the title of this proposal. -func (p *EnableBandIBCProposal) GetTitle() string { +func (p *RevokeStorkPublisherPrivilegeProposal) GetTitle() string { return p.Title } // GetDescription returns the description of this proposal. -func (p *EnableBandIBCProposal) GetDescription() string { +func (p *RevokeStorkPublisherPrivilegeProposal) GetDescription() string { return p.Description } // ProposalRoute returns router key of this proposal. -func (p *EnableBandIBCProposal) ProposalRoute() string { return RouterKey } +func (p *RevokeStorkPublisherPrivilegeProposal) ProposalRoute() string { return RouterKey } // ProposalType returns proposal type of this proposal. -func (p *EnableBandIBCProposal) ProposalType() string { - return ProposalEnableBandIBC +func (p *RevokeStorkPublisherPrivilegeProposal) ProposalType() string { + return ProposalTypeGrantBandOraclePrivilege } // ValidateBasic returns ValidateBasic result of this proposal. -func (p *EnableBandIBCProposal) ValidateBasic() error { - - if p.BandIbcParams.IbcRequestInterval == 0 { - return ErrBadRequestInterval - } - - if p.BandIbcParams.IbcSourceChannel == "" { - return errors.Wrap(ErrInvalidBandIBCRequest, "AuthorizeBandOracleRequestProposal: IBC Source Chanel must not be empty.") - } - if p.BandIbcParams.IbcVersion == "" { - return errors.Wrap(bandoracle.ErrInvalidVersion, "AuthorizeBandOracleRequestProposal: IBC Version must not be empty.") +func (p *RevokeStorkPublisherPrivilegeProposal) ValidateBasic() error { + for _, publisher := range p.StorkPublishers { + if !common.IsHexAddress(publisher) { + return fmt.Errorf("invalid publisher address: %s", publisher) + } } - return govtypes.ValidateAbstract(p) + return nil } +// Deprecated: Band oracle proposal types - kept for backward compatibility only + // GetTitle returns the title of this proposal. -func (p *UpdateBandOracleRequestProposal) GetTitle() string { - return p.Title -} +func (p *GrantBandOraclePrivilegeProposal) GetTitle() string { return p.Title } //nolint:staticcheck // deprecated // GetDescription returns the description of this proposal. -func (p *UpdateBandOracleRequestProposal) GetDescription() string { - return p.Description -} +func (p *GrantBandOraclePrivilegeProposal) GetDescription() string { return p.Description } //nolint:staticcheck // deprecated // ProposalRoute returns router key of this proposal. -func (p *UpdateBandOracleRequestProposal) ProposalRoute() string { return RouterKey } +func (*GrantBandOraclePrivilegeProposal) ProposalRoute() string { return RouterKey } //nolint:staticcheck // deprecated // ProposalType returns proposal type of this proposal. -func (p *UpdateBandOracleRequestProposal) ProposalType() string { - return ProposalUpdateBandOracleRequest +func (*GrantBandOraclePrivilegeProposal) ProposalType() string { //nolint:staticcheck // deprecated + return ProposalTypeGrantBandOraclePrivilege } // ValidateBasic returns ValidateBasic result of this proposal. -func (p *UpdateBandOracleRequestProposal) ValidateBasic() error { - if len(p.DeleteRequestIds) == 0 && p.UpdateOracleRequest == nil { - return ErrInvalidBandIBCUpdateRequest - } +func (*GrantBandOraclePrivilegeProposal) ValidateBasic() error { return ErrBandOracleDeprecated } //nolint:staticcheck // deprecated - if len(p.DeleteRequestIds) > 0 && p.UpdateOracleRequest != nil { - return errors.Wrapf(ErrInvalidBandIBCUpdateRequest, "cannot update requestID %T and delete reqeustID %T at same time", p.UpdateOracleRequest.RequestId, p.DeleteRequestIds) - } +// GetTitle returns the title of this proposal. +func (p *RevokeBandOraclePrivilegeProposal) GetTitle() string { return p.Title } //nolint:staticcheck // deprecated - if p.UpdateOracleRequest != nil && len(p.UpdateOracleRequest.Symbols) > 0 { - callData, err := bandobi.Encode(bandprice.SymbolInput{ - Symbols: p.UpdateOracleRequest.Symbols, - MinimumSourceCount: uint8(p.UpdateOracleRequest.MinCount), - }) +// GetDescription returns the description of this proposal. +func (p *RevokeBandOraclePrivilegeProposal) GetDescription() string { return p.Description } //nolint:staticcheck // deprecated - if err != nil { - return err - } +// ProposalRoute returns router key of this proposal. +func (*RevokeBandOraclePrivilegeProposal) ProposalRoute() string { return RouterKey } //nolint:staticcheck // deprecated - if len(callData) > bandoracle.MaxDataSize { - return bandoracle.WrapMaxError(bandoracle.ErrTooLargeCalldata, len(callData), bandoracle.MaxDataSize) - } - } +// ProposalType returns proposal type of this proposal. +func (*RevokeBandOraclePrivilegeProposal) ProposalType() string { //nolint:staticcheck // deprecated + return ProposalTypeRevokeBandOraclePrivilege +} - if p.UpdateOracleRequest != nil && p.UpdateOracleRequest.AskCount > 0 && p.UpdateOracleRequest.MinCount > 0 && p.UpdateOracleRequest.AskCount < p.UpdateOracleRequest.MinCount { - return errors.Wrapf(bandoracle.ErrInvalidAskCount, "UpdateBandOracleRequestProposal: Request validator count (%d) must not be less than sufficient validator count (%d).", p.UpdateOracleRequest.AskCount, p.UpdateOracleRequest.MinCount) - } +// ValidateBasic returns ValidateBasic result of this proposal. +func (*RevokeBandOraclePrivilegeProposal) ValidateBasic() error { return ErrBandOracleDeprecated } //nolint:staticcheck // deprecated - if p.UpdateOracleRequest != nil && p.UpdateOracleRequest.FeeLimit != nil && !p.UpdateOracleRequest.FeeLimit.IsValid() { - return errors.Wrapf(sdkerrors.ErrInvalidCoins, "UpdateBandOracleRequestProposal: Invalid Fee Limit (%s)", p.UpdateOracleRequest.GetFeeLimit().String()) - } +// GetTitle returns the title of this proposal. +func (p *AuthorizeBandOracleRequestProposal) GetTitle() string { return p.Title } //nolint:staticcheck // deprecated - if p.UpdateOracleRequest != nil && p.UpdateOracleRequest.PrepareGas > 0 && p.UpdateOracleRequest.ExecuteGas > 0 && p.UpdateOracleRequest.PrepareGas+p.UpdateOracleRequest.ExecuteGas > bandoracle.MaximumOwasmGas { - return errors.Wrapf(bandoracle.ErrInvalidOwasmGas, "UpdateBandOracleRequestProposal: Sum of prepare gas and execute gas (%d) exceeds Maximum gas (%d)", (p.UpdateOracleRequest.PrepareGas + p.UpdateOracleRequest.ExecuteGas), bandoracle.MaximumOwasmGas) - } +// GetDescription returns the description of this proposal. +func (p *AuthorizeBandOracleRequestProposal) GetDescription() string { return p.Description } //nolint:staticcheck // deprecated - return govtypes.ValidateAbstract(p) +// ProposalRoute returns router key of this proposal. +func (*AuthorizeBandOracleRequestProposal) ProposalRoute() string { return RouterKey } //nolint:staticcheck // deprecated + +// ProposalType returns proposal type of this proposal. +func (*AuthorizeBandOracleRequestProposal) ProposalType() string { //nolint:staticcheck // deprecated + return ProposalAuthorizeBandOracleRequest } +// ValidateBasic returns ValidateBasic result of this proposal. +func (*AuthorizeBandOracleRequestProposal) ValidateBasic() error { return ErrBandOracleDeprecated } //nolint:staticcheck // deprecated + // GetTitle returns the title of this proposal. -func (p *GrantStorkPublisherPrivilegeProposal) GetTitle() string { - return p.Title -} +func (p *UpdateBandOracleRequestProposal) GetTitle() string { return p.Title } //nolint:staticcheck // deprecated // GetDescription returns the description of this proposal. -func (p *GrantStorkPublisherPrivilegeProposal) GetDescription() string { - return p.Description -} +func (p *UpdateBandOracleRequestProposal) GetDescription() string { return p.Description } //nolint:staticcheck // deprecated // ProposalRoute returns router key of this proposal. -func (p *GrantStorkPublisherPrivilegeProposal) ProposalRoute() string { return RouterKey } +func (*UpdateBandOracleRequestProposal) ProposalRoute() string { return RouterKey } //nolint:staticcheck // deprecated // ProposalType returns proposal type of this proposal. -func (p *GrantStorkPublisherPrivilegeProposal) ProposalType() string { - return ProposalTypeGrantBandOraclePrivilege +func (*UpdateBandOracleRequestProposal) ProposalType() string { //nolint:staticcheck // deprecated + return ProposalUpdateBandOracleRequest } // ValidateBasic returns ValidateBasic result of this proposal. -func (p *GrantStorkPublisherPrivilegeProposal) ValidateBasic() error { - for _, publisher := range p.StorkPublishers { - if !common.IsHexAddress(publisher) { - return fmt.Errorf("invalid publisher address: %s", publisher) - } - } - - return nil -} +func (*UpdateBandOracleRequestProposal) ValidateBasic() error { return ErrBandOracleDeprecated } //nolint:staticcheck // deprecated // GetTitle returns the title of this proposal. -func (p *RevokeStorkPublisherPrivilegeProposal) GetTitle() string { - return p.Title -} +func (p *EnableBandIBCProposal) GetTitle() string { return p.Title } //nolint:staticcheck // deprecated // GetDescription returns the description of this proposal. -func (p *RevokeStorkPublisherPrivilegeProposal) GetDescription() string { - return p.Description -} +func (p *EnableBandIBCProposal) GetDescription() string { return p.Description } //nolint:staticcheck // deprecated // ProposalRoute returns router key of this proposal. -func (p *RevokeStorkPublisherPrivilegeProposal) ProposalRoute() string { return RouterKey } +func (*EnableBandIBCProposal) ProposalRoute() string { return RouterKey } //nolint:staticcheck // deprecated // ProposalType returns proposal type of this proposal. -func (p *RevokeStorkPublisherPrivilegeProposal) ProposalType() string { - return ProposalTypeGrantBandOraclePrivilege +func (*EnableBandIBCProposal) ProposalType() string { //nolint:staticcheck // deprecated + return ProposalEnableBandIBC } // ValidateBasic returns ValidateBasic result of this proposal. -func (p *RevokeStorkPublisherPrivilegeProposal) ValidateBasic() error { - for _, publisher := range p.StorkPublishers { - if !common.IsHexAddress(publisher) { - return fmt.Errorf("invalid publisher address: %s", publisher) - } - } - - return nil -} +func (*EnableBandIBCProposal) ValidateBasic() error { return ErrBandOracleDeprecated } //nolint:staticcheck // deprecated diff --git a/chain/oracle/types/proposal.pb.go b/chain/oracle/types/proposal.pb.go index ee61f7b4..0a4c6002 100644 --- a/chain/oracle/types/proposal.pb.go +++ b/chain/oracle/types/proposal.pb.go @@ -26,6 +26,10 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// Deprecated: Band oracle support was removed. This message is kept for +// backward compatibility to decode historical proposals. +// +// Deprecated: Do not use. type GrantBandOraclePrivilegeProposal struct { Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` @@ -65,6 +69,10 @@ func (m *GrantBandOraclePrivilegeProposal) XXX_DiscardUnknown() { var xxx_messageInfo_GrantBandOraclePrivilegeProposal proto.InternalMessageInfo +// Deprecated: Band oracle support was removed. This message is kept for +// backward compatibility to decode historical proposals. +// +// Deprecated: Do not use. type RevokeBandOraclePrivilegeProposal struct { Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` @@ -266,6 +274,10 @@ func (m *RevokePriceFeederPrivilegeProposal) XXX_DiscardUnknown() { var xxx_messageInfo_RevokePriceFeederPrivilegeProposal proto.InternalMessageInfo +// Deprecated: Band oracle support was removed. This message is kept for +// backward compatibility to decode historical proposals. +// +// Deprecated: Do not use. type AuthorizeBandOracleRequestProposal struct { Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` @@ -305,6 +317,10 @@ func (m *AuthorizeBandOracleRequestProposal) XXX_DiscardUnknown() { var xxx_messageInfo_AuthorizeBandOracleRequestProposal proto.InternalMessageInfo +// Deprecated: Band oracle support was removed. This message is kept for +// backward compatibility to decode historical proposals. +// +// Deprecated: Do not use. type UpdateBandOracleRequestProposal struct { Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` @@ -345,6 +361,10 @@ func (m *UpdateBandOracleRequestProposal) XXX_DiscardUnknown() { var xxx_messageInfo_UpdateBandOracleRequestProposal proto.InternalMessageInfo +// Deprecated: Band oracle support was removed. This message is kept for +// backward compatibility to decode historical proposals. +// +// Deprecated: Do not use. type EnableBandIBCProposal struct { Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` @@ -481,54 +501,54 @@ func init() { } var fileDescriptor_c5a187f865fd0c5b = []byte{ - // 739 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x96, 0x41, 0x4f, 0x13, 0x5b, - 0x14, 0xc7, 0x7b, 0xa1, 0xbc, 0x07, 0x97, 0xbc, 0xc0, 0xeb, 0x83, 0xa4, 0xaf, 0x31, 0xd3, 0x32, - 0x11, 0x01, 0x81, 0x4e, 0xd0, 0x1d, 0x3b, 0x4b, 0x94, 0x34, 0x92, 0x58, 0x07, 0xd1, 0xc4, 0xcd, - 0xe4, 0xce, 0xcc, 0xb5, 0xbd, 0x32, 0x9d, 0x3b, 0xdc, 0x7b, 0xdb, 0x04, 0x3f, 0x81, 0x71, 0xe5, - 0x47, 0xe0, 0x23, 0xb8, 0x70, 0xe7, 0x17, 0x20, 0xc4, 0x05, 0x4b, 0x57, 0x46, 0x5b, 0x13, 0xdd, - 0xb9, 0x33, 0xee, 0x34, 0xbd, 0xf7, 0x4e, 0x6d, 0xd1, 0xd2, 0x0a, 0xa8, 0x6c, 0x9a, 0x39, 0xe7, - 0x9e, 0x39, 0xe7, 0xfc, 0x4e, 0xff, 0x73, 0x66, 0xe0, 0x1c, 0x09, 0x1f, 0x62, 0x4f, 0x90, 0x3a, - 0xb6, 0x28, 0x43, 0x5e, 0x80, 0xad, 0xfa, 0x8a, 0x8b, 0x05, 0x5a, 0xb1, 0x22, 0x46, 0x23, 0xca, - 0x51, 0x90, 0x8f, 0x18, 0x15, 0x34, 0x95, 0x6e, 0x07, 0xe6, 0x55, 0x60, 0x5e, 0x07, 0x66, 0x0c, - 0x8f, 0xf2, 0x2a, 0xe5, 0x96, 0x8b, 0xf8, 0xb7, 0xbb, 0x3d, 0x4a, 0x42, 0x75, 0x67, 0xe6, 0x7f, - 0x75, 0xee, 0x48, 0xcb, 0x52, 0x86, 0x3e, 0x9a, 0x2a, 0xd3, 0x32, 0x55, 0xfe, 0xd6, 0x95, 0xf6, - 0xce, 0xf6, 0xec, 0x49, 0x57, 0x56, 0x61, 0xff, 0xa2, 0x2a, 0x09, 0xa9, 0x25, 0x7f, 0x95, 0xcb, - 0x3c, 0x00, 0x30, 0xb7, 0xce, 0x50, 0x28, 0x0a, 0x28, 0xf4, 0x6f, 0xc9, 0xe0, 0x12, 0x23, 0x75, - 0x12, 0xe0, 0x32, 0x2e, 0x69, 0x9e, 0xd4, 0x14, 0x1c, 0x11, 0x44, 0x04, 0x38, 0x0d, 0x72, 0x60, - 0x7e, 0xcc, 0x56, 0x46, 0x2a, 0x07, 0xc7, 0x7d, 0xcc, 0x3d, 0x46, 0x22, 0x41, 0x68, 0x98, 0x1e, - 0x92, 0x67, 0x9d, 0xae, 0x54, 0x06, 0x8e, 0x32, 0x1c, 0xa0, 0x5d, 0xcc, 0x78, 0x7a, 0x38, 0x37, - 0x3c, 0x3f, 0x66, 0xb7, 0xed, 0x55, 0xfb, 0xf1, 0x5e, 0x36, 0xf1, 0x61, 0x2f, 0x9b, 0x38, 0x78, - 0xbe, 0x9c, 0xd1, 0x88, 0x65, 0x5a, 0x8f, 0x67, 0x94, 0x5f, 0xa3, 0xa1, 0xc0, 0xa1, 0x78, 0xf2, - 0xfe, 0xd9, 0xe5, 0x39, 0xcd, 0xd4, 0xaf, 0x4f, 0xf3, 0x25, 0x80, 0x33, 0x36, 0xae, 0xd3, 0x6d, - 0xfc, 0xbb, 0x69, 0x36, 0x07, 0xa7, 0x99, 0xd7, 0x34, 0x7d, 0x1b, 0x35, 0x3f, 0x01, 0x38, 0x23, - 0x99, 0x4b, 0x8c, 0x78, 0xf8, 0x06, 0xc6, 0x3e, 0x66, 0x67, 0x87, 0x93, 0x82, 0xc9, 0x96, 0xfe, - 0xd2, 0xc3, 0xf2, 0x48, 0x5e, 0xb7, 0x72, 0xed, 0xd4, 0xa8, 0xc0, 0xe9, 0xa4, 0xca, 0x25, 0x8d, - 0x2e, 0xf0, 0x91, 0xd3, 0x83, 0xf7, 0x45, 0x32, 0x1b, 0x00, 0x1a, 0x3a, 0x8a, 0xd6, 0xc9, 0x99, - 0x52, 0x67, 0xe0, 0x68, 0xa4, 0x93, 0x6a, 0xf2, 0xb6, 0xdd, 0xc5, 0x99, 0x3c, 0xc2, 0x59, 0x1a, - 0x9c, 0x73, 0xb6, 0x9b, 0xb3, 0x07, 0x81, 0xf9, 0x0e, 0xc0, 0xac, 0xd2, 0xc0, 0x9f, 0xa3, 0x3c, - 0xfa, 0x6f, 0xde, 0x1e, 0x9c, 0xf2, 0x52, 0x97, 0x8c, 0x7b, 0x63, 0x7e, 0x06, 0xd0, 0x8c, 0x63, - 0xce, 0xad, 0x8a, 0xef, 0x0c, 0xce, 0xbd, 0x70, 0x84, 0xfb, 0x18, 0x19, 0x7f, 0x01, 0xd0, 0xbc, - 0x56, 0x13, 0x15, 0xca, 0xc8, 0xa3, 0x8e, 0x07, 0xdd, 0xc6, 0x3b, 0x35, 0xcc, 0xc5, 0xa9, 0xd1, - 0x6f, 0xc2, 0xbf, 0x99, 0x4a, 0x25, 0xe9, 0xc7, 0xaf, 0x2c, 0xe6, 0x7b, 0xbd, 0x71, 0xf2, 0xdf, - 0x55, 0x2f, 0x24, 0xf7, 0x5f, 0x67, 0x13, 0x76, 0x9c, 0xe1, 0x24, 0x13, 0xe8, 0x8f, 0x66, 0xbe, - 0x18, 0x82, 0xd9, 0xad, 0xc8, 0x47, 0xe2, 0x17, 0xe0, 0x2f, 0xc1, 0x94, 0x8f, 0x03, 0x2c, 0xb0, - 0xa3, 0x19, 0x1c, 0xe2, 0xab, 0xc5, 0x9c, 0xb4, 0x27, 0xd5, 0x89, 0x2e, 0x55, 0xf4, 0x79, 0xca, - 0x81, 0xd3, 0x35, 0xd9, 0x88, 0xa3, 0xba, 0x8f, 0x6f, 0x92, 0x1a, 0xf9, 0xb9, 0xd1, 0xd9, 0xff, - 0xa9, 0x4c, 0x5d, 0xce, 0x93, 0x3c, 0x3a, 0x7d, 0x26, 0x63, 0x7e, 0x04, 0x70, 0xfa, 0x7a, 0x88, - 0xdc, 0x40, 0xc6, 0x14, 0x0b, 0x6b, 0xa7, 0x9e, 0xd9, 0x16, 0x9c, 0x70, 0x51, 0xe8, 0x3b, 0xc4, - 0xf5, 0x9c, 0x08, 0x31, 0x54, 0xe5, 0x5a, 0x3a, 0x73, 0xc7, 0xf3, 0xb7, 0x6a, 0xcb, 0x70, 0x2d, - 0x9b, 0x7f, 0x5a, 0x59, 0x8a, 0xae, 0xa7, 0x9c, 0xab, 0xeb, 0x83, 0xb3, 0x5f, 0xd0, 0xec, 0x3f, - 0xe4, 0x32, 0xdf, 0x02, 0x78, 0x51, 0xae, 0xcd, 0x4d, 0x41, 0xd9, 0x76, 0xa9, 0xe6, 0x06, 0x84, - 0x57, 0xce, 0x72, 0x5d, 0x2c, 0xc0, 0x49, 0xde, 0x4a, 0xed, 0x44, 0x71, 0xee, 0xf8, 0x5d, 0x3e, - 0xc1, 0xbb, 0x4a, 0xf2, 0xd5, 0xbb, 0x83, 0x43, 0x2d, 0x76, 0x6e, 0xfc, 0x3e, 0xad, 0x9b, 0x4d, - 0x00, 0x67, 0xd5, 0xf2, 0x38, 0x07, 0x90, 0xf7, 0x06, 0x87, 0x5c, 0xea, 0x5a, 0x7c, 0x7d, 0x7a, - 0x2f, 0x3c, 0xd8, 0x6f, 0x18, 0xe0, 0xb0, 0x61, 0x80, 0x37, 0x0d, 0x03, 0x3c, 0x6d, 0x1a, 0x89, - 0xc3, 0xa6, 0x91, 0x78, 0xd5, 0x34, 0x12, 0xf7, 0x37, 0xca, 0x44, 0x54, 0x6a, 0x6e, 0xde, 0xa3, - 0x55, 0xab, 0x18, 0x8b, 0x6e, 0x03, 0xb9, 0xdc, 0x6a, 0x4b, 0x70, 0xd9, 0xa3, 0x0c, 0x77, 0x9a, - 0x15, 0x44, 0x42, 0xab, 0x4a, 0xfd, 0x5a, 0x80, 0x79, 0xfc, 0x85, 0x2b, 0x76, 0x23, 0xcc, 0xdd, - 0xbf, 0xe4, 0x67, 0xec, 0xd5, 0xaf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x49, 0x54, 0x14, 0x96, - 0x0b, 0x00, 0x00, + // 752 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x96, 0xbf, 0x6f, 0x13, 0x49, + 0x14, 0xc7, 0x3d, 0x89, 0x73, 0x97, 0x4c, 0x74, 0x4a, 0xce, 0x97, 0x48, 0x7b, 0xd6, 0x69, 0xed, + 0xac, 0x2e, 0x97, 0xe4, 0x92, 0x78, 0x15, 0xe8, 0xd2, 0xe1, 0x08, 0x90, 0x45, 0x24, 0x8c, 0x43, + 0x40, 0xa2, 0x59, 0xcd, 0xee, 0x0e, 0xf6, 0x90, 0xf5, 0xce, 0x66, 0x66, 0x6c, 0x29, 0x74, 0x74, + 0x88, 0x8a, 0x3f, 0x21, 0x7f, 0x02, 0x05, 0x2d, 0x7d, 0x84, 0x10, 0x4a, 0x49, 0x85, 0xc0, 0x46, + 0x82, 0x96, 0x06, 0x51, 0x22, 0xcf, 0xcc, 0x1a, 0xdb, 0xe0, 0xd8, 0x56, 0x02, 0xa4, 0x89, 0xf6, + 0xfd, 0xc8, 0x9b, 0xf7, 0x79, 0xfe, 0xce, 0xdb, 0x85, 0x4b, 0x24, 0xbc, 0x87, 0x3d, 0x41, 0xea, + 0xd8, 0xa6, 0x0c, 0x79, 0x01, 0xb6, 0xeb, 0x1b, 0x2e, 0x16, 0x68, 0xc3, 0x8e, 0x18, 0x8d, 0x28, + 0x47, 0x41, 0x2e, 0x62, 0x54, 0xd0, 0x94, 0xd1, 0x4e, 0xcc, 0xa9, 0xc4, 0x9c, 0x4e, 0x4c, 0xff, + 0x89, 0xaa, 0x24, 0xa4, 0xb6, 0xfc, 0xab, 0x92, 0xd3, 0xa6, 0x47, 0x79, 0x95, 0x72, 0xdb, 0x45, + 0xfc, 0x6b, 0x41, 0x8f, 0x92, 0x50, 0xc7, 0xff, 0x56, 0x71, 0x47, 0x5a, 0xb6, 0x32, 0x74, 0x68, + 0xae, 0x4c, 0xcb, 0x54, 0xf9, 0x5b, 0x4f, 0xda, 0xbb, 0xd8, 0xb7, 0x4d, 0xdd, 0x8c, 0x4c, 0xb3, + 0x5e, 0x00, 0x98, 0xbd, 0xca, 0x50, 0x28, 0xf2, 0x28, 0xf4, 0xaf, 0xcb, 0x48, 0x91, 0x91, 0x3a, + 0x09, 0x70, 0x19, 0x17, 0x35, 0x4f, 0x6a, 0x0e, 0x4e, 0x08, 0x22, 0x02, 0x6c, 0x80, 0x2c, 0x58, + 0x9e, 0x2a, 0x29, 0x23, 0x95, 0x85, 0xd3, 0x3e, 0xe6, 0x1e, 0x23, 0x91, 0x20, 0x34, 0x34, 0xc6, + 0x64, 0xac, 0xd3, 0x95, 0x4a, 0xc3, 0x49, 0x86, 0x03, 0x74, 0x80, 0x19, 0x37, 0xc6, 0xb3, 0xe3, + 0xcb, 0x53, 0xa5, 0xb6, 0xbd, 0x79, 0xf3, 0xe1, 0x61, 0x26, 0xf1, 0xe1, 0x30, 0x93, 0x78, 0xfe, + 0x74, 0x3d, 0xad, 0x79, 0xca, 0xb4, 0x1e, 0xcf, 0x28, 0xb7, 0x45, 0x43, 0x81, 0x43, 0xf1, 0xe8, + 0xfd, 0x93, 0xff, 0x97, 0x34, 0xc0, 0xa0, 0x3e, 0x0d, 0x60, 0xbd, 0x04, 0x70, 0xa1, 0x84, 0xeb, + 0x74, 0x0f, 0xff, 0x6c, 0x9e, 0xdd, 0xe1, 0x79, 0x96, 0x35, 0xcf, 0xc0, 0x46, 0x0d, 0x60, 0x7d, + 0x02, 0x70, 0x41, 0x72, 0x17, 0x19, 0xf1, 0xf0, 0x15, 0x8c, 0x7d, 0xcc, 0xce, 0x0e, 0x28, 0x05, + 0x93, 0x2d, 0xc1, 0x19, 0xe3, 0x32, 0x24, 0x9f, 0x5b, 0xb5, 0xf6, 0x6b, 0x54, 0x60, 0x23, 0xa9, + 0x6a, 0x49, 0xa3, 0x0b, 0x7d, 0xa2, 0x07, 0x7d, 0x67, 0x74, 0xf4, 0x81, 0x48, 0x56, 0x03, 0x40, + 0x53, 0x67, 0xd1, 0x3a, 0x39, 0x53, 0xea, 0x34, 0x9c, 0x8c, 0x74, 0x51, 0x4d, 0xde, 0xb6, 0xbb, + 0x38, 0x93, 0x3d, 0x9c, 0xc5, 0xe1, 0x39, 0x17, 0xbb, 0x39, 0xfb, 0x10, 0x58, 0xef, 0x00, 0xcc, + 0x28, 0x15, 0xfc, 0x3a, 0xca, 0xde, 0x5f, 0xf3, 0xc6, 0xf0, 0x94, 0xff, 0x75, 0x09, 0xb9, 0x3f, + 0xe6, 0x67, 0x00, 0xad, 0x38, 0xe7, 0xdc, 0xaa, 0x78, 0x84, 0x85, 0xb4, 0xd2, 0xc3, 0x7d, 0x82, + 0x8c, 0x1f, 0x8c, 0x41, 0xeb, 0x52, 0x4d, 0x54, 0x28, 0x23, 0xf7, 0x3b, 0xae, 0x7a, 0x09, 0xef, + 0xd7, 0x30, 0x17, 0xa7, 0x46, 0xbf, 0x06, 0x7f, 0x67, 0xaa, 0x94, 0xa4, 0x9f, 0xbe, 0xb0, 0x9a, + 0xeb, 0xf7, 0xd6, 0xc9, 0x7d, 0x73, 0x7a, 0x3e, 0x79, 0xf4, 0x3a, 0x93, 0x28, 0xc5, 0x15, 0x36, + 0x6f, 0x8d, 0x3e, 0x81, 0xc1, 0x68, 0x06, 0xb0, 0x9e, 0x8d, 0xc1, 0xcc, 0x6e, 0xe4, 0x23, 0xf1, + 0x03, 0x06, 0xb0, 0x06, 0x53, 0x3e, 0x0e, 0xb0, 0xc0, 0x8e, 0xa6, 0x70, 0x88, 0xaf, 0x96, 0x73, + 0xb2, 0x34, 0xab, 0x22, 0xfa, 0xa8, 0x82, 0xcf, 0x53, 0x0e, 0x9c, 0xaf, 0xc9, 0x46, 0x1c, 0xd5, + 0x7f, 0xfc, 0x4f, 0x52, 0x25, 0xa3, 0x0d, 0xaf, 0xf4, 0x97, 0xaa, 0xd4, 0xe5, 0x1c, 0x65, 0x15, + 0xc6, 0x97, 0x67, 0xc0, 0x64, 0x0c, 0x60, 0x7d, 0x04, 0x70, 0xfe, 0x72, 0x88, 0xdc, 0x40, 0x66, + 0x15, 0xf2, 0x5b, 0xa7, 0x9e, 0xda, 0x2e, 0x9c, 0x71, 0x51, 0xe8, 0x3b, 0xc4, 0xf5, 0x9c, 0x08, + 0x31, 0x54, 0xe5, 0x5a, 0x3e, 0x4b, 0x27, 0x4f, 0xa0, 0x75, 0xb6, 0x4c, 0xd7, 0xd2, 0xf9, 0xa3, + 0x55, 0xa5, 0xe0, 0x7a, 0xca, 0xb9, 0x59, 0x18, 0x9e, 0xfe, 0x1f, 0x4d, 0xff, 0x5d, 0x2e, 0x03, + 0x58, 0x6f, 0x01, 0xfc, 0x57, 0x2e, 0xcf, 0x1d, 0x41, 0xd9, 0x5e, 0xb1, 0xe6, 0x06, 0x84, 0x57, + 0xce, 0x72, 0x69, 0xac, 0xc0, 0x59, 0xde, 0x2a, 0xed, 0x44, 0x71, 0xed, 0xf8, 0x9d, 0x3e, 0xc3, + 0xbb, 0x8e, 0xe4, 0xa3, 0xdc, 0x8b, 0xd5, 0xce, 0xbd, 0x3f, 0xa0, 0x75, 0xab, 0x09, 0xe0, 0xa2, + 0x5a, 0x21, 0xe7, 0x00, 0xf2, 0xf6, 0xf0, 0x90, 0x6b, 0x5d, 0xeb, 0x6f, 0x40, 0xef, 0xf9, 0xbb, + 0x47, 0x0d, 0x13, 0x1c, 0x37, 0x4c, 0xf0, 0xa6, 0x61, 0x82, 0xc7, 0x4d, 0x33, 0x71, 0xdc, 0x34, + 0x13, 0xaf, 0x9a, 0x66, 0xe2, 0xce, 0x76, 0x99, 0x88, 0x4a, 0xcd, 0xcd, 0x79, 0xb4, 0x6a, 0x17, + 0x62, 0xd9, 0x6d, 0x23, 0x97, 0xdb, 0x6d, 0x11, 0xae, 0x7b, 0x94, 0xe1, 0x4e, 0xb3, 0x82, 0x48, + 0x68, 0x57, 0xa9, 0x5f, 0x0b, 0x30, 0x8f, 0x3f, 0x6c, 0xc5, 0x41, 0x84, 0xb9, 0xfb, 0x9b, 0xfc, + 0xa0, 0xbd, 0xf8, 0x25, 0x00, 0x00, 0xff, 0xff, 0x1e, 0xe9, 0x1d, 0x90, 0xa0, 0x0b, 0x00, 0x00, } func (m *GrantBandOraclePrivilegeProposal) Marshal() (dAtA []byte, err error) { diff --git a/chain/oracle/types/query.pb.go b/chain/oracle/types/query.pb.go index 09773598..0d75e2a4 100644 --- a/chain/oracle/types/query.pb.go +++ b/chain/oracle/types/query.pb.go @@ -974,6 +974,98 @@ func (m *QueryProviderPriceStateResponse) GetPriceState() *PriceState { return nil } +// QueryChainlinkDataStreamsPriceStatesRequest is the request type for the +// Query/ChainlinkDataStreamsPriceStates RPC method. +type QueryChainlinkDataStreamsPriceStatesRequest struct { +} + +func (m *QueryChainlinkDataStreamsPriceStatesRequest) Reset() { + *m = QueryChainlinkDataStreamsPriceStatesRequest{} +} +func (m *QueryChainlinkDataStreamsPriceStatesRequest) String() string { + return proto.CompactTextString(m) +} +func (*QueryChainlinkDataStreamsPriceStatesRequest) ProtoMessage() {} +func (*QueryChainlinkDataStreamsPriceStatesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_52f5d6f9962923ad, []int{22} +} +func (m *QueryChainlinkDataStreamsPriceStatesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryChainlinkDataStreamsPriceStatesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryChainlinkDataStreamsPriceStatesRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryChainlinkDataStreamsPriceStatesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryChainlinkDataStreamsPriceStatesRequest.Merge(m, src) +} +func (m *QueryChainlinkDataStreamsPriceStatesRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryChainlinkDataStreamsPriceStatesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryChainlinkDataStreamsPriceStatesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryChainlinkDataStreamsPriceStatesRequest proto.InternalMessageInfo + +// QueryChainlinkDataStreamsPriceStatesResponse is the response type for the +// Query/ChainlinkDataStreamsPriceStates RPC method. +type QueryChainlinkDataStreamsPriceStatesResponse struct { + PriceStates []*ChainlinkDataStreamsPriceState `protobuf:"bytes,1,rep,name=price_states,json=priceStates,proto3" json:"price_states,omitempty"` +} + +func (m *QueryChainlinkDataStreamsPriceStatesResponse) Reset() { + *m = QueryChainlinkDataStreamsPriceStatesResponse{} +} +func (m *QueryChainlinkDataStreamsPriceStatesResponse) String() string { + return proto.CompactTextString(m) +} +func (*QueryChainlinkDataStreamsPriceStatesResponse) ProtoMessage() {} +func (*QueryChainlinkDataStreamsPriceStatesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_52f5d6f9962923ad, []int{23} +} +func (m *QueryChainlinkDataStreamsPriceStatesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryChainlinkDataStreamsPriceStatesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryChainlinkDataStreamsPriceStatesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryChainlinkDataStreamsPriceStatesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryChainlinkDataStreamsPriceStatesResponse.Merge(m, src) +} +func (m *QueryChainlinkDataStreamsPriceStatesResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryChainlinkDataStreamsPriceStatesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryChainlinkDataStreamsPriceStatesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryChainlinkDataStreamsPriceStatesResponse proto.InternalMessageInfo + +func (m *QueryChainlinkDataStreamsPriceStatesResponse) GetPriceStates() []*ChainlinkDataStreamsPriceState { + if m != nil { + return m.PriceStates + } + return nil +} + // QueryModuleStateRequest is the request type for the Query/OracleModuleState // RPC method. type QueryModuleStateRequest struct { @@ -983,7 +1075,7 @@ func (m *QueryModuleStateRequest) Reset() { *m = QueryModuleStateRequest func (m *QueryModuleStateRequest) String() string { return proto.CompactTextString(m) } func (*QueryModuleStateRequest) ProtoMessage() {} func (*QueryModuleStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_52f5d6f9962923ad, []int{22} + return fileDescriptor_52f5d6f9962923ad, []int{24} } func (m *QueryModuleStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1022,7 +1114,7 @@ func (m *QueryModuleStateResponse) Reset() { *m = QueryModuleStateRespon func (m *QueryModuleStateResponse) String() string { return proto.CompactTextString(m) } func (*QueryModuleStateResponse) ProtoMessage() {} func (*QueryModuleStateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_52f5d6f9962923ad, []int{23} + return fileDescriptor_52f5d6f9962923ad, []int{25} } func (m *QueryModuleStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1067,7 +1159,7 @@ func (m *QueryHistoricalPriceRecordsRequest) Reset() { *m = QueryHistori func (m *QueryHistoricalPriceRecordsRequest) String() string { return proto.CompactTextString(m) } func (*QueryHistoricalPriceRecordsRequest) ProtoMessage() {} func (*QueryHistoricalPriceRecordsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_52f5d6f9962923ad, []int{24} + return fileDescriptor_52f5d6f9962923ad, []int{26} } func (m *QueryHistoricalPriceRecordsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1118,7 +1210,7 @@ func (m *QueryHistoricalPriceRecordsResponse) Reset() { *m = QueryHistor func (m *QueryHistoricalPriceRecordsResponse) String() string { return proto.CompactTextString(m) } func (*QueryHistoricalPriceRecordsResponse) ProtoMessage() {} func (*QueryHistoricalPriceRecordsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_52f5d6f9962923ad, []int{25} + return fileDescriptor_52f5d6f9962923ad, []int{27} } func (m *QueryHistoricalPriceRecordsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1171,7 +1263,7 @@ func (m *OracleHistoryOptions) Reset() { *m = OracleHistoryOptions{} } func (m *OracleHistoryOptions) String() string { return proto.CompactTextString(m) } func (*OracleHistoryOptions) ProtoMessage() {} func (*OracleHistoryOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_52f5d6f9962923ad, []int{26} + return fileDescriptor_52f5d6f9962923ad, []int{28} } func (m *OracleHistoryOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1233,7 +1325,7 @@ func (m *QueryOracleVolatilityRequest) Reset() { *m = QueryOracleVolatil func (m *QueryOracleVolatilityRequest) String() string { return proto.CompactTextString(m) } func (*QueryOracleVolatilityRequest) ProtoMessage() {} func (*QueryOracleVolatilityRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_52f5d6f9962923ad, []int{27} + return fileDescriptor_52f5d6f9962923ad, []int{29} } func (m *QueryOracleVolatilityRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1295,7 +1387,7 @@ func (m *QueryOracleVolatilityResponse) Reset() { *m = QueryOracleVolati func (m *QueryOracleVolatilityResponse) String() string { return proto.CompactTextString(m) } func (*QueryOracleVolatilityResponse) ProtoMessage() {} func (*QueryOracleVolatilityResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_52f5d6f9962923ad, []int{28} + return fileDescriptor_52f5d6f9962923ad, []int{30} } func (m *QueryOracleVolatilityResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1345,7 +1437,7 @@ func (m *QueryOracleProvidersInfoRequest) Reset() { *m = QueryOracleProv func (m *QueryOracleProvidersInfoRequest) String() string { return proto.CompactTextString(m) } func (*QueryOracleProvidersInfoRequest) ProtoMessage() {} func (*QueryOracleProvidersInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_52f5d6f9962923ad, []int{29} + return fileDescriptor_52f5d6f9962923ad, []int{31} } func (m *QueryOracleProvidersInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1382,7 +1474,7 @@ func (m *QueryOracleProvidersInfoResponse) Reset() { *m = QueryOraclePro func (m *QueryOracleProvidersInfoResponse) String() string { return proto.CompactTextString(m) } func (*QueryOracleProvidersInfoResponse) ProtoMessage() {} func (*QueryOracleProvidersInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_52f5d6f9962923ad, []int{30} + return fileDescriptor_52f5d6f9962923ad, []int{32} } func (m *QueryOracleProvidersInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1426,7 +1518,7 @@ func (m *QueryOracleProviderPricesRequest) Reset() { *m = QueryOraclePro func (m *QueryOracleProviderPricesRequest) String() string { return proto.CompactTextString(m) } func (*QueryOracleProviderPricesRequest) ProtoMessage() {} func (*QueryOracleProviderPricesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_52f5d6f9962923ad, []int{31} + return fileDescriptor_52f5d6f9962923ad, []int{33} } func (m *QueryOracleProviderPricesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1470,7 +1562,7 @@ func (m *QueryOracleProviderPricesResponse) Reset() { *m = QueryOraclePr func (m *QueryOracleProviderPricesResponse) String() string { return proto.CompactTextString(m) } func (*QueryOracleProviderPricesResponse) ProtoMessage() {} func (*QueryOracleProviderPricesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_52f5d6f9962923ad, []int{32} + return fileDescriptor_52f5d6f9962923ad, []int{34} } func (m *QueryOracleProviderPricesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1518,7 +1610,7 @@ func (m *ScalingOptions) Reset() { *m = ScalingOptions{} } func (m *ScalingOptions) String() string { return proto.CompactTextString(m) } func (*ScalingOptions) ProtoMessage() {} func (*ScalingOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_52f5d6f9962923ad, []int{33} + return fileDescriptor_52f5d6f9962923ad, []int{35} } func (m *ScalingOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1574,7 +1666,7 @@ func (m *QueryOraclePriceRequest) Reset() { *m = QueryOraclePriceRequest func (m *QueryOraclePriceRequest) String() string { return proto.CompactTextString(m) } func (*QueryOraclePriceRequest) ProtoMessage() {} func (*QueryOraclePriceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_52f5d6f9962923ad, []int{34} + return fileDescriptor_52f5d6f9962923ad, []int{36} } func (m *QueryOraclePriceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1645,7 +1737,7 @@ func (m *PricePairState) Reset() { *m = PricePairState{} } func (m *PricePairState) String() string { return proto.CompactTextString(m) } func (*PricePairState) ProtoMessage() {} func (*PricePairState) Descriptor() ([]byte, []int) { - return fileDescriptor_52f5d6f9962923ad, []int{35} + return fileDescriptor_52f5d6f9962923ad, []int{37} } func (m *PricePairState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1698,7 +1790,7 @@ func (m *QueryOraclePriceResponse) Reset() { *m = QueryOraclePriceRespon func (m *QueryOraclePriceResponse) String() string { return proto.CompactTextString(m) } func (*QueryOraclePriceResponse) ProtoMessage() {} func (*QueryOraclePriceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_52f5d6f9962923ad, []int{36} + return fileDescriptor_52f5d6f9962923ad, []int{38} } func (m *QueryOraclePriceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1757,6 +1849,8 @@ func init() { proto.RegisterType((*QueryStorkPublishersResponse)(nil), "injective.oracle.v1beta1.QueryStorkPublishersResponse") proto.RegisterType((*QueryProviderPriceStateRequest)(nil), "injective.oracle.v1beta1.QueryProviderPriceStateRequest") proto.RegisterType((*QueryProviderPriceStateResponse)(nil), "injective.oracle.v1beta1.QueryProviderPriceStateResponse") + proto.RegisterType((*QueryChainlinkDataStreamsPriceStatesRequest)(nil), "injective.oracle.v1beta1.QueryChainlinkDataStreamsPriceStatesRequest") + proto.RegisterType((*QueryChainlinkDataStreamsPriceStatesResponse)(nil), "injective.oracle.v1beta1.QueryChainlinkDataStreamsPriceStatesResponse") proto.RegisterType((*QueryModuleStateRequest)(nil), "injective.oracle.v1beta1.QueryModuleStateRequest") proto.RegisterType((*QueryModuleStateResponse)(nil), "injective.oracle.v1beta1.QueryModuleStateResponse") proto.RegisterType((*QueryHistoricalPriceRecordsRequest)(nil), "injective.oracle.v1beta1.QueryHistoricalPriceRecordsRequest") @@ -1779,123 +1873,128 @@ func init() { } var fileDescriptor_52f5d6f9962923ad = []byte{ - // 1846 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0xdd, 0x6f, 0xdb, 0x46, - 0x12, 0x37, 0xfd, 0x15, 0x6b, 0x14, 0x7f, 0x64, 0xad, 0x38, 0x8a, 0x92, 0xc8, 0x0e, 0x1d, 0x7f, - 0x5d, 0x1c, 0x29, 0x56, 0x72, 0x49, 0x2e, 0x97, 0xcb, 0x21, 0xb6, 0x93, 0x3b, 0xdf, 0x39, 0x88, - 0x8f, 0xce, 0x35, 0x6d, 0x51, 0x40, 0x58, 0x51, 0xb4, 0xc4, 0x5a, 0x22, 0x15, 0x92, 0x72, 0x22, - 0x04, 0x41, 0xd1, 0x3e, 0x16, 0x05, 0x5a, 0xa0, 0xaf, 0xed, 0x7b, 0xd1, 0xb7, 0x02, 0xed, 0x43, - 0x5e, 0x0b, 0x14, 0x48, 0x1f, 0x0a, 0xa4, 0x28, 0x0a, 0x14, 0x7d, 0x08, 0x0a, 0xbb, 0x7f, 0x48, - 0xc1, 0xdd, 0x21, 0x4d, 0x4a, 0xa4, 0x48, 0x19, 0xe8, 0x9b, 0x76, 0x77, 0xe6, 0xb7, 0xbf, 0x99, - 0x9d, 0x99, 0xdd, 0xa1, 0xe0, 0x82, 0xaa, 0xbd, 0xab, 0xc8, 0x96, 0xba, 0xa7, 0xe4, 0x75, 0x83, - 0xca, 0x35, 0x25, 0xbf, 0xb7, 0x52, 0x52, 0x2c, 0xba, 0x92, 0x7f, 0xdc, 0x54, 0x8c, 0x56, 0xae, - 0x61, 0xe8, 0x96, 0x4e, 0xd2, 0xae, 0x54, 0x8e, 0x4b, 0xe5, 0x50, 0x2a, 0x73, 0xb6, 0xa2, 0xeb, - 0x95, 0x9a, 0x92, 0xa7, 0x0d, 0x35, 0x4f, 0x35, 0x4d, 0xb7, 0xa8, 0xa5, 0xea, 0x9a, 0xc9, 0xf5, - 0x32, 0x73, 0xa1, 0xe8, 0x08, 0xc3, 0xc5, 0xe6, 0x43, 0xc5, 0x2a, 0x8a, 0xa6, 0x98, 0xaa, 0x03, - 0x97, 0xaa, 0xe8, 0x15, 0x9d, 0xfd, 0xcc, 0xdb, 0xbf, 0xf8, 0xac, 0x58, 0x80, 0x93, 0xff, 0xb3, - 0xb9, 0x6e, 0xb5, 0xac, 0xea, 0x96, 0xa1, 0xca, 0x8a, 0xa4, 0x3c, 0x6e, 0x2a, 0xa6, 0x45, 0x4e, - 0xc3, 0x48, 0xc3, 0x1e, 0x17, 0xd5, 0x72, 0x5a, 0x98, 0x11, 0x16, 0x13, 0xd2, 0x31, 0x36, 0xde, - 0x28, 0x8b, 0x32, 0x4c, 0xb5, 0xeb, 0x98, 0x0d, 0x5d, 0x33, 0x15, 0xb2, 0x01, 0x49, 0xae, 0x64, - 0x5a, 0xd4, 0x52, 0x98, 0x5e, 0xb2, 0xb0, 0x98, 0x0b, 0x73, 0x40, 0xce, 0x45, 0xd8, 0xb6, 0xe5, - 0x25, 0x68, 0xb8, 0xbf, 0xc5, 0x14, 0x10, 0xbe, 0x09, 0x35, 0x68, 0xdd, 0x44, 0x56, 0xe2, 0xff, - 0x61, 0xd2, 0x37, 0x8b, 0xfb, 0xde, 0x86, 0xe1, 0x06, 0x9b, 0xc1, 0x2d, 0x67, 0xba, 0x6c, 0xc9, - 0xe4, 0x56, 0x07, 0x5f, 0xbe, 0x9e, 0xee, 0x93, 0x50, 0x4b, 0xcc, 0x40, 0x9a, 0xc1, 0xae, 0x52, - 0xad, 0x2c, 0x29, 0x35, 0xda, 0x52, 0x0c, 0x77, 0xcb, 0xeb, 0x70, 0x3a, 0x60, 0x0d, 0x37, 0xce, - 0xc0, 0x88, 0x81, 0x73, 0x69, 0x61, 0x66, 0x60, 0x31, 0x21, 0xb9, 0x63, 0xf1, 0x1c, 0x9c, 0x71, - 0x15, 0x0f, 0x8d, 0x74, 0x71, 0x77, 0xe1, 0x6c, 0xf0, 0x32, 0x42, 0xff, 0x17, 0x8e, 0x7b, 0x7c, - 0xc9, 0xe1, 0xbb, 0x3a, 0xd3, 0x0f, 0x24, 0x25, 0x0f, 0x9d, 0x69, 0x8a, 0x33, 0x90, 0x75, 0x37, - 0xdb, 0x58, 0x5d, 0x0b, 0xa0, 0xa3, 0xc1, 0x74, 0xa8, 0xc4, 0x9f, 0xc1, 0x48, 0x84, 0x19, 0x7e, - 0x92, 0xf6, 0xdc, 0x3d, 0x45, 0x09, 0x72, 0x51, 0x03, 0xce, 0x77, 0x91, 0x39, 0x2a, 0x2b, 0x17, - 0x2d, 0x80, 0xd5, 0x79, 0xf4, 0xc2, 0x9a, 0xae, 0x6a, 0x25, 0x6a, 0x2a, 0x01, 0xa4, 0x4c, 0x24, - 0x1e, 0x28, 0x82, 0x9c, 0x1e, 0x04, 0x72, 0x5a, 0x0e, 0xe7, 0xd4, 0x09, 0xe6, 0xe7, 0xe5, 0xc4, - 0x92, 0x3f, 0x61, 0x3a, 0x62, 0xa9, 0x63, 0xf9, 0xc8, 0x3e, 0xf2, 0x27, 0xa6, 0x8f, 0x4b, 0x16, - 0x37, 0xdb, 0xb6, 0x74, 0x63, 0x37, 0x80, 0x4c, 0x1d, 0xce, 0x85, 0xac, 0x23, 0x9b, 0xcd, 0x40, - 0x36, 0x4b, 0xe1, 0x6c, 0xda, 0x90, 0x82, 0x5d, 0xc3, 0x85, 0x9a, 0xa5, 0x9a, 0x6a, 0x56, 0x3d, - 0xe9, 0x7b, 0xdb, 0xc7, 0xd6, 0xb3, 0x8c, 0x64, 0xb2, 0x00, 0x0d, 0x77, 0x16, 0x73, 0xd8, 0x33, - 0x23, 0x3e, 0xc4, 0xcc, 0xd9, 0x32, 0xf4, 0x3d, 0xb5, 0xac, 0x18, 0x1e, 0x1a, 0x58, 0x29, 0x33, - 0x76, 0xa5, 0xe4, 0x8b, 0x58, 0x29, 0xdd, 0x31, 0x99, 0x82, 0x61, 0xb3, 0x55, 0x2f, 0xe9, 0xb5, - 0x74, 0x3f, 0x5b, 0xc1, 0x91, 0x58, 0xc5, 0x38, 0x0b, 0x42, 0x45, 0x62, 0x77, 0x83, 0x6a, 0xe9, - 0x85, 0x88, 0xb0, 0xee, 0xac, 0xa3, 0xa7, 0xe1, 0x14, 0xdb, 0xe9, 0xbe, 0x5e, 0x6e, 0xd6, 0x7c, - 0xc4, 0xc5, 0x37, 0xb1, 0xea, 0xf9, 0x96, 0x70, 0xf7, 0x5b, 0x30, 0xe4, 0xdd, 0x77, 0x3e, 0x7c, - 0xdf, 0x7f, 0xf1, 0x5b, 0x86, 0xab, 0x73, 0x25, 0xf1, 0x3d, 0x10, 0x19, 0xf2, 0xbf, 0x55, 0xd3, - 0xd2, 0x0d, 0x55, 0xa6, 0x35, 0xbc, 0x27, 0x64, 0xdd, 0x28, 0x3b, 0x47, 0x43, 0x6e, 0xc1, 0x30, - 0xc7, 0x62, 0x9b, 0x8c, 0x75, 0x33, 0xee, 0x01, 0x1b, 0x3e, 0x6c, 0x35, 0x14, 0x09, 0x75, 0xc8, - 0x19, 0x48, 0x70, 0x67, 0xda, 0x37, 0x14, 0xf7, 0xee, 0x08, 0x9f, 0xd8, 0x28, 0x8b, 0x06, 0xcc, - 0x76, 0x25, 0xe0, 0xe6, 0xc5, 0x28, 0xf7, 0xb1, 0xc1, 0x17, 0x30, 0x14, 0xe7, 0x23, 0xbc, 0xec, - 0xc0, 0xf0, 0x30, 0xc6, 0x91, 0xf8, 0xa1, 0x00, 0x29, 0xce, 0x93, 0xef, 0xda, 0x7a, 0xd0, 0x60, - 0xd7, 0x39, 0x39, 0x05, 0xc7, 0xea, 0xf4, 0x69, 0x91, 0x56, 0xb8, 0xa1, 0x83, 0xd2, 0x70, 0x9d, - 0x3e, 0xbd, 0x53, 0x51, 0x48, 0x0e, 0x26, 0x55, 0x4d, 0xae, 0x35, 0xcb, 0x4a, 0xd1, 0xa0, 0x4f, - 0x8a, 0x55, 0xae, 0xc6, 0x8c, 0x19, 0x91, 0x4e, 0xe0, 0x92, 0x44, 0x9f, 0x20, 0x1e, 0x59, 0x82, - 0x09, 0x47, 0xbe, 0xae, 0x58, 0xb4, 0x4c, 0x2d, 0x9a, 0x1e, 0x60, 0xc2, 0xe3, 0x38, 0x7f, 0x1f, - 0xa7, 0xc5, 0x8f, 0xfa, 0x31, 0xee, 0x39, 0xa3, 0x37, 0xf4, 0x1a, 0xb5, 0xd4, 0x9a, 0x6a, 0xb5, - 0x1c, 0xe7, 0xdf, 0x81, 0x84, 0x5d, 0x70, 0x8a, 0xaa, 0xb6, 0xa3, 0x47, 0x07, 0x17, 0x47, 0xd9, - 0xd0, 0x76, 0x74, 0x69, 0xc4, 0x56, 0xb3, 0x7f, 0x91, 0x35, 0x80, 0xc7, 0x4d, 0xdd, 0x42, 0x8c, - 0xfe, 0x1e, 0x30, 0x12, 0x4c, 0x8f, 0x81, 0x94, 0x61, 0x8a, 0xcb, 0x39, 0xe6, 0x17, 0x75, 0xee, - 0x36, 0x66, 0x59, 0xb2, 0x90, 0x8b, 0x02, 0xf4, 0x3b, 0x5b, 0x4a, 0xe9, 0x01, 0xb3, 0xe2, 0xfb, - 0xfd, 0x58, 0x94, 0x3a, 0xdd, 0x81, 0xa1, 0xf0, 0x4f, 0x80, 0x3d, 0x77, 0x96, 0xe7, 0xf1, 0xea, - 0xf4, 0xaf, 0xaf, 0xa7, 0xcf, 0xc8, 0xba, 0x59, 0xd7, 0x4d, 0xb3, 0xbc, 0x9b, 0x53, 0xf5, 0x7c, - 0x9d, 0x5a, 0xd5, 0xdc, 0xa6, 0x52, 0xa1, 0x72, 0x6b, 0x5d, 0x91, 0x25, 0x8f, 0x0a, 0x79, 0x04, - 0x13, 0x8e, 0x05, 0xee, 0xe1, 0x70, 0x9f, 0x74, 0xa9, 0xfb, 0xce, 0x79, 0xd9, 0xd9, 0xa3, 0x9a, - 0x96, 0x2a, 0x9b, 0xd2, 0x38, 0xa2, 0x38, 0x4b, 0xe4, 0x1e, 0x24, 0xbd, 0xd1, 0x31, 0xc0, 0x42, - 0x74, 0x2e, 0x56, 0x88, 0x4a, 0x60, 0xb8, 0xd1, 0xe3, 0xde, 0x6d, 0xdc, 0x05, 0x4e, 0xe5, 0x31, - 0xd9, 0x81, 0x60, 0x45, 0xa8, 0xe2, 0xdd, 0x16, 0x28, 0x82, 0x8e, 0x5a, 0x87, 0x84, 0x53, 0xde, - 0x62, 0xe5, 0x0b, 0x17, 0xe5, 0xc7, 0xee, 0x2a, 0x8a, 0xb7, 0x03, 0x77, 0x62, 0xd4, 0xcd, 0x18, - 0x85, 0x55, 0x34, 0xf0, 0x69, 0x10, 0xac, 0x8f, 0x54, 0xef, 0xdb, 0xe9, 0xcd, 0x57, 0xb6, 0xb1, - 0x98, 0xd9, 0x74, 0x17, 0xa2, 0xe9, 0xf2, 0x6a, 0xe6, 0xd7, 0x16, 0xdf, 0x81, 0xb1, 0x6d, 0x99, - 0xd6, 0x54, 0xad, 0xe2, 0x64, 0xf6, 0x2c, 0x8c, 0xb2, 0x24, 0x2a, 0x2b, 0xb2, 0x5a, 0xa7, 0x35, - 0xfe, 0xfc, 0x1c, 0x95, 0x8e, 0xdb, 0x93, 0xeb, 0x38, 0x47, 0xe6, 0x60, 0x8c, 0xa7, 0x89, 0x2b, - 0xd5, 0xcf, 0xa4, 0x46, 0xd9, 0xac, 0x23, 0x26, 0x1e, 0x08, 0x58, 0xa9, 0x1d, 0x93, 0x3c, 0x8f, - 0xf1, 0xbb, 0x90, 0xc4, 0x24, 0xb1, 0x5a, 0x8d, 0xde, 0xca, 0x25, 0xe8, 0xee, 0x6f, 0x42, 0x60, - 0xd0, 0x66, 0x86, 0xd5, 0x92, 0xfd, 0x26, 0x29, 0x18, 0x62, 0x3c, 0x58, 0xba, 0x25, 0x24, 0x3e, - 0x20, 0x8f, 0x60, 0xdc, 0xe4, 0xa6, 0xba, 0xe9, 0x38, 0x18, 0xf5, 0x98, 0xf7, 0xfb, 0x86, 0xbd, - 0xb0, 0x05, 0x69, 0xcc, 0xf4, 0xcd, 0x8a, 0xfb, 0x03, 0x30, 0xc6, 0x4c, 0xdb, 0xa2, 0x2a, 0x77, - 0x2b, 0x59, 0x05, 0x68, 0x50, 0xd5, 0x28, 0xb2, 0x62, 0x8a, 0x99, 0x37, 0x6b, 0x3f, 0xcf, 0xa3, - 0xb2, 0x2f, 0x61, 0xab, 0x31, 0x30, 0x1b, 0x83, 0x1d, 0x04, 0xc7, 0xe8, 0xef, 0x01, 0xc3, 0x7d, - 0x75, 0x91, 0x75, 0x48, 0xf2, 0x73, 0xe2, 0x20, 0x03, 0xf1, 0x41, 0x78, 0x19, 0xe4, 0x28, 0x8f, - 0xe0, 0x24, 0x63, 0x22, 0x37, 0xeb, 0x4d, 0xbb, 0x36, 0xec, 0x39, 0x78, 0x83, 0xf1, 0xf1, 0x26, - 0x6d, 0x84, 0x35, 0x17, 0x80, 0x03, 0xbf, 0x05, 0x53, 0x9c, 0x5e, 0x07, 0xf2, 0x50, 0x7c, 0xe4, - 0x14, 0x83, 0x68, 0x87, 0x9e, 0x83, 0x31, 0xc6, 0xd9, 0x52, 0xeb, 0x8a, 0x69, 0xd1, 0x7a, 0x23, - 0x3d, 0x3c, 0x23, 0x2c, 0x0e, 0x48, 0x2c, 0xb8, 0x1f, 0x3a, 0x93, 0x64, 0x01, 0xc6, 0x39, 0x83, - 0x43, 0xb9, 0x63, 0x4c, 0x8e, 0xc7, 0xb7, 0x2b, 0x28, 0x6a, 0xf8, 0xb0, 0xf0, 0x45, 0x32, 0xe6, - 0xa4, 0x04, 0x13, 0xfc, 0xca, 0x65, 0x67, 0x1e, 0xb7, 0x4f, 0xf4, 0x45, 0x8c, 0x34, 0xd6, 0xf0, - 0x8d, 0x0b, 0x3f, 0xa4, 0x61, 0x88, 0x6d, 0x48, 0x3e, 0x16, 0x60, 0x98, 0x77, 0x78, 0xa4, 0x4b, - 0xd5, 0xed, 0x6c, 0x2c, 0x33, 0x97, 0x62, 0x4a, 0x73, 0x2b, 0xc4, 0xc5, 0x0f, 0x7e, 0xfa, 0xfd, - 0xd3, 0x7e, 0x91, 0xcc, 0xe4, 0x43, 0xbb, 0x6f, 0xde, 0x5a, 0x92, 0x2f, 0x04, 0x38, 0xee, 0x6d, - 0x1d, 0x49, 0x21, 0x62, 0xa7, 0x80, 0x1e, 0x34, 0x73, 0xa5, 0x27, 0x1d, 0xe4, 0x98, 0x67, 0x1c, - 0x97, 0xc8, 0x42, 0x38, 0xc7, 0x12, 0xd5, 0xca, 0x45, 0xa7, 0x61, 0x25, 0xdf, 0x08, 0x30, 0xde, - 0xd6, 0x8d, 0x92, 0xbf, 0xc6, 0xd8, 0xb9, 0xb3, 0x07, 0xc8, 0x5c, 0xeb, 0x55, 0x0d, 0x39, 0x5f, - 0x61, 0x9c, 0x2f, 0x91, 0x8b, 0x11, 0x9c, 0xbd, 0xfd, 0x03, 0xf9, 0x56, 0x00, 0xd2, 0xd9, 0xb6, - 0x92, 0x1b, 0x31, 0x38, 0x04, 0xf6, 0xc2, 0x99, 0xbf, 0x1d, 0x41, 0x13, 0x0d, 0xb8, 0xce, 0x0c, - 0x58, 0x21, 0xf9, 0x08, 0x03, 0xd4, 0x92, 0xec, 0x37, 0xe2, 0x7b, 0x01, 0x52, 0x41, 0x7d, 0x2e, - 0xb9, 0x19, 0x15, 0x99, 0xe1, 0x0d, 0x74, 0xe6, 0xef, 0x47, 0xd2, 0x45, 0x53, 0x6e, 0x30, 0x53, - 0x0a, 0xe4, 0x72, 0x97, 0x18, 0xb7, 0xd5, 0x76, 0x14, 0xa5, 0xed, 0x40, 0xbe, 0x13, 0x60, 0x32, - 0xa0, 0x3d, 0x26, 0x51, 0x7e, 0x0d, 0xef, 0xba, 0x33, 0x37, 0x8f, 0xa2, 0x1a, 0xff, 0x4c, 0x64, - 0x54, 0xf7, 0xdb, 0x61, 0x27, 0x44, 0x5b, 0x4b, 0x1d, 0x99, 0x10, 0xc1, 0x1d, 0x7a, 0x64, 0x42, - 0x84, 0x74, 0xee, 0x71, 0x12, 0xa2, 0xd1, 0xb2, 0xaa, 0x7e, 0xde, 0x2f, 0x04, 0x98, 0x68, 0xef, - 0xbe, 0x49, 0x14, 0x83, 0x90, 0x76, 0x3e, 0x73, 0xbd, 0x67, 0x3d, 0xa4, 0x7e, 0x95, 0x51, 0xcf, - 0x91, 0xe5, 0x70, 0xea, 0xf6, 0xc3, 0x74, 0xd7, 0xcf, 0xfd, 0x6b, 0x01, 0xc6, 0xdb, 0x7a, 0xf5, - 0x48, 0x9f, 0x07, 0xb7, 0xfe, 0x99, 0x6b, 0xbd, 0xaa, 0x21, 0xf1, 0x02, 0x23, 0xbe, 0x4c, 0xfe, - 0x12, 0x49, 0xfc, 0x90, 0xe2, 0xcf, 0x02, 0x90, 0xce, 0x66, 0x3e, 0xb2, 0x06, 0x85, 0x7e, 0x55, - 0x88, 0xac, 0x41, 0xe1, 0x5f, 0x0e, 0xc4, 0xff, 0x30, 0xfe, 0xeb, 0x64, 0xb5, 0x5b, 0xe2, 0x72, - 0x6d, 0xaf, 0xef, 0xf3, 0xcf, 0x9c, 0xd9, 0xe7, 0xf9, 0x67, 0xbc, 0x93, 0x7e, 0x4e, 0xbe, 0x14, - 0xe0, 0x04, 0xbf, 0xc6, 0x3d, 0x5f, 0x09, 0xc8, 0x4a, 0x04, 0xb9, 0xce, 0x8f, 0x0d, 0x99, 0x42, - 0x2f, 0x2a, 0x68, 0x48, 0x8e, 0x19, 0xb2, 0x48, 0xe6, 0xc3, 0x0d, 0xa9, 0x33, 0x35, 0x6e, 0x00, - 0xf9, 0x51, 0x80, 0xa9, 0xe0, 0x8e, 0x9f, 0xdc, 0x8a, 0xd8, 0xbe, 0xeb, 0x97, 0x8a, 0xcc, 0x3f, - 0x8e, 0xa8, 0x8d, 0x76, 0xdc, 0x64, 0x76, 0x5c, 0x25, 0x85, 0x70, 0x3b, 0xaa, 0x2e, 0x42, 0xd1, - 0xf7, 0x45, 0x82, 0x7c, 0x25, 0xc0, 0x44, 0x7b, 0xd3, 0x1a, 0x99, 0xcb, 0x21, 0x4d, 0x7f, 0x64, - 0x2e, 0x87, 0x75, 0xc7, 0xe2, 0x32, 0xb3, 0x60, 0x9e, 0x5c, 0x08, 0xb7, 0xc0, 0xd3, 0x0a, 0xbf, - 0x10, 0x60, 0x32, 0xa0, 0x85, 0x8c, 0xac, 0xff, 0xe1, 0x9d, 0x69, 0x64, 0xfd, 0xef, 0xd2, 0xb1, - 0x8a, 0x17, 0x19, 0xf9, 0x39, 0x32, 0x1b, 0x9d, 0x0f, 0xec, 0x31, 0x91, 0x0a, 0x6a, 0x2a, 0x49, - 0x6f, 0x0c, 0x7c, 0x9d, 0x6c, 0xe4, 0x3d, 0xdc, 0xad, 0x8b, 0x15, 0x57, 0x18, 0xfd, 0x8b, 0x64, - 0x29, 0x6e, 0x3a, 0x9b, 0xe4, 0x73, 0x01, 0x92, 0x9e, 0xc7, 0x77, 0x64, 0xbe, 0x76, 0xb6, 0x9c, - 0x91, 0xf9, 0x1a, 0xf0, 0xb6, 0x17, 0x17, 0x18, 0xd3, 0xf3, 0x64, 0x3a, 0xe2, 0xc5, 0x40, 0x3e, - 0x13, 0x20, 0xe1, 0xde, 0x78, 0x24, 0x1f, 0xf7, 0x6e, 0x74, 0xb8, 0x5d, 0x8e, 0xaf, 0x10, 0x3f, - 0x7e, 0x0f, 0xaf, 0xd1, 0xd5, 0x9d, 0x97, 0xfb, 0x59, 0xe1, 0xd5, 0x7e, 0x56, 0xf8, 0x6d, 0x3f, - 0x2b, 0x7c, 0x72, 0x90, 0xed, 0x7b, 0x75, 0x90, 0xed, 0xfb, 0xe5, 0x20, 0xdb, 0xf7, 0xf6, 0x66, - 0x45, 0xb5, 0xaa, 0xcd, 0x52, 0x4e, 0xd6, 0xeb, 0xf9, 0x0d, 0x07, 0x69, 0x93, 0x96, 0xcc, 0x43, - 0xdc, 0x4b, 0xb2, 0x6e, 0x28, 0xde, 0x61, 0x95, 0xaa, 0x1a, 0xd6, 0x29, 0xd3, 0xd9, 0xd4, 0x6e, - 0xe3, 0xcd, 0xd2, 0x30, 0xfb, 0x0f, 0xee, 0xca, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x91, 0x50, - 0x4b, 0xd5, 0x48, 0x1c, 0x00, 0x00, + // 1931 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0xdd, 0x6f, 0x1b, 0x4b, + 0x15, 0xcf, 0xe6, 0xab, 0xf1, 0x71, 0xf3, 0x71, 0x27, 0xbe, 0xb9, 0xe9, 0xf6, 0x5e, 0x27, 0xdd, + 0x34, 0x5f, 0x24, 0xb1, 0x1b, 0xb7, 0xb4, 0xa5, 0x84, 0xa0, 0x26, 0x69, 0x21, 0x90, 0xaa, 0x61, + 0x53, 0x28, 0x5f, 0x92, 0x35, 0x5e, 0x4f, 0xec, 0x25, 0xf6, 0xee, 0x76, 0x77, 0x9d, 0xd6, 0xaa, + 0x2a, 0x04, 0x8f, 0x80, 0x04, 0x12, 0xaf, 0xf0, 0x8e, 0x78, 0x43, 0x82, 0x87, 0xbe, 0x22, 0x81, + 0xca, 0x5b, 0x11, 0x42, 0x42, 0x3c, 0x54, 0x28, 0xe1, 0x6f, 0xe0, 0x19, 0xed, 0xcc, 0xec, 0x66, + 0xd7, 0xde, 0xf5, 0xac, 0x83, 0x78, 0xf3, 0xce, 0x9c, 0xf3, 0x9b, 0xdf, 0x39, 0x33, 0xe7, 0xcc, + 0x9c, 0x63, 0xb8, 0xa9, 0x1b, 0x3f, 0x20, 0x9a, 0xab, 0x9f, 0x92, 0xa2, 0x69, 0x63, 0xad, 0x41, + 0x8a, 0xa7, 0x9b, 0x15, 0xe2, 0xe2, 0xcd, 0xe2, 0x8b, 0x16, 0xb1, 0xdb, 0x05, 0xcb, 0x36, 0x5d, + 0x13, 0xcd, 0x06, 0x52, 0x05, 0x26, 0x55, 0xe0, 0x52, 0xf2, 0xa7, 0x35, 0xd3, 0xac, 0x35, 0x48, + 0x11, 0x5b, 0x7a, 0x11, 0x1b, 0x86, 0xe9, 0x62, 0x57, 0x37, 0x0d, 0x87, 0xe9, 0xc9, 0x8b, 0x89, + 0xe8, 0x1c, 0x86, 0x89, 0x2d, 0x25, 0x8a, 0xd5, 0x88, 0x41, 0x1c, 0xdd, 0x87, 0xcb, 0xd5, 0xcc, + 0x9a, 0x49, 0x7f, 0x16, 0xbd, 0x5f, 0x6c, 0x54, 0x29, 0xc1, 0xc7, 0xdf, 0xf0, 0xb8, 0x1e, 0xb6, + 0xdd, 0xfa, 0xa1, 0xad, 0x6b, 0x44, 0x25, 0x2f, 0x5a, 0xc4, 0x71, 0xd1, 0x35, 0x18, 0xb3, 0xbc, + 0xef, 0xb2, 0x5e, 0x9d, 0x95, 0xe6, 0xa5, 0x95, 0x8c, 0x7a, 0x85, 0x7e, 0xef, 0x57, 0x15, 0x0d, + 0x66, 0x3a, 0x75, 0x1c, 0xcb, 0x34, 0x1c, 0x82, 0xf6, 0x21, 0xcb, 0x94, 0x1c, 0x17, 0xbb, 0x84, + 0xea, 0x65, 0x4b, 0x2b, 0x85, 0x24, 0x07, 0x14, 0x02, 0x84, 0x23, 0x4f, 0x5e, 0x05, 0x2b, 0xf8, + 0xad, 0xe4, 0x00, 0xb1, 0x45, 0xb0, 0x8d, 0x9b, 0x0e, 0x67, 0xa5, 0x7c, 0x13, 0xa6, 0x23, 0xa3, + 0x7c, 0xdd, 0x6d, 0x18, 0xb5, 0xe8, 0x08, 0x5f, 0x72, 0xbe, 0xc7, 0x92, 0x54, 0x6e, 0x67, 0xf8, + 0xdd, 0x87, 0xb9, 0x01, 0x95, 0x6b, 0x29, 0x32, 0xcc, 0x52, 0xd8, 0x1d, 0x6c, 0x54, 0x55, 0xd2, + 0xc0, 0x6d, 0x62, 0x07, 0x4b, 0xde, 0x83, 0x6b, 0x31, 0x73, 0x7c, 0x61, 0x19, 0xc6, 0x6c, 0x3e, + 0x36, 0x2b, 0xcd, 0x0f, 0xad, 0x64, 0xd4, 0xe0, 0x5b, 0xf9, 0x0c, 0xae, 0x07, 0x8a, 0x17, 0x46, + 0x06, 0xb8, 0x27, 0xf0, 0x69, 0xfc, 0x34, 0x87, 0xfe, 0x3a, 0x5c, 0x0d, 0xf9, 0x92, 0xc1, 0xf7, + 0x74, 0x66, 0x14, 0x48, 0xcd, 0x5e, 0x38, 0xd3, 0x51, 0xe6, 0x21, 0x1f, 0x2c, 0xb6, 0xbf, 0xb3, + 0x1b, 0x43, 0xc7, 0x80, 0xb9, 0x44, 0x89, 0xff, 0x07, 0x23, 0x05, 0xe6, 0xd9, 0x4e, 0x7a, 0x63, + 0x8f, 0x09, 0x89, 0x73, 0x91, 0x05, 0x37, 0x7a, 0xc8, 0x5c, 0x96, 0x55, 0x80, 0x16, 0xc3, 0xea, + 0x06, 0xf7, 0xc2, 0xae, 0xa9, 0x1b, 0x15, 0xec, 0x90, 0x18, 0x52, 0x0e, 0x27, 0x1e, 0x2b, 0xc2, + 0x39, 0x3d, 0x8d, 0xe5, 0xb4, 0x9e, 0xcc, 0xa9, 0x1b, 0x2c, 0xca, 0xcb, 0x3f, 0x4b, 0xd1, 0x80, + 0xe9, 0x3a, 0x4b, 0x5d, 0xd3, 0x97, 0xf6, 0x51, 0x34, 0x30, 0x23, 0x5c, 0xf2, 0x7c, 0xb1, 0x23, + 0xd7, 0xb4, 0x4f, 0x62, 0xc8, 0x34, 0xe1, 0xb3, 0x84, 0x79, 0xce, 0xe6, 0x20, 0x96, 0xcd, 0x6a, + 0x32, 0x9b, 0x0e, 0xa4, 0x78, 0xd7, 0x30, 0xa1, 0x56, 0xa5, 0xa1, 0x3b, 0xf5, 0x50, 0xf8, 0x6e, + 0x47, 0xd8, 0x86, 0xa6, 0x39, 0x99, 0x3c, 0x80, 0x15, 0x8c, 0xf2, 0x18, 0x0e, 0x8d, 0x28, 0xcf, + 0x78, 0xe4, 0x1c, 0xda, 0xe6, 0xa9, 0x5e, 0x25, 0x76, 0x88, 0x06, 0xcf, 0x94, 0xb2, 0x97, 0x29, + 0xd9, 0x24, 0xcf, 0x94, 0xc1, 0x37, 0x9a, 0x81, 0x51, 0xa7, 0xdd, 0xac, 0x98, 0x8d, 0xd9, 0x41, + 0x3a, 0xc3, 0xbf, 0x94, 0x3a, 0x3f, 0x67, 0x71, 0xa8, 0x9c, 0xd8, 0xa3, 0xb8, 0x5c, 0x7a, 0x53, + 0x70, 0xac, 0xbb, 0xf3, 0xe8, 0x06, 0xac, 0xb1, 0xe3, 0x5a, 0xc7, 0xba, 0xd1, 0xd0, 0x8d, 0x93, + 0x3d, 0xec, 0xe2, 0x23, 0xd7, 0x26, 0xb8, 0xe9, 0xc4, 0x6c, 0xde, 0x4f, 0x25, 0x58, 0x4f, 0x27, + 0xcf, 0x69, 0x7e, 0x2f, 0x76, 0x33, 0xef, 0xf7, 0x38, 0xea, 0x3d, 0x81, 0xa3, 0x7b, 0x7b, 0x0d, + 0x3e, 0xa1, 0x64, 0x9e, 0x98, 0xd5, 0x56, 0x23, 0xe2, 0x75, 0xe5, 0xdb, 0x3c, 0x65, 0x47, 0xa6, + 0x38, 0xa7, 0x2d, 0x18, 0x09, 0x3b, 0x6d, 0x29, 0x99, 0xcc, 0x57, 0xd8, 0x15, 0xc9, 0xd4, 0x99, + 0x92, 0xf2, 0x43, 0x50, 0x28, 0xf2, 0x57, 0x75, 0xc7, 0x35, 0x6d, 0x5d, 0xc3, 0x0d, 0x7e, 0xc9, + 0x69, 0xa6, 0x5d, 0xf5, 0x1d, 0x85, 0xb6, 0x60, 0x94, 0x61, 0xd1, 0x45, 0x26, 0x7a, 0xed, 0xcc, + 0x53, 0xfa, 0xf9, 0xac, 0x6d, 0x11, 0x95, 0xeb, 0xa0, 0xeb, 0x90, 0x61, 0x27, 0xc1, 0xbb, 0x5e, + 0xd9, 0xd1, 0x18, 0x63, 0x03, 0xfb, 0x55, 0xc5, 0x86, 0x85, 0x9e, 0x04, 0x82, 0xa0, 0x1e, 0x67, + 0x9e, 0xb7, 0xd9, 0x04, 0x77, 0xfd, 0x92, 0xe0, 0x88, 0xf8, 0x30, 0x6c, 0xdb, 0xf8, 0x97, 0xf2, + 0x13, 0x09, 0x72, 0x8c, 0x27, 0x5b, 0xb5, 0xfd, 0xd4, 0xa2, 0x6f, 0x11, 0xf4, 0x09, 0x5c, 0x69, + 0xe2, 0x57, 0x65, 0x5c, 0x63, 0x86, 0x0e, 0xab, 0xa3, 0x4d, 0xfc, 0xea, 0x61, 0x8d, 0xa0, 0x02, + 0x4c, 0xeb, 0x86, 0xd6, 0x68, 0x55, 0x49, 0xd9, 0xc6, 0x2f, 0xcb, 0x75, 0xa6, 0x46, 0x8d, 0x19, + 0x53, 0x3f, 0xe2, 0x53, 0x2a, 0x7e, 0xc9, 0xf1, 0xd0, 0x2a, 0x4c, 0xf9, 0xf2, 0x4d, 0xe2, 0xe2, + 0x2a, 0x76, 0xf1, 0xec, 0x10, 0x15, 0x9e, 0xe4, 0xe3, 0x4f, 0xf8, 0xb0, 0xf2, 0xb3, 0x41, 0x1e, + 0xb4, 0x8c, 0xd1, 0xb7, 0xcc, 0x06, 0x76, 0xf5, 0x86, 0xee, 0xb6, 0x7d, 0xe7, 0x3f, 0x84, 0x8c, + 0x97, 0x2d, 0xcb, 0xba, 0x71, 0x6c, 0x8a, 0x23, 0x83, 0xa1, 0xec, 0x1b, 0xc7, 0xa6, 0x3a, 0xe6, + 0xa9, 0x79, 0xbf, 0xd0, 0x2e, 0xc0, 0x8b, 0x96, 0xe9, 0x72, 0x8c, 0xc1, 0x3e, 0x30, 0x32, 0x54, + 0x8f, 0x82, 0x54, 0x61, 0x86, 0xc9, 0xf9, 0xe6, 0x97, 0x4d, 0xe6, 0x36, 0x6a, 0x59, 0xb6, 0x54, + 0x10, 0x01, 0x46, 0x9d, 0xad, 0xe6, 0xcc, 0x98, 0x51, 0xe5, 0x47, 0x83, 0x3c, 0xa3, 0x76, 0xbb, + 0x83, 0x1f, 0x85, 0x2f, 0x03, 0x9c, 0x06, 0xa3, 0x2c, 0x09, 0xed, 0xcc, 0xfd, 0xf3, 0xc3, 0xdc, + 0x75, 0xcd, 0x74, 0x9a, 0xa6, 0xe3, 0x54, 0x4f, 0x0a, 0xba, 0x59, 0x6c, 0x62, 0xb7, 0x5e, 0x38, + 0x20, 0x35, 0xac, 0xb5, 0xf7, 0x88, 0xa6, 0x86, 0x54, 0xd0, 0x73, 0x98, 0xf2, 0x2d, 0x08, 0x36, + 0x87, 0xf9, 0xa4, 0xc7, 0xa5, 0xe5, 0xef, 0x97, 0x17, 0x3d, 0xba, 0xe3, 0xea, 0x9a, 0xa3, 0x4e, + 0x72, 0x14, 0x7f, 0x0a, 0x3d, 0x86, 0x6c, 0xf8, 0x74, 0x0c, 0xd1, 0x23, 0xba, 0x98, 0xea, 0x88, + 0xaa, 0x60, 0x07, 0xa7, 0x27, 0xb8, 0x98, 0x99, 0x0b, 0xfc, 0xb4, 0xe9, 0xd0, 0x0d, 0xe1, 0x19, + 0xa1, 0xce, 0x2f, 0xe6, 0x58, 0x11, 0xee, 0xa8, 0x3d, 0xc8, 0xf8, 0xb9, 0x39, 0x55, 0xbc, 0x30, + 0x51, 0xb6, 0xed, 0x81, 0xa2, 0xb2, 0x1d, 0xbb, 0x12, 0xa5, 0xee, 0xa4, 0xb8, 0x15, 0x14, 0x9b, + 0xbf, 0x6b, 0xe2, 0xf5, 0x39, 0xd5, 0x27, 0x5e, 0x78, 0xb3, 0x99, 0x23, 0x9e, 0xcc, 0x3c, 0xba, + 0xcb, 0x62, 0xba, 0x2c, 0x9b, 0x45, 0xb5, 0x95, 0xef, 0xc3, 0xc4, 0x91, 0x86, 0x1b, 0xba, 0x51, + 0xf3, 0x23, 0x7b, 0x01, 0xc6, 0x69, 0x10, 0x55, 0x89, 0xa6, 0x37, 0x71, 0x83, 0xbd, 0x9d, 0xc7, + 0xd5, 0xab, 0xde, 0xe0, 0x1e, 0x1f, 0x43, 0x8b, 0x30, 0xc1, 0xc2, 0x24, 0x90, 0x1a, 0xa4, 0x52, + 0xe3, 0x74, 0xd4, 0x17, 0x53, 0xce, 0x25, 0x9e, 0xa9, 0x7d, 0x93, 0x42, 0x95, 0xc4, 0x23, 0xc8, + 0xf2, 0x20, 0x71, 0xdb, 0x56, 0x7f, 0xe9, 0x12, 0xcc, 0xe0, 0x37, 0x42, 0x30, 0xec, 0x31, 0xe3, + 0xd9, 0x92, 0xfe, 0x46, 0x39, 0x18, 0xa1, 0x3c, 0x68, 0xb8, 0x65, 0x54, 0xf6, 0x81, 0x9e, 0xc3, + 0xa4, 0xc3, 0x4c, 0x0d, 0xc2, 0x71, 0x58, 0x54, 0x89, 0x44, 0x7d, 0x43, 0xcb, 0x03, 0x49, 0x9d, + 0x70, 0x22, 0xa3, 0xca, 0xd9, 0x10, 0x4c, 0x50, 0xd3, 0x0e, 0xb1, 0xce, 0xdc, 0x8a, 0x76, 0x00, + 0x2c, 0xac, 0xdb, 0x65, 0x9a, 0x4c, 0x79, 0xe4, 0x2d, 0x78, 0xb5, 0x85, 0x28, 0xfa, 0x32, 0x9e, + 0x1a, 0x05, 0xf3, 0x30, 0xe8, 0x46, 0x30, 0x8c, 0xc1, 0x3e, 0x30, 0x82, 0x27, 0x23, 0xda, 0x83, + 0x2c, 0xdb, 0x27, 0x06, 0x32, 0x94, 0x1e, 0x84, 0xa5, 0x41, 0x86, 0xf2, 0x1c, 0x3e, 0xa6, 0x4c, + 0xb4, 0x56, 0xb3, 0xe5, 0xe5, 0x86, 0x53, 0x1f, 0x6f, 0x38, 0x3d, 0xde, 0xb4, 0x87, 0xb0, 0x1b, + 0x00, 0x30, 0xe0, 0xef, 0xc0, 0x0c, 0xa3, 0xd7, 0x85, 0x3c, 0x92, 0x1e, 0x39, 0x47, 0x21, 0x3a, + 0xa1, 0x17, 0x61, 0x82, 0x72, 0x76, 0xf5, 0x26, 0x71, 0x5c, 0xdc, 0xb4, 0x66, 0x47, 0xe7, 0xa5, + 0x95, 0x21, 0x95, 0x1e, 0xee, 0x67, 0xfe, 0x20, 0x5a, 0x86, 0x49, 0xc6, 0xe0, 0x42, 0xee, 0x0a, + 0x95, 0x63, 0xe7, 0x3b, 0x10, 0x54, 0x0c, 0xfe, 0xb0, 0x88, 0x9c, 0x64, 0x1e, 0x93, 0x2a, 0x4c, + 0xb1, 0x2b, 0x97, 0xee, 0x79, 0xda, 0x22, 0x37, 0x72, 0x62, 0xd4, 0x09, 0x2b, 0xf2, 0x5d, 0xfa, + 0xb3, 0x0c, 0x23, 0x74, 0x41, 0xf4, 0x73, 0x09, 0x46, 0x59, 0x79, 0x8a, 0x7a, 0x64, 0xdd, 0xee, + 0xaa, 0x58, 0xde, 0x48, 0x29, 0xcd, 0xac, 0x50, 0x56, 0x7e, 0xfc, 0xb7, 0x7f, 0xff, 0x72, 0x50, + 0x41, 0xf3, 0xc5, 0xc4, 0xd6, 0x01, 0xab, 0x8b, 0xd1, 0x6f, 0x24, 0xb8, 0x1a, 0xae, 0x7b, 0x51, + 0x49, 0xb0, 0x52, 0x4c, 0x01, 0x2d, 0xdf, 0xee, 0x4b, 0x87, 0x73, 0x2c, 0x52, 0x8e, 0xab, 0x68, + 0x39, 0x99, 0x63, 0x05, 0x1b, 0xd5, 0xb2, 0x5f, 0x6d, 0xa3, 0x3f, 0x48, 0x30, 0xd9, 0x51, 0x4a, + 0xa3, 0xcf, 0xa7, 0x58, 0xb9, 0xfb, 0x0d, 0x2c, 0xdf, 0xed, 0x57, 0x8d, 0x73, 0xbe, 0x4d, 0x39, + 0x6f, 0xa0, 0x35, 0x01, 0xe7, 0xf0, 0x7b, 0x19, 0xfd, 0x51, 0x02, 0xd4, 0x5d, 0x73, 0xa3, 0xfb, + 0x29, 0x38, 0xc4, 0x16, 0xf2, 0xf2, 0x17, 0x2e, 0xa1, 0xc9, 0x0d, 0xb8, 0x47, 0x0d, 0xd8, 0x44, + 0x45, 0x81, 0x01, 0x7a, 0x45, 0x8b, 0x1a, 0xf1, 0x17, 0x09, 0x72, 0x71, 0x45, 0x3a, 0x7a, 0x20, + 0x3a, 0x99, 0xc9, 0xd5, 0xbf, 0xfc, 0xc5, 0x4b, 0xe9, 0x72, 0x53, 0xee, 0x53, 0x53, 0x4a, 0xe8, + 0x56, 0x8f, 0x33, 0xee, 0xa9, 0x1d, 0x13, 0xd2, 0xb1, 0x21, 0x7f, 0x92, 0x60, 0x3a, 0xa6, 0xb6, + 0x47, 0x22, 0xbf, 0x26, 0xb7, 0x0c, 0xe4, 0x07, 0x97, 0x51, 0x4d, 0xbf, 0x27, 0x1a, 0x57, 0x8f, + 0xda, 0xe1, 0x05, 0x44, 0x47, 0x3f, 0x40, 0x18, 0x10, 0xf1, 0xed, 0x05, 0x61, 0x40, 0x24, 0xb4, + 0x1d, 0xd2, 0x04, 0x84, 0xd5, 0x76, 0xeb, 0x51, 0xde, 0x6f, 0x25, 0x98, 0xea, 0x6c, 0x1d, 0x20, + 0x11, 0x83, 0x84, 0x5e, 0x84, 0x7c, 0xaf, 0x6f, 0x3d, 0x4e, 0xfd, 0x0e, 0xa5, 0x5e, 0x40, 0xeb, + 0xc9, 0xd4, 0xbd, 0x87, 0xe9, 0x49, 0x94, 0xfb, 0xef, 0x25, 0x98, 0xec, 0x68, 0x34, 0x08, 0x7d, + 0x1e, 0xdf, 0xb7, 0x90, 0xef, 0xf6, 0xab, 0xc6, 0x89, 0x97, 0x28, 0xf1, 0x75, 0xf4, 0x39, 0x21, + 0xf1, 0x0b, 0x8a, 0x7f, 0x97, 0x00, 0x75, 0x77, 0x22, 0x84, 0x39, 0x28, 0xb1, 0x25, 0x22, 0xcc, + 0x41, 0xc9, 0x6d, 0x0f, 0xe5, 0x6b, 0x94, 0xff, 0x1e, 0xda, 0xe9, 0x15, 0xb8, 0x4c, 0x3b, 0xec, + 0xfb, 0xe2, 0x6b, 0x7f, 0xf4, 0x4d, 0xf1, 0x35, 0xab, 0xa4, 0xdf, 0xa0, 0xff, 0x48, 0x30, 0x27, + 0xe8, 0x63, 0xa0, 0x47, 0xa2, 0xd8, 0x4c, 0xd5, 0x37, 0x91, 0x1f, 0xff, 0xaf, 0x30, 0xdc, 0xfc, + 0x3d, 0x6a, 0xfe, 0x36, 0xda, 0xea, 0x11, 0xee, 0x3e, 0x54, 0xd9, 0xab, 0xb0, 0xca, 0x0e, 0x05, + 0x8b, 0x9e, 0xc3, 0xdf, 0x4a, 0xf0, 0x11, 0x7b, 0xbf, 0x84, 0xda, 0x23, 0x68, 0x53, 0xc0, 0xb1, + 0xbb, 0xcb, 0x22, 0x97, 0xfa, 0x51, 0xe1, 0x26, 0x14, 0xa8, 0x09, 0x2b, 0x68, 0x29, 0xd9, 0x84, + 0x26, 0x55, 0x63, 0x6c, 0xd1, 0x5f, 0x25, 0x98, 0x89, 0x6f, 0x75, 0xa0, 0x2d, 0xc1, 0xf2, 0x3d, + 0x5b, 0x34, 0xf2, 0x97, 0x2e, 0xa9, 0xcd, 0xed, 0x78, 0x40, 0xed, 0xb8, 0x83, 0x4a, 0xc9, 0x76, + 0xd4, 0x03, 0x84, 0x72, 0xa4, 0x15, 0x83, 0x7e, 0x27, 0xc1, 0x54, 0x67, 0xb5, 0x2e, 0x4c, 0x62, + 0x09, 0xdd, 0x0e, 0x61, 0x12, 0x4b, 0x6a, 0x0b, 0x28, 0xeb, 0xd4, 0x82, 0x25, 0x74, 0x33, 0xd9, + 0x82, 0x50, 0x0f, 0xe0, 0xad, 0x04, 0xd3, 0x31, 0xb5, 0xb3, 0xf0, 0xe2, 0x4b, 0x2e, 0xc9, 0x85, + 0x17, 0x5f, 0x8f, 0x52, 0x5d, 0x59, 0xa3, 0xe4, 0x17, 0xd1, 0x82, 0x38, 0x11, 0xd0, 0x57, 0x54, + 0x2e, 0xae, 0x9a, 0x46, 0xfd, 0x31, 0x88, 0x94, 0xf0, 0xc2, 0x07, 0x48, 0xaf, 0xf2, 0x5d, 0xd9, + 0xa4, 0xf4, 0xd7, 0xd0, 0x6a, 0xda, 0x3c, 0xe6, 0xa0, 0x5f, 0x4b, 0x90, 0x0d, 0x55, 0x1d, 0xc2, + 0x78, 0xed, 0xae, 0xb5, 0x85, 0xf1, 0x1a, 0x53, 0xd4, 0x28, 0xcb, 0x94, 0xe9, 0x0d, 0x34, 0x27, + 0x78, 0x2a, 0xa1, 0x5f, 0x49, 0x90, 0x09, 0xae, 0x7a, 0x54, 0x4c, 0xfb, 0x28, 0xf0, 0xb9, 0xdd, + 0x4a, 0xaf, 0x90, 0xfe, 0xfc, 0x5e, 0xbc, 0x1f, 0x76, 0x8e, 0xdf, 0x9d, 0xe5, 0xa5, 0xf7, 0x67, + 0x79, 0xe9, 0x5f, 0x67, 0x79, 0xe9, 0x17, 0xe7, 0xf9, 0x81, 0xf7, 0xe7, 0xf9, 0x81, 0x7f, 0x9c, + 0xe7, 0x07, 0xbe, 0x7b, 0x50, 0xd3, 0xdd, 0x7a, 0xab, 0x52, 0xd0, 0xcc, 0x66, 0x71, 0xdf, 0x47, + 0x3a, 0xc0, 0x15, 0xe7, 0x02, 0x77, 0x43, 0x33, 0x6d, 0x12, 0xfe, 0xf4, 0x92, 0x2c, 0xcf, 0x53, + 0x8e, 0xbf, 0xa8, 0xdb, 0xb6, 0x88, 0x53, 0x19, 0xa5, 0xff, 0x9c, 0xde, 0xfe, 0x6f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xe9, 0xfe, 0x8e, 0x10, 0xfe, 0x1d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1930,6 +2029,8 @@ type QueryClient interface { StorkPublishers(ctx context.Context, in *QueryStorkPublishersRequest, opts ...grpc.CallOption) (*QueryStorkPublishersResponse, error) // Retrieves the state for all provider price feeds ProviderPriceState(ctx context.Context, in *QueryProviderPriceStateRequest, opts ...grpc.CallOption) (*QueryProviderPriceStateResponse, error) + // Retrieves the state for all Chainlink Data Streams price feeds + ChainlinkDataStreamsPriceStates(ctx context.Context, in *QueryChainlinkDataStreamsPriceStatesRequest, opts ...grpc.CallOption) (*QueryChainlinkDataStreamsPriceStatesResponse, error) // Retrieves the entire oracle module's state OracleModuleState(ctx context.Context, in *QueryModuleStateRequest, opts ...grpc.CallOption) (*QueryModuleStateResponse, error) // Retrieves historical price records for a given OracleType and Symbol @@ -2040,6 +2141,15 @@ func (c *queryClient) ProviderPriceState(ctx context.Context, in *QueryProviderP return out, nil } +func (c *queryClient) ChainlinkDataStreamsPriceStates(ctx context.Context, in *QueryChainlinkDataStreamsPriceStatesRequest, opts ...grpc.CallOption) (*QueryChainlinkDataStreamsPriceStatesResponse, error) { + out := new(QueryChainlinkDataStreamsPriceStatesResponse) + err := c.cc.Invoke(ctx, "/injective.oracle.v1beta1.Query/ChainlinkDataStreamsPriceStates", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryClient) OracleModuleState(ctx context.Context, in *QueryModuleStateRequest, opts ...grpc.CallOption) (*QueryModuleStateResponse, error) { out := new(QueryModuleStateResponse) err := c.cc.Invoke(ctx, "/injective.oracle.v1beta1.Query/OracleModuleState", in, out, opts...) @@ -2125,6 +2235,8 @@ type QueryServer interface { StorkPublishers(context.Context, *QueryStorkPublishersRequest) (*QueryStorkPublishersResponse, error) // Retrieves the state for all provider price feeds ProviderPriceState(context.Context, *QueryProviderPriceStateRequest) (*QueryProviderPriceStateResponse, error) + // Retrieves the state for all Chainlink Data Streams price feeds + ChainlinkDataStreamsPriceStates(context.Context, *QueryChainlinkDataStreamsPriceStatesRequest) (*QueryChainlinkDataStreamsPriceStatesResponse, error) // Retrieves the entire oracle module's state OracleModuleState(context.Context, *QueryModuleStateRequest) (*QueryModuleStateResponse, error) // Retrieves historical price records for a given OracleType and Symbol @@ -2171,6 +2283,9 @@ func (*UnimplementedQueryServer) StorkPublishers(ctx context.Context, req *Query func (*UnimplementedQueryServer) ProviderPriceState(ctx context.Context, req *QueryProviderPriceStateRequest) (*QueryProviderPriceStateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ProviderPriceState not implemented") } +func (*UnimplementedQueryServer) ChainlinkDataStreamsPriceStates(ctx context.Context, req *QueryChainlinkDataStreamsPriceStatesRequest) (*QueryChainlinkDataStreamsPriceStatesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ChainlinkDataStreamsPriceStates not implemented") +} func (*UnimplementedQueryServer) OracleModuleState(ctx context.Context, req *QueryModuleStateRequest) (*QueryModuleStateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method OracleModuleState not implemented") } @@ -2377,6 +2492,24 @@ func _Query_ProviderPriceState_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _Query_ChainlinkDataStreamsPriceStates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryChainlinkDataStreamsPriceStatesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ChainlinkDataStreamsPriceStates(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/injective.oracle.v1beta1.Query/ChainlinkDataStreamsPriceStates", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ChainlinkDataStreamsPriceStates(ctx, req.(*QueryChainlinkDataStreamsPriceStatesRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_OracleModuleState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryModuleStateRequest) if err := dec(in); err != nil { @@ -2547,6 +2680,10 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "ProviderPriceState", Handler: _Query_ProviderPriceState_Handler, }, + { + MethodName: "ChainlinkDataStreamsPriceStates", + Handler: _Query_ChainlinkDataStreamsPriceStates_Handler, + }, { MethodName: "OracleModuleState", Handler: _Query_OracleModuleState_Handler, @@ -3243,6 +3380,66 @@ func (m *QueryProviderPriceStateResponse) MarshalToSizedBuffer(dAtA []byte) (int return len(dAtA) - i, nil } +func (m *QueryChainlinkDataStreamsPriceStatesRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryChainlinkDataStreamsPriceStatesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryChainlinkDataStreamsPriceStatesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryChainlinkDataStreamsPriceStatesResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryChainlinkDataStreamsPriceStatesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryChainlinkDataStreamsPriceStatesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.PriceStates) > 0 { + for iNdEx := len(m.PriceStates) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PriceStates[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *QueryModuleStateRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -4152,6 +4349,30 @@ func (m *QueryProviderPriceStateResponse) Size() (n int) { return n } +func (m *QueryChainlinkDataStreamsPriceStatesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryChainlinkDataStreamsPriceStatesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.PriceStates) > 0 { + for _, e := range m.PriceStates { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + func (m *QueryModuleStateRequest) Size() (n int) { if m == nil { return 0 @@ -5971,6 +6192,140 @@ func (m *QueryProviderPriceStateResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *QueryChainlinkDataStreamsPriceStatesRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryChainlinkDataStreamsPriceStatesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryChainlinkDataStreamsPriceStatesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryChainlinkDataStreamsPriceStatesResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryChainlinkDataStreamsPriceStatesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryChainlinkDataStreamsPriceStatesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PriceStates", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PriceStates = append(m.PriceStates, &ChainlinkDataStreamsPriceState{}) + if err := m.PriceStates[len(m.PriceStates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *QueryModuleStateRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/chain/oracle/types/tx.pb.go b/chain/oracle/types/tx.pb.go index eaf64d6b..a326b824 100644 --- a/chain/oracle/types/tx.pb.go +++ b/chain/oracle/types/tx.pb.go @@ -189,118 +189,6 @@ func (m *MsgRelayPriceFeedPriceResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgRelayPriceFeedPriceResponse proto.InternalMessageInfo -type MsgRelayBandRates struct { - Relayer string `protobuf:"bytes,1,opt,name=relayer,proto3" json:"relayer,omitempty"` - Symbols []string `protobuf:"bytes,2,rep,name=symbols,proto3" json:"symbols,omitempty"` - Rates []uint64 `protobuf:"varint,3,rep,packed,name=rates,proto3" json:"rates,omitempty"` - ResolveTimes []uint64 `protobuf:"varint,4,rep,packed,name=resolve_times,json=resolveTimes,proto3" json:"resolve_times,omitempty"` - RequestIDs []uint64 `protobuf:"varint,5,rep,packed,name=requestIDs,proto3" json:"requestIDs,omitempty"` -} - -func (m *MsgRelayBandRates) Reset() { *m = MsgRelayBandRates{} } -func (m *MsgRelayBandRates) String() string { return proto.CompactTextString(m) } -func (*MsgRelayBandRates) ProtoMessage() {} -func (*MsgRelayBandRates) Descriptor() ([]byte, []int) { - return fileDescriptor_5fdf1c490eba4310, []int{4} -} -func (m *MsgRelayBandRates) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgRelayBandRates) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgRelayBandRates.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgRelayBandRates) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgRelayBandRates.Merge(m, src) -} -func (m *MsgRelayBandRates) XXX_Size() int { - return m.Size() -} -func (m *MsgRelayBandRates) XXX_DiscardUnknown() { - xxx_messageInfo_MsgRelayBandRates.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgRelayBandRates proto.InternalMessageInfo - -func (m *MsgRelayBandRates) GetRelayer() string { - if m != nil { - return m.Relayer - } - return "" -} - -func (m *MsgRelayBandRates) GetSymbols() []string { - if m != nil { - return m.Symbols - } - return nil -} - -func (m *MsgRelayBandRates) GetRates() []uint64 { - if m != nil { - return m.Rates - } - return nil -} - -func (m *MsgRelayBandRates) GetResolveTimes() []uint64 { - if m != nil { - return m.ResolveTimes - } - return nil -} - -func (m *MsgRelayBandRates) GetRequestIDs() []uint64 { - if m != nil { - return m.RequestIDs - } - return nil -} - -type MsgRelayBandRatesResponse struct { -} - -func (m *MsgRelayBandRatesResponse) Reset() { *m = MsgRelayBandRatesResponse{} } -func (m *MsgRelayBandRatesResponse) String() string { return proto.CompactTextString(m) } -func (*MsgRelayBandRatesResponse) ProtoMessage() {} -func (*MsgRelayBandRatesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5fdf1c490eba4310, []int{5} -} -func (m *MsgRelayBandRatesResponse) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *MsgRelayBandRatesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_MsgRelayBandRatesResponse.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *MsgRelayBandRatesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgRelayBandRatesResponse.Merge(m, src) -} -func (m *MsgRelayBandRatesResponse) XXX_Size() int { - return m.Size() -} -func (m *MsgRelayBandRatesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgRelayBandRatesResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_MsgRelayBandRatesResponse proto.InternalMessageInfo - // MsgRelayCoinbaseMessages defines a SDK message for relaying price messages // from Coinbase API. type MsgRelayCoinbaseMessages struct { @@ -313,7 +201,7 @@ func (m *MsgRelayCoinbaseMessages) Reset() { *m = MsgRelayCoinbaseMessag func (m *MsgRelayCoinbaseMessages) String() string { return proto.CompactTextString(m) } func (*MsgRelayCoinbaseMessages) ProtoMessage() {} func (*MsgRelayCoinbaseMessages) Descriptor() ([]byte, []int) { - return fileDescriptor_5fdf1c490eba4310, []int{6} + return fileDescriptor_5fdf1c490eba4310, []int{4} } func (m *MsgRelayCoinbaseMessages) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -349,7 +237,7 @@ func (m *MsgRelayCoinbaseMessagesResponse) Reset() { *m = MsgRelayCoinba func (m *MsgRelayCoinbaseMessagesResponse) String() string { return proto.CompactTextString(m) } func (*MsgRelayCoinbaseMessagesResponse) ProtoMessage() {} func (*MsgRelayCoinbaseMessagesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5fdf1c490eba4310, []int{7} + return fileDescriptor_5fdf1c490eba4310, []int{5} } func (m *MsgRelayCoinbaseMessagesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -389,7 +277,7 @@ func (m *MsgRelayStorkPrices) Reset() { *m = MsgRelayStorkPrices{} } func (m *MsgRelayStorkPrices) String() string { return proto.CompactTextString(m) } func (*MsgRelayStorkPrices) ProtoMessage() {} func (*MsgRelayStorkPrices) Descriptor() ([]byte, []int) { - return fileDescriptor_5fdf1c490eba4310, []int{8} + return fileDescriptor_5fdf1c490eba4310, []int{6} } func (m *MsgRelayStorkPrices) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -425,7 +313,7 @@ func (m *MsgRelayStorkPricesResponse) Reset() { *m = MsgRelayStorkPrices func (m *MsgRelayStorkPricesResponse) String() string { return proto.CompactTextString(m) } func (*MsgRelayStorkPricesResponse) ProtoMessage() {} func (*MsgRelayStorkPricesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5fdf1c490eba4310, []int{9} + return fileDescriptor_5fdf1c490eba4310, []int{7} } func (m *MsgRelayStorkPricesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -454,25 +342,24 @@ func (m *MsgRelayStorkPricesResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgRelayStorkPricesResponse proto.InternalMessageInfo -// MsgRequestBandIBCRates defines a SDK message for requesting data from -// BandChain using IBC. -type MsgRequestBandIBCRates struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` - RequestId uint64 `protobuf:"varint,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` +// MsgRelayPythPrices defines a SDK message for updating Pyth prices +type MsgRelayPythPrices struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + PriceAttestations []*PriceAttestation `protobuf:"bytes,2,rep,name=price_attestations,json=priceAttestations,proto3" json:"price_attestations,omitempty"` } -func (m *MsgRequestBandIBCRates) Reset() { *m = MsgRequestBandIBCRates{} } -func (m *MsgRequestBandIBCRates) String() string { return proto.CompactTextString(m) } -func (*MsgRequestBandIBCRates) ProtoMessage() {} -func (*MsgRequestBandIBCRates) Descriptor() ([]byte, []int) { - return fileDescriptor_5fdf1c490eba4310, []int{10} +func (m *MsgRelayPythPrices) Reset() { *m = MsgRelayPythPrices{} } +func (m *MsgRelayPythPrices) String() string { return proto.CompactTextString(m) } +func (*MsgRelayPythPrices) ProtoMessage() {} +func (*MsgRelayPythPrices) Descriptor() ([]byte, []int) { + return fileDescriptor_5fdf1c490eba4310, []int{8} } -func (m *MsgRequestBandIBCRates) XXX_Unmarshal(b []byte) error { +func (m *MsgRelayPythPrices) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgRequestBandIBCRates) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgRelayPythPrices) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgRequestBandIBCRates.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgRelayPythPrices.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -482,34 +369,34 @@ func (m *MsgRequestBandIBCRates) XXX_Marshal(b []byte, deterministic bool) ([]by return b[:n], nil } } -func (m *MsgRequestBandIBCRates) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgRequestBandIBCRates.Merge(m, src) +func (m *MsgRelayPythPrices) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRelayPythPrices.Merge(m, src) } -func (m *MsgRequestBandIBCRates) XXX_Size() int { +func (m *MsgRelayPythPrices) XXX_Size() int { return m.Size() } -func (m *MsgRequestBandIBCRates) XXX_DiscardUnknown() { - xxx_messageInfo_MsgRequestBandIBCRates.DiscardUnknown(m) +func (m *MsgRelayPythPrices) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRelayPythPrices.DiscardUnknown(m) } -var xxx_messageInfo_MsgRequestBandIBCRates proto.InternalMessageInfo +var xxx_messageInfo_MsgRelayPythPrices proto.InternalMessageInfo -// MsgRequestDataResponse defines the Msg/RequestBandIBCRates response type. -type MsgRequestBandIBCRatesResponse struct { +// MsgRelayPythPricesResponse defines the Msg/RelayPythPrices response type. +type MsgRelayPythPricesResponse struct { } -func (m *MsgRequestBandIBCRatesResponse) Reset() { *m = MsgRequestBandIBCRatesResponse{} } -func (m *MsgRequestBandIBCRatesResponse) String() string { return proto.CompactTextString(m) } -func (*MsgRequestBandIBCRatesResponse) ProtoMessage() {} -func (*MsgRequestBandIBCRatesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5fdf1c490eba4310, []int{11} +func (m *MsgRelayPythPricesResponse) Reset() { *m = MsgRelayPythPricesResponse{} } +func (m *MsgRelayPythPricesResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRelayPythPricesResponse) ProtoMessage() {} +func (*MsgRelayPythPricesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5fdf1c490eba4310, []int{9} } -func (m *MsgRequestBandIBCRatesResponse) XXX_Unmarshal(b []byte) error { +func (m *MsgRelayPythPricesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgRequestBandIBCRatesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgRelayPythPricesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgRequestBandIBCRatesResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgRelayPythPricesResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -519,36 +406,37 @@ func (m *MsgRequestBandIBCRatesResponse) XXX_Marshal(b []byte, deterministic boo return b[:n], nil } } -func (m *MsgRequestBandIBCRatesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgRequestBandIBCRatesResponse.Merge(m, src) +func (m *MsgRelayPythPricesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRelayPythPricesResponse.Merge(m, src) } -func (m *MsgRequestBandIBCRatesResponse) XXX_Size() int { +func (m *MsgRelayPythPricesResponse) XXX_Size() int { return m.Size() } -func (m *MsgRequestBandIBCRatesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgRequestBandIBCRatesResponse.DiscardUnknown(m) +func (m *MsgRelayPythPricesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRelayPythPricesResponse.DiscardUnknown(m) } -var xxx_messageInfo_MsgRequestBandIBCRatesResponse proto.InternalMessageInfo +var xxx_messageInfo_MsgRelayPythPricesResponse proto.InternalMessageInfo -// MsgRelayPythPrices defines a SDK message for updating Pyth prices -type MsgRelayPythPrices struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` - PriceAttestations []*PriceAttestation `protobuf:"bytes,2,rep,name=price_attestations,json=priceAttestations,proto3" json:"price_attestations,omitempty"` +// MsgRelayChainlinkPrices defines a SDK message for updating Chainlink Data +// Streams prices +type MsgRelayChainlinkPrices struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + Reports []*ChainlinkReport `protobuf:"bytes,2,rep,name=reports,proto3" json:"reports,omitempty"` } -func (m *MsgRelayPythPrices) Reset() { *m = MsgRelayPythPrices{} } -func (m *MsgRelayPythPrices) String() string { return proto.CompactTextString(m) } -func (*MsgRelayPythPrices) ProtoMessage() {} -func (*MsgRelayPythPrices) Descriptor() ([]byte, []int) { - return fileDescriptor_5fdf1c490eba4310, []int{12} +func (m *MsgRelayChainlinkPrices) Reset() { *m = MsgRelayChainlinkPrices{} } +func (m *MsgRelayChainlinkPrices) String() string { return proto.CompactTextString(m) } +func (*MsgRelayChainlinkPrices) ProtoMessage() {} +func (*MsgRelayChainlinkPrices) Descriptor() ([]byte, []int) { + return fileDescriptor_5fdf1c490eba4310, []int{10} } -func (m *MsgRelayPythPrices) XXX_Unmarshal(b []byte) error { +func (m *MsgRelayChainlinkPrices) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgRelayPythPrices) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgRelayChainlinkPrices) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgRelayPythPrices.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgRelayChainlinkPrices.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -558,34 +446,35 @@ func (m *MsgRelayPythPrices) XXX_Marshal(b []byte, deterministic bool) ([]byte, return b[:n], nil } } -func (m *MsgRelayPythPrices) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgRelayPythPrices.Merge(m, src) +func (m *MsgRelayChainlinkPrices) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRelayChainlinkPrices.Merge(m, src) } -func (m *MsgRelayPythPrices) XXX_Size() int { +func (m *MsgRelayChainlinkPrices) XXX_Size() int { return m.Size() } -func (m *MsgRelayPythPrices) XXX_DiscardUnknown() { - xxx_messageInfo_MsgRelayPythPrices.DiscardUnknown(m) +func (m *MsgRelayChainlinkPrices) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRelayChainlinkPrices.DiscardUnknown(m) } -var xxx_messageInfo_MsgRelayPythPrices proto.InternalMessageInfo +var xxx_messageInfo_MsgRelayChainlinkPrices proto.InternalMessageInfo -// MsgRelayPythPricesResponse defines the Msg/RelayPythPrices response type. -type MsgRelayPythPricesResponse struct { +// MsgRelayChainlinkPricesResponse defines the Msg/RelayChainlinkPrices response +// type. +type MsgRelayChainlinkPricesResponse struct { } -func (m *MsgRelayPythPricesResponse) Reset() { *m = MsgRelayPythPricesResponse{} } -func (m *MsgRelayPythPricesResponse) String() string { return proto.CompactTextString(m) } -func (*MsgRelayPythPricesResponse) ProtoMessage() {} -func (*MsgRelayPythPricesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5fdf1c490eba4310, []int{13} +func (m *MsgRelayChainlinkPricesResponse) Reset() { *m = MsgRelayChainlinkPricesResponse{} } +func (m *MsgRelayChainlinkPricesResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRelayChainlinkPricesResponse) ProtoMessage() {} +func (*MsgRelayChainlinkPricesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5fdf1c490eba4310, []int{11} } -func (m *MsgRelayPythPricesResponse) XXX_Unmarshal(b []byte) error { +func (m *MsgRelayChainlinkPricesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *MsgRelayPythPricesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *MsgRelayChainlinkPricesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_MsgRelayPythPricesResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_MsgRelayChainlinkPricesResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -595,17 +484,17 @@ func (m *MsgRelayPythPricesResponse) XXX_Marshal(b []byte, deterministic bool) ( return b[:n], nil } } -func (m *MsgRelayPythPricesResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_MsgRelayPythPricesResponse.Merge(m, src) +func (m *MsgRelayChainlinkPricesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRelayChainlinkPricesResponse.Merge(m, src) } -func (m *MsgRelayPythPricesResponse) XXX_Size() int { +func (m *MsgRelayChainlinkPricesResponse) XXX_Size() int { return m.Size() } -func (m *MsgRelayPythPricesResponse) XXX_DiscardUnknown() { - xxx_messageInfo_MsgRelayPythPricesResponse.DiscardUnknown(m) +func (m *MsgRelayChainlinkPricesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRelayChainlinkPricesResponse.DiscardUnknown(m) } -var xxx_messageInfo_MsgRelayPythPricesResponse proto.InternalMessageInfo +var xxx_messageInfo_MsgRelayChainlinkPricesResponse proto.InternalMessageInfo type MsgUpdateParams struct { // authority is the address of the governance account. @@ -620,7 +509,7 @@ func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } func (*MsgUpdateParams) ProtoMessage() {} func (*MsgUpdateParams) Descriptor() ([]byte, []int) { - return fileDescriptor_5fdf1c490eba4310, []int{14} + return fileDescriptor_5fdf1c490eba4310, []int{12} } func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -670,7 +559,7 @@ func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateParamsResponse) ProtoMessage() {} func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5fdf1c490eba4310, []int{15} + return fileDescriptor_5fdf1c490eba4310, []int{13} } func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -704,16 +593,14 @@ func init() { proto.RegisterType((*MsgRelayProviderPricesResponse)(nil), "injective.oracle.v1beta1.MsgRelayProviderPricesResponse") proto.RegisterType((*MsgRelayPriceFeedPrice)(nil), "injective.oracle.v1beta1.MsgRelayPriceFeedPrice") proto.RegisterType((*MsgRelayPriceFeedPriceResponse)(nil), "injective.oracle.v1beta1.MsgRelayPriceFeedPriceResponse") - proto.RegisterType((*MsgRelayBandRates)(nil), "injective.oracle.v1beta1.MsgRelayBandRates") - proto.RegisterType((*MsgRelayBandRatesResponse)(nil), "injective.oracle.v1beta1.MsgRelayBandRatesResponse") proto.RegisterType((*MsgRelayCoinbaseMessages)(nil), "injective.oracle.v1beta1.MsgRelayCoinbaseMessages") proto.RegisterType((*MsgRelayCoinbaseMessagesResponse)(nil), "injective.oracle.v1beta1.MsgRelayCoinbaseMessagesResponse") proto.RegisterType((*MsgRelayStorkPrices)(nil), "injective.oracle.v1beta1.MsgRelayStorkPrices") proto.RegisterType((*MsgRelayStorkPricesResponse)(nil), "injective.oracle.v1beta1.MsgRelayStorkPricesResponse") - proto.RegisterType((*MsgRequestBandIBCRates)(nil), "injective.oracle.v1beta1.MsgRequestBandIBCRates") - proto.RegisterType((*MsgRequestBandIBCRatesResponse)(nil), "injective.oracle.v1beta1.MsgRequestBandIBCRatesResponse") proto.RegisterType((*MsgRelayPythPrices)(nil), "injective.oracle.v1beta1.MsgRelayPythPrices") proto.RegisterType((*MsgRelayPythPricesResponse)(nil), "injective.oracle.v1beta1.MsgRelayPythPricesResponse") + proto.RegisterType((*MsgRelayChainlinkPrices)(nil), "injective.oracle.v1beta1.MsgRelayChainlinkPrices") + proto.RegisterType((*MsgRelayChainlinkPricesResponse)(nil), "injective.oracle.v1beta1.MsgRelayChainlinkPricesResponse") proto.RegisterType((*MsgUpdateParams)(nil), "injective.oracle.v1beta1.MsgUpdateParams") proto.RegisterType((*MsgUpdateParamsResponse)(nil), "injective.oracle.v1beta1.MsgUpdateParamsResponse") } @@ -721,69 +608,63 @@ func init() { func init() { proto.RegisterFile("injective/oracle/v1beta1/tx.proto", fileDescriptor_5fdf1c490eba4310) } var fileDescriptor_5fdf1c490eba4310 = []byte{ - // 990 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x4f, 0x6f, 0xe3, 0x44, - 0x14, 0x8f, 0xdb, 0xa4, 0x4b, 0x5f, 0x0b, 0xab, 0xba, 0xa5, 0xeb, 0xba, 0x34, 0x09, 0xa9, 0x90, - 0x76, 0x0b, 0x8d, 0x49, 0x97, 0xe5, 0x4f, 0x90, 0x90, 0x9a, 0xad, 0x90, 0x2a, 0xb5, 0x52, 0xe5, - 0x85, 0x03, 0x5c, 0xa2, 0x49, 0x3c, 0x38, 0x66, 0x63, 0x8f, 0x77, 0x66, 0x12, 0x91, 0x1b, 0x70, - 0x80, 0x15, 0x27, 0x3e, 0xc2, 0xde, 0xb8, 0xf6, 0xb0, 0x27, 0x3e, 0xc1, 0x1e, 0x40, 0x5a, 0x71, - 0x42, 0x7b, 0xa8, 0x50, 0x7b, 0x28, 0x9f, 0x80, 0x33, 0xf2, 0xd8, 0x9e, 0x38, 0x4e, 0xdc, 0x24, - 0x97, 0xd6, 0xef, 0xbd, 0xdf, 0x7b, 0xf3, 0xfb, 0xf9, 0xcd, 0x7b, 0x0e, 0xbc, 0xed, 0x78, 0xdf, - 0xe2, 0x36, 0x77, 0xfa, 0xd8, 0x20, 0x14, 0xb5, 0xbb, 0xd8, 0xe8, 0xd7, 0x5a, 0x98, 0xa3, 0x9a, - 0xc1, 0xbf, 0xab, 0xfa, 0x94, 0x70, 0xa2, 0x6a, 0x12, 0x52, 0x0d, 0x21, 0xd5, 0x08, 0xa2, 0x6f, - 0xd8, 0xc4, 0x26, 0x02, 0x64, 0x04, 0x4f, 0x21, 0x5e, 0x7f, 0x27, 0xb3, 0x64, 0x94, 0x1e, 0xc2, - 0xee, 0xb4, 0x09, 0x73, 0x09, 0x33, 0x5c, 0x66, 0x1b, 0xfd, 0x5a, 0xf0, 0x2f, 0x0a, 0x6c, 0x85, - 0x81, 0x66, 0x58, 0x38, 0x34, 0xa2, 0xd0, 0x1a, 0x72, 0x1d, 0x8f, 0x18, 0xe2, 0x6f, 0xe8, 0xaa, - 0xbc, 0x52, 0x60, 0xf3, 0x94, 0xd9, 0x26, 0xee, 0xa2, 0xc1, 0x19, 0x25, 0x7d, 0xc7, 0xc2, 0xf4, - 0x8c, 0x3a, 0x6d, 0xcc, 0xd4, 0x4d, 0x58, 0x62, 0xd8, 0xb3, 0x30, 0xd5, 0x94, 0xb2, 0x72, 0x77, - 0xd9, 0x8c, 0x2c, 0x55, 0x87, 0xd7, 0xfc, 0x08, 0xa9, 0x2d, 0x88, 0x88, 0xb4, 0x55, 0x0d, 0x6e, - 0xb1, 0x81, 0xdb, 0x22, 0x5d, 0xa6, 0x2d, 0x96, 0x17, 0xef, 0x2e, 0x9b, 0xb1, 0xa9, 0x7e, 0x0a, - 0x4b, 0xbe, 0xa8, 0xab, 0xe5, 0x83, 0x40, 0x63, 0xf7, 0xc5, 0x45, 0x29, 0xf7, 0xea, 0xa2, 0xb4, - 0x1d, 0x32, 0x64, 0xd6, 0xe3, 0xaa, 0x43, 0x0c, 0x17, 0xf1, 0x4e, 0xf5, 0x04, 0xdb, 0xa8, 0x3d, - 0x38, 0xc2, 0x6d, 0x33, 0x4a, 0xa9, 0x3f, 0x78, 0xfa, 0xac, 0x94, 0xfb, 0xf7, 0x59, 0x29, 0xf7, - 0xe3, 0xf5, 0xf9, 0x5e, 0xc4, 0xe3, 0x97, 0xeb, 0xf3, 0xbd, 0x9d, 0xe8, 0x0d, 0x4d, 0x56, 0x50, - 0x29, 0x43, 0x71, 0x72, 0xc4, 0xc4, 0xcc, 0x27, 0x1e, 0xc3, 0x95, 0x3f, 0x46, 0xe4, 0x3b, 0x6d, - 0xfc, 0x39, 0xc6, 0x96, 0x78, 0xc8, 0x94, 0xaf, 0x42, 0xbe, 0x85, 0x18, 0xd6, 0x16, 0x84, 0x3e, - 0xf1, 0xac, 0x6e, 0x40, 0xe1, 0x49, 0x8f, 0x70, 0x1c, 0x89, 0x0e, 0x0d, 0xf5, 0x13, 0x28, 0x08, - 0xfe, 0xf3, 0x28, 0x0e, 0x33, 0xe6, 0x10, 0x9c, 0xe4, 0x3c, 0x2a, 0x38, 0x19, 0x91, 0x82, 0xff, - 0x54, 0x60, 0x2d, 0x86, 0x34, 0x90, 0x67, 0x99, 0x88, 0x63, 0x16, 0xb4, 0x8d, 0x06, 0x1e, 0x29, - 0x36, 0x36, 0x93, 0x0d, 0x5d, 0x18, 0x6d, 0xe8, 0x06, 0x14, 0x68, 0x90, 0x2c, 0x34, 0xe7, 0xcd, - 0xd0, 0x50, 0x77, 0xe1, 0x75, 0x8a, 0x19, 0xe9, 0xf6, 0x71, 0x93, 0x3b, 0x6e, 0xd4, 0xed, 0xbc, - 0xb9, 0x1a, 0x39, 0xbf, 0x08, 0x7c, 0x6a, 0x11, 0x80, 0xe2, 0x27, 0x3d, 0xcc, 0xf8, 0xf1, 0x11, - 0xd3, 0x0a, 0x02, 0x91, 0xf0, 0xd4, 0xef, 0x05, 0xaa, 0x63, 0x0a, 0x81, 0x6c, 0x2d, 0x25, 0x5b, - 0x32, 0xaf, 0x6c, 0xc3, 0xd6, 0x98, 0x53, 0x8a, 0xfd, 0x4d, 0x01, 0x2d, 0x8e, 0x3e, 0x24, 0x8e, - 0x17, 0xf4, 0xea, 0x14, 0x33, 0x86, 0xec, 0x9b, 0xaf, 0xb7, 0x1b, 0x61, 0x84, 0xe4, 0x55, 0x53, - 0xda, 0x01, 0x71, 0xe6, 0xd8, 0x1e, 0xe2, 0x3d, 0x1a, 0x09, 0x5f, 0x35, 0x13, 0x9e, 0xfa, 0x47, - 0x19, 0x6d, 0x2b, 0xa5, 0xf8, 0xa7, 0xc9, 0x54, 0x2a, 0x50, 0xce, 0x8a, 0x49, 0x35, 0x4f, 0x15, - 0x58, 0x8f, 0x41, 0x8f, 0x38, 0xa1, 0x8f, 0xa7, 0xcc, 0xe9, 0x11, 0xac, 0x20, 0xc6, 0x30, 0x6f, - 0xfa, 0xc8, 0xa1, 0xa1, 0x96, 0x95, 0x83, 0xdd, 0x6a, 0xd6, 0x3a, 0xaa, 0x1e, 0x06, 0xe0, 0x33, - 0xe4, 0x50, 0x13, 0x50, 0xfc, 0xc8, 0xea, 0xeb, 0x13, 0x24, 0x55, 0x76, 0x60, 0x7b, 0x02, 0x13, - 0xc9, 0xf4, 0xa7, 0x78, 0xaa, 0x44, 0x47, 0x83, 0xbe, 0x1c, 0x37, 0x1e, 0x86, 0x37, 0x2d, 0x8b, - 0xec, 0x8e, 0xbc, 0x12, 0x4d, 0xc7, 0x12, 0x6b, 0x25, 0x6f, 0x2e, 0xc7, 0x57, 0xc2, 0x9a, 0x6d, - 0x1e, 0xc6, 0x4e, 0x93, 0xf3, 0x30, 0x16, 0x91, 0x54, 0x7f, 0x57, 0x40, 0x95, 0x23, 0x33, 0xe0, - 0x9d, 0x29, 0xef, 0xf4, 0x2b, 0x50, 0xc5, 0x80, 0x36, 0x11, 0xe7, 0x98, 0x71, 0xc4, 0x1d, 0xe2, - 0xc5, 0xaf, 0x76, 0x2f, 0xfb, 0xd5, 0x8a, 0xaa, 0x87, 0xc3, 0x14, 0x73, 0xcd, 0x4f, 0x79, 0x58, - 0xbd, 0x96, 0x21, 0x71, 0x2b, 0x3d, 0xf2, 0x92, 0x65, 0xe5, 0x2d, 0xd0, 0xc7, 0xbd, 0x52, 0xda, - 0x73, 0x05, 0x6e, 0x9f, 0x32, 0xfb, 0x4b, 0xdf, 0x42, 0x1c, 0x9f, 0x21, 0x8a, 0x5c, 0xa6, 0x7e, - 0x08, 0xcb, 0xa8, 0xc7, 0x3b, 0x84, 0x3a, 0x7c, 0x10, 0x4a, 0x6b, 0x68, 0x7f, 0x3d, 0xdf, 0xdf, - 0x88, 0x3e, 0x13, 0x87, 0x96, 0x45, 0x31, 0x63, 0x8f, 0x38, 0x75, 0x3c, 0xdb, 0x1c, 0x42, 0xd5, - 0xcf, 0x60, 0xc9, 0x17, 0x15, 0x44, 0x6b, 0x56, 0x0e, 0xca, 0x37, 0x68, 0x15, 0xb8, 0x46, 0x3e, - 0xd8, 0x76, 0x66, 0x94, 0x15, 0x4e, 0xf4, 0xb0, 0x5e, 0xa0, 0x6b, 0x73, 0xa8, 0x2b, 0x49, 0xb1, - 0xb2, 0x05, 0x77, 0x52, 0xae, 0x58, 0xd1, 0xc1, 0x7f, 0xb7, 0x60, 0xf1, 0x94, 0xd9, 0xea, 0x0f, - 0x0a, 0xac, 0x4f, 0xfa, 0x62, 0xbd, 0x9f, 0xcd, 0x6a, 0xf2, 0x77, 0x40, 0xff, 0x78, 0xde, 0x8c, - 0x98, 0x4b, 0x92, 0xc3, 0xc8, 0x67, 0x63, 0x26, 0x0e, 0xc9, 0x8c, 0xd9, 0x38, 0x4c, 0x5a, 0xe6, - 0x2a, 0x85, 0x37, 0x52, 0x8b, 0xfc, 0xdd, 0xe9, 0xb5, 0x24, 0x58, 0xbf, 0x3f, 0x07, 0x38, 0xa5, - 0x7b, 0x7c, 0xb0, 0xa7, 0xe9, 0x1e, 0xcb, 0x98, 0xaa, 0x3b, 0x73, 0x68, 0xd5, 0x9f, 0x15, 0x78, - 0x73, 0xf2, 0x52, 0x3f, 0x98, 0x2e, 0x29, 0x9d, 0xa3, 0xd7, 0xe7, 0xcf, 0x91, 0x4c, 0x06, 0xb0, - 0x36, 0xdc, 0x82, 0x51, 0x54, 0xdd, 0x9f, 0x5e, 0x30, 0xb1, 0x35, 0xf5, 0x07, 0x73, 0xc1, 0xe5, - 0xd1, 0x3d, 0xb8, 0x9d, 0xde, 0x5a, 0xef, 0xcd, 0x70, 0x93, 0x24, 0x5a, 0xff, 0x60, 0x1e, 0xb4, - 0x3c, 0xb6, 0x0b, 0xab, 0x23, 0x1b, 0xe5, 0xde, 0x8d, 0x55, 0x92, 0x50, 0xbd, 0x36, 0x33, 0x34, - 0x3e, 0x4d, 0x2f, 0x7c, 0x7f, 0x7d, 0xbe, 0xa7, 0x34, 0xbe, 0x79, 0x71, 0x59, 0x54, 0x5e, 0x5e, - 0x16, 0x95, 0x7f, 0x2e, 0x8b, 0xca, 0xaf, 0x57, 0xc5, 0xdc, 0xcb, 0xab, 0x62, 0xee, 0xef, 0xab, - 0x62, 0xee, 0xeb, 0x13, 0xdb, 0xe1, 0x9d, 0x5e, 0xab, 0xda, 0x26, 0xae, 0x71, 0x1c, 0x57, 0x3f, - 0x41, 0x2d, 0x66, 0xc8, 0xb3, 0xf6, 0xdb, 0x84, 0xe2, 0xa4, 0xd9, 0x41, 0x8e, 0x67, 0xb8, 0xc4, - 0xea, 0x75, 0x31, 0x8b, 0x7f, 0x63, 0xf3, 0x81, 0x8f, 0x59, 0x6b, 0x49, 0xfc, 0x28, 0xbe, 0xff, - 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x21, 0x85, 0x8e, 0x1e, 0xd7, 0x0b, 0x00, 0x00, + // 895 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xcf, 0x6f, 0xdc, 0x44, + 0x14, 0x5e, 0x37, 0xbf, 0xc8, 0x4b, 0xa4, 0x2a, 0x4e, 0x48, 0x1d, 0x97, 0x7a, 0xb7, 0xae, 0x90, + 0x9a, 0x88, 0xac, 0xd9, 0x40, 0x0b, 0x5d, 0x24, 0xa4, 0xa4, 0x15, 0x12, 0x52, 0x22, 0x45, 0xae, + 0x38, 0xc0, 0x25, 0x9a, 0xb5, 0x07, 0xef, 0xd0, 0xb5, 0xc7, 0xcc, 0xcc, 0x46, 0xec, 0x0d, 0x10, + 0x88, 0x8a, 0x13, 0x7f, 0x42, 0x6f, 0xdc, 0x50, 0x0e, 0x3d, 0xf1, 0x17, 0xf4, 0xc0, 0xa1, 0xe2, + 0x84, 0x7a, 0xa8, 0x50, 0x72, 0x08, 0x7f, 0x06, 0xf2, 0xd8, 0x9e, 0xf5, 0x6e, 0xed, 0xec, 0xee, + 0x65, 0x77, 0xde, 0xbc, 0xef, 0x7b, 0xf3, 0x7d, 0x7e, 0xe3, 0x27, 0xc3, 0x6d, 0x12, 0x7d, 0x83, + 0x3d, 0x41, 0x4e, 0xb1, 0x43, 0x19, 0xf2, 0x7a, 0xd8, 0x39, 0x6d, 0x75, 0xb0, 0x40, 0x2d, 0x47, + 0x7c, 0xd7, 0x8c, 0x19, 0x15, 0x54, 0x37, 0x14, 0xa4, 0x99, 0x42, 0x9a, 0x19, 0xc4, 0xdc, 0x08, + 0x68, 0x40, 0x25, 0xc8, 0x49, 0x56, 0x29, 0xde, 0x7c, 0xb7, 0xb2, 0x64, 0x46, 0x4f, 0x61, 0x37, + 0x3c, 0xca, 0x43, 0xca, 0x9d, 0x90, 0x07, 0xce, 0x69, 0x2b, 0xf9, 0xcb, 0x12, 0x5b, 0x69, 0xe2, + 0x24, 0x2d, 0x9c, 0x06, 0x59, 0x6a, 0x0d, 0x85, 0x24, 0xa2, 0x8e, 0xfc, 0x4d, 0xb7, 0xec, 0x57, + 0x1a, 0x6c, 0x1e, 0xf1, 0xc0, 0xc5, 0x3d, 0x34, 0x38, 0x66, 0xf4, 0x94, 0xf8, 0x98, 0x1d, 0x33, + 0xe2, 0x61, 0xae, 0x6f, 0xc2, 0x22, 0xc7, 0x91, 0x8f, 0x99, 0xa1, 0x35, 0xb4, 0xbb, 0xcb, 0x6e, + 0x16, 0xe9, 0x26, 0xbc, 0x15, 0x67, 0x48, 0xe3, 0x9a, 0xcc, 0xa8, 0x58, 0x37, 0x60, 0x89, 0x0f, + 0xc2, 0x0e, 0xed, 0x71, 0x63, 0xae, 0x31, 0x77, 0x77, 0xd9, 0xcd, 0x43, 0xfd, 0x13, 0x58, 0x8c, + 0x65, 0x5d, 0x63, 0x3e, 0x49, 0x1c, 0xdc, 0x79, 0xf1, 0xba, 0x5e, 0x7b, 0xf5, 0xba, 0x7e, 0x33, + 0x55, 0xc8, 0xfd, 0x27, 0x4d, 0x42, 0x9d, 0x10, 0x89, 0x6e, 0xf3, 0x10, 0x07, 0xc8, 0x1b, 0x3c, + 0xc2, 0x9e, 0x9b, 0x51, 0xda, 0xf7, 0x9e, 0x3e, 0xab, 0xd7, 0xfe, 0x7b, 0x56, 0xaf, 0xfd, 0x78, + 0x79, 0xb6, 0x93, 0xe9, 0xf8, 0xf5, 0xf2, 0x6c, 0xe7, 0x56, 0xf6, 0x84, 0xca, 0x1d, 0xd8, 0x0d, + 0xb0, 0xca, 0x33, 0x2e, 0xe6, 0x31, 0x8d, 0x38, 0xb6, 0xff, 0x1a, 0xb1, 0x4f, 0x3c, 0xfc, 0x19, + 0xc6, 0xbe, 0x5c, 0x54, 0xda, 0xd7, 0x61, 0xbe, 0x83, 0x38, 0x36, 0xae, 0x49, 0x7f, 0x72, 0xad, + 0x6f, 0xc0, 0xc2, 0xb7, 0x7d, 0x2a, 0x70, 0x66, 0x3a, 0x0d, 0xf4, 0x07, 0xb0, 0x20, 0xf5, 0xcf, + 0xe2, 0x38, 0x65, 0xcc, 0x60, 0xb8, 0xa8, 0x79, 0xd4, 0x70, 0x31, 0xa3, 0x0c, 0xff, 0xae, 0x81, + 0x91, 0x43, 0x1e, 0x52, 0x12, 0x25, 0xf2, 0x8f, 0x30, 0xe7, 0x28, 0xb8, 0xba, 0xe3, 0x61, 0x86, + 0x91, 0xb6, 0x57, 0x5d, 0x15, 0xeb, 0x16, 0x00, 0x27, 0x41, 0x84, 0x44, 0x9f, 0xe1, 0xb4, 0xe9, + 0xab, 0x6e, 0x61, 0xa7, 0xfd, 0x51, 0x85, 0x93, 0xfa, 0x98, 0x93, 0x71, 0x31, 0xb6, 0x0d, 0x8d, + 0xaa, 0x9c, 0x72, 0xf3, 0x54, 0x83, 0xf5, 0x1c, 0xf4, 0x58, 0x50, 0xf6, 0x64, 0xc2, 0xd5, 0x7d, + 0x04, 0x2b, 0x88, 0x73, 0x2c, 0x4e, 0x62, 0x44, 0x58, 0xea, 0x65, 0x65, 0xef, 0x4e, 0xb3, 0xea, + 0x0d, 0x6d, 0xee, 0x27, 0xe0, 0x63, 0x44, 0x98, 0x0b, 0x28, 0x5f, 0xf2, 0xf6, 0x7a, 0x89, 0x25, + 0xfb, 0x16, 0xdc, 0x2c, 0x51, 0xa2, 0x94, 0xfe, 0xa9, 0x81, 0xae, 0x5a, 0x33, 0x10, 0xdd, 0x09, + 0x42, 0xbf, 0x04, 0x5d, 0x5e, 0x84, 0x13, 0x24, 0x04, 0xe6, 0x02, 0x09, 0x42, 0xa3, 0x5c, 0xef, + 0x4e, 0xb5, 0x5e, 0x59, 0x75, 0x7f, 0x48, 0x71, 0xd7, 0xe2, 0xb1, 0x1d, 0xde, 0x6e, 0x55, 0x34, + 0x64, 0x6b, 0xfc, 0x6a, 0x29, 0x95, 0xf6, 0x3b, 0x60, 0xbe, 0xb9, 0xab, 0xac, 0xfd, 0xa1, 0xc1, + 0x0d, 0xd5, 0xa9, 0x2e, 0x22, 0x51, 0x8f, 0x44, 0x93, 0x1a, 0xf1, 0x10, 0x96, 0x18, 0x8e, 0x29, + 0x13, 0xb9, 0xa9, 0xed, 0x6a, 0x53, 0xaa, 0xa6, 0x2b, 0x19, 0x6e, 0xce, 0x6c, 0xdf, 0xaf, 0x70, + 0x62, 0x8d, 0x5f, 0xad, 0x51, 0x51, 0xf6, 0x6d, 0xa8, 0x57, 0xa4, 0x94, 0xa7, 0xe7, 0x1a, 0x5c, + 0x3f, 0xe2, 0xc1, 0x17, 0xb1, 0x8f, 0x04, 0x3e, 0x46, 0x0c, 0x85, 0x5c, 0xbf, 0x0f, 0xcb, 0xa8, + 0x2f, 0xba, 0x94, 0x11, 0x31, 0x48, 0xed, 0x1c, 0x18, 0x7f, 0x3f, 0xdf, 0xdd, 0xc8, 0x46, 0xec, + 0xbe, 0xef, 0x33, 0xcc, 0xf9, 0x63, 0xc1, 0x48, 0x14, 0xb8, 0x43, 0xa8, 0xfe, 0x29, 0x2c, 0xc6, + 0xb2, 0x82, 0x9c, 0x96, 0x2b, 0x7b, 0x8d, 0x2b, 0xfa, 0x27, 0x71, 0x07, 0xf3, 0xc9, 0xa4, 0x70, + 0x33, 0x56, 0x7b, 0x3b, 0xb1, 0x37, 0xac, 0x97, 0x38, 0xdc, 0x1c, 0x3a, 0x2c, 0x4a, 0xb4, 0xb7, + 0x64, 0x27, 0x8a, 0x5b, 0xb9, 0xa3, 0xbd, 0x9f, 0x97, 0x60, 0xee, 0x88, 0x07, 0xfa, 0x0f, 0x1a, + 0xac, 0x97, 0x4d, 0xfb, 0xf7, 0xab, 0x55, 0x95, 0xcf, 0x50, 0xf3, 0xe3, 0x59, 0x19, 0xb9, 0x96, + 0xa2, 0x86, 0x91, 0x91, 0x3b, 0x95, 0x86, 0x22, 0x63, 0x3a, 0x0d, 0x65, 0x83, 0x50, 0xff, 0x45, + 0x83, 0xb7, 0xcb, 0xa7, 0xe0, 0xde, 0xe4, 0x9a, 0xe3, 0x1c, 0xb3, 0x3d, 0x3b, 0x47, 0x29, 0x19, + 0xc0, 0xda, 0x70, 0x6c, 0x64, 0x59, 0x7d, 0x77, 0x72, 0xc1, 0xc2, 0x98, 0x31, 0xef, 0xcd, 0x04, + 0x57, 0x47, 0xf7, 0xe1, 0xfa, 0xf8, 0x44, 0x7a, 0x6f, 0x8a, 0x27, 0xaa, 0xd0, 0xe6, 0x87, 0xb3, + 0xa0, 0xd5, 0xb1, 0x3f, 0x69, 0xb0, 0x51, 0x3a, 0x2e, 0x5a, 0x53, 0x3c, 0xc6, 0x51, 0x8a, 0xf9, + 0x60, 0x66, 0x8a, 0x92, 0xd1, 0x83, 0xd5, 0x91, 0x17, 0x7c, 0xfb, 0xca, 0x52, 0x45, 0xa8, 0xd9, + 0x9a, 0x1a, 0x9a, 0x9f, 0x66, 0x2e, 0x7c, 0x7f, 0x79, 0xb6, 0xa3, 0x1d, 0x7c, 0xfd, 0xe2, 0xdc, + 0xd2, 0x5e, 0x9e, 0x5b, 0xda, 0xbf, 0xe7, 0x96, 0xf6, 0xdb, 0x85, 0x55, 0x7b, 0x79, 0x61, 0xd5, + 0xfe, 0xb9, 0xb0, 0x6a, 0x5f, 0x1d, 0x06, 0x44, 0x74, 0xfb, 0x9d, 0xa6, 0x47, 0x43, 0xe7, 0xf3, + 0xbc, 0xfa, 0x21, 0xea, 0x70, 0x47, 0x9d, 0xb5, 0xeb, 0x51, 0x86, 0x8b, 0x61, 0xe2, 0xcc, 0x09, + 0xa9, 0xdf, 0xef, 0x61, 0x9e, 0x7f, 0x2e, 0x8a, 0x41, 0x8c, 0x79, 0x67, 0x51, 0x7e, 0xdf, 0x7d, + 0xf0, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd5, 0x9a, 0xd6, 0x88, 0xa2, 0x0a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -804,10 +685,6 @@ type MsgClient interface { // RelayPriceFeedPrice defines a method for relaying a price for a price // feeder-based oracle RelayPriceFeedPrice(ctx context.Context, in *MsgRelayPriceFeedPrice, opts ...grpc.CallOption) (*MsgRelayPriceFeedPriceResponse, error) - // RelayBandRates defines a method for relaying rates from Band - RelayBandRates(ctx context.Context, in *MsgRelayBandRates, opts ...grpc.CallOption) (*MsgRelayBandRatesResponse, error) - // RequestBandIBCRates defines a method for fetching rates from Band ibc - RequestBandIBCRates(ctx context.Context, in *MsgRequestBandIBCRates, opts ...grpc.CallOption) (*MsgRequestBandIBCRatesResponse, error) // RelayCoinbaseMessages defines a method for relaying price messages from // Coinbase API RelayCoinbaseMessages(ctx context.Context, in *MsgRelayCoinbaseMessages, opts ...grpc.CallOption) (*MsgRelayCoinbaseMessagesResponse, error) @@ -816,6 +693,9 @@ type MsgClient interface { RelayStorkMessage(ctx context.Context, in *MsgRelayStorkPrices, opts ...grpc.CallOption) (*MsgRelayStorkPricesResponse, error) // RelayPythPrices defines a method for relaying rates from the Pyth contract RelayPythPrices(ctx context.Context, in *MsgRelayPythPrices, opts ...grpc.CallOption) (*MsgRelayPythPricesResponse, error) + // RelayChainlinkPrices defines a method for relaying rates from Chainlink + // Data Streams + RelayChainlinkPrices(ctx context.Context, in *MsgRelayChainlinkPrices, opts ...grpc.CallOption) (*MsgRelayChainlinkPricesResponse, error) // UpdateParams enables updating oracle module's params via governance UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) } @@ -846,24 +726,6 @@ func (c *msgClient) RelayPriceFeedPrice(ctx context.Context, in *MsgRelayPriceFe return out, nil } -func (c *msgClient) RelayBandRates(ctx context.Context, in *MsgRelayBandRates, opts ...grpc.CallOption) (*MsgRelayBandRatesResponse, error) { - out := new(MsgRelayBandRatesResponse) - err := c.cc.Invoke(ctx, "/injective.oracle.v1beta1.Msg/RelayBandRates", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *msgClient) RequestBandIBCRates(ctx context.Context, in *MsgRequestBandIBCRates, opts ...grpc.CallOption) (*MsgRequestBandIBCRatesResponse, error) { - out := new(MsgRequestBandIBCRatesResponse) - err := c.cc.Invoke(ctx, "/injective.oracle.v1beta1.Msg/RequestBandIBCRates", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *msgClient) RelayCoinbaseMessages(ctx context.Context, in *MsgRelayCoinbaseMessages, opts ...grpc.CallOption) (*MsgRelayCoinbaseMessagesResponse, error) { out := new(MsgRelayCoinbaseMessagesResponse) err := c.cc.Invoke(ctx, "/injective.oracle.v1beta1.Msg/RelayCoinbaseMessages", in, out, opts...) @@ -891,6 +753,15 @@ func (c *msgClient) RelayPythPrices(ctx context.Context, in *MsgRelayPythPrices, return out, nil } +func (c *msgClient) RelayChainlinkPrices(ctx context.Context, in *MsgRelayChainlinkPrices, opts ...grpc.CallOption) (*MsgRelayChainlinkPricesResponse, error) { + out := new(MsgRelayChainlinkPricesResponse) + err := c.cc.Invoke(ctx, "/injective.oracle.v1beta1.Msg/RelayChainlinkPrices", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { out := new(MsgUpdateParamsResponse) err := c.cc.Invoke(ctx, "/injective.oracle.v1beta1.Msg/UpdateParams", in, out, opts...) @@ -908,10 +779,6 @@ type MsgServer interface { // RelayPriceFeedPrice defines a method for relaying a price for a price // feeder-based oracle RelayPriceFeedPrice(context.Context, *MsgRelayPriceFeedPrice) (*MsgRelayPriceFeedPriceResponse, error) - // RelayBandRates defines a method for relaying rates from Band - RelayBandRates(context.Context, *MsgRelayBandRates) (*MsgRelayBandRatesResponse, error) - // RequestBandIBCRates defines a method for fetching rates from Band ibc - RequestBandIBCRates(context.Context, *MsgRequestBandIBCRates) (*MsgRequestBandIBCRatesResponse, error) // RelayCoinbaseMessages defines a method for relaying price messages from // Coinbase API RelayCoinbaseMessages(context.Context, *MsgRelayCoinbaseMessages) (*MsgRelayCoinbaseMessagesResponse, error) @@ -920,6 +787,9 @@ type MsgServer interface { RelayStorkMessage(context.Context, *MsgRelayStorkPrices) (*MsgRelayStorkPricesResponse, error) // RelayPythPrices defines a method for relaying rates from the Pyth contract RelayPythPrices(context.Context, *MsgRelayPythPrices) (*MsgRelayPythPricesResponse, error) + // RelayChainlinkPrices defines a method for relaying rates from Chainlink + // Data Streams + RelayChainlinkPrices(context.Context, *MsgRelayChainlinkPrices) (*MsgRelayChainlinkPricesResponse, error) // UpdateParams enables updating oracle module's params via governance UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) } @@ -934,12 +804,6 @@ func (*UnimplementedMsgServer) RelayProviderPrices(ctx context.Context, req *Msg func (*UnimplementedMsgServer) RelayPriceFeedPrice(ctx context.Context, req *MsgRelayPriceFeedPrice) (*MsgRelayPriceFeedPriceResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RelayPriceFeedPrice not implemented") } -func (*UnimplementedMsgServer) RelayBandRates(ctx context.Context, req *MsgRelayBandRates) (*MsgRelayBandRatesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RelayBandRates not implemented") -} -func (*UnimplementedMsgServer) RequestBandIBCRates(ctx context.Context, req *MsgRequestBandIBCRates) (*MsgRequestBandIBCRatesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RequestBandIBCRates not implemented") -} func (*UnimplementedMsgServer) RelayCoinbaseMessages(ctx context.Context, req *MsgRelayCoinbaseMessages) (*MsgRelayCoinbaseMessagesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RelayCoinbaseMessages not implemented") } @@ -949,6 +813,9 @@ func (*UnimplementedMsgServer) RelayStorkMessage(ctx context.Context, req *MsgRe func (*UnimplementedMsgServer) RelayPythPrices(ctx context.Context, req *MsgRelayPythPrices) (*MsgRelayPythPricesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RelayPythPrices not implemented") } +func (*UnimplementedMsgServer) RelayChainlinkPrices(ctx context.Context, req *MsgRelayChainlinkPrices) (*MsgRelayChainlinkPricesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RelayChainlinkPrices not implemented") +} func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") } @@ -993,42 +860,6 @@ func _Msg_RelayPriceFeedPrice_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } -func _Msg_RelayBandRates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgRelayBandRates) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).RelayBandRates(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/injective.oracle.v1beta1.Msg/RelayBandRates", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).RelayBandRates(ctx, req.(*MsgRelayBandRates)) - } - return interceptor(ctx, in, info, handler) -} - -func _Msg_RequestBandIBCRates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MsgRequestBandIBCRates) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MsgServer).RequestBandIBCRates(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/injective.oracle.v1beta1.Msg/RequestBandIBCRates", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MsgServer).RequestBandIBCRates(ctx, req.(*MsgRequestBandIBCRates)) - } - return interceptor(ctx, in, info, handler) -} - func _Msg_RelayCoinbaseMessages_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgRelayCoinbaseMessages) if err := dec(in); err != nil { @@ -1083,6 +914,24 @@ func _Msg_RelayPythPrices_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } +func _Msg_RelayChainlinkPrices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRelayChainlinkPrices) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RelayChainlinkPrices(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/injective.oracle.v1beta1.Msg/RelayChainlinkPrices", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RelayChainlinkPrices(ctx, req.(*MsgRelayChainlinkPrices)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgUpdateParams) if err := dec(in); err != nil { @@ -1113,14 +962,6 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "RelayPriceFeedPrice", Handler: _Msg_RelayPriceFeedPrice_Handler, }, - { - MethodName: "RelayBandRates", - Handler: _Msg_RelayBandRates_Handler, - }, - { - MethodName: "RequestBandIBCRates", - Handler: _Msg_RequestBandIBCRates_Handler, - }, { MethodName: "RelayCoinbaseMessages", Handler: _Msg_RelayCoinbaseMessages_Handler, @@ -1133,6 +974,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "RelayPythPrices", Handler: _Msg_RelayPythPrices_Handler, }, + { + MethodName: "RelayChainlinkPrices", + Handler: _Msg_RelayChainlinkPrices_Handler, + }, { MethodName: "UpdateParams", Handler: _Msg_UpdateParams_Handler, @@ -1310,122 +1155,6 @@ func (m *MsgRelayPriceFeedPriceResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *MsgRelayBandRates) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgRelayBandRates) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgRelayBandRates) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.RequestIDs) > 0 { - dAtA2 := make([]byte, len(m.RequestIDs)*10) - var j1 int - for _, num := range m.RequestIDs { - for num >= 1<<7 { - dAtA2[j1] = uint8(uint64(num)&0x7f | 0x80) - num >>= 7 - j1++ - } - dAtA2[j1] = uint8(num) - j1++ - } - i -= j1 - copy(dAtA[i:], dAtA2[:j1]) - i = encodeVarintTx(dAtA, i, uint64(j1)) - i-- - dAtA[i] = 0x2a - } - if len(m.ResolveTimes) > 0 { - dAtA4 := make([]byte, len(m.ResolveTimes)*10) - var j3 int - for _, num := range m.ResolveTimes { - for num >= 1<<7 { - dAtA4[j3] = uint8(uint64(num)&0x7f | 0x80) - num >>= 7 - j3++ - } - dAtA4[j3] = uint8(num) - j3++ - } - i -= j3 - copy(dAtA[i:], dAtA4[:j3]) - i = encodeVarintTx(dAtA, i, uint64(j3)) - i-- - dAtA[i] = 0x22 - } - if len(m.Rates) > 0 { - dAtA6 := make([]byte, len(m.Rates)*10) - var j5 int - for _, num := range m.Rates { - for num >= 1<<7 { - dAtA6[j5] = uint8(uint64(num)&0x7f | 0x80) - num >>= 7 - j5++ - } - dAtA6[j5] = uint8(num) - j5++ - } - i -= j5 - copy(dAtA[i:], dAtA6[:j5]) - i = encodeVarintTx(dAtA, i, uint64(j5)) - i-- - dAtA[i] = 0x1a - } - if len(m.Symbols) > 0 { - for iNdEx := len(m.Symbols) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Symbols[iNdEx]) - copy(dAtA[i:], m.Symbols[iNdEx]) - i = encodeVarintTx(dAtA, i, uint64(len(m.Symbols[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } - if len(m.Relayer) > 0 { - i -= len(m.Relayer) - copy(dAtA[i:], m.Relayer) - i = encodeVarintTx(dAtA, i, uint64(len(m.Relayer))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *MsgRelayBandRatesResponse) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *MsgRelayBandRatesResponse) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *MsgRelayBandRatesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - return len(dAtA) - i, nil -} - func (m *MsgRelayCoinbaseMessages) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1564,7 +1293,7 @@ func (m *MsgRelayStorkPricesResponse) MarshalToSizedBuffer(dAtA []byte) (int, er return len(dAtA) - i, nil } -func (m *MsgRequestBandIBCRates) Marshal() (dAtA []byte, err error) { +func (m *MsgRelayPythPrices) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1574,20 +1303,29 @@ func (m *MsgRequestBandIBCRates) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgRequestBandIBCRates) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgRelayPythPrices) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgRequestBandIBCRates) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgRelayPythPrices) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.RequestId != 0 { - i = encodeVarintTx(dAtA, i, uint64(m.RequestId)) - i-- - dAtA[i] = 0x10 + if len(m.PriceAttestations) > 0 { + for iNdEx := len(m.PriceAttestations) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PriceAttestations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } } if len(m.Sender) > 0 { i -= len(m.Sender) @@ -1599,7 +1337,7 @@ func (m *MsgRequestBandIBCRates) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *MsgRequestBandIBCRatesResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgRelayPythPricesResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1609,12 +1347,12 @@ func (m *MsgRequestBandIBCRatesResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgRequestBandIBCRatesResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgRelayPythPricesResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgRequestBandIBCRatesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgRelayPythPricesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1622,7 +1360,7 @@ func (m *MsgRequestBandIBCRatesResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *MsgRelayPythPrices) Marshal() (dAtA []byte, err error) { +func (m *MsgRelayChainlinkPrices) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1632,20 +1370,20 @@ func (m *MsgRelayPythPrices) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgRelayPythPrices) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgRelayChainlinkPrices) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgRelayPythPrices) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgRelayChainlinkPrices) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.PriceAttestations) > 0 { - for iNdEx := len(m.PriceAttestations) - 1; iNdEx >= 0; iNdEx-- { + if len(m.Reports) > 0 { + for iNdEx := len(m.Reports) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.PriceAttestations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Reports[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1666,7 +1404,7 @@ func (m *MsgRelayPythPrices) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MsgRelayPythPricesResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgRelayChainlinkPricesResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -1676,12 +1414,12 @@ func (m *MsgRelayPythPricesResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgRelayPythPricesResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgRelayChainlinkPricesResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgRelayPythPricesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgRelayChainlinkPricesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -1841,55 +1579,6 @@ func (m *MsgRelayPriceFeedPriceResponse) Size() (n int) { return n } -func (m *MsgRelayBandRates) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Relayer) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } - if len(m.Symbols) > 0 { - for _, s := range m.Symbols { - l = len(s) - n += 1 + l + sovTx(uint64(l)) - } - } - if len(m.Rates) > 0 { - l = 0 - for _, e := range m.Rates { - l += sovTx(uint64(e)) - } - n += 1 + sovTx(uint64(l)) + l - } - if len(m.ResolveTimes) > 0 { - l = 0 - for _, e := range m.ResolveTimes { - l += sovTx(uint64(e)) - } - n += 1 + sovTx(uint64(l)) + l - } - if len(m.RequestIDs) > 0 { - l = 0 - for _, e := range m.RequestIDs { - l += sovTx(uint64(e)) - } - n += 1 + sovTx(uint64(l)) + l - } - return n -} - -func (m *MsgRelayBandRatesResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - return n -} - func (m *MsgRelayCoinbaseMessages) Size() (n int) { if m == nil { return 0 @@ -1952,7 +1641,7 @@ func (m *MsgRelayStorkPricesResponse) Size() (n int) { return n } -func (m *MsgRequestBandIBCRates) Size() (n int) { +func (m *MsgRelayPythPrices) Size() (n int) { if m == nil { return 0 } @@ -1962,13 +1651,16 @@ func (m *MsgRequestBandIBCRates) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - if m.RequestId != 0 { - n += 1 + sovTx(uint64(m.RequestId)) + if len(m.PriceAttestations) > 0 { + for _, e := range m.PriceAttestations { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } } return n } -func (m *MsgRequestBandIBCRatesResponse) Size() (n int) { +func (m *MsgRelayPythPricesResponse) Size() (n int) { if m == nil { return 0 } @@ -1977,7 +1669,7 @@ func (m *MsgRequestBandIBCRatesResponse) Size() (n int) { return n } -func (m *MsgRelayPythPrices) Size() (n int) { +func (m *MsgRelayChainlinkPrices) Size() (n int) { if m == nil { return 0 } @@ -1987,8 +1679,8 @@ func (m *MsgRelayPythPrices) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - if len(m.PriceAttestations) > 0 { - for _, e := range m.PriceAttestations { + if len(m.Reports) > 0 { + for _, e := range m.Reports { l = e.Size() n += 1 + l + sovTx(uint64(l)) } @@ -1996,7 +1688,7 @@ func (m *MsgRelayPythPrices) Size() (n int) { return n } -func (m *MsgRelayPythPricesResponse) Size() (n int) { +func (m *MsgRelayChainlinkPricesResponse) Size() (n int) { if m == nil { return 0 } @@ -2499,398 +2191,6 @@ func (m *MsgRelayPriceFeedPriceResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgRelayBandRates) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgRelayBandRates: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgRelayBandRates: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Relayer", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Relayer = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Symbols", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Symbols = append(m.Symbols, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 3: - if wireType == 0 { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Rates = append(m.Rates, v) - } else if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + packedLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - var elementCount int - var count int - for _, integer := range dAtA[iNdEx:postIndex] { - if integer < 128 { - count++ - } - } - elementCount = count - if elementCount != 0 && len(m.Rates) == 0 { - m.Rates = make([]uint64, 0, elementCount) - } - for iNdEx < postIndex { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Rates = append(m.Rates, v) - } - } else { - return fmt.Errorf("proto: wrong wireType = %d for field Rates", wireType) - } - case 4: - if wireType == 0 { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ResolveTimes = append(m.ResolveTimes, v) - } else if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + packedLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - var elementCount int - var count int - for _, integer := range dAtA[iNdEx:postIndex] { - if integer < 128 { - count++ - } - } - elementCount = count - if elementCount != 0 && len(m.ResolveTimes) == 0 { - m.ResolveTimes = make([]uint64, 0, elementCount) - } - for iNdEx < postIndex { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.ResolveTimes = append(m.ResolveTimes, v) - } - } else { - return fmt.Errorf("proto: wrong wireType = %d for field ResolveTimes", wireType) - } - case 5: - if wireType == 0 { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.RequestIDs = append(m.RequestIDs, v) - } else if wireType == 2 { - var packedLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - packedLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if packedLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + packedLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - var elementCount int - var count int - for _, integer := range dAtA[iNdEx:postIndex] { - if integer < 128 { - count++ - } - } - elementCount = count - if elementCount != 0 && len(m.RequestIDs) == 0 { - m.RequestIDs = make([]uint64, 0, elementCount) - } - for iNdEx < postIndex { - var v uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.RequestIDs = append(m.RequestIDs, v) - } - } else { - return fmt.Errorf("proto: wrong wireType = %d for field RequestIDs", wireType) - } - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *MsgRelayBandRatesResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: MsgRelayBandRatesResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: MsgRelayBandRatesResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipTx(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthTx - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *MsgRelayCoinbaseMessages) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -3253,7 +2553,7 @@ func (m *MsgRelayStorkPricesResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgRequestBandIBCRates) Unmarshal(dAtA []byte) error { +func (m *MsgRelayPythPrices) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3276,10 +2576,10 @@ func (m *MsgRequestBandIBCRates) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgRequestBandIBCRates: wiretype end group for non-group") + return fmt.Errorf("proto: MsgRelayPythPrices: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgRequestBandIBCRates: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgRelayPythPrices: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3315,10 +2615,10 @@ func (m *MsgRequestBandIBCRates) Unmarshal(dAtA []byte) error { m.Sender = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field RequestId", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PriceAttestations", wireType) } - m.RequestId = 0 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -3328,11 +2628,26 @@ func (m *MsgRequestBandIBCRates) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.RequestId |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PriceAttestations = append(m.PriceAttestations, &PriceAttestation{}) + if err := m.PriceAttestations[len(m.PriceAttestations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) @@ -3354,7 +2669,7 @@ func (m *MsgRequestBandIBCRates) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgRequestBandIBCRatesResponse) Unmarshal(dAtA []byte) error { +func (m *MsgRelayPythPricesResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3377,10 +2692,10 @@ func (m *MsgRequestBandIBCRatesResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgRequestBandIBCRatesResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgRelayPythPricesResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgRequestBandIBCRatesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgRelayPythPricesResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: @@ -3404,7 +2719,7 @@ func (m *MsgRequestBandIBCRatesResponse) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgRelayPythPrices) Unmarshal(dAtA []byte) error { +func (m *MsgRelayChainlinkPrices) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3427,10 +2742,10 @@ func (m *MsgRelayPythPrices) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgRelayPythPrices: wiretype end group for non-group") + return fmt.Errorf("proto: MsgRelayChainlinkPrices: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgRelayPythPrices: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgRelayChainlinkPrices: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -3467,7 +2782,7 @@ func (m *MsgRelayPythPrices) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PriceAttestations", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Reports", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -3494,8 +2809,8 @@ func (m *MsgRelayPythPrices) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.PriceAttestations = append(m.PriceAttestations, &PriceAttestation{}) - if err := m.PriceAttestations[len(m.PriceAttestations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Reports = append(m.Reports, &ChainlinkReport{}) + if err := m.Reports[len(m.Reports)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -3520,7 +2835,7 @@ func (m *MsgRelayPythPrices) Unmarshal(dAtA []byte) error { } return nil } -func (m *MsgRelayPythPricesResponse) Unmarshal(dAtA []byte) error { +func (m *MsgRelayChainlinkPricesResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -3543,10 +2858,10 @@ func (m *MsgRelayPythPricesResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: MsgRelayPythPricesResponse: wiretype end group for non-group") + return fmt.Errorf("proto: MsgRelayChainlinkPricesResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: MsgRelayPythPricesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: MsgRelayChainlinkPricesResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { default: diff --git a/chain/peggy/types/attestation.pb.go b/chain/peggy/types/attestation.pb.go index a88e4156..d3641ccb 100644 --- a/chain/peggy/types/attestation.pb.go +++ b/chain/peggy/types/attestation.pb.go @@ -6,6 +6,7 @@ package types import ( cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" + _ "github.com/cosmos/cosmos-proto" types "github.com/cosmos/cosmos-sdk/codec/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" @@ -206,38 +207,40 @@ func init() { } var fileDescriptor_3022043570947e1e = []byte{ - // 483 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0x31, 0x6f, 0xda, 0x40, - 0x14, 0xc7, 0x6d, 0x20, 0x28, 0x5c, 0x16, 0xeb, 0x4a, 0x53, 0xc7, 0x52, 0x1c, 0x2b, 0xea, 0x80, - 0x22, 0xf5, 0x2e, 0x49, 0xd5, 0xad, 0x8b, 0x83, 0x2d, 0xd5, 0x0a, 0x05, 0xe4, 0x38, 0x45, 0xe9, - 0x82, 0x6c, 0x73, 0xb5, 0xdd, 0x60, 0x1f, 0xe2, 0x0e, 0x4b, 0x9e, 0xbb, 0x54, 0x4c, 0xfd, 0x02, - 0xa8, 0x43, 0xbf, 0x4c, 0xc6, 0x8c, 0x55, 0x87, 0xa8, 0x82, 0x2f, 0x52, 0x61, 0x13, 0x4a, 0x93, - 0x74, 0xbb, 0xff, 0xfb, 0xff, 0xde, 0xbb, 0xbf, 0xee, 0x1e, 0x78, 0x19, 0x25, 0x9f, 0x89, 0xcf, - 0xa3, 0x94, 0xe0, 0x11, 0x09, 0x82, 0x0c, 0xa7, 0x27, 0xd8, 0xe5, 0x9c, 0x30, 0xee, 0xf2, 0x88, - 0x26, 0x68, 0x34, 0xa6, 0x9c, 0x42, 0xb8, 0xa6, 0x50, 0x4e, 0xa1, 0xf4, 0x44, 0xa9, 0x07, 0x34, - 0xa0, 0xb9, 0x8d, 0x97, 0xa7, 0x82, 0x54, 0xf6, 0x02, 0x4a, 0x83, 0x21, 0xc1, 0xb9, 0xf2, 0x26, - 0x9f, 0xb0, 0x9b, 0x64, 0x85, 0x75, 0xf8, 0x45, 0x04, 0x3b, 0xfa, 0xdf, 0xd1, 0x50, 0x01, 0xdb, - 0xd4, 0x63, 0x64, 0x9c, 0x92, 0x81, 0x2c, 0x6a, 0x62, 0x63, 0xdb, 0x5e, 0x6b, 0x58, 0x07, 0x5b, - 0x29, 0xe5, 0x84, 0xc9, 0x25, 0xad, 0xdc, 0xa8, 0xd9, 0x85, 0x80, 0xbb, 0xa0, 0x1a, 0x92, 0x28, - 0x08, 0xb9, 0x5c, 0xd6, 0xc4, 0x46, 0xc5, 0x5e, 0x29, 0x78, 0x04, 0xb6, 0xfc, 0xa1, 0x1b, 0xc5, - 0x72, 0x45, 0x13, 0x1b, 0x3b, 0xa7, 0x75, 0x54, 0x84, 0x40, 0xf7, 0x21, 0x90, 0x9e, 0x64, 0x76, - 0x81, 0x1c, 0xf6, 0x01, 0x30, 0xed, 0xe6, 0xe9, 0xb1, 0x43, 0xaf, 0x49, 0x9e, 0xc1, 0xa7, 0x09, - 0x1f, 0xbb, 0x3e, 0xcf, 0x33, 0xd4, 0xec, 0xb5, 0x86, 0x6f, 0x40, 0xd5, 0x8d, 0xe9, 0x24, 0xe1, - 0x72, 0x69, 0xe9, 0x9c, 0xed, 0xdf, 0xdc, 0x1d, 0x08, 0xbf, 0xee, 0x0e, 0x9e, 0xfb, 0x94, 0xc5, - 0x94, 0xb1, 0xc1, 0x35, 0x8a, 0x28, 0x8e, 0x5d, 0x1e, 0x22, 0x2b, 0xe1, 0xf6, 0x0a, 0x3e, 0xfa, - 0x5e, 0x02, 0xb5, 0xe6, 0xf2, 0x2a, 0x27, 0x1b, 0x11, 0x88, 0x00, 0x6c, 0xb6, 0x74, 0xeb, 0x7d, - 0xdf, 0xb9, 0xea, 0x9a, 0xfd, 0xcb, 0xf6, 0x79, 0xbb, 0xd3, 0x6b, 0x4b, 0x82, 0xb2, 0x3b, 0x9d, - 0x69, 0x4f, 0x38, 0x0f, 0x78, 0xc3, 0xec, 0x76, 0x2e, 0x2c, 0x47, 0x12, 0x1f, 0xf1, 0x2b, 0x07, - 0x1e, 0x83, 0x67, 0x1b, 0xd5, 0x9e, 0xe5, 0xbc, 0x33, 0x6c, 0xbd, 0x27, 0x95, 0x94, 0x17, 0xd3, - 0x99, 0xf6, 0x94, 0x05, 0xdf, 0x82, 0xbd, 0x8d, 0x72, 0xfe, 0x16, 0xcb, 0x69, 0xad, 0xce, 0x95, - 0x69, 0x48, 0x65, 0x65, 0x7f, 0x3a, 0xd3, 0xfe, 0x0f, 0x3c, 0xe8, 0xfe, 0xa0, 0xb7, 0x2e, 0x4c, - 0xa7, 0x7f, 0xd9, 0x35, 0x74, 0xc7, 0x34, 0xa4, 0xca, 0xa3, 0xee, 0x7f, 0x01, 0xa5, 0xf2, 0xf5, - 0x87, 0x2a, 0x9c, 0x91, 0x9b, 0xb9, 0x2a, 0xde, 0xce, 0x55, 0xf1, 0xf7, 0x5c, 0x15, 0xbf, 0x2d, - 0x54, 0xe1, 0x76, 0xa1, 0x0a, 0x3f, 0x17, 0xaa, 0xf0, 0xf1, 0x3c, 0x88, 0x78, 0x38, 0xf1, 0x90, - 0x4f, 0x63, 0x6c, 0xdd, 0xaf, 0x5c, 0xcb, 0xf5, 0x18, 0x5e, 0x2f, 0xe0, 0x2b, 0x9f, 0x8e, 0xc9, - 0xa6, 0x0c, 0xdd, 0x28, 0xc1, 0x31, 0x1d, 0x4c, 0x86, 0x84, 0xad, 0x76, 0x98, 0x67, 0x23, 0xc2, - 0xbc, 0x6a, 0xfe, 0xfd, 0xaf, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x9f, 0x86, 0x0b, 0xe3, - 0x02, 0x00, 0x00, + // 514 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0x4f, 0x6e, 0xda, 0x40, + 0x18, 0xc5, 0x6d, 0x20, 0x28, 0x4c, 0x36, 0x68, 0x4a, 0x53, 0x70, 0x15, 0x63, 0x45, 0x5d, 0xa0, + 0x4a, 0x99, 0x09, 0xa9, 0xba, 0xeb, 0xc6, 0x80, 0xa5, 0x22, 0x28, 0x20, 0xc7, 0x29, 0x4a, 0x37, + 0x68, 0x6c, 0xa6, 0xb6, 0x1b, 0xec, 0x41, 0x78, 0x40, 0xf2, 0x0d, 0x2a, 0x56, 0xbd, 0x00, 0xea, + 0xa2, 0x3d, 0x42, 0x0f, 0x11, 0x75, 0x95, 0x65, 0xd5, 0x45, 0x54, 0xc1, 0x45, 0x2a, 0x6c, 0x43, + 0x69, 0xfe, 0xec, 0xfc, 0xbe, 0xf7, 0xfb, 0x66, 0x9e, 0x47, 0x0f, 0xbc, 0x70, 0xfd, 0x4f, 0xd4, + 0xe2, 0xee, 0x8c, 0xe2, 0x31, 0xb5, 0xed, 0x10, 0xcf, 0xaa, 0x98, 0x70, 0x4e, 0x03, 0x4e, 0xb8, + 0xcb, 0x7c, 0x34, 0x9e, 0x30, 0xce, 0x20, 0xdc, 0x52, 0x28, 0xa2, 0xd0, 0xac, 0x2a, 0x95, 0x2c, + 0x16, 0x78, 0x2c, 0x18, 0x44, 0x04, 0x8e, 0x45, 0x8c, 0x4b, 0x05, 0x9b, 0xd9, 0x2c, 0x9e, 0xaf, + 0xbf, 0x92, 0x69, 0xc9, 0x66, 0xcc, 0x1e, 0x51, 0x1c, 0x29, 0x73, 0xfa, 0x11, 0x13, 0x3f, 0x8c, + 0xad, 0xe3, 0xef, 0x22, 0x38, 0x50, 0xff, 0xdd, 0x0a, 0x25, 0xb0, 0xcf, 0xcc, 0x80, 0x4e, 0x66, + 0x74, 0x58, 0x14, 0x15, 0xb1, 0xb2, 0xaf, 0x6f, 0x35, 0x2c, 0x80, 0xbd, 0x19, 0xe3, 0x34, 0x28, + 0xa6, 0x94, 0x74, 0x25, 0xa7, 0xc7, 0x02, 0x1e, 0x82, 0xac, 0x43, 0x5d, 0xdb, 0xe1, 0xc5, 0xb4, + 0x22, 0x56, 0x32, 0x7a, 0xa2, 0x60, 0x0b, 0xec, 0x59, 0x23, 0xe2, 0x7a, 0xc5, 0x8c, 0x22, 0x56, + 0x0e, 0xce, 0x0a, 0x28, 0x0e, 0x81, 0x36, 0x21, 0x90, 0xea, 0x87, 0xb5, 0xf2, 0xcf, 0x1f, 0x27, + 0xcf, 0x37, 0x3f, 0x66, 0x52, 0x4e, 0xaa, 0x48, 0xe3, 0x0e, 0x9d, 0xd0, 0xa9, 0x57, 0x5f, 0x2f, + 0xeb, 0xf1, 0x19, 0xc7, 0x03, 0x00, 0x34, 0xbd, 0x7e, 0x76, 0x6a, 0xb0, 0x2b, 0x1a, 0x85, 0xb4, + 0x98, 0xcf, 0x27, 0xc4, 0xe2, 0x51, 0xc8, 0x9c, 0xbe, 0xd5, 0xf0, 0x35, 0xc8, 0x12, 0x8f, 0x4d, + 0x7d, 0x5e, 0x4c, 0xad, 0x9d, 0xda, 0xd1, 0xf5, 0x6d, 0x59, 0xf8, 0x7d, 0x5b, 0x7e, 0x1a, 0xbf, + 0x53, 0x30, 0xbc, 0x42, 0x2e, 0xc3, 0x1e, 0xe1, 0x0e, 0x6a, 0xfa, 0x5c, 0x4f, 0xe0, 0x97, 0x5f, + 0x53, 0x20, 0x17, 0xdd, 0x68, 0x84, 0x63, 0x0a, 0x11, 0x80, 0xf5, 0xb6, 0xda, 0x7c, 0x37, 0x30, + 0x2e, 0x7b, 0xda, 0xe0, 0xa2, 0xd3, 0xea, 0x74, 0xfb, 0x9d, 0xbc, 0x20, 0x1d, 0xce, 0x17, 0xca, + 0x03, 0xce, 0x1d, 0xbe, 0xa1, 0xf5, 0xba, 0xe7, 0x4d, 0x23, 0x2f, 0xde, 0xe3, 0x13, 0x07, 0x9e, + 0x82, 0x27, 0x3b, 0xd3, 0x7e, 0xd3, 0x78, 0xdb, 0xd0, 0xd5, 0x7e, 0x3e, 0x25, 0x3d, 0x9b, 0x2f, + 0x94, 0x87, 0x2c, 0xf8, 0x06, 0x94, 0x76, 0xc6, 0xd1, 0x5b, 0xac, 0x4f, 0x6b, 0x77, 0x2f, 0xb5, + 0x46, 0x3e, 0x2d, 0x1d, 0xcd, 0x17, 0xca, 0xe3, 0xc0, 0x9d, 0xed, 0xf7, 0x6a, 0xfb, 0x5c, 0x33, + 0x06, 0x17, 0xbd, 0x86, 0x6a, 0x68, 0x8d, 0x7c, 0xe6, 0xde, 0xf6, 0xff, 0x80, 0x94, 0xf9, 0xfc, + 0x4d, 0x16, 0x6a, 0xf4, 0x7a, 0x29, 0x8b, 0x37, 0x4b, 0x59, 0xfc, 0xb3, 0x94, 0xc5, 0x2f, 0x2b, + 0x59, 0xb8, 0x59, 0xc9, 0xc2, 0xaf, 0x95, 0x2c, 0x7c, 0x68, 0xd9, 0x2e, 0x77, 0xa6, 0x26, 0xb2, + 0x98, 0x87, 0x9b, 0x9b, 0xba, 0xb6, 0x89, 0x19, 0xe0, 0x6d, 0x79, 0x4f, 0x2c, 0x36, 0xa1, 0xbb, + 0xd2, 0x21, 0xae, 0x8f, 0x3d, 0x36, 0x9c, 0x8e, 0x68, 0x90, 0xf4, 0x9f, 0x87, 0x63, 0x1a, 0x98, + 0xd9, 0xa8, 0x1f, 0xaf, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x98, 0x51, 0x06, 0xdc, 0x1f, 0x03, + 0x00, 0x00, } func (m *Attestation) Marshal() (dAtA []byte, err error) { diff --git a/chain/peggy/types/batch.go b/chain/peggy/types/batch.go new file mode 100644 index 00000000..dc1d77da --- /dev/null +++ b/chain/peggy/types/batch.go @@ -0,0 +1,67 @@ +package types + +import ( + "fmt" + "math/big" + "strings" + + accountsabi "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" +) + +// GetCheckpoint gets the checkpoint signature from the given outgoing tx batch +func (b OutgoingTxBatch) GetCheckpoint(peggyIDstring string) common.Hash { + + abi, err := accountsabi.JSON(strings.NewReader(OutgoingBatchTxCheckpointABIJSON)) + if err != nil { + panic("Bad ABI constant!") + } + + // the contract argument is not a arbitrary length array but a fixed length 32 byte + // array, therefore we have to utf8 encode the string (the default in this case) and + // then copy the variable length encoded data into a fixed length array. This function + // will panic if peggyId is too long to fit in 32 bytes + peggyID, err := strToFixByteArray(peggyIDstring) + if err != nil { + panic(err) + } + + // Create the methodName argument which salts the signature + methodNameBytes := []uint8("transactionBatch") + var batchMethodName [32]uint8 + copy(batchMethodName[:], methodNameBytes) + + // Run through the elements of the batch and serialize them + txAmounts := make([]*big.Int, len(b.Transactions)) + txDestinations := make([]common.Address, len(b.Transactions)) + txFees := make([]*big.Int, len(b.Transactions)) + for i, tx := range b.Transactions { + txAmounts[i] = tx.Erc20Token.Amount.BigInt() + txDestinations[i] = common.HexToAddress(tx.DestAddress) + txFees[i] = tx.Erc20Fee.Amount.BigInt() + } + + // the methodName needs to be the same as the 'name' above in the checkpointAbiJson + // but other than that it's a constant that has no impact on the output. This is because + // it gets encoded as a function name which we must then discard. + abiEncodedBatch, err := abi.Pack("submitBatch", + peggyID, + batchMethodName, + txAmounts, + txDestinations, + txFees, + big.NewInt(int64(b.BatchNonce)), + common.HexToAddress(b.TokenContract), + big.NewInt(int64(b.BatchTimeout)), + ) + + // this should never happen outside of test since any case that could crash on encoding + // should be filtered above. + if err != nil { + panic(fmt.Sprintf("Error packing checkpoint! %s/n", err)) + } + + hash := crypto.Keccak256Hash(abiEncodedBatch[4:]) + return hash +} diff --git a/chain/peggy/types/batch.pb.go b/chain/peggy/types/batch.pb.go index 083ea8c7..60cd3716 100644 --- a/chain/peggy/types/batch.pb.go +++ b/chain/peggy/types/batch.pb.go @@ -5,6 +5,7 @@ package types import ( fmt "fmt" + _ "github.com/cosmos/cosmos-proto" proto "github.com/cosmos/gogoproto/proto" io "io" math "math" @@ -184,33 +185,35 @@ func init() { func init() { proto.RegisterFile("injective/peggy/v1/batch.proto", fileDescriptor_48fd09581f1b5901) } var fileDescriptor_48fd09581f1b5901 = []byte{ - // 409 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x4d, 0x6b, 0xdc, 0x30, - 0x10, 0x86, 0x57, 0x9b, 0x0f, 0xba, 0xf2, 0x26, 0x05, 0x51, 0x8a, 0xe9, 0x41, 0xdd, 0xa6, 0x1f, - 0xec, 0xa5, 0x76, 0xe2, 0x1e, 0x7b, 0x28, 0x4d, 0x68, 0xa1, 0x1f, 0xb4, 0x60, 0x7c, 0xea, 0xc5, - 0xc8, 0xf2, 0xc4, 0xab, 0x26, 0x2b, 0x2d, 0xd2, 0x78, 0x49, 0xfe, 0x45, 0x7f, 0x56, 0x8f, 0x39, - 0xf6, 0x52, 0x08, 0xbb, 0x7f, 0xa4, 0x48, 0x76, 0x97, 0x96, 0x04, 0x72, 0xd3, 0x3c, 0x33, 0xef, - 0xab, 0x77, 0x60, 0x28, 0x57, 0xfa, 0x3b, 0x48, 0x54, 0x4b, 0x48, 0x17, 0xd0, 0x34, 0x97, 0xe9, - 0xf2, 0x28, 0xad, 0x04, 0xca, 0x59, 0xb2, 0xb0, 0x06, 0x0d, 0x63, 0x9b, 0x7e, 0x12, 0xfa, 0xc9, - 0xf2, 0xe8, 0xd1, 0xb3, 0x5b, 0x34, 0x02, 0x11, 0x1c, 0x0a, 0x54, 0x46, 0x77, 0xca, 0x83, 0x6b, - 0x42, 0xef, 0x7f, 0x6d, 0xb1, 0x31, 0x4a, 0x37, 0xc5, 0xc5, 0xb1, 0xf7, 0x64, 0x8f, 0x69, 0x14, - 0xcc, 0x4b, 0x6d, 0xb4, 0x84, 0x98, 0x4c, 0xc8, 0x74, 0x3b, 0xa7, 0x01, 0x7d, 0xf1, 0x84, 0x3d, - 0xa5, 0x7b, 0xdd, 0x00, 0xaa, 0x39, 0x98, 0x16, 0xe3, 0x61, 0x18, 0x19, 0x07, 0x58, 0x74, 0x8c, - 0x7d, 0xa4, 0x63, 0xb4, 0x42, 0x3b, 0x21, 0xfd, 0x77, 0x2e, 0xde, 0x9a, 0x6c, 0x4d, 0xa3, 0xec, - 0x45, 0x72, 0x33, 0x6a, 0xb2, 0x09, 0xe0, 0xe7, 0x4f, 0xc1, 0x16, 0x17, 0xf9, 0x7f, 0x5a, 0xf6, - 0x9c, 0xee, 0xa3, 0x39, 0x03, 0x5d, 0x4a, 0xa3, 0xd1, 0x0a, 0x89, 0xf1, 0xf6, 0x84, 0x4c, 0x47, - 0xf9, 0x5e, 0xa0, 0x27, 0x3d, 0x64, 0x0f, 0xe8, 0x4e, 0x75, 0x6e, 0xe4, 0x59, 0xbc, 0x13, 0xf2, - 0x74, 0xc5, 0xc1, 0x6f, 0x42, 0xd9, 0xcd, 0x1f, 0xd8, 0x3e, 0x1d, 0xaa, 0xba, 0x5f, 0x6e, 0xa8, - 0x6a, 0xf6, 0x90, 0xee, 0x3a, 0xd0, 0x35, 0xd8, 0xb0, 0xcd, 0x28, 0xef, 0x2b, 0xf6, 0x84, 0x8e, - 0x6b, 0x70, 0x58, 0x8a, 0xba, 0xb6, 0xe0, 0xfc, 0x1e, 0xbe, 0x1b, 0x79, 0xf6, 0xb6, 0x43, 0xec, - 0x0d, 0x8d, 0xc0, 0xca, 0xec, 0xb0, 0x0c, 0x71, 0x42, 0xb6, 0x28, 0xe3, 0xb7, 0x6d, 0xfa, 0x2e, - 0x3f, 0xc9, 0x0e, 0x0b, 0x3f, 0x95, 0xd3, 0x20, 0x09, 0x6f, 0xf6, 0x9a, 0x8e, 0x3a, 0x83, 0x53, - 0x80, 0x10, 0xfe, 0x6e, 0xf9, 0xbd, 0x20, 0x78, 0x0f, 0x70, 0x0c, 0x3f, 0x57, 0x9c, 0x5c, 0xad, - 0x38, 0xb9, 0x5e, 0x71, 0xf2, 0x63, 0xcd, 0x07, 0x57, 0x6b, 0x3e, 0xf8, 0xb5, 0xe6, 0x83, 0x6f, - 0x9f, 0x1a, 0x85, 0xb3, 0xb6, 0x4a, 0xa4, 0x99, 0xa7, 0x1f, 0xfe, 0xba, 0x7d, 0x16, 0x95, 0x4b, - 0x37, 0xde, 0x2f, 0xa5, 0xb1, 0xf0, 0x6f, 0x39, 0x13, 0x4a, 0xa7, 0x73, 0x53, 0xb7, 0xe7, 0xe0, - 0xfa, 0xc3, 0xc1, 0xcb, 0x05, 0xb8, 0x6a, 0x37, 0x1c, 0xcc, 0xab, 0x3f, 0x01, 0x00, 0x00, 0xff, - 0xff, 0x24, 0x11, 0x91, 0x29, 0x8c, 0x02, 0x00, 0x00, + // 445 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0xc7, 0xe3, 0xf4, 0x43, 0x64, 0x9d, 0x16, 0x69, 0x85, 0x90, 0xe9, 0xc1, 0xa4, 0x85, 0xa2, + 0x5c, 0x6a, 0xb7, 0xe1, 0x06, 0x07, 0x44, 0xab, 0x22, 0xf1, 0x21, 0x90, 0x4c, 0x4e, 0x5c, 0xac, + 0xf5, 0x7a, 0xea, 0x2c, 0xad, 0x77, 0xa3, 0xdd, 0x71, 0xd4, 0x3e, 0x01, 0x57, 0x1e, 0x86, 0x87, + 0x40, 0x9c, 0x7a, 0xe4, 0x82, 0x84, 0x92, 0x17, 0x41, 0x1e, 0x9b, 0x08, 0xd4, 0x48, 0xbd, 0xed, + 0xfc, 0xe6, 0x3f, 0x1f, 0xff, 0xd5, 0xb0, 0x50, 0xe9, 0xcf, 0x20, 0x51, 0xcd, 0x20, 0x9e, 0x42, + 0x51, 0x5c, 0xc5, 0xb3, 0xa3, 0x38, 0x13, 0x28, 0x27, 0xd1, 0xd4, 0x1a, 0x34, 0x9c, 0x2f, 0xf3, + 0x11, 0xe5, 0xa3, 0xd9, 0xd1, 0xce, 0x03, 0x69, 0x5c, 0x69, 0x5c, 0x4a, 0x8a, 0xb8, 0x09, 0x1a, + 0xf9, 0xce, 0xe3, 0x15, 0xed, 0x04, 0x22, 0x38, 0x14, 0xa8, 0x8c, 0x6e, 0x54, 0x7b, 0x5f, 0xba, + 0xec, 0xee, 0x87, 0x0a, 0x0b, 0xa3, 0x74, 0x31, 0xbe, 0x3c, 0xae, 0xc7, 0xf1, 0x87, 0xcc, 0xa7, + 0xb9, 0xa9, 0x36, 0x5a, 0x42, 0xe0, 0x0d, 0xbc, 0xe1, 0x7a, 0xc2, 0x08, 0xbd, 0xaf, 0x09, 0x7f, + 0xc4, 0xb6, 0x1a, 0x01, 0xaa, 0x12, 0x4c, 0x85, 0x41, 0x97, 0x24, 0x7d, 0x82, 0xe3, 0x86, 0xf1, + 0x37, 0xac, 0x8f, 0x56, 0x68, 0x27, 0x64, 0x3d, 0xce, 0x05, 0x6b, 0x83, 0xb5, 0xa1, 0x3f, 0x7a, + 0x12, 0xdd, 0x74, 0x11, 0x2d, 0x17, 0xa8, 0xf5, 0x67, 0x60, 0xc7, 0x97, 0xc9, 0x7f, 0xb5, 0x7c, + 0x9f, 0x6d, 0xa3, 0x39, 0x07, 0x9d, 0x4a, 0xa3, 0xd1, 0x0a, 0x89, 0xc1, 0xfa, 0xc0, 0x1b, 0xf6, + 0x92, 0x2d, 0xa2, 0x27, 0x2d, 0xe4, 0xf7, 0xd8, 0x46, 0x76, 0x61, 0xe4, 0x79, 0xb0, 0x41, 0xfb, + 0x34, 0xc1, 0xb3, 0xfd, 0x1f, 0xdf, 0x0e, 0x76, 0x57, 0x4c, 0x3d, 0xc5, 0x09, 0x58, 0xa8, 0xca, + 0x8f, 0xaa, 0xd0, 0x90, 0xef, 0xfd, 0xf2, 0x18, 0xbf, 0xb9, 0x08, 0xdf, 0x66, 0x5d, 0x95, 0xb7, + 0x7f, 0xd0, 0x55, 0x39, 0xbf, 0xcf, 0x36, 0x1d, 0xe8, 0x1c, 0x2c, 0x99, 0xee, 0x25, 0x6d, 0xc4, + 0x77, 0x59, 0x3f, 0x07, 0x87, 0xa9, 0xc8, 0x73, 0x0b, 0xae, 0xb6, 0x5b, 0x67, 0xfd, 0x9a, 0xbd, + 0x6c, 0x10, 0x7f, 0xc1, 0x7c, 0xb0, 0x72, 0x74, 0x98, 0xd2, 0xd6, 0x64, 0xc1, 0x1f, 0x85, 0xab, + 0x3e, 0xe4, 0x34, 0x39, 0x19, 0x1d, 0x8e, 0x6b, 0x55, 0xc2, 0xa8, 0x84, 0xde, 0xfc, 0x39, 0xeb, + 0x35, 0x0d, 0xce, 0x00, 0xc8, 0xe3, 0xed, 0xe5, 0x77, 0xa8, 0xe0, 0x15, 0xc0, 0x31, 0x7c, 0x9f, + 0x87, 0xde, 0xf5, 0x3c, 0xf4, 0x7e, 0xcf, 0x43, 0xef, 0xeb, 0x22, 0xec, 0x5c, 0x2f, 0xc2, 0xce, + 0xcf, 0x45, 0xd8, 0xf9, 0xf4, 0xb6, 0x50, 0x38, 0xa9, 0xb2, 0x48, 0x9a, 0x32, 0x7e, 0xfd, 0xb7, + 0xdb, 0x3b, 0x91, 0xb9, 0x78, 0xd9, 0xfb, 0x40, 0x1a, 0x0b, 0xff, 0x86, 0x13, 0xa1, 0x74, 0x5c, + 0x9a, 0xbc, 0xba, 0x00, 0xd7, 0xde, 0x17, 0x5e, 0x4d, 0xc1, 0x65, 0x9b, 0x74, 0x57, 0x4f, 0xff, + 0x04, 0x00, 0x00, 0xff, 0xff, 0x27, 0xfc, 0xef, 0x01, 0xce, 0x02, 0x00, 0x00, } func (m *OutgoingTxBatch) Marshal() (dAtA []byte, err error) { diff --git a/chain/peggy/types/codec.go b/chain/peggy/types/codec.go index 381cd75f..328beda9 100644 --- a/chain/peggy/types/codec.go +++ b/chain/peggy/types/codec.go @@ -51,6 +51,13 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { &MsgValsetUpdatedClaim{}, ) + registry.RegisterInterface( + "injective.peggy.v1.EthereumSigned", + (*EthereumSigned)(nil), + &OutgoingTxBatch{}, + &Valset{}, + ) + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) } diff --git a/chain/peggy/types/errors.go b/chain/peggy/types/errors.go index 667d6e4f..4b6dc05b 100644 --- a/chain/peggy/types/errors.go +++ b/chain/peggy/types/errors.go @@ -20,4 +20,6 @@ var ( ErrInvalidEthSender = errors.Register(ModuleName, 13, "invalid ethereum sender on claim") ErrInvalidEthDestination = errors.Register(ModuleName, 14, "invalid ethereum destination") ErrNoLastClaimForValidator = errors.Register(ModuleName, 15, "missing previous claim for validator") + ErrDuplicateEthAddress = errors.Register(ModuleName, 16, "eth address already in use") + ErrUnbondedValidator = errors.Register(ModuleName, 17, "validator is unbonded") ) diff --git a/chain/peggy/types/key.go b/chain/peggy/types/key.go index 43a6457f..d54a2438 100644 --- a/chain/peggy/types/key.go +++ b/chain/peggy/types/key.go @@ -299,8 +299,13 @@ func GetPastEthSignatureCheckpointKey(checkpoint common.Hash) []byte { } // GetFakeCheckpointKey indexes fake checkpoints previously signed by a validator -func GetFakeCheckpointKey(signature []byte) []byte { - return append(FakeCheckpointKey, signature...) +func GetFakeCheckpointKey(checkpoint, addr []byte) []byte { + k := make([]byte, 0, len(FakeCheckpointKey)+len(checkpoint)+len(addr)) + k = append(k, FakeCheckpointKey...) + k = append(k, checkpoint...) + k = append(k, addr...) + + return k } func GetMintAmountERC20Key(erc20 []byte) []byte { diff --git a/chain/peggy/types/msgs.pb.go b/chain/peggy/types/msgs.pb.go index 7c6413e8..dc4381c1 100644 --- a/chain/peggy/types/msgs.pb.go +++ b/chain/peggy/types/msgs.pb.go @@ -1946,137 +1946,140 @@ func init() { func init() { proto.RegisterFile("injective/peggy/v1/msgs.proto", fileDescriptor_751daa04abed7ef4) } var fileDescriptor_751daa04abed7ef4 = []byte{ - // 2076 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x4d, 0x6c, 0x1c, 0x49, - 0x15, 0x4e, 0xdb, 0xe3, 0x24, 0x2e, 0xdb, 0x31, 0xe9, 0x75, 0x92, 0x49, 0x27, 0xb1, 0xe3, 0x76, - 0x7e, 0xbc, 0x4e, 0xb6, 0x27, 0xe3, 0xc0, 0x2e, 0x6b, 0x09, 0xa4, 0x8c, 0x1d, 0x84, 0x45, 0xbc, - 0x44, 0xed, 0xec, 0xae, 0xc4, 0xa5, 0xa9, 0xe9, 0x7e, 0xe9, 0x69, 0x3c, 0xdd, 0x35, 0x74, 0xd5, - 0x8c, 0xf1, 0x01, 0x69, 0xd9, 0xe3, 0x72, 0x00, 0x89, 0x03, 0xe2, 0x00, 0x17, 0xb8, 0xae, 0x14, - 0x24, 0x2e, 0xec, 0x19, 0xa4, 0x3d, 0x46, 0x70, 0x41, 0x08, 0x45, 0x28, 0x41, 0x8a, 0xc4, 0x89, - 0x3b, 0x07, 0x50, 0x57, 0x55, 0xd7, 0x74, 0xf7, 0x74, 0x8f, 0x27, 0xab, 0x68, 0x2f, 0xd6, 0xd4, - 0xab, 0xf7, 0xaa, 0xbe, 0xf7, 0x5b, 0xef, 0xb5, 0xd1, 0x95, 0x20, 0xfa, 0x01, 0xb8, 0x2c, 0x18, - 0x40, 0xa3, 0x07, 0xbe, 0x7f, 0xd4, 0x18, 0x34, 0x1b, 0x21, 0xf5, 0xa9, 0xd5, 0x8b, 0x09, 0x23, - 0xba, 0xae, 0xb6, 0x2d, 0xbe, 0x6d, 0x0d, 0x9a, 0xc6, 0x92, 0x4f, 0x7c, 0xc2, 0xb7, 0x1b, 0xc9, - 0x2f, 0xc1, 0x69, 0x5c, 0xf6, 0x09, 0xf1, 0xbb, 0xd0, 0xc0, 0xbd, 0xa0, 0x81, 0xa3, 0x88, 0x30, - 0xcc, 0x02, 0x12, 0xc9, 0x73, 0x8c, 0x8b, 0x72, 0x97, 0xaf, 0xda, 0xfd, 0xc7, 0x0d, 0x1c, 0x1d, - 0xc9, 0xad, 0xb3, 0x38, 0x0c, 0x22, 0xd2, 0xe0, 0x7f, 0x25, 0x69, 0xd9, 0x25, 0x34, 0x24, 0xb4, - 0xd1, 0xc6, 0x14, 0x1a, 0x83, 0x66, 0x1b, 0x18, 0x6e, 0x36, 0x5c, 0x12, 0x44, 0x72, 0xff, 0x82, - 0xdc, 0x0f, 0xa9, 0x2f, 0xf1, 0xa6, 0xd7, 0x88, 0x0d, 0x47, 0xa0, 0x13, 0x8b, 0xf4, 0xcc, 0x12, - 0x45, 0xd9, 0x51, 0x0f, 0xd2, 0xfd, 0x95, 0x92, 0xfd, 0x1e, 0x8e, 0x71, 0x98, 0x32, 0xac, 0x95, - 0x30, 0xc4, 0x98, 0x81, 0xd3, 0x0d, 0xc2, 0x80, 0x09, 0x26, 0xf3, 0x53, 0x0d, 0x5d, 0xda, 0xa3, - 0xfe, 0x3e, 0xb0, 0xef, 0xc6, 0x6e, 0x07, 0x28, 0x8b, 0x31, 0x23, 0xf1, 0x3d, 0xcf, 0x8b, 0x81, - 0x52, 0xa0, 0xfa, 0x79, 0x74, 0x92, 0x42, 0xe4, 0x41, 0x5c, 0xd7, 0xae, 0x6a, 0xeb, 0xb3, 0xb6, - 0x5c, 0xe9, 0x26, 0x9a, 0x27, 0x19, 0x81, 0xfa, 0x14, 0xdf, 0xcd, 0xd1, 0xf4, 0x15, 0x34, 0x07, - 0xac, 0xe3, 0x60, 0x71, 0x58, 0x7d, 0x9a, 0xb3, 0x20, 0x60, 0x1d, 0x79, 0xfc, 0x56, 0xf3, 0xe3, - 0x97, 0x4f, 0x36, 0xe4, 0x89, 0x9f, 0xbc, 0x7c, 0xb2, 0xb1, 0x2a, 0x70, 0x8e, 0xc1, 0x63, 0x5e, - 0x47, 0x6b, 0x63, 0xb6, 0x6d, 0xa0, 0x3d, 0x12, 0x51, 0x30, 0xff, 0xa8, 0xa1, 0xaf, 0xec, 0x51, - 0xff, 0x03, 0xdc, 0xa5, 0xc0, 0xb6, 0x49, 0xf4, 0x38, 0x88, 0x43, 0x7d, 0x09, 0xcd, 0x44, 0x24, - 0x72, 0x81, 0xab, 0x52, 0xb3, 0xc5, 0xe2, 0xb5, 0x68, 0xa2, 0x5f, 0x46, 0xb3, 0x34, 0xf0, 0x23, - 0xcc, 0xfa, 0x31, 0xd4, 0x6b, 0x7c, 0x7b, 0x48, 0xd8, 0xba, 0x9d, 0xe8, 0x99, 0x3b, 0x31, 0xd1, - 0xf6, 0xbc, 0xd2, 0x36, 0x07, 0xd3, 0x34, 0x50, 0xbd, 0x48, 0x53, 0x7a, 0x3d, 0xd3, 0xd0, 0x3c, - 0xd7, 0x3f, 0xf2, 0x1e, 0x91, 0xfb, 0xac, 0x53, 0xe9, 0x9f, 0x8b, 0xe8, 0x74, 0x82, 0xd8, 0x03, - 0xca, 0xa4, 0x46, 0xa7, 0x80, 0x75, 0x76, 0x80, 0x32, 0xfd, 0x1d, 0x74, 0x12, 0x87, 0xa4, 0x1f, - 0x31, 0xae, 0xc7, 0xdc, 0xe6, 0x45, 0x4b, 0xc6, 0x5d, 0x12, 0xbd, 0x96, 0x8c, 0x5e, 0x6b, 0x9b, - 0x04, 0x51, 0xab, 0xf6, 0xf9, 0xb3, 0x95, 0x13, 0xb6, 0x64, 0xd7, 0xbf, 0x89, 0x50, 0x3b, 0x0e, - 0x3c, 0x1f, 0x9c, 0xc7, 0x20, 0xb4, 0x9c, 0x40, 0x78, 0x56, 0x88, 0x7c, 0x0b, 0x60, 0xcb, 0x2c, - 0xb8, 0x5b, 0xcf, 0xb8, 0x5b, 0xea, 0x63, 0x9e, 0x47, 0x4b, 0xd9, 0xb5, 0x52, 0xfc, 0x47, 0x68, - 0x71, 0x8f, 0xfa, 0x36, 0xfc, 0xb0, 0x0f, 0x94, 0xb5, 0x30, 0x73, 0x3b, 0x23, 0x8e, 0xd3, 0x4a, - 0x1c, 0xb7, 0x84, 0x66, 0x3c, 0x88, 0x48, 0x28, 0x6d, 0x20, 0x16, 0x5b, 0xb7, 0x4a, 0xfd, 0x71, - 0x4e, 0xc1, 0xc9, 0x5e, 0x63, 0x5e, 0x44, 0x17, 0x0a, 0x24, 0x05, 0xea, 0x1f, 0x1a, 0x47, 0x25, - 0x9d, 0x24, 0x50, 0x95, 0x07, 0xd9, 0x75, 0x74, 0x86, 0x91, 0x03, 0x88, 0x1c, 0x97, 0x44, 0x2c, - 0xc6, 0x6e, 0xea, 0x94, 0x05, 0x4e, 0xdd, 0x96, 0x44, 0xfd, 0x0a, 0x4a, 0x82, 0xca, 0x49, 0x22, - 0x07, 0x62, 0x19, 0x66, 0xb3, 0xc0, 0x3a, 0xfb, 0x9c, 0x30, 0xa2, 0x71, 0xad, 0x44, 0xe3, 0x5c, - 0x24, 0xce, 0x14, 0x23, 0xf1, 0x38, 0xcd, 0xb3, 0xaa, 0x48, 0xcd, 0xb3, 0x24, 0xa5, 0xf9, 0xbf, - 0xa7, 0xb8, 0xe6, 0x3b, 0xd0, 0x23, 0x34, 0x60, 0xdb, 0x5d, 0x1c, 0x84, 0x3c, 0x49, 0x06, 0x10, - 0x31, 0x27, 0xab, 0x3f, 0xe2, 0xa4, 0xf7, 0xb8, 0x11, 0x56, 0xd1, 0x7c, 0xbb, 0x4b, 0xdc, 0x03, - 0xa7, 0x03, 0x81, 0xdf, 0x11, 0x26, 0xa8, 0xd9, 0x73, 0x9c, 0xf6, 0x6d, 0x4e, 0x2a, 0xb1, 0xd3, - 0x74, 0x99, 0x9d, 0xbe, 0xa6, 0x42, 0x98, 0x9b, 0xa0, 0x75, 0x25, 0x09, 0xb5, 0xbf, 0x3f, 0x5b, - 0x39, 0x27, 0x82, 0x91, 0x7a, 0x07, 0x56, 0x40, 0x1a, 0x21, 0x66, 0x1d, 0x6b, 0x37, 0x62, 0x2a, - 0x80, 0x6f, 0xa2, 0x45, 0x60, 0x1d, 0x88, 0xa1, 0x1f, 0x3a, 0x32, 0x6b, 0x84, 0x85, 0xce, 0xa4, - 0xe4, 0x7d, 0x91, 0x3d, 0x37, 0xd1, 0xa2, 0x2c, 0xcc, 0x31, 0xb8, 0x10, 0x0c, 0x20, 0xae, 0x9f, - 0x14, 0x8c, 0x82, 0x6c, 0x4b, 0xea, 0x88, 0x47, 0x4e, 0x95, 0x78, 0x44, 0x47, 0x35, 0x0f, 0x33, - 0x5c, 0x3f, 0xcd, 0xf7, 0xf8, 0xef, 0x63, 0xfd, 0x90, 0x35, 0xac, 0xf4, 0x43, 0x96, 0xa4, 0xfc, - 0xf0, 0x1f, 0x51, 0xe7, 0x3e, 0x0c, 0x58, 0xc7, 0x8b, 0xf1, 0xe1, 0xeb, 0x73, 0xc4, 0x0a, 0x9a, - 0x6b, 0x27, 0x1e, 0x97, 0x67, 0x4c, 0x8b, 0x33, 0x38, 0xe9, 0xbd, 0x8a, 0x88, 0xae, 0x95, 0x79, - 0xaa, 0x68, 0xa0, 0x99, 0x51, 0x03, 0x1d, 0x5b, 0x1e, 0x73, 0xda, 0xc9, 0xf2, 0x98, 0xa3, 0x29, - 0x73, 0xfc, 0x69, 0x0a, 0x9d, 0xdb, 0xa3, 0xfe, 0x7d, 0x7b, 0x7b, 0xf3, 0xce, 0x0e, 0xf4, 0xba, - 0xe4, 0x08, 0xbc, 0xd7, 0x67, 0x93, 0x55, 0x34, 0x2f, 0xa3, 0x42, 0xd4, 0x14, 0x11, 0x9a, 0x73, - 0x82, 0xb6, 0x93, 0x90, 0x26, 0xb5, 0x8a, 0x8e, 0x6a, 0x11, 0x0e, 0xd3, 0xfc, 0xe4, 0xbf, 0x79, - 0x25, 0x3f, 0x0a, 0xdb, 0xa4, 0x2b, 0x43, 0x4d, 0xae, 0x74, 0x03, 0x9d, 0xf6, 0xc0, 0x0d, 0x42, - 0xdc, 0xa5, 0x3c, 0xbc, 0x6a, 0xb6, 0x5a, 0x8f, 0x58, 0xf7, 0x74, 0x89, 0x75, 0x9b, 0xa5, 0xd6, - 0xbd, 0xa4, 0xac, 0x3b, 0x6a, 0x2c, 0x73, 0x05, 0x5d, 0x29, 0xdd, 0x50, 0x76, 0xfe, 0x31, 0xd2, - 0x93, 0xca, 0x80, 0x23, 0x17, 0xba, 0xc3, 0xb7, 0x28, 0x51, 0x3e, 0xc6, 0x11, 0xc5, 0x6e, 0xd2, - 0x49, 0x39, 0x81, 0x27, 0xcd, 0xbc, 0x90, 0xa1, 0xee, 0x7a, 0x99, 0x27, 0x6b, 0x2a, 0xfb, 0x64, - 0x6d, 0xad, 0x17, 0x9e, 0x87, 0xfa, 0xb0, 0x2a, 0xe5, 0x2f, 0x32, 0x2f, 0x23, 0x63, 0x94, 0xaa, - 0xc0, 0x7d, 0xa6, 0x71, 0xf8, 0xfb, 0xfd, 0x76, 0x18, 0xb0, 0x16, 0xf6, 0xf6, 0xd3, 0xea, 0x77, - 0x7f, 0x10, 0x78, 0x90, 0xf8, 0xda, 0x42, 0xa7, 0x68, 0xbf, 0x9d, 0x34, 0x47, 0x1c, 0xe1, 0xdc, - 0xe6, 0x92, 0x25, 0xda, 0x3d, 0x2b, 0x6d, 0xf7, 0xac, 0x7b, 0xd1, 0x91, 0x9d, 0x32, 0xe5, 0x6b, - 0xea, 0x54, 0xa1, 0xa6, 0x66, 0xf4, 0x99, 0xce, 0xe9, 0x73, 0xb7, 0xa0, 0xcf, 0xda, 0xf0, 0xb9, - 0xab, 0x84, 0x66, 0xde, 0x44, 0xd7, 0xc7, 0x32, 0x28, 0x2d, 0xff, 0x2b, 0x42, 0x5d, 0xb4, 0x09, - 0xef, 0xf7, 0x3c, 0xcc, 0x5e, 0x25, 0xd4, 0x07, 0x5c, 0x4c, 0x72, 0xc8, 0x50, 0x17, 0xb4, 0xf2, - 0x6c, 0x98, 0x1e, 0xcd, 0x86, 0x6f, 0xa0, 0x53, 0x21, 0x84, 0x6d, 0x88, 0x69, 0xbd, 0x76, 0x75, - 0x7a, 0x7d, 0x6e, 0x73, 0xcd, 0x1a, 0xed, 0xbd, 0xad, 0x16, 0x7f, 0xfd, 0x3f, 0xc0, 0xdd, 0xc0, - 0x4b, 0x42, 0xcf, 0x4e, 0x65, 0xf4, 0x16, 0x5a, 0x88, 0xe1, 0x10, 0xc7, 0x9e, 0x23, 0x2b, 0xf9, - 0xcc, 0x24, 0x95, 0x7c, 0x5e, 0xc8, 0xdc, 0x13, 0xf5, 0x7c, 0x15, 0xc9, 0xb5, 0xc3, 0xd3, 0x4b, - 0x26, 0xce, 0x9c, 0xa0, 0x3d, 0x4a, 0x48, 0x93, 0x14, 0xe8, 0x63, 0x33, 0x64, 0xd4, 0xc6, 0x32, - 0x43, 0x46, 0x37, 0x94, 0x7b, 0x3e, 0x15, 0xad, 0x81, 0xd8, 0x7b, 0xc8, 0xdb, 0x72, 0xfd, 0x6d, - 0x34, 0x8b, 0xfb, 0xac, 0x43, 0xe2, 0x80, 0x1d, 0x89, 0x6e, 0xa5, 0x55, 0xff, 0xcb, 0x1f, 0xde, - 0x5a, 0x92, 0x1d, 0x94, 0xec, 0x25, 0xf7, 0x59, 0x1c, 0x44, 0xbe, 0x3d, 0x64, 0xd5, 0xbf, 0x8e, - 0x4e, 0x8a, 0xc6, 0x9e, 0x7b, 0x6a, 0x6e, 0xd3, 0x28, 0x33, 0xb4, 0xb8, 0x23, 0xed, 0xd8, 0x04, - 0xbf, 0x48, 0xa9, 0xe1, 0x49, 0xf9, 0x37, 0x26, 0x8b, 0x4d, 0xbe, 0x31, 0x59, 0x92, 0x52, 0xe5, - 0xd7, 0x22, 0x9f, 0x5a, 0x5d, 0xec, 0x1e, 0x74, 0x03, 0xca, 0xee, 0xcb, 0xb7, 0x32, 0x3f, 0x24, - 0x88, 0x96, 0x25, 0x6d, 0x42, 0x45, 0xbf, 0xd2, 0x40, 0x6f, 0xb4, 0x53, 0xa9, 0xb4, 0x79, 0x86, - 0x44, 0x8b, 0xe9, 0xf5, 0x59, 0x5b, 0x57, 0x5b, 0xea, 0xa0, 0x34, 0x65, 0xb8, 0x74, 0x3e, 0x65, - 0xaa, 0x6f, 0x97, 0x29, 0x53, 0xcd, 0xa0, 0x14, 0xf9, 0xa5, 0xc6, 0xeb, 0x86, 0x0d, 0x03, 0x72, - 0x00, 0x29, 0x9b, 0x92, 0x7b, 0x7d, 0x5a, 0xdc, 0x29, 0x68, 0x71, 0x35, 0xd3, 0x58, 0x96, 0x5e, - 0x6d, 0x5e, 0x43, 0x66, 0xf5, 0xae, 0xc2, 0xff, 0xfb, 0x69, 0x51, 0x76, 0x63, 0xc0, 0x0c, 0x6c, - 0xcc, 0xe0, 0x41, 0x32, 0xc8, 0x7d, 0xe1, 0xb0, 0x5a, 0x43, 0xe2, 0x55, 0x52, 0x63, 0x8d, 0x9c, - 0x7c, 0x38, 0x31, 0x1d, 0x6c, 0xd4, 0x83, 0xa6, 0xde, 0xa0, 0xa4, 0x14, 0x2c, 0xc8, 0x07, 0x6d, - 0x27, 0x7d, 0x88, 0xae, 0xa5, 0x6c, 0xbd, 0x38, 0x70, 0x21, 0x29, 0xfd, 0xb5, 0xcc, 0x61, 0x0f, - 0x13, 0xe2, 0xae, 0xa7, 0xef, 0xa2, 0x33, 0xc3, 0x01, 0xd4, 0xe9, 0x53, 0x4f, 0x26, 0xfd, 0x9a, - 0x4c, 0xfa, 0x4b, 0xa3, 0x49, 0xff, 0x00, 0x7c, 0xec, 0x1e, 0xed, 0x80, 0x6b, 0xcf, 0xc7, 0xa9, - 0xc6, 0xef, 0x53, 0x4f, 0xdf, 0x43, 0x6f, 0xe0, 0x36, 0x25, 0xdd, 0x3e, 0x03, 0x27, 0x0c, 0x22, - 0x26, 0xce, 0x14, 0x15, 0xe0, 0xb8, 0x22, 0x72, 0x36, 0x95, 0xdc, 0x0b, 0x22, 0x26, 0x6c, 0xb8, - 0x81, 0xce, 0x66, 0x90, 0x1d, 0x06, 0x91, 0x47, 0x0e, 0xe5, 0x6b, 0xbb, 0xa8, 0xee, 0xfd, 0x90, - 0x93, 0x45, 0xef, 0x96, 0x4f, 0xaa, 0xcc, 0x53, 0x95, 0x77, 0x4e, 0xfa, 0x54, 0xe5, 0xa9, 0xca, - 0xa3, 0x4f, 0xa7, 0xb8, 0x47, 0x45, 0xda, 0x7d, 0x49, 0x1e, 0xbd, 0x85, 0xf4, 0x08, 0x0e, 0x9d, - 0x82, 0xbb, 0xc4, 0xd3, 0xb5, 0x18, 0xc1, 0xe1, 0xa3, 0xac, 0xc7, 0x1e, 0x0a, 0xe6, 0x82, 0xd7, - 0x6a, 0x93, 0x7b, 0x2d, 0x39, 0xd1, 0xce, 0x3a, 0xae, 0x89, 0xce, 0x15, 0x4e, 0x94, 0xd6, 0x9e, - 0xe1, 0xd6, 0xd6, 0xb3, 0xfc, 0x93, 0x18, 0xbc, 0x60, 0x3b, 0x69, 0xf0, 0x02, 0x55, 0x19, 0xfc, - 0x37, 0x1a, 0x37, 0xb8, 0x0d, 0x21, 0x19, 0x7c, 0x49, 0x06, 0x1f, 0x0f, 0xbf, 0x80, 0x44, 0xc2, - 0x2f, 0x50, 0x53, 0xf8, 0x9b, 0xff, 0xd3, 0xd1, 0xf4, 0x1e, 0xf5, 0xf5, 0x9f, 0x69, 0x68, 0x21, - 0xff, 0x6d, 0xe3, 0x5a, 0xd9, 0x9b, 0x50, 0xfc, 0x8c, 0x60, 0xdc, 0x9e, 0x84, 0x4b, 0x19, 0x6b, - 0xe3, 0xe3, 0xbf, 0xfe, 0xeb, 0x17, 0x53, 0xd7, 0x4c, 0xb3, 0x51, 0xf2, 0x25, 0x49, 0x76, 0x10, - 0xae, 0xbc, 0xff, 0x23, 0x0d, 0xcd, 0x0e, 0x3b, 0xc1, 0xab, 0x15, 0xf7, 0x28, 0x0e, 0x63, 0xfd, - 0x38, 0x0e, 0x85, 0xe2, 0x26, 0x47, 0xb1, 0x6a, 0xae, 0x94, 0xa1, 0x48, 0xba, 0x2b, 0x87, 0x11, - 0x07, 0x58, 0x47, 0xff, 0xa9, 0x86, 0xe6, 0x73, 0x1f, 0x08, 0xd6, 0x2a, 0xee, 0xc8, 0x32, 0x19, - 0xb7, 0x26, 0x60, 0x52, 0x58, 0xde, 0xe4, 0x58, 0xd6, 0xcc, 0xd5, 0x32, 0x2c, 0xb1, 0x90, 0x70, - 0xf8, 0x90, 0xc4, 0xd1, 0xe4, 0x3e, 0x0c, 0x54, 0xa1, 0xc9, 0x32, 0x55, 0xa2, 0x29, 0x1d, 0xc2, - 0xc7, 0xa2, 0x91, 0x8e, 0xc9, 0xa0, 0xc9, 0x0d, 0xeb, 0x55, 0x68, 0xb2, 0x4c, 0x95, 0x68, 0x4a, - 0x47, 0xd1, 0xb1, 0x68, 0x3c, 0x21, 0xe1, 0xb8, 0xfc, 0xf2, 0x24, 0x7c, 0xf3, 0x23, 0x6b, 0x55, - 0xf8, 0xe6, 0xb8, 0x2a, 0xc3, 0xb7, 0x7c, 0x18, 0x1c, 0x1b, 0xbe, 0x87, 0x52, 0x44, 0x22, 0xfa, - 0xad, 0x86, 0xce, 0x66, 0xbb, 0x39, 0x81, 0xea, 0xcd, 0xb1, 0xe9, 0x92, 0xed, 0xfb, 0x8c, 0xe6, - 0xc4, 0xac, 0x0a, 0xdf, 0x1d, 0x8e, 0x6f, 0xc3, 0x5c, 0x1f, 0x93, 0x5e, 0x7d, 0x21, 0x28, 0x51, - 0xfe, 0x4e, 0x43, 0x7a, 0xc9, 0x6c, 0x5b, 0x05, 0x73, 0x94, 0xb5, 0x12, 0xe6, 0x98, 0x59, 0x6f, - 0x2c, 0x4c, 0x88, 0xdd, 0xcd, 0x3b, 0x8e, 0x27, 0x05, 0x25, 0xcc, 0xcf, 0x34, 0x54, 0xaf, 0xfc, - 0xa0, 0xdc, 0xa8, 0x4c, 0xfc, 0x72, 0x01, 0xe3, 0x9d, 0x57, 0x14, 0x50, 0xc0, 0xbf, 0xca, 0x81, - 0x5b, 0xe6, 0xed, 0xf2, 0xc2, 0xc1, 0x9c, 0x6c, 0xc7, 0x9f, 0x56, 0x70, 0xfd, 0x57, 0x1a, 0x5a, - 0x2c, 0x0e, 0xb6, 0x37, 0xaa, 0xb2, 0x32, 0xcf, 0x67, 0x58, 0x93, 0xf1, 0x29, 0x84, 0x16, 0x47, - 0xb8, 0x6e, 0xde, 0x28, 0x4d, 0x60, 0x2e, 0xe4, 0x64, 0x2b, 0xdc, 0x9f, 0x35, 0x64, 0x8c, 0x19, - 0x6b, 0xab, 0x9c, 0x5b, 0x2d, 0x62, 0xbc, 0xfb, 0xca, 0x22, 0x0a, 0xfc, 0xbb, 0x1c, 0xfc, 0x5d, - 0xb3, 0x59, 0x6a, 0x5e, 0x2e, 0xef, 0xb4, 0xb1, 0xe7, 0xa8, 0x41, 0xd9, 0x81, 0x14, 0xe8, 0xf7, - 0xd1, 0x7c, 0x6e, 0x30, 0xaa, 0x2a, 0x46, 0x59, 0xa6, 0xca, 0x62, 0x54, 0x36, 0xb3, 0xe8, 0x9f, - 0x68, 0xc8, 0x18, 0x33, 0xb0, 0x54, 0x59, 0xaa, 0x5a, 0xa4, 0xd2, 0x52, 0xc7, 0xcf, 0x1d, 0xfa, - 0x4f, 0x34, 0x74, 0xa1, 0x6a, 0xe8, 0xb0, 0x2a, 0x9f, 0x9f, 0x52, 0x7e, 0xe3, 0xed, 0x57, 0xe3, - 0x57, 0x18, 0x02, 0xb4, 0x58, 0x9c, 0x1b, 0x2a, 0xa3, 0x3a, 0xcf, 0x57, 0x1d, 0xd5, 0xe5, 0x4d, - 0x6d, 0x72, 0x55, 0xb1, 0xa1, 0xbd, 0x31, 0xd6, 0x77, 0xc7, 0x5f, 0x55, 0xd1, 0xce, 0x25, 0x57, - 0x15, 0x5b, 0xb9, 0x1b, 0x95, 0x06, 0xca, 0xf1, 0x19, 0xd6, 0x64, 0x7c, 0xe9, 0x55, 0xc6, 0xcc, - 0x47, 0x2f, 0x9f, 0x6c, 0x68, 0x2d, 0xf8, 0xfc, 0xf9, 0xb2, 0xf6, 0xf4, 0xf9, 0xb2, 0xf6, 0xcf, - 0xe7, 0xcb, 0xda, 0xcf, 0x5f, 0x2c, 0x9f, 0x78, 0xfa, 0x62, 0xf9, 0xc4, 0xdf, 0x5e, 0x2c, 0x9f, - 0xf8, 0xde, 0x77, 0xfc, 0x80, 0x75, 0xfa, 0x6d, 0xcb, 0x25, 0x61, 0x63, 0x37, 0x3d, 0xfa, 0x01, - 0x6e, 0xd3, 0x61, 0x7e, 0xbc, 0xe5, 0x92, 0x18, 0xb2, 0xcb, 0x0e, 0x0e, 0xa2, 0x46, 0x48, 0xbc, - 0x7e, 0x17, 0xa8, 0x4c, 0x1e, 0xfe, 0x2f, 0xbe, 0xf6, 0x49, 0xfe, 0x21, 0xea, 0xee, 0xff, 0x03, - 0x00, 0x00, 0xff, 0xff, 0xad, 0x9f, 0x5c, 0x78, 0xee, 0x1c, 0x00, 0x00, + // 2113 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x1c, 0x49, + 0x15, 0x4f, 0x7b, 0xc6, 0x4e, 0x5c, 0x63, 0xc7, 0xa4, 0xd7, 0x49, 0x26, 0x9d, 0xc4, 0x8e, 0xdb, + 0xf9, 0xf0, 0x3a, 0x49, 0x4f, 0xec, 0xc0, 0x2e, 0x6b, 0x09, 0xa4, 0x8c, 0x1d, 0x84, 0xd9, 0x78, + 0x89, 0xda, 0xc9, 0xae, 0xc4, 0xa5, 0xa9, 0xe9, 0x7e, 0xe9, 0x69, 0x3c, 0xdd, 0x35, 0x74, 0xd7, + 0x8c, 0xf1, 0x01, 0x69, 0xd9, 0x1b, 0xcb, 0x61, 0x91, 0x38, 0x20, 0x90, 0xe0, 0x02, 0xd7, 0x95, + 0x82, 0x94, 0x0b, 0xdc, 0x91, 0x56, 0x7b, 0x8a, 0xe0, 0x82, 0x10, 0x8a, 0x20, 0x41, 0xca, 0x9f, + 0x01, 0xea, 0xaa, 0xea, 0x9a, 0xee, 0x9e, 0xee, 0xf1, 0x24, 0x6b, 0xe5, 0x62, 0x4d, 0xbd, 0x7a, + 0x55, 0xf5, 0x7b, 0xdf, 0xef, 0xb5, 0xd1, 0x45, 0x2f, 0xf8, 0x11, 0xd8, 0xd4, 0xeb, 0x43, 0xa3, + 0x0b, 0xae, 0x7b, 0xd0, 0xe8, 0xaf, 0x35, 0xfc, 0xc8, 0x8d, 0x8c, 0x6e, 0x48, 0x28, 0x51, 0x55, + 0xb9, 0x6d, 0xb0, 0x6d, 0xa3, 0xbf, 0xa6, 0xcd, 0xbb, 0xc4, 0x25, 0x6c, 0xbb, 0x11, 0xff, 0xe2, + 0x9c, 0xda, 0x05, 0x97, 0x10, 0xb7, 0x03, 0x0d, 0xdc, 0xf5, 0x1a, 0x38, 0x08, 0x08, 0xc5, 0xd4, + 0x23, 0x81, 0xb8, 0x47, 0x3b, 0x27, 0x76, 0xd9, 0xaa, 0xd5, 0x7b, 0xd4, 0xc0, 0xc1, 0x81, 0xd8, + 0x3a, 0x85, 0x7d, 0x2f, 0x20, 0x0d, 0xf6, 0x57, 0x90, 0x16, 0x6c, 0x12, 0xf9, 0x24, 0x6a, 0xb4, + 0x70, 0x04, 0x8d, 0xfe, 0x5a, 0x0b, 0x28, 0x5e, 0x6b, 0xd8, 0xc4, 0x0b, 0xc4, 0xfe, 0x59, 0xb1, + 0xef, 0x47, 0xae, 0xc0, 0x9b, 0x3c, 0xc3, 0x37, 0x2c, 0x8e, 0x8e, 0x2f, 0x92, 0x3b, 0x0b, 0x04, + 0xa5, 0x07, 0x5d, 0x48, 0xf6, 0x17, 0x0b, 0xf6, 0xbb, 0x38, 0xc4, 0x7e, 0xc2, 0xb0, 0x5c, 0xc0, + 0x10, 0x62, 0x0a, 0x56, 0xc7, 0xf3, 0x3d, 0xca, 0x99, 0xf4, 0xcf, 0x15, 0x74, 0x7e, 0x27, 0x72, + 0x77, 0x81, 0x7e, 0x3f, 0xb4, 0xdb, 0x10, 0xd1, 0x10, 0x53, 0x12, 0xde, 0x71, 0x9c, 0x10, 0xa2, + 0x08, 0x22, 0xf5, 0x0c, 0x9a, 0x8a, 0x20, 0x70, 0x20, 0xac, 0x2b, 0x97, 0x94, 0x95, 0x69, 0x53, + 0xac, 0x54, 0x1d, 0xcd, 0x90, 0xd4, 0x81, 0xfa, 0x04, 0xdb, 0xcd, 0xd0, 0xd4, 0x45, 0x54, 0x03, + 0xda, 0xb6, 0x30, 0xbf, 0xac, 0x5e, 0x61, 0x2c, 0x08, 0x68, 0x5b, 0x5c, 0xbf, 0xb1, 0xf6, 0xc9, + 0xcb, 0xc7, 0xab, 0xe2, 0xc6, 0x4f, 0x5f, 0x3e, 0x5e, 0x5d, 0xe2, 0x38, 0x47, 0xe0, 0xd1, 0xaf, + 0xa0, 0xe5, 0x11, 0xdb, 0x26, 0x44, 0x5d, 0x12, 0x44, 0xa0, 0xff, 0x59, 0x41, 0x5f, 0xdb, 0x89, + 0xdc, 0x0f, 0x71, 0x27, 0x02, 0xba, 0x49, 0x82, 0x47, 0x5e, 0xe8, 0xab, 0xf3, 0x68, 0x32, 0x20, + 0x81, 0x0d, 0x4c, 0x94, 0xaa, 0xc9, 0x17, 0x47, 0x22, 0x89, 0x7a, 0x01, 0x4d, 0x47, 0x9e, 0x1b, + 0x60, 0xda, 0x0b, 0xa1, 0x5e, 0x65, 0xdb, 0x03, 0xc2, 0xc6, 0x8d, 0x58, 0xce, 0xcc, 0x8d, 0xb1, + 0xb4, 0x67, 0xa4, 0xb4, 0x19, 0x98, 0xba, 0x86, 0xea, 0x79, 0x9a, 0x94, 0xeb, 0x99, 0x82, 0x66, + 0x98, 0xfc, 0x81, 0xf3, 0x80, 0xdc, 0xa5, 0xed, 0x52, 0xfb, 0x9c, 0x43, 0x27, 0x62, 0xc4, 0x0e, + 0x44, 0x54, 0x48, 0x74, 0x1c, 0x68, 0x7b, 0x0b, 0x22, 0xaa, 0xbe, 0x8b, 0xa6, 0xb0, 0x4f, 0x7a, + 0x01, 0x65, 0x72, 0xd4, 0xd6, 0xcf, 0x19, 0xc2, 0xef, 0x62, 0xef, 0x35, 0x84, 0xf7, 0x1a, 0x9b, + 0xc4, 0x0b, 0x9a, 0xd5, 0x2f, 0x9e, 0x2d, 0x1e, 0x33, 0x05, 0xbb, 0xfa, 0x6d, 0x84, 0x5a, 0xa1, + 0xe7, 0xb8, 0x60, 0x3d, 0x02, 0x2e, 0xe5, 0x18, 0x87, 0xa7, 0xf9, 0x91, 0xef, 0x00, 0x6c, 0xe8, + 0x39, 0x73, 0xab, 0x29, 0x73, 0x0b, 0x79, 0xf4, 0x33, 0x68, 0x3e, 0xbd, 0x96, 0x82, 0xff, 0x04, + 0xcd, 0xed, 0x44, 0xae, 0x09, 0x3f, 0xee, 0x41, 0x44, 0x9b, 0x98, 0xda, 0xed, 0x21, 0xc3, 0x29, + 0x05, 0x86, 0x9b, 0x47, 0x93, 0x0e, 0x04, 0xc4, 0x17, 0x3a, 0xe0, 0x8b, 0x8d, 0xeb, 0x85, 0xf6, + 0x38, 0x2d, 0xe1, 0xa4, 0x9f, 0xd1, 0xcf, 0xa1, 0xb3, 0x39, 0x92, 0x04, 0xf5, 0x2f, 0x85, 0xa1, + 0x12, 0x46, 0xe2, 0xa8, 0x8a, 0x9d, 0xec, 0x0a, 0x3a, 0x49, 0xc9, 0x1e, 0x04, 0x96, 0x4d, 0x02, + 0x1a, 0x62, 0x3b, 0x31, 0xca, 0x2c, 0xa3, 0x6e, 0x0a, 0xa2, 0x7a, 0x11, 0xc5, 0x4e, 0x65, 0xc5, + 0x9e, 0x03, 0xa1, 0x70, 0xb3, 0x69, 0xa0, 0xed, 0x5d, 0x46, 0x18, 0x92, 0xb8, 0x5a, 0x20, 0x71, + 0xc6, 0x13, 0x27, 0xf3, 0x9e, 0x78, 0x98, 0xe4, 0x69, 0x51, 0x84, 0xe4, 0x69, 0x92, 0x94, 0xfc, + 0xe7, 0x15, 0x26, 0xf9, 0x16, 0x74, 0x49, 0xe4, 0xd1, 0xcd, 0x0e, 0xf6, 0x7c, 0x16, 0x24, 0x7d, + 0x08, 0xa8, 0x95, 0x96, 0x1f, 0x31, 0xd2, 0x07, 0x4c, 0x09, 0x4b, 0x68, 0xa6, 0xd5, 0x21, 0xf6, + 0x9e, 0xd5, 0x06, 0xcf, 0x6d, 0x73, 0x15, 0x54, 0xcd, 0x1a, 0xa3, 0x7d, 0x97, 0x91, 0x0a, 0xf4, + 0x54, 0x29, 0xd2, 0xd3, 0x37, 0xa4, 0x0b, 0x33, 0x15, 0x34, 0x2f, 0xc6, 0xae, 0xf6, 0xcf, 0x67, + 0x8b, 0xa7, 0xb9, 0x33, 0x46, 0xce, 0x9e, 0xe1, 0x91, 0x86, 0x8f, 0x69, 0xdb, 0xd8, 0x0e, 0xa8, + 0x74, 0xe0, 0x6b, 0x68, 0x0e, 0x68, 0x1b, 0x42, 0xe8, 0xf9, 0x96, 0x88, 0x1a, 0xae, 0xa1, 0x93, + 0x09, 0x79, 0x97, 0x47, 0xcf, 0x35, 0x34, 0x27, 0x12, 0x73, 0x08, 0x36, 0x78, 0x7d, 0x08, 0xeb, + 0x53, 0x9c, 0x91, 0x93, 0x4d, 0x41, 0x1d, 0xb2, 0xc8, 0xf1, 0x02, 0x8b, 0xa8, 0xa8, 0xea, 0x60, + 0x8a, 0xeb, 0x27, 0xd8, 0x1e, 0xfb, 0xbd, 0xf1, 0xbd, 0x2f, 0x9f, 0xdc, 0x3c, 0x9f, 0x14, 0x28, + 0x1e, 0x33, 0x77, 0x05, 0x04, 0xa6, 0xcc, 0x43, 0xcc, 0x94, 0xd6, 0xbb, 0x30, 0x53, 0x9a, 0x24, + 0xcd, 0xf4, 0xd9, 0x04, 0x4b, 0x83, 0x1f, 0x79, 0xb4, 0xed, 0x84, 0x78, 0xff, 0xe8, 0xec, 0xb4, + 0x88, 0x6a, 0xad, 0xd8, 0x21, 0xc4, 0x1d, 0x15, 0x7e, 0x07, 0x23, 0x7d, 0x50, 0xe2, 0xf0, 0xd5, + 0x22, 0x43, 0xe6, 0xf5, 0x37, 0x39, 0xac, 0xbf, 0x8d, 0xf7, 0x5f, 0x47, 0x57, 0x83, 0xe4, 0x9a, + 0x11, 0x5e, 0x24, 0xd7, 0x0c, 0x4d, 0x6a, 0xeb, 0xc5, 0x04, 0x3a, 0xbd, 0x13, 0xb9, 0x77, 0xcd, + 0xcd, 0xf5, 0x5b, 0x5b, 0xd0, 0xed, 0x90, 0x03, 0x70, 0x8e, 0x4e, 0x65, 0x4b, 0x68, 0x46, 0xf8, + 0x14, 0xcf, 0x48, 0xdc, 0xb1, 0x6b, 0x9c, 0xb6, 0x15, 0x93, 0xc6, 0x55, 0x9a, 0x8a, 0xaa, 0x01, + 0xf6, 0x93, 0xe8, 0x66, 0xbf, 0x59, 0x1d, 0x38, 0xf0, 0x5b, 0xa4, 0x23, 0x1c, 0x55, 0xac, 0x54, + 0x0d, 0x9d, 0x70, 0xc0, 0xf6, 0x7c, 0xdc, 0x89, 0x98, 0x73, 0x56, 0x4d, 0xb9, 0x1e, 0x52, 0xfe, + 0x89, 0x02, 0xe5, 0xdf, 0x7f, 0x1d, 0xe5, 0x9f, 0x97, 0xca, 0x1f, 0xd6, 0xa5, 0xbe, 0x88, 0x2e, + 0x16, 0x6e, 0x48, 0x33, 0xfc, 0x14, 0xa9, 0x71, 0xda, 0xc1, 0x81, 0x0d, 0x9d, 0x41, 0xa1, 0x8b, + 0x75, 0x13, 0xe2, 0x20, 0xc2, 0x76, 0xdc, 0xa6, 0x59, 0x9e, 0x23, 0xac, 0x30, 0x9b, 0xa2, 0x6e, + 0x3b, 0xa9, 0x7a, 0x38, 0x91, 0xae, 0x87, 0x1b, 0x2b, 0xb9, 0xda, 0x53, 0x1f, 0xa4, 0xbc, 0xec, + 0x43, 0xfa, 0x05, 0xa4, 0x0d, 0x53, 0x25, 0xb8, 0xff, 0x28, 0x0c, 0xfe, 0x6e, 0xaf, 0xe5, 0x7b, + 0xb4, 0x89, 0x9d, 0xdd, 0x24, 0xb5, 0xde, 0xed, 0x7b, 0x0e, 0xc4, 0xae, 0xf0, 0x10, 0x1d, 0x8f, + 0x7a, 0xad, 0xb8, 0xf3, 0x62, 0x08, 0x6b, 0xeb, 0xf3, 0x06, 0xef, 0x25, 0x8d, 0xa4, 0x97, 0x34, + 0xee, 0x04, 0x07, 0xcd, 0x2b, 0x5f, 0x3e, 0xb9, 0xb9, 0x34, 0xdc, 0xac, 0x4a, 0xed, 0xb2, 0x94, + 0xef, 0x98, 0xc9, 0x5d, 0xd9, 0xbc, 0x3e, 0x91, 0xcb, 0xeb, 0x29, 0xb1, 0x2b, 0x19, 0xb1, 0x6f, + 0xe7, 0xc4, 0x5e, 0x1e, 0x94, 0xdc, 0x52, 0x09, 0xf4, 0x6b, 0xe8, 0xca, 0x48, 0x06, 0xa9, 0x8c, + 0xdf, 0x56, 0x58, 0xc0, 0xf0, 0x56, 0xe5, 0x61, 0xd7, 0xc1, 0xf4, 0x55, 0x02, 0xa6, 0xcf, 0x8e, + 0x09, 0x0e, 0x11, 0x30, 0x9c, 0x56, 0x1c, 0x53, 0x95, 0xe1, 0x98, 0xfa, 0x16, 0x3a, 0xee, 0x83, + 0xdf, 0x82, 0x30, 0xaa, 0x57, 0x2f, 0x55, 0x56, 0x6a, 0xeb, 0xcb, 0x46, 0x81, 0x4a, 0x9b, 0xac, + 0x03, 0xf9, 0x10, 0x77, 0x3c, 0x27, 0xf6, 0x50, 0x33, 0x39, 0xa3, 0x36, 0xd1, 0x6c, 0x08, 0xfb, + 0x38, 0x74, 0x2c, 0x51, 0x4d, 0x26, 0xc7, 0xa9, 0x26, 0x33, 0xfc, 0xcc, 0x1d, 0x5e, 0x53, 0x96, + 0x90, 0x58, 0x5b, 0x2c, 0x48, 0x45, 0xf8, 0xd5, 0x38, 0xed, 0x41, 0x4c, 0x1a, 0xa7, 0x48, 0x7c, + 0xd5, 0x38, 0x1b, 0x36, 0x81, 0x88, 0xb3, 0xe1, 0x0d, 0x69, 0xbd, 0xcf, 0x79, 0xf7, 0xc2, 0xf7, + 0xee, 0xb3, 0xc9, 0x41, 0x7d, 0x07, 0x4d, 0xe3, 0x1e, 0x6d, 0x93, 0xd0, 0xa3, 0x07, 0xbc, 0xa1, + 0x6a, 0xd6, 0xff, 0xf6, 0xe4, 0xe6, 0xbc, 0x68, 0xf2, 0x44, 0xbb, 0xbb, 0x4b, 0x43, 0x2f, 0x70, + 0xcd, 0x01, 0xab, 0xfa, 0x4d, 0x34, 0xc5, 0x67, 0x0f, 0x66, 0xc8, 0xda, 0xba, 0x56, 0x64, 0x07, + 0xfe, 0x46, 0xd2, 0x54, 0x72, 0x7e, 0x1e, 0x98, 0x83, 0x9b, 0xb2, 0x75, 0x2e, 0x8d, 0x4d, 0xd4, + 0xb9, 0x34, 0x49, 0x8a, 0xf2, 0x3b, 0x1e, 0x95, 0xcd, 0x0e, 0xb6, 0xf7, 0x3a, 0x5e, 0x44, 0x13, + 0xd5, 0x65, 0xe7, 0x18, 0xde, 0x55, 0x25, 0x7d, 0x32, 0x6f, 0xa9, 0x1a, 0xe8, 0xad, 0x56, 0x72, + 0x2a, 0xe9, 0xef, 0x21, 0x96, 0xa2, 0xb2, 0x32, 0x6d, 0xaa, 0x72, 0x4b, 0x5e, 0x94, 0x44, 0x14, + 0x3b, 0x9d, 0x8d, 0xa8, 0xf2, 0xd7, 0x45, 0x44, 0x95, 0x33, 0x48, 0x41, 0x7e, 0xad, 0xb0, 0xec, + 0x63, 0x42, 0x9f, 0xec, 0x41, 0xc2, 0x26, 0xcf, 0x1d, 0x9d, 0x14, 0xb7, 0x72, 0x52, 0x5c, 0x4a, + 0xf5, 0xbe, 0x85, 0x4f, 0xeb, 0x97, 0x91, 0x5e, 0xbe, 0x2b, 0xf1, 0xff, 0xa9, 0xc2, 0x93, 0x77, + 0x08, 0x98, 0x82, 0x89, 0x29, 0xdc, 0x8b, 0x67, 0xcd, 0xd7, 0x76, 0xab, 0x65, 0xc4, 0x4b, 0x9f, + 0x9c, 0xbc, 0xc4, 0x70, 0xc6, 0x88, 0xc9, 0xec, 0x25, 0xab, 0xa6, 0x2c, 0x74, 0x71, 0xa6, 0x98, + 0x15, 0x55, 0x73, 0x2b, 0xa9, 0x76, 0x97, 0x13, 0xb6, 0x6e, 0xe8, 0xd9, 0x10, 0x17, 0x90, 0x6a, + 0xea, 0xb2, 0xfb, 0x31, 0x71, 0xdb, 0x51, 0xb7, 0xd1, 0xc9, 0xc1, 0x8c, 0x6c, 0xf5, 0x22, 0x47, + 0xe4, 0x84, 0x65, 0x91, 0x13, 0xce, 0x0f, 0xe7, 0x84, 0x7b, 0xe0, 0x62, 0xfb, 0x60, 0x0b, 0x6c, + 0x73, 0x26, 0x4c, 0x24, 0x7e, 0x18, 0x39, 0xea, 0x0e, 0x7a, 0x0b, 0xb7, 0x22, 0xd2, 0xe9, 0x51, + 0xb0, 0x7c, 0x2f, 0xa0, 0xfc, 0x4e, 0x9e, 0x20, 0x0e, 0xcb, 0x31, 0xa7, 0x92, 0x93, 0x3b, 0x5e, + 0x40, 0xb9, 0x0e, 0x57, 0xd1, 0xa9, 0x14, 0xb2, 0x7d, 0x2f, 0x70, 0xc8, 0xbe, 0x28, 0xe9, 0x73, + 0xf2, 0xdd, 0x8f, 0x18, 0x99, 0xb7, 0xf9, 0xd9, 0xa0, 0x4a, 0x15, 0xbc, 0xac, 0x71, 0x92, 0x82, + 0x97, 0xa5, 0x4a, 0x8b, 0x3e, 0x9d, 0x60, 0x16, 0xe5, 0x61, 0xf7, 0x86, 0x2c, 0x7a, 0x1d, 0xa9, + 0x01, 0xec, 0x5b, 0x39, 0x73, 0xf1, 0xca, 0x36, 0x17, 0xc0, 0xfe, 0x83, 0xb4, 0xc5, 0xee, 0x73, + 0xe6, 0x9c, 0xd5, 0xaa, 0xe3, 0x5b, 0x2d, 0xbe, 0xd1, 0x4c, 0x1b, 0x6e, 0x0d, 0x9d, 0xce, 0xdd, + 0x28, 0xb4, 0x3d, 0xc9, 0xb4, 0xad, 0xa6, 0xf9, 0xc7, 0x51, 0x78, 0x4e, 0x77, 0x42, 0xe1, 0x39, + 0xaa, 0x54, 0xf8, 0xef, 0x15, 0xa6, 0x70, 0x13, 0x7c, 0xd2, 0x7f, 0x43, 0x0a, 0x1f, 0x0d, 0x3f, + 0x87, 0x44, 0xc0, 0xcf, 0x51, 0x13, 0xf8, 0xeb, 0xff, 0x53, 0x51, 0x65, 0x27, 0x72, 0xd5, 0xcf, + 0x14, 0x34, 0x9b, 0xfd, 0xfc, 0x72, 0xb9, 0xa8, 0x26, 0xe4, 0xbf, 0x74, 0x68, 0x37, 0xc6, 0xe1, + 0x92, 0xca, 0x5a, 0xfd, 0xe4, 0xef, 0xff, 0xfd, 0xd5, 0xc4, 0x65, 0x5d, 0x6f, 0x14, 0x7c, 0xec, + 0x12, 0x0d, 0x86, 0x2d, 0xde, 0xff, 0x58, 0x41, 0xd3, 0x83, 0x7e, 0xf2, 0x52, 0xc9, 0x3b, 0x92, + 0x43, 0x5b, 0x39, 0x8c, 0x43, 0xa2, 0xb8, 0xc6, 0x50, 0x2c, 0xe9, 0x8b, 0x45, 0x28, 0xe2, 0xe6, + 0xcb, 0xa2, 0xc4, 0x02, 0xda, 0x56, 0x7f, 0xa1, 0xa0, 0x99, 0xcc, 0x37, 0x8c, 0xe5, 0x92, 0x37, + 0xd2, 0x4c, 0xda, 0xf5, 0x31, 0x98, 0x24, 0x96, 0xb7, 0x19, 0x96, 0x65, 0x7d, 0xa9, 0x08, 0x4b, + 0xc8, 0x4f, 0x58, 0x6c, 0x50, 0x63, 0x68, 0x32, 0xdf, 0x2e, 0xca, 0xd0, 0xa4, 0x99, 0x4a, 0xd1, + 0x14, 0x7e, 0x27, 0x18, 0x89, 0x46, 0x18, 0x26, 0x85, 0x26, 0xf3, 0x3d, 0xa1, 0x0c, 0x4d, 0x9a, + 0xa9, 0x14, 0x4d, 0xe1, 0x38, 0x3c, 0x12, 0x8d, 0xc3, 0x4f, 0x58, 0x36, 0x7b, 0x3c, 0x76, 0xdf, + 0xec, 0xd8, 0x5c, 0xe6, 0xbe, 0x19, 0xae, 0x52, 0xf7, 0x2d, 0x9e, 0x38, 0x47, 0xba, 0xef, 0xbe, + 0x38, 0x22, 0x10, 0xfd, 0x41, 0x41, 0xa7, 0xd2, 0xdd, 0x1c, 0x47, 0xf5, 0xf6, 0xc8, 0x70, 0x49, + 0xf7, 0x7d, 0xda, 0xda, 0xd8, 0xac, 0x12, 0xdf, 0x2d, 0x86, 0x6f, 0x55, 0x5f, 0x19, 0x11, 0x5e, + 0x3d, 0x7e, 0x50, 0xa0, 0xfc, 0xa3, 0x82, 0xd4, 0x82, 0x01, 0xba, 0x0c, 0xe6, 0x30, 0x6b, 0x29, + 0xcc, 0x11, 0x13, 0xe3, 0x48, 0x98, 0x10, 0xda, 0xeb, 0xb7, 0x2c, 0x47, 0x1c, 0x14, 0x30, 0xff, + 0xa2, 0xa0, 0x7a, 0xe9, 0x37, 0xef, 0x46, 0x69, 0xe0, 0x17, 0x1f, 0xd0, 0xde, 0x7d, 0xc5, 0x03, + 0x12, 0xf8, 0xd7, 0x19, 0x70, 0x43, 0xbf, 0x51, 0x9c, 0x38, 0xa8, 0x95, 0xee, 0xf8, 0x93, 0x0c, + 0xae, 0xfe, 0x46, 0x41, 0x73, 0xf9, 0xf1, 0xf8, 0x6a, 0x59, 0x54, 0x66, 0xf9, 0x34, 0x63, 0x3c, + 0x3e, 0x89, 0xd0, 0x60, 0x08, 0x57, 0xf4, 0xab, 0x85, 0x01, 0xcc, 0x0e, 0x59, 0xe9, 0x0c, 0xf7, + 0x57, 0x05, 0x69, 0x23, 0x86, 0xe3, 0x32, 0xe3, 0x96, 0x1f, 0xd1, 0xde, 0x7b, 0xe5, 0x23, 0x12, + 0xfc, 0x7b, 0x0c, 0xfc, 0x6d, 0x7d, 0xad, 0x50, 0xbd, 0xec, 0xbc, 0xd5, 0xc2, 0x8e, 0x25, 0xe7, + 0x68, 0x0b, 0x12, 0xa0, 0x3f, 0x44, 0x33, 0x99, 0xc1, 0xa8, 0x2c, 0x19, 0xa5, 0x99, 0x4a, 0x93, + 0x51, 0xd1, 0xcc, 0xa2, 0x7e, 0xaa, 0x20, 0x6d, 0xc4, 0xc0, 0x52, 0xa6, 0xa9, 0xf2, 0x23, 0xa5, + 0x9a, 0x3a, 0x7c, 0xee, 0x50, 0x7f, 0xa6, 0xa0, 0xb3, 0x65, 0x43, 0x87, 0x51, 0x5a, 0x7e, 0x0a, + 0xf9, 0xb5, 0x77, 0x5e, 0x8d, 0x5f, 0x62, 0xf0, 0xd0, 0x5c, 0x7e, 0x6e, 0x28, 0xf5, 0xea, 0x2c, + 0x5f, 0xb9, 0x57, 0x17, 0x37, 0xb5, 0xf1, 0x53, 0xf9, 0x86, 0xf6, 0xea, 0x48, 0xdb, 0x1d, 0xfe, + 0x54, 0x49, 0x3b, 0x17, 0x3f, 0x95, 0x6f, 0xe5, 0xae, 0x96, 0x2a, 0x28, 0xc3, 0xa7, 0x19, 0xe3, + 0xf1, 0x25, 0x4f, 0x69, 0x93, 0x1f, 0xbf, 0x7c, 0xbc, 0xaa, 0x34, 0xe1, 0x8b, 0xe7, 0x0b, 0xca, + 0xd3, 0xe7, 0x0b, 0xca, 0xbf, 0x9f, 0x2f, 0x28, 0xbf, 0x7c, 0xb1, 0x70, 0xec, 0xe9, 0x8b, 0x85, + 0x63, 0xff, 0x78, 0xb1, 0x70, 0xec, 0x07, 0xef, 0xbb, 0x1e, 0x6d, 0xf7, 0x5a, 0x86, 0x4d, 0xfc, + 0xc6, 0x76, 0x72, 0xf5, 0x3d, 0xdc, 0x8a, 0x06, 0xf1, 0x71, 0xd3, 0x26, 0x21, 0xa4, 0x97, 0x6d, + 0xec, 0x05, 0x0d, 0x9f, 0x38, 0xbd, 0x0e, 0x44, 0x22, 0x78, 0xd8, 0x7f, 0x21, 0x5b, 0x53, 0xec, + 0x73, 0xd6, 0xed, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xaf, 0x2d, 0x3d, 0x67, 0x91, 0x1d, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/chain/peggy/types/types.go b/chain/peggy/types/types.go index c0d814ed..d0bc166f 100644 --- a/chain/peggy/types/types.go +++ b/chain/peggy/types/types.go @@ -64,6 +64,8 @@ func (b BridgeValidators) Sort() { }) } +var PowerCeiling = sdkmath.LegacyNewDecFromInt(sdkmath.NewIntFromUint64(uint64(math.MaxUint32))) + // PowerDiff returns the difference in power between two bridge validator sets // note this is Gravity bridge power *not* Cosmos voting power. Cosmos voting // power is based on the absolute number of tokens in the staking pool at any given @@ -78,7 +80,7 @@ func (b BridgeValidators) Sort() { // if the total on chain voting power increases by 1% due to inflation, we shouldn't have to generate a new validator // set, after all the validators retained their relative percentages during inflation and normalized Gravity bridge power // shows no difference. -func (b BridgeValidators) PowerDiff(c BridgeValidators) float64 { +func (b BridgeValidators) PowerDiff(c BridgeValidators) sdkmath.LegacyDec { powers := map[string]int64{} // loop over b and initialize the map with their powers for _, bv := range b { @@ -95,13 +97,13 @@ func (b BridgeValidators) PowerDiff(c BridgeValidators) float64 { } } - var delta float64 - for _, v := range powers { + delta := sdkmath.LegacyZeroDec() + for _, power := range powers { // NOTE: we care about the absolute value of the changes - delta += math.Abs(float64(v)) + delta = delta.Add(sdkmath.LegacyNewDec(power).Abs()) } - return math.Abs(delta / float64(math.MaxUint32)) + return delta.Quo(PowerCeiling) // return diff in percentages } // TotalPower returns the total power in the bridge validator set diff --git a/chain/peggy/types/types.pb.go b/chain/peggy/types/types.pb.go index f164779c..ce717b3d 100644 --- a/chain/peggy/types/types.pb.go +++ b/chain/peggy/types/types.pb.go @@ -6,6 +6,7 @@ package types import ( cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" + _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -325,38 +326,40 @@ func init() { func init() { proto.RegisterFile("injective/peggy/v1/types.proto", fileDescriptor_b641943ad411b503) } var fileDescriptor_b641943ad411b503 = []byte{ - // 490 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x53, 0xcf, 0x6f, 0xd3, 0x30, - 0x14, 0x6e, 0xf6, 0xa3, 0x68, 0xde, 0x60, 0xe0, 0x75, 0x28, 0x42, 0x22, 0x1d, 0xe5, 0x52, 0x0e, - 0x24, 0x5d, 0xb9, 0x21, 0x71, 0x58, 0x46, 0x25, 0x26, 0x26, 0x90, 0xa2, 0x69, 0x07, 0x2e, 0x91, - 0x93, 0x3c, 0x25, 0xa1, 0xb1, 0x5d, 0xd9, 0x6e, 0xa6, 0xfd, 0x01, 0xdc, 0xf9, 0xb3, 0x76, 0xdc, - 0x11, 0x21, 0x34, 0xa1, 0xf6, 0x1f, 0x41, 0xb6, 0x93, 0xaa, 0x30, 0x6e, 0xf9, 0xbe, 0xe7, 0xef, - 0x7d, 0x5f, 0x9e, 0x9f, 0x91, 0x57, 0xb2, 0xaf, 0x90, 0xaa, 0xb2, 0x86, 0x60, 0x06, 0x79, 0x7e, - 0x1d, 0xd4, 0xc7, 0x81, 0xba, 0x9e, 0x81, 0xf4, 0x67, 0x82, 0x2b, 0x8e, 0xf1, 0xaa, 0xee, 0x9b, - 0xba, 0x5f, 0x1f, 0x3f, 0xeb, 0xe5, 0x3c, 0xe7, 0xa6, 0x1c, 0xe8, 0x2f, 0x7b, 0x72, 0x10, 0xa1, - 0xfd, 0x50, 0x94, 0x59, 0x0e, 0x97, 0xa4, 0x2a, 0x33, 0xa2, 0xb8, 0xc0, 0x3d, 0xb4, 0x3d, 0xe3, - 0x57, 0x20, 0x5c, 0xe7, 0xc8, 0x19, 0x6e, 0x45, 0x16, 0xe0, 0x57, 0xe8, 0x31, 0xa8, 0x02, 0x04, - 0xcc, 0x69, 0x4c, 0xb2, 0x4c, 0x80, 0x94, 0xee, 0xc6, 0x91, 0x33, 0xdc, 0x89, 0xf6, 0x5b, 0xfe, - 0xc4, 0xd2, 0x83, 0x5f, 0x0e, 0xea, 0x5e, 0x92, 0x4a, 0x82, 0xd2, 0xbd, 0x18, 0x67, 0x29, 0xb4, - 0xbd, 0x0c, 0xc0, 0xef, 0xd0, 0x03, 0x0a, 0x34, 0x01, 0xa1, 0x5b, 0x6c, 0x0e, 0x77, 0xc7, 0x2f, - 0xfd, 0xfb, 0x81, 0xfd, 0x7f, 0x72, 0x45, 0xad, 0x06, 0x3f, 0x45, 0xdd, 0x02, 0xca, 0xbc, 0x50, - 0xee, 0xa6, 0xe9, 0xda, 0x20, 0x1c, 0xa2, 0x87, 0x02, 0xae, 0x88, 0xc8, 0x62, 0x42, 0xf9, 0x9c, - 0x29, 0x77, 0x4b, 0xe7, 0x0b, 0x9f, 0xdf, 0xdc, 0xf5, 0x3b, 0x3f, 0xef, 0xfa, 0x87, 0x29, 0x97, - 0x94, 0x4b, 0x99, 0x4d, 0xfd, 0x92, 0x07, 0x94, 0xa8, 0xc2, 0x3f, 0x63, 0x2a, 0xda, 0xb3, 0x9a, - 0x13, 0x23, 0xc1, 0x2f, 0x50, 0x83, 0x63, 0xc5, 0xa7, 0xc0, 0xdc, 0x6d, 0xf3, 0x8b, 0xbb, 0x96, - 0xbb, 0xd0, 0xd4, 0xe0, 0x9b, 0x83, 0xfa, 0xe7, 0x44, 0xaa, 0xcf, 0x89, 0x04, 0x51, 0x43, 0x36, - 0x69, 0x7e, 0x3f, 0xac, 0x78, 0x3a, 0xfd, 0x60, 0xa3, 0xf8, 0xe8, 0xc0, 0xba, 0xc5, 0x89, 0x66, - 0xe3, 0x26, 0xaf, 0x9d, 0xc2, 0x13, 0x5b, 0x5a, 0x3f, 0x3f, 0x46, 0x87, 0xab, 0xe9, 0xfe, 0xa5, - 0xd8, 0x30, 0x8a, 0x03, 0xb8, 0xef, 0x31, 0xa8, 0xd1, 0x23, 0x1d, 0xe3, 0xb4, 0x22, 0x25, 0x9d, - 0xd4, 0xc0, 0x14, 0x1e, 0xa1, 0xde, 0xaa, 0x0b, 0x68, 0x26, 0x5e, 0x1f, 0x3e, 0x6e, 0x6b, 0xe6, - 0xf0, 0x27, 0x73, 0x13, 0xeb, 0xbe, 0x56, 0xf1, 0x7f, 0x5f, 0x23, 0x69, 0x7c, 0xdf, 0xa2, 0xbd, - 0x49, 0x74, 0x3a, 0x1e, 0x5d, 0xf0, 0xf7, 0xc0, 0x38, 0xd5, 0x77, 0x0c, 0x22, 0x1d, 0x8f, 0x8c, - 0xcd, 0x4e, 0x64, 0x81, 0x66, 0x33, 0x5d, 0x6e, 0x96, 0xc4, 0x82, 0x10, 0x6e, 0x16, 0x9e, 0x73, - 0xbb, 0xf0, 0x9c, 0xdf, 0x0b, 0xcf, 0xf9, 0xbe, 0xf4, 0x3a, 0xb7, 0x4b, 0xaf, 0xf3, 0x63, 0xe9, - 0x75, 0xbe, 0x7c, 0xcc, 0x4b, 0x55, 0xcc, 0x13, 0x3f, 0xe5, 0x34, 0x38, 0x6b, 0x97, 0xe1, 0x9c, - 0x24, 0x32, 0x58, 0xad, 0xc6, 0xeb, 0x94, 0x0b, 0x58, 0x87, 0x05, 0x29, 0x59, 0x40, 0x79, 0x36, - 0xaf, 0x40, 0x36, 0x0f, 0xc1, 0xbc, 0x82, 0xa4, 0x6b, 0x96, 0xfb, 0xcd, 0x9f, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xb5, 0x74, 0x5d, 0x7b, 0x28, 0x03, 0x00, 0x00, + // 517 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x53, 0x41, 0x6f, 0xd3, 0x30, + 0x14, 0x6e, 0xba, 0xad, 0x68, 0xde, 0x60, 0x90, 0x75, 0xa8, 0x4c, 0x22, 0xdd, 0x8a, 0x90, 0xca, + 0x61, 0x49, 0x57, 0x6e, 0x93, 0x38, 0xac, 0xa3, 0x12, 0x13, 0x13, 0x48, 0x61, 0xda, 0x81, 0x4b, + 0xe4, 0x24, 0x4f, 0x89, 0x69, 0x6d, 0x57, 0xb6, 0x9b, 0x69, 0x67, 0xc4, 0x9d, 0x1f, 0xc3, 0x8f, + 0x98, 0x38, 0xed, 0x88, 0x38, 0x4c, 0xa8, 0xfd, 0x23, 0xc8, 0x76, 0x52, 0x15, 0xb6, 0x5b, 0xbe, + 0xef, 0x7b, 0xdf, 0x7b, 0xcf, 0xfe, 0x62, 0xe4, 0x11, 0xf6, 0x05, 0x12, 0x45, 0x0a, 0x08, 0x26, + 0x90, 0x65, 0x57, 0x41, 0x71, 0x18, 0xa8, 0xab, 0x09, 0x48, 0x7f, 0x22, 0xb8, 0xe2, 0xae, 0xbb, + 0xd0, 0x7d, 0xa3, 0xfb, 0xc5, 0xe1, 0xee, 0xb3, 0x84, 0x4b, 0xca, 0x65, 0x64, 0x2a, 0x02, 0x0b, + 0x6c, 0xf9, 0x6e, 0x33, 0xe3, 0x19, 0xb7, 0xbc, 0xfe, 0xb2, 0x6c, 0x27, 0x44, 0x5b, 0x03, 0x41, + 0xd2, 0x0c, 0x2e, 0xf0, 0x98, 0xa4, 0x58, 0x71, 0xe1, 0x36, 0xd1, 0xda, 0x84, 0x5f, 0x82, 0x68, + 0x39, 0x7b, 0x4e, 0x77, 0x35, 0xb4, 0xc0, 0x7d, 0x85, 0x1e, 0x83, 0xca, 0x41, 0xc0, 0x94, 0x46, + 0x38, 0x4d, 0x05, 0x48, 0xd9, 0xaa, 0xef, 0x39, 0xdd, 0xf5, 0x70, 0xab, 0xe2, 0x8f, 0x2d, 0xdd, + 0xf9, 0x5a, 0x47, 0x8d, 0x0b, 0x3c, 0x96, 0xa0, 0x74, 0x2f, 0xc6, 0x59, 0x02, 0x55, 0x2f, 0x03, + 0xdc, 0x37, 0xe8, 0x01, 0x05, 0x1a, 0x83, 0xd0, 0x2d, 0x56, 0xba, 0x1b, 0xfd, 0x17, 0xfe, 0xdd, + 0xb3, 0xf8, 0xff, 0xed, 0x15, 0x56, 0x1e, 0xf7, 0x29, 0x6a, 0xe4, 0x40, 0xb2, 0x5c, 0xb5, 0x56, + 0x4c, 0xd7, 0x12, 0xb9, 0x03, 0xf4, 0x50, 0xc0, 0x25, 0x16, 0x69, 0x84, 0x29, 0x9f, 0x32, 0xd5, + 0x5a, 0xd5, 0xfb, 0x0d, 0x9e, 0x5f, 0xdf, 0xb6, 0x6b, 0xbf, 0x6f, 0xdb, 0x3b, 0xf6, 0x3a, 0x64, + 0x3a, 0xf2, 0x09, 0x0f, 0x28, 0x56, 0xb9, 0x7f, 0xca, 0x54, 0xb8, 0x69, 0x3d, 0xc7, 0xc6, 0xe2, + 0xee, 0xa3, 0x12, 0x47, 0x8a, 0x8f, 0x80, 0xb5, 0xd6, 0xcc, 0x11, 0x37, 0x2c, 0x77, 0xae, 0xa9, + 0xa3, 0x97, 0x3f, 0x7f, 0x1c, 0xec, 0xdf, 0xb3, 0xef, 0xb0, 0xbc, 0x86, 0x4f, 0x24, 0x63, 0x90, + 0x76, 0xbe, 0x39, 0xa8, 0x7d, 0x86, 0xa5, 0xfa, 0x18, 0x4b, 0x10, 0x05, 0xa4, 0x95, 0x3c, 0x18, + 0xf3, 0x64, 0xf4, 0xce, 0x6e, 0xec, 0xa3, 0xed, 0x32, 0xb0, 0x58, 0xb3, 0x51, 0x79, 0x2c, 0x7b, + 0x59, 0x4f, 0xac, 0xb4, 0x5c, 0xdf, 0x47, 0x3b, 0x8b, 0x10, 0xfe, 0x71, 0xd4, 0x8d, 0x63, 0x1b, + 0xee, 0xce, 0xe8, 0x14, 0xe8, 0x91, 0x5e, 0xe3, 0x64, 0x8c, 0x09, 0x1d, 0x16, 0xc0, 0x94, 0xdb, + 0x43, 0xcd, 0x45, 0x17, 0xd0, 0x4c, 0xb4, 0x9c, 0x91, 0x5b, 0x69, 0xa6, 0xf8, 0x83, 0x09, 0x6c, + 0x79, 0xae, 0x75, 0xdc, 0x3f, 0xd7, 0x58, 0xca, 0xb9, 0x47, 0x68, 0x73, 0x18, 0x9e, 0xf4, 0x7b, + 0xe7, 0xfc, 0x2d, 0x30, 0x4e, 0xf5, 0xaf, 0x00, 0x22, 0xe9, 0xf7, 0xcc, 0x98, 0xf5, 0xd0, 0x02, + 0xcd, 0xa6, 0x5a, 0x2e, 0xff, 0x25, 0x0b, 0x06, 0x70, 0x3d, 0xf3, 0x9c, 0x9b, 0x99, 0xe7, 0xfc, + 0x99, 0x79, 0xce, 0xf7, 0xb9, 0x57, 0xbb, 0x99, 0x7b, 0xb5, 0x5f, 0x73, 0xaf, 0xf6, 0xf9, 0x7d, + 0x46, 0x54, 0x3e, 0x8d, 0xfd, 0x84, 0xd3, 0xe0, 0xb4, 0xca, 0xe0, 0x0c, 0xc7, 0x32, 0x58, 0x24, + 0x72, 0x90, 0x70, 0x01, 0xcb, 0x30, 0xc7, 0x84, 0x05, 0x94, 0xa7, 0xd3, 0x31, 0xc8, 0xf2, 0x29, + 0x99, 0x77, 0x14, 0x37, 0xcc, 0x1b, 0x78, 0xfd, 0x37, 0x00, 0x00, 0xff, 0xff, 0x04, 0x73, 0x17, + 0xf0, 0x6a, 0x03, 0x00, 0x00, } func (m *BridgeValidator) Marshal() (dAtA []byte, err error) { diff --git a/chain/permissions/types/params.pb.go b/chain/permissions/types/params.pb.go index 977a105d..cfe26779 100644 --- a/chain/permissions/types/params.pb.go +++ b/chain/permissions/types/params.pb.go @@ -28,8 +28,10 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // Params defines the parameters for the permissions module. type Params struct { - // Max amount of gas allowed for wasm hook queries - WasmHookQueryMaxGas uint64 `protobuf:"varint,1,opt,name=wasm_hook_query_max_gas,json=wasmHookQueryMaxGas,proto3" json:"wasm_hook_query_max_gas,omitempty"` + // Max amount of gas allowed for contract hook queries + ContractHookMaxGas uint64 `protobuf:"varint,1,opt,name=contract_hook_max_gas,json=contractHookMaxGas,proto3" json:"contract_hook_max_gas,omitempty"` + // EVM addresses of contracts that will not bypass module-to-module transfers + EnforcedRestrictionsContracts []string `protobuf:"bytes,2,rep,name=enforced_restrictions_contracts,json=enforcedRestrictionsContracts,proto3" json:"enforced_restrictions_contracts,omitempty"` } func (m *Params) Reset() { *m = Params{} } @@ -65,13 +67,20 @@ func (m *Params) XXX_DiscardUnknown() { var xxx_messageInfo_Params proto.InternalMessageInfo -func (m *Params) GetWasmHookQueryMaxGas() uint64 { +func (m *Params) GetContractHookMaxGas() uint64 { if m != nil { - return m.WasmHookQueryMaxGas + return m.ContractHookMaxGas } return 0 } +func (m *Params) GetEnforcedRestrictionsContracts() []string { + if m != nil { + return m.EnforcedRestrictionsContracts + } + return nil +} + func init() { proto.RegisterType((*Params)(nil), "injective.permissions.v1beta1.Params") } @@ -81,25 +90,27 @@ func init() { } var fileDescriptor_4a7ea0496163621f = []byte{ - // 287 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x90, 0x31, 0x4e, 0xc3, 0x30, - 0x14, 0x86, 0x6b, 0x09, 0x75, 0xc8, 0x46, 0x40, 0x02, 0x8a, 0x30, 0x88, 0x09, 0x55, 0x22, 0x56, - 0x05, 0x13, 0x23, 0x0b, 0x20, 0x81, 0x44, 0x19, 0x61, 0x88, 0x5e, 0x82, 0x95, 0x98, 0xe0, 0xbc, - 0x90, 0xe7, 0x94, 0xf6, 0x0a, 0x4c, 0x1c, 0x81, 0x23, 0x70, 0x0c, 0xc6, 0x8e, 0x8c, 0x28, 0x19, - 0xe0, 0x18, 0x28, 0x71, 0x88, 0xc2, 0x62, 0xf9, 0xf7, 0xf7, 0xdb, 0x7e, 0xff, 0xef, 0x8c, 0x55, - 0xfa, 0x20, 0x43, 0xa3, 0x66, 0x52, 0x64, 0x32, 0xd7, 0x8a, 0x48, 0x61, 0x4a, 0x62, 0x36, 0x09, - 0xa4, 0x81, 0x89, 0xc8, 0x20, 0x07, 0x4d, 0x5e, 0x96, 0xa3, 0x41, 0x77, 0xa7, 0xf3, 0x7a, 0x3d, - 0xaf, 0xd7, 0x7a, 0x47, 0xeb, 0x11, 0x46, 0xd8, 0x38, 0x45, 0xbd, 0xb3, 0x97, 0x46, 0x5b, 0x21, - 0x92, 0x46, 0xf2, 0x2d, 0xb0, 0xa2, 0x45, 0xdc, 0x2a, 0x11, 0x00, 0xc9, 0xee, 0xc7, 0x10, 0x55, - 0xda, 0xf2, 0x55, 0xd0, 0x2a, 0x45, 0xd1, 0xac, 0xf6, 0x68, 0xff, 0xce, 0x19, 0x5e, 0x37, 0x23, - 0xb9, 0xc7, 0xce, 0xc6, 0x33, 0x90, 0xf6, 0x63, 0xc4, 0xc4, 0x7f, 0x2a, 0x64, 0xbe, 0xf0, 0x35, - 0xcc, 0xfd, 0x08, 0x68, 0x93, 0xed, 0xb1, 0x83, 0x95, 0x9b, 0xb5, 0x1a, 0x9f, 0x23, 0x26, 0xd3, - 0x1a, 0x5e, 0xc1, 0xfc, 0x0c, 0xe8, 0x64, 0xfb, 0xe7, 0x6d, 0x97, 0xbd, 0x7c, 0xbf, 0x8f, 0xdd, - 0x7e, 0x5a, 0xfb, 0xe4, 0x69, 0xf2, 0x51, 0x72, 0xb6, 0x2c, 0x39, 0xfb, 0x2a, 0x39, 0x7b, 0xad, - 0xf8, 0x60, 0x59, 0xf1, 0xc1, 0x67, 0xc5, 0x07, 0xb7, 0xd3, 0x48, 0x99, 0xb8, 0x08, 0xbc, 0x10, - 0xb5, 0xb8, 0xf8, 0x2b, 0xe1, 0x12, 0x02, 0x12, 0x5d, 0x25, 0x87, 0x21, 0xe6, 0xb2, 0x2f, 0x63, - 0x50, 0xa9, 0xd0, 0x78, 0x5f, 0x3c, 0x4a, 0xfa, 0xd7, 0xad, 0x59, 0x64, 0x92, 0x82, 0x61, 0x13, - 0xe8, 0xe8, 0x37, 0x00, 0x00, 0xff, 0xff, 0xc7, 0x42, 0x3f, 0x45, 0x81, 0x01, 0x00, 0x00, + // 318 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x91, 0x4f, 0x4a, 0x03, 0x31, + 0x18, 0xc5, 0x1b, 0x95, 0x82, 0xb3, 0x73, 0x50, 0xa8, 0x95, 0xa6, 0xc5, 0x55, 0x29, 0x38, 0xa1, + 0xb8, 0x73, 0xa9, 0xe0, 0x1f, 0x50, 0xd0, 0x2e, 0xdd, 0x0c, 0x99, 0x34, 0x4e, 0x63, 0x4d, 0xbe, + 0x21, 0x5f, 0x5a, 0xea, 0x15, 0x5c, 0x79, 0x84, 0x1e, 0xc1, 0x63, 0xb8, 0xec, 0xd2, 0xa5, 0xb4, + 0x0b, 0x3d, 0x86, 0x74, 0xd2, 0x19, 0xc6, 0x4d, 0xc8, 0xcb, 0xfb, 0x85, 0xbc, 0xbc, 0x2f, 0xe8, + 0x29, 0xf3, 0x2c, 0x85, 0x53, 0x53, 0xc9, 0x32, 0x69, 0xb5, 0x42, 0x54, 0x60, 0x90, 0x4d, 0xfb, + 0x89, 0x74, 0xbc, 0xcf, 0x32, 0x6e, 0xb9, 0xc6, 0x28, 0xb3, 0xe0, 0x20, 0x6c, 0x95, 0x6c, 0x54, + 0x61, 0xa3, 0x0d, 0xdb, 0xdc, 0x4f, 0x21, 0x85, 0x9c, 0x64, 0xeb, 0x9d, 0xbf, 0xd4, 0x3c, 0x14, + 0x80, 0x1a, 0x30, 0xf6, 0x86, 0x17, 0x1b, 0x8b, 0x7a, 0xc5, 0x12, 0x8e, 0xb2, 0x7c, 0x51, 0x80, + 0x32, 0x1b, 0x7f, 0x8f, 0x6b, 0x65, 0x80, 0xe5, 0xab, 0x3f, 0x3a, 0x9e, 0x93, 0xa0, 0x7e, 0x9f, + 0x67, 0x0a, 0xfb, 0xc1, 0x81, 0x00, 0xe3, 0x2c, 0x17, 0x2e, 0x1e, 0x01, 0x8c, 0x63, 0xcd, 0x67, + 0x71, 0xca, 0xb1, 0x41, 0x3a, 0xa4, 0xbb, 0x33, 0x08, 0x0b, 0xf3, 0x1a, 0x60, 0x7c, 0xc7, 0x67, + 0x57, 0x1c, 0xc3, 0xcb, 0xa0, 0x2d, 0xcd, 0x13, 0x58, 0x21, 0x87, 0xb1, 0x95, 0xe8, 0xac, 0x12, + 0x6e, 0xfd, 0x85, 0xb8, 0x60, 0xb1, 0xb1, 0xd5, 0xd9, 0xee, 0xee, 0x0e, 0x5a, 0x05, 0x36, 0xa8, + 0x50, 0x17, 0x05, 0x74, 0x76, 0xf4, 0x3b, 0x6f, 0x93, 0xb7, 0x9f, 0x8f, 0x5e, 0x58, 0xed, 0xcc, + 0xe7, 0x3a, 0x1f, 0x7f, 0x2e, 0x29, 0x59, 0x2c, 0x29, 0xf9, 0x5e, 0x52, 0xf2, 0xbe, 0xa2, 0xb5, + 0xc5, 0x8a, 0xd6, 0xbe, 0x56, 0xb4, 0xf6, 0xf8, 0x90, 0x2a, 0x37, 0x9a, 0x24, 0x91, 0x00, 0xcd, + 0x6e, 0x8a, 0x2a, 0x6f, 0x79, 0x82, 0xac, 0x2c, 0xf6, 0x44, 0x80, 0x95, 0x55, 0x39, 0xe2, 0xca, + 0x30, 0x0d, 0xc3, 0xc9, 0x8b, 0xc4, 0x7f, 0x13, 0x72, 0xaf, 0x99, 0xc4, 0xa4, 0x9e, 0xd7, 0x72, + 0xfa, 0x17, 0x00, 0x00, 0xff, 0xff, 0xfe, 0x58, 0x53, 0x63, 0xc7, 0x01, 0x00, 0x00, } func (this *Params) Equal(that interface{}) bool { @@ -121,9 +132,17 @@ func (this *Params) Equal(that interface{}) bool { } else if this == nil { return false } - if this.WasmHookQueryMaxGas != that1.WasmHookQueryMaxGas { + if this.ContractHookMaxGas != that1.ContractHookMaxGas { return false } + if len(this.EnforcedRestrictionsContracts) != len(that1.EnforcedRestrictionsContracts) { + return false + } + for i := range this.EnforcedRestrictionsContracts { + if this.EnforcedRestrictionsContracts[i] != that1.EnforcedRestrictionsContracts[i] { + return false + } + } return true } func (m *Params) Marshal() (dAtA []byte, err error) { @@ -146,8 +165,17 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.WasmHookQueryMaxGas != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.WasmHookQueryMaxGas)) + if len(m.EnforcedRestrictionsContracts) > 0 { + for iNdEx := len(m.EnforcedRestrictionsContracts) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.EnforcedRestrictionsContracts[iNdEx]) + copy(dAtA[i:], m.EnforcedRestrictionsContracts[iNdEx]) + i = encodeVarintParams(dAtA, i, uint64(len(m.EnforcedRestrictionsContracts[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if m.ContractHookMaxGas != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ContractHookMaxGas)) i-- dAtA[i] = 0x8 } @@ -171,8 +199,14 @@ func (m *Params) Size() (n int) { } var l int _ = l - if m.WasmHookQueryMaxGas != 0 { - n += 1 + sovParams(uint64(m.WasmHookQueryMaxGas)) + if m.ContractHookMaxGas != 0 { + n += 1 + sovParams(uint64(m.ContractHookMaxGas)) + } + if len(m.EnforcedRestrictionsContracts) > 0 { + for _, s := range m.EnforcedRestrictionsContracts { + l = len(s) + n += 1 + l + sovParams(uint64(l)) + } } return n } @@ -214,9 +248,9 @@ func (m *Params) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field WasmHookQueryMaxGas", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ContractHookMaxGas", wireType) } - m.WasmHookQueryMaxGas = 0 + m.ContractHookMaxGas = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowParams @@ -226,11 +260,43 @@ func (m *Params) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.WasmHookQueryMaxGas |= uint64(b&0x7F) << shift + m.ContractHookMaxGas |= uint64(b&0x7F) << shift if b < 0x80 { break } } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EnforcedRestrictionsContracts", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EnforcedRestrictionsContracts = append(m.EnforcedRestrictionsContracts, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipParams(dAtA[iNdEx:]) diff --git a/chain/permissions/types/permissions.pb.go b/chain/permissions/types/permissions.pb.go index 147a0aee..2b51290b 100644 --- a/chain/permissions/types/permissions.pb.go +++ b/chain/permissions/types/permissions.pb.go @@ -89,8 +89,8 @@ func (Action) EnumDescriptor() ([]byte, []int) { type Namespace struct { // The tokenfactory denom to which this namespace applies to Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` - // The address of smart contract to apply code-based restrictions - ContractHook string `protobuf:"bytes,2,opt,name=contract_hook,json=contractHook,proto3" json:"contract_hook,omitempty"` + // The address of cosmwasm contract to apply code-based restrictions + WasmHook string `protobuf:"bytes,2,opt,name=wasm_hook,json=wasmHook,proto3" json:"wasm_hook,omitempty"` // permissions for each role RolePermissions []*Role `protobuf:"bytes,3,rep,name=role_permissions,json=rolePermissions,proto3" json:"role_permissions,omitempty"` // roles for each actor @@ -101,6 +101,8 @@ type Namespace struct { PolicyStatuses []*PolicyStatus `protobuf:"bytes,6,rep,name=policy_statuses,json=policyStatuses,proto3" json:"policy_statuses,omitempty"` // capabilities for each manager for each policy PolicyManagerCapabilities []*PolicyManagerCapability `protobuf:"bytes,7,rep,name=policy_manager_capabilities,json=policyManagerCapabilities,proto3" json:"policy_manager_capabilities,omitempty"` + // The address of the EVM contract to map code-based permissions + EvmHook string `protobuf:"bytes,8,opt,name=evm_hook,json=evmHook,proto3" json:"evm_hook,omitempty"` } func (m *Namespace) Reset() { *m = Namespace{} } @@ -143,9 +145,9 @@ func (m *Namespace) GetDenom() string { return "" } -func (m *Namespace) GetContractHook() string { +func (m *Namespace) GetWasmHook() string { if m != nil { - return m.ContractHook + return m.WasmHook } return "" } @@ -185,6 +187,13 @@ func (m *Namespace) GetPolicyManagerCapabilities() []*PolicyManagerCapability { return nil } +func (m *Namespace) GetEvmHook() string { + if m != nil { + return m.EvmHook + } + return "" +} + // AddressRoles defines roles for an actor type ActorRoles struct { // The actor name @@ -663,62 +672,63 @@ func init() { } var fileDescriptor_6d25f3ecf3806c6c = []byte{ - // 871 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4d, 0x6f, 0xdb, 0x46, - 0x10, 0x15, 0x25, 0x45, 0x92, 0x47, 0xfe, 0x50, 0x17, 0x46, 0x4c, 0x27, 0x8d, 0x24, 0x28, 0x2d, - 0xea, 0xa6, 0x8d, 0x84, 0xb8, 0x40, 0xd1, 0x4b, 0x80, 0xca, 0x12, 0xd3, 0xb0, 0xb5, 0x28, 0x75, - 0x65, 0x07, 0x48, 0x2f, 0xc4, 0x8a, 0x5a, 0xd8, 0x5b, 0x8b, 0x5c, 0x82, 0x4b, 0x0b, 0xd0, 0x4d, - 0x3d, 0xf7, 0xd2, 0x3f, 0xd1, 0x6b, 0x7f, 0x47, 0x8e, 0x3e, 0x16, 0x3d, 0x18, 0x85, 0x7d, 0xeb, - 0xaf, 0x28, 0x76, 0xb9, 0x94, 0x18, 0xa0, 0x89, 0x83, 0x9e, 0x34, 0x33, 0x6f, 0xdf, 0xdb, 0x99, - 0xc7, 0x11, 0x09, 0x1d, 0x16, 0xfc, 0x4c, 0xbd, 0x98, 0xcd, 0x69, 0x27, 0xa4, 0x91, 0xcf, 0x84, - 0x60, 0x3c, 0x10, 0x9d, 0xf9, 0xb3, 0x09, 0x8d, 0xc9, 0xb3, 0x6c, 0xad, 0x1d, 0x46, 0x3c, 0xe6, - 0xe8, 0xd1, 0x8a, 0xd0, 0xce, 0x82, 0x9a, 0xf0, 0xa0, 0xee, 0x71, 0xe1, 0x73, 0xd1, 0x99, 0x10, - 0x41, 0x57, 0x2a, 0x1e, 0x67, 0x41, 0x42, 0x7f, 0xb0, 0x7b, 0xc6, 0xcf, 0xb8, 0x0a, 0x3b, 0x32, - 0x4a, 0xaa, 0xad, 0x5f, 0x8a, 0xb0, 0xe1, 0x10, 0x9f, 0x8a, 0x90, 0x78, 0x14, 0xed, 0xc2, 0xbd, - 0x29, 0x0d, 0xb8, 0x6f, 0x1a, 0x4d, 0xe3, 0x60, 0x03, 0x27, 0x09, 0x7a, 0x0c, 0x5b, 0x1e, 0x0f, - 0xe2, 0x88, 0x78, 0xb1, 0x7b, 0xce, 0xf9, 0x85, 0x99, 0x57, 0xe8, 0x66, 0x5a, 0x7c, 0xc9, 0xf9, - 0x05, 0x72, 0xa0, 0x16, 0xf1, 0x19, 0x75, 0x33, 0xad, 0x99, 0x85, 0x66, 0xe1, 0xa0, 0x7a, 0xf8, - 0xb8, 0xfd, 0xde, 0xc6, 0xdb, 0x98, 0xcf, 0x28, 0xde, 0x91, 0xe4, 0xd1, 0x1a, 0x45, 0xdf, 0x43, - 0x95, 0x78, 0x31, 0x8f, 0x5c, 0x09, 0x08, 0xb3, 0xa8, 0xa4, 0x3e, 0xbf, 0x43, 0xaa, 0x2b, 0x19, - 0x52, 0x4f, 0x60, 0x20, 0xab, 0x18, 0x0d, 0x61, 0x4b, 0xf5, 0xe6, 0x93, 0x80, 0x9c, 0xd1, 0x48, - 0x98, 0xf7, 0x94, 0xda, 0x93, 0x0f, 0x68, 0x6c, 0x90, 0x50, 0xf0, 0x66, 0xb4, 0x4e, 0x04, 0x3a, - 0x81, 0x9d, 0x90, 0xcf, 0x98, 0xb7, 0x70, 0x45, 0x4c, 0xe2, 0x4b, 0x41, 0x85, 0x59, 0x52, 0x92, - 0x5f, 0xdc, 0x21, 0x39, 0x52, 0xac, 0xb1, 0x22, 0xe1, 0xed, 0x30, 0x93, 0x51, 0x81, 0xe6, 0xf0, - 0x50, 0xab, 0xea, 0x46, 0x5d, 0x8f, 0x84, 0x64, 0xc2, 0x66, 0x2c, 0x66, 0x54, 0x98, 0x65, 0x75, - 0xc3, 0xd7, 0x1f, 0x74, 0x83, 0xee, 0xb4, 0x97, 0xf2, 0x17, 0x78, 0x3f, 0xfc, 0x4f, 0x80, 0x51, - 0xd1, 0xfa, 0x06, 0x60, 0x6d, 0x9c, 0xdc, 0x01, 0x65, 0x5d, 0xba, 0x03, 0x2a, 0x91, 0xd5, 0xe4, - 0x41, 0xe4, 0x9b, 0x05, 0x59, 0x55, 0x89, 0x64, 0x4a, 0x92, 0x62, 0x0b, 0x84, 0xa0, 0x28, 0xcb, - 0x9a, 0xa8, 0x62, 0x74, 0x1f, 0x4a, 0x4a, 0x20, 0x25, 0xea, 0xac, 0xf5, 0x1c, 0xaa, 0x19, 0x7b, - 0x91, 0x09, 0x65, 0x3d, 0xb3, 0x66, 0xa7, 0xe9, 0x3b, 0x2e, 0xfe, 0xd5, 0x80, 0xcd, 0xac, 0x97, - 0xe8, 0xb9, 0xba, 0x87, 0xf1, 0x40, 0xf1, 0xb7, 0x0f, 0x3f, 0xbd, 0x7b, 0x53, 0x18, 0x0f, 0xb0, - 0x26, 0xa1, 0x06, 0x54, 0x99, 0x70, 0xa7, 0x4c, 0x90, 0xc9, 0x8c, 0x4e, 0xd5, 0x82, 0x57, 0x30, - 0x30, 0xd1, 0xd7, 0x15, 0xf4, 0x10, 0x36, 0x98, 0x70, 0x05, 0x25, 0x12, 0x2e, 0x28, 0xb8, 0xc2, - 0xc4, 0x58, 0xe5, 0xad, 0x53, 0x28, 0xca, 0x61, 0xa4, 0x01, 0x01, 0xf1, 0x57, 0x06, 0xc8, 0x18, - 0xed, 0x41, 0x59, 0xed, 0x1e, 0x4b, 0x54, 0xb7, 0x70, 0x49, 0xa6, 0xf6, 0x14, 0x35, 0xa1, 0xfa, - 0xf6, 0x7f, 0x45, 0x82, 0xd9, 0x52, 0xeb, 0x0f, 0x03, 0xf6, 0xde, 0xf1, 0x38, 0xdf, 0x63, 0xd8, - 0xda, 0x89, 0xfc, 0xff, 0x74, 0xc2, 0x23, 0x41, 0x6a, 0x85, 0x1e, 0x15, 0x3c, 0x12, 0x68, 0x2b, - 0xd0, 0x3e, 0x54, 0xe4, 0x01, 0x69, 0x85, 0x59, 0x54, 0x68, 0xd9, 0x23, 0x81, 0x74, 0xa2, 0xf5, - 0x09, 0x94, 0xa5, 0x0f, 0x76, 0x5f, 0xc8, 0x53, 0x7a, 0x6c, 0x61, 0x1a, 0xcd, 0xc2, 0xc1, 0x16, - 0x2e, 0x27, 0x73, 0x8b, 0xd6, 0xef, 0x06, 0x6c, 0x77, 0xa7, 0xd3, 0x88, 0x0a, 0xf1, 0x8a, 0x5f, - 0x7a, 0xe7, 0xc9, 0xe3, 0x27, 0x49, 0x25, 0x9d, 0x46, 0xa7, 0x68, 0x01, 0xe5, 0x79, 0x72, 0x48, - 0x8d, 0x53, 0x3d, 0xdc, 0x6f, 0x27, 0xef, 0xb9, 0xb6, 0x7c, 0xcf, 0xad, 0x86, 0xe8, 0x71, 0x16, - 0x1c, 0xf5, 0xdf, 0x5c, 0x37, 0x72, 0x7f, 0x5d, 0x37, 0x3e, 0x3b, 0x63, 0xf1, 0xf9, 0xe5, 0xa4, - 0xed, 0x71, 0xbf, 0xa3, 0x5f, 0x8a, 0xc9, 0xcf, 0x53, 0x31, 0xbd, 0xe8, 0xc4, 0x8b, 0x90, 0x0a, - 0x45, 0xf8, 0xe7, 0xba, 0xf1, 0x91, 0x16, 0xff, 0x92, 0xfb, 0x2c, 0xa6, 0x7e, 0x18, 0x2f, 0x70, - 0x7a, 0xdf, 0x93, 0x2b, 0x03, 0x4a, 0x89, 0x39, 0x68, 0x07, 0xaa, 0xa7, 0xce, 0x78, 0x64, 0xf5, - 0xec, 0x17, 0xb6, 0xd5, 0xaf, 0xe5, 0x50, 0x05, 0x8a, 0x03, 0xdb, 0x39, 0xa9, 0x19, 0xa8, 0x0a, - 0x65, 0x6c, 0xf5, 0x2c, 0xfb, 0x95, 0x55, 0xcb, 0xcb, 0xf2, 0xd1, 0x29, 0x76, 0x6a, 0x45, 0x19, - 0x8d, 0x2d, 0xa7, 0x5f, 0xab, 0xa0, 0x6d, 0x80, 0xf1, 0xe9, 0xc8, 0xc2, 0xae, 0x42, 0x6a, 0xe8, - 0x11, 0xdc, 0x1f, 0x0c, 0xfb, 0xf6, 0x8b, 0xd7, 0xee, 0x68, 0x78, 0x6c, 0xf7, 0x5e, 0xbb, 0x83, - 0xae, 0xd3, 0xfd, 0xce, 0xc2, 0xe3, 0xda, 0x72, 0xb9, 0xfc, 0x16, 0x7d, 0x0c, 0xbb, 0x1a, 0xee, - 0x0d, 0x9d, 0x13, 0xdc, 0xed, 0x9d, 0xb8, 0x2f, 0x87, 0xc3, 0x1f, 0x24, 0xb8, 0x34, 0x50, 0x03, - 0xf6, 0x34, 0x8a, 0x87, 0xc7, 0x96, 0x3b, 0xb2, 0xf0, 0xc0, 0x1e, 0x8f, 0xed, 0xa1, 0xa3, 0xd8, - 0xcb, 0x7c, 0x86, 0xae, 0x0e, 0x64, 0xb5, 0x97, 0xc5, 0xa3, 0x8b, 0x37, 0x37, 0x75, 0xe3, 0xea, - 0xa6, 0x6e, 0xfc, 0x7d, 0x53, 0x37, 0x7e, 0xbb, 0xad, 0xe7, 0xae, 0x6e, 0xeb, 0xb9, 0x3f, 0x6f, - 0xeb, 0xb9, 0x9f, 0x7e, 0xcc, 0x78, 0x66, 0xa7, 0xfb, 0x72, 0x4c, 0x26, 0x62, 0xfd, 0x99, 0x7a, - 0xea, 0xf1, 0x88, 0x66, 0xd3, 0x73, 0xc2, 0x82, 0x8e, 0xcf, 0xa7, 0x97, 0x33, 0x2a, 0xde, 0xfa, - 0x86, 0x29, 0x8b, 0x27, 0x25, 0xf5, 0x85, 0xf9, 0xea, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x62, - 0x3a, 0xbf, 0x78, 0xe9, 0x06, 0x00, 0x00, + // 881 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x41, 0x6f, 0x1b, 0x45, + 0x14, 0xf6, 0xda, 0xae, 0xd7, 0x79, 0x6e, 0x12, 0x33, 0x8a, 0x9a, 0x4d, 0x4b, 0x6d, 0xcb, 0x80, + 0x08, 0x85, 0xda, 0x6a, 0x90, 0x10, 0x97, 0x4a, 0x38, 0xf6, 0x96, 0x2e, 0xc4, 0x6b, 0x33, 0x4e, + 0x2a, 0x95, 0xcb, 0x6a, 0xbc, 0x1e, 0x25, 0x43, 0xbc, 0x3b, 0x2b, 0xcf, 0xc6, 0xc8, 0x37, 0xdf, + 0xb9, 0x70, 0xe0, 0x2f, 0x70, 0xe5, 0x77, 0xf4, 0x98, 0x23, 0xe2, 0x10, 0xa1, 0xe4, 0xc6, 0xaf, + 0x40, 0x33, 0x3b, 0x6b, 0x6f, 0x25, 0xda, 0x44, 0x9c, 0x3c, 0xef, 0x7d, 0xfb, 0x7d, 0xf3, 0xde, + 0xf7, 0x9e, 0x77, 0xa1, 0xcd, 0xc2, 0x9f, 0xa8, 0x1f, 0xb3, 0x39, 0x6d, 0x47, 0x74, 0x16, 0x30, + 0x21, 0x18, 0x0f, 0x45, 0x7b, 0xfe, 0x6c, 0x4c, 0x63, 0xf2, 0x2c, 0x9b, 0x6b, 0x45, 0x33, 0x1e, + 0x73, 0xf4, 0x78, 0x45, 0x68, 0x65, 0x41, 0x4d, 0x78, 0x58, 0xf3, 0xb9, 0x08, 0xb8, 0x68, 0x8f, + 0x89, 0xa0, 0x2b, 0x15, 0x9f, 0xb3, 0x30, 0xa1, 0x3f, 0xdc, 0x39, 0xe5, 0xa7, 0x5c, 0x1d, 0xdb, + 0xf2, 0x94, 0x64, 0x9b, 0xbf, 0x15, 0x61, 0xc3, 0x25, 0x01, 0x15, 0x11, 0xf1, 0x29, 0xda, 0x81, + 0x7b, 0x13, 0x1a, 0xf2, 0xc0, 0x32, 0x1a, 0xc6, 0xfe, 0x06, 0x4e, 0x02, 0xf4, 0x08, 0x36, 0x7e, + 0x26, 0x22, 0xf0, 0xce, 0x38, 0x3f, 0xb7, 0xf2, 0x0a, 0x29, 0xcb, 0xc4, 0x4b, 0xce, 0xcf, 0x91, + 0x0b, 0xd5, 0x19, 0x9f, 0x52, 0x2f, 0x53, 0x92, 0x55, 0x68, 0x14, 0xf6, 0x2b, 0x07, 0x1f, 0xb5, + 0xde, 0x5b, 0x70, 0x0b, 0xf3, 0x29, 0xc5, 0xdb, 0x92, 0x3c, 0x5c, 0xa3, 0xe8, 0x3b, 0xa8, 0x10, + 0x3f, 0xe6, 0x33, 0x4f, 0x02, 0xc2, 0x2a, 0x2a, 0xa9, 0xcf, 0x6e, 0x91, 0xea, 0x48, 0x86, 0xd4, + 0x13, 0x18, 0xc8, 0xea, 0x8c, 0x06, 0xb0, 0xa9, 0x6a, 0x0b, 0x48, 0x48, 0x4e, 0xe9, 0x4c, 0x58, + 0xf7, 0x94, 0xda, 0x93, 0x3b, 0x14, 0xd6, 0x4f, 0x28, 0xf8, 0xfe, 0x6c, 0x1d, 0x08, 0x74, 0x0c, + 0xdb, 0x11, 0x9f, 0x32, 0x7f, 0xe1, 0x89, 0x98, 0xc4, 0x17, 0x82, 0x0a, 0xab, 0xa4, 0x24, 0x3f, + 0xbf, 0x45, 0x72, 0xa8, 0x58, 0x23, 0x45, 0xc2, 0x5b, 0x51, 0x26, 0xa2, 0x02, 0xcd, 0xe1, 0x91, + 0x56, 0xd5, 0x85, 0x7a, 0x3e, 0x89, 0xc8, 0x98, 0x4d, 0x59, 0xcc, 0xa8, 0xb0, 0x4c, 0x75, 0xc3, + 0x57, 0x77, 0xba, 0x41, 0x57, 0xda, 0x4d, 0xf9, 0x0b, 0xbc, 0x17, 0xfd, 0x27, 0xc0, 0xa8, 0x40, + 0x7b, 0x50, 0xa6, 0x73, 0x3d, 0xd6, 0xb2, 0x1a, 0xab, 0x49, 0xe7, 0x6a, 0xaa, 0xcd, 0xaf, 0x01, + 0xd6, 0x9e, 0xca, 0xb5, 0x50, 0xae, 0xa6, 0x6b, 0xa1, 0x02, 0x99, 0x4d, 0x66, 0x94, 0x6f, 0x14, + 0x64, 0x56, 0x05, 0x92, 0x29, 0x49, 0x8a, 0x2d, 0x10, 0x82, 0xa2, 0x4c, 0x6b, 0xa2, 0x3a, 0xa3, + 0x07, 0x50, 0x52, 0x02, 0x29, 0x51, 0x47, 0xcd, 0xe7, 0x50, 0xc9, 0x38, 0x8f, 0x2c, 0x30, 0xb5, + 0x1d, 0x9a, 0x9d, 0x86, 0xef, 0xb8, 0xf8, 0x17, 0x03, 0xee, 0x67, 0x6d, 0x46, 0xcf, 0xd5, 0x3d, + 0x8c, 0x87, 0x8a, 0xbf, 0x75, 0xf0, 0xc9, 0xed, 0x4b, 0xc4, 0x78, 0x88, 0x35, 0x09, 0xd5, 0xa1, + 0xc2, 0x84, 0x37, 0x61, 0x82, 0x8c, 0xa7, 0x74, 0xa2, 0xf6, 0xbe, 0x8c, 0x81, 0x89, 0x9e, 0xce, + 0xc8, 0xbf, 0x05, 0x13, 0x9e, 0xa0, 0x44, 0xc2, 0x05, 0x05, 0x97, 0x99, 0x18, 0xa9, 0xb8, 0x79, + 0x02, 0x45, 0xd9, 0x8c, 0x34, 0x20, 0x24, 0xc1, 0xca, 0x00, 0x79, 0x46, 0xbb, 0x60, 0xaa, 0xb5, + 0x64, 0x89, 0xea, 0x26, 0x2e, 0xc9, 0xd0, 0x99, 0xa0, 0x06, 0x54, 0xde, 0xfe, 0x1b, 0x49, 0x30, + 0x9b, 0x6a, 0xfe, 0x61, 0xc0, 0xee, 0x3b, 0x26, 0xfd, 0x1e, 0xc3, 0xd6, 0x4e, 0xe4, 0xff, 0xa7, + 0x13, 0x3e, 0x09, 0x53, 0x2b, 0x74, 0xab, 0xe0, 0x93, 0x50, 0x5b, 0x21, 0x17, 0x49, 0x3e, 0x20, + 0xad, 0xb0, 0x8a, 0x0a, 0x35, 0x7d, 0x12, 0x4a, 0x27, 0x9a, 0x1f, 0x83, 0x29, 0x7d, 0x70, 0x7a, + 0x6a, 0xdd, 0x74, 0xdb, 0xc2, 0x32, 0x1a, 0x85, 0xfd, 0x4d, 0x6c, 0x26, 0x7d, 0x8b, 0xe6, 0xef, + 0x06, 0x6c, 0x75, 0x26, 0x93, 0x19, 0x15, 0xe2, 0x15, 0xbf, 0xf0, 0xcf, 0x92, 0xf1, 0x93, 0x24, + 0x93, 0x76, 0xa3, 0x43, 0xb4, 0x00, 0x73, 0x9e, 0x3c, 0xa4, 0xda, 0xa9, 0x1c, 0xec, 0xb5, 0x92, + 0x57, 0x5f, 0x4b, 0xbe, 0xfa, 0x56, 0x4d, 0x74, 0x39, 0x0b, 0x0f, 0x7b, 0x6f, 0xae, 0xea, 0xb9, + 0xbf, 0xae, 0xea, 0x9f, 0x9e, 0xb2, 0xf8, 0xec, 0x62, 0xdc, 0xf2, 0x79, 0xd0, 0xd6, 0xef, 0xc9, + 0xe4, 0xe7, 0xa9, 0x98, 0x9c, 0xb7, 0xe3, 0x45, 0x44, 0x85, 0x22, 0xfc, 0x73, 0x55, 0xff, 0x40, + 0x8b, 0x7f, 0xc1, 0x03, 0x16, 0xd3, 0x20, 0x8a, 0x17, 0x38, 0xbd, 0xef, 0xc9, 0xa5, 0x01, 0xa5, + 0xc4, 0x1c, 0xb4, 0x0d, 0x95, 0x13, 0x77, 0x34, 0xb4, 0xbb, 0xce, 0x0b, 0xc7, 0xee, 0x55, 0x73, + 0xa8, 0x0c, 0xc5, 0xbe, 0xe3, 0x1e, 0x57, 0x0d, 0x54, 0x01, 0x13, 0xdb, 0x5d, 0xdb, 0x79, 0x65, + 0x57, 0xf3, 0x32, 0x7d, 0x78, 0x82, 0xdd, 0x6a, 0x51, 0x9e, 0x46, 0xb6, 0xdb, 0xab, 0x96, 0xd1, + 0x16, 0xc0, 0xe8, 0x64, 0x68, 0x63, 0x4f, 0x21, 0x55, 0xf4, 0x18, 0x1e, 0xf4, 0x07, 0x3d, 0xe7, + 0xc5, 0x6b, 0x6f, 0x38, 0x38, 0x72, 0xba, 0xaf, 0xbd, 0x7e, 0xc7, 0xed, 0x7c, 0x6b, 0xe3, 0x51, + 0x75, 0xb9, 0x5c, 0x7e, 0x83, 0x3e, 0x84, 0x1d, 0x0d, 0x77, 0x07, 0xee, 0x31, 0xee, 0x74, 0x8f, + 0xbd, 0x97, 0x83, 0xc1, 0xf7, 0x12, 0x5c, 0x1a, 0xa8, 0x0e, 0xbb, 0x1a, 0xc5, 0x83, 0x23, 0xdb, + 0x1b, 0xda, 0xb8, 0xef, 0x8c, 0x46, 0xce, 0xc0, 0x55, 0xec, 0x65, 0x3e, 0x43, 0x57, 0x0f, 0x64, + 0xb5, 0x97, 0xc5, 0xc3, 0xf3, 0x37, 0xd7, 0x35, 0xe3, 0xf2, 0xba, 0x66, 0xfc, 0x7d, 0x5d, 0x33, + 0x7e, 0xbd, 0xa9, 0xe5, 0x2e, 0x6f, 0x6a, 0xb9, 0x3f, 0x6f, 0x6a, 0xb9, 0x1f, 0x7f, 0xc8, 0x78, + 0xe6, 0xa4, 0xfb, 0x72, 0x44, 0xc6, 0x62, 0xfd, 0xe5, 0x7a, 0xea, 0xf3, 0x19, 0xcd, 0x86, 0x67, + 0x84, 0x85, 0xed, 0x80, 0x4f, 0x2e, 0xa6, 0x54, 0xbc, 0xf5, 0x59, 0x53, 0x16, 0x8f, 0x4b, 0xea, + 0xa3, 0xf3, 0xe5, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xab, 0x07, 0xd1, 0x6c, 0xfc, 0x06, 0x00, + 0x00, } func (m *Namespace) Marshal() (dAtA []byte, err error) { @@ -741,6 +751,13 @@ func (m *Namespace) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.EvmHook) > 0 { + i -= len(m.EvmHook) + copy(dAtA[i:], m.EvmHook) + i = encodeVarintPermissions(dAtA, i, uint64(len(m.EvmHook))) + i-- + dAtA[i] = 0x42 + } if len(m.PolicyManagerCapabilities) > 0 { for iNdEx := len(m.PolicyManagerCapabilities) - 1; iNdEx >= 0; iNdEx-- { { @@ -811,10 +828,10 @@ func (m *Namespace) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x1a } } - if len(m.ContractHook) > 0 { - i -= len(m.ContractHook) - copy(dAtA[i:], m.ContractHook) - i = encodeVarintPermissions(dAtA, i, uint64(len(m.ContractHook))) + if len(m.WasmHook) > 0 { + i -= len(m.WasmHook) + copy(dAtA[i:], m.WasmHook) + i = encodeVarintPermissions(dAtA, i, uint64(len(m.WasmHook))) i-- dAtA[i] = 0x12 } @@ -1190,7 +1207,7 @@ func (m *Namespace) Size() (n int) { if l > 0 { n += 1 + l + sovPermissions(uint64(l)) } - l = len(m.ContractHook) + l = len(m.WasmHook) if l > 0 { n += 1 + l + sovPermissions(uint64(l)) } @@ -1224,6 +1241,10 @@ func (m *Namespace) Size() (n int) { n += 1 + l + sovPermissions(uint64(l)) } } + l = len(m.EvmHook) + if l > 0 { + n += 1 + l + sovPermissions(uint64(l)) + } return n } @@ -1443,7 +1464,7 @@ func (m *Namespace) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ContractHook", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field WasmHook", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1471,7 +1492,7 @@ func (m *Namespace) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ContractHook = string(dAtA[iNdEx:postIndex]) + m.WasmHook = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { @@ -1643,6 +1664,38 @@ func (m *Namespace) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EvmHook", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPermissions + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthPermissions + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthPermissions + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EvmHook = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipPermissions(dAtA[iNdEx:]) diff --git a/chain/permissions/types/tx.pb.go b/chain/permissions/types/tx.pb.go index bce548ce..4d1a42af 100644 --- a/chain/permissions/types/tx.pb.go +++ b/chain/permissions/types/tx.pb.go @@ -220,8 +220,8 @@ type MsgUpdateNamespace struct { Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty" yaml:"sender"` // denom whose namespace updates are to be applied Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` - // address of smart contract to apply code-based restrictions - ContractHook *MsgUpdateNamespace_SetContractHook `protobuf:"bytes,3,opt,name=contract_hook,json=contractHook,proto3" json:"contract_hook,omitempty"` + // address of wasm smart contract to apply code-based restrictions + WasmHook *MsgUpdateNamespace_SetContractHook `protobuf:"bytes,3,opt,name=wasm_hook,json=wasmHook,proto3" json:"wasm_hook,omitempty"` // role permissions to update RolePermissions []*Role `protobuf:"bytes,4,rep,name=role_permissions,json=rolePermissions,proto3" json:"role_permissions,omitempty"` // role managers to update @@ -230,6 +230,8 @@ type MsgUpdateNamespace struct { PolicyStatuses []*PolicyStatus `protobuf:"bytes,6,rep,name=policy_statuses,json=policyStatuses,proto3" json:"policy_statuses,omitempty"` // policy manager capabilities to update PolicyManagerCapabilities []*PolicyManagerCapability `protobuf:"bytes,7,rep,name=policy_manager_capabilities,json=policyManagerCapabilities,proto3" json:"policy_manager_capabilities,omitempty"` + // address of EVM smart contract to apply code-based restrictions + EvmHook *MsgUpdateNamespace_SetContractHook `protobuf:"bytes,8,opt,name=evm_hook,json=evmHook,proto3" json:"evm_hook,omitempty"` } func (m *MsgUpdateNamespace) Reset() { *m = MsgUpdateNamespace{} } @@ -279,9 +281,9 @@ func (m *MsgUpdateNamespace) GetDenom() string { return "" } -func (m *MsgUpdateNamespace) GetContractHook() *MsgUpdateNamespace_SetContractHook { +func (m *MsgUpdateNamespace) GetWasmHook() *MsgUpdateNamespace_SetContractHook { if m != nil { - return m.ContractHook + return m.WasmHook } return nil } @@ -314,6 +316,13 @@ func (m *MsgUpdateNamespace) GetPolicyManagerCapabilities() []*PolicyManagerCapa return nil } +func (m *MsgUpdateNamespace) GetEvmHook() *MsgUpdateNamespace_SetContractHook { + if m != nil { + return m.EvmHook + } + return nil +} + type MsgUpdateNamespace_SetContractHook struct { NewValue string `protobuf:"bytes,1,opt,name=new_value,json=newValue,proto3" json:"new_value,omitempty"` } @@ -611,63 +620,64 @@ func init() { } var fileDescriptor_ab9bfdcab1d9b6fa = []byte{ - // 889 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xcf, 0x6f, 0x1b, 0x45, - 0x14, 0xce, 0x36, 0x75, 0xc0, 0xd3, 0x04, 0xb7, 0x43, 0x50, 0x37, 0x0e, 0x75, 0x22, 0x23, 0x50, - 0xea, 0xaa, 0xbb, 0x72, 0x90, 0x22, 0xe1, 0x5b, 0xe2, 0x0b, 0x48, 0x4d, 0x29, 0x9b, 0x92, 0x03, - 0x42, 0xb2, 0xc6, 0xbb, 0x8f, 0xf5, 0x60, 0xef, 0xce, 0x6a, 0x66, 0xec, 0xe2, 0x53, 0x51, 0xb9, - 0x21, 0x0e, 0xfc, 0x29, 0x39, 0x70, 0x85, 0x73, 0x8f, 0x15, 0x27, 0x4e, 0x15, 0x4a, 0x0e, 0xb9, - 0xf3, 0x17, 0x20, 0xcf, 0x8c, 0xbd, 0x9b, 0x8d, 0xa9, 0xd7, 0xf4, 0x92, 0xf8, 0xfd, 0xfa, 0xde, - 0xf7, 0xbd, 0x79, 0x3b, 0xbb, 0xe8, 0x13, 0x1a, 0x7f, 0x0f, 0xbe, 0xa4, 0x23, 0x70, 0x13, 0xe0, - 0x11, 0x15, 0x82, 0xb2, 0x58, 0xb8, 0xa3, 0x66, 0x17, 0x24, 0x69, 0xba, 0xf2, 0x07, 0x27, 0xe1, - 0x4c, 0x32, 0x7c, 0x6f, 0x96, 0xe7, 0x64, 0xf2, 0x1c, 0x93, 0x57, 0xdd, 0x0c, 0x59, 0xc8, 0x54, - 0xa6, 0x3b, 0xf9, 0xa5, 0x8b, 0xaa, 0x35, 0x9f, 0x89, 0x88, 0x09, 0xb7, 0x4b, 0x04, 0xcc, 0x20, - 0x7d, 0x46, 0xe3, 0x6b, 0xf1, 0xb8, 0x3f, 0x8b, 0x4f, 0x0c, 0x13, 0xbf, 0x6b, 0xe2, 0x91, 0x08, - 0xdd, 0x51, 0x73, 0xf2, 0xcf, 0x04, 0xb6, 0x74, 0xa0, 0xa3, 0x3b, 0x6a, 0xc3, 0x84, 0x1a, 0x6f, - 0x16, 0x94, 0x10, 0x4e, 0xa2, 0x69, 0xae, 0xbb, 0x20, 0x37, 0x23, 0x54, 0x17, 0xdc, 0x21, 0x11, - 0x8d, 0x99, 0xab, 0xfe, 0x6a, 0x57, 0xfd, 0x0f, 0x0b, 0x55, 0x8e, 0x45, 0xf8, 0x75, 0x12, 0x10, - 0x09, 0x4f, 0x14, 0x3a, 0x3e, 0x40, 0x65, 0x32, 0x94, 0x3d, 0xc6, 0xa9, 0x1c, 0xdb, 0xd6, 0xae, - 0xb5, 0x57, 0x3e, 0xb2, 0xff, 0xfc, 0xed, 0xe1, 0xa6, 0x21, 0x7a, 0x18, 0x04, 0x1c, 0x84, 0x38, - 0x91, 0x9c, 0xc6, 0xa1, 0x97, 0xa6, 0xe2, 0x36, 0x5a, 0xd3, 0xfc, 0xec, 0x1b, 0xbb, 0xd6, 0xde, - 0xad, 0xfd, 0x8f, 0x9d, 0x37, 0x4e, 0xdd, 0xd1, 0xed, 0x8e, 0x6e, 0xbe, 0x7c, 0xbd, 0xb3, 0xe2, - 0x99, 0xd2, 0x96, 0xf3, 0xe2, 0xf2, 0xac, 0x91, 0x82, 0xfe, 0x7c, 0x79, 0xd6, 0xd8, 0xce, 0xaa, - 0xcb, 0x91, 0xad, 0x6f, 0xa1, 0xbb, 0x39, 0x97, 0x07, 0x22, 0x61, 0xb1, 0x80, 0xfa, 0xef, 0x16, - 0xc2, 0xc7, 0x22, 0x6c, 0x73, 0x20, 0x12, 0x1e, 0x93, 0x08, 0x44, 0x42, 0x7c, 0xc0, 0xf7, 0xd1, - 0x9a, 0x80, 0x38, 0x00, 0x6e, 0xb4, 0xdd, 0xf9, 0xe7, 0xf5, 0xce, 0xc6, 0x98, 0x44, 0x83, 0x56, - 0x5d, 0xfb, 0xeb, 0x9e, 0x49, 0xc0, 0x8f, 0x50, 0x39, 0x9e, 0xd6, 0x19, 0x51, 0x7b, 0x0b, 0x44, - 0xcd, 0xfa, 0x18, 0x5d, 0x29, 0x80, 0x96, 0x66, 0xa0, 0x27, 0xba, 0x6a, 0x39, 0x5d, 0x39, 0xa2, - 0xf5, 0x0f, 0x51, 0xf5, 0xba, 0x77, 0xa6, 0xee, 0x97, 0x92, 0x52, 0xa7, 0x95, 0xff, 0x2f, 0x75, - 0x9b, 0xa8, 0x14, 0x40, 0xcc, 0x22, 0xa5, 0xac, 0xec, 0x69, 0x03, 0x7f, 0x87, 0x36, 0x7c, 0x16, - 0x4b, 0x4e, 0x7c, 0xd9, 0xe9, 0x31, 0xd6, 0xb7, 0x57, 0x95, 0xee, 0xc3, 0x05, 0xba, 0xaf, 0x53, - 0x71, 0x4e, 0x40, 0xb6, 0x0d, 0xd2, 0xe7, 0x8c, 0xf5, 0xbd, 0x75, 0x3f, 0x63, 0xe1, 0xc7, 0xe8, - 0x36, 0x67, 0x03, 0xe8, 0x64, 0xc0, 0xec, 0x9b, 0xbb, 0xab, 0x7b, 0xb7, 0xf6, 0x3f, 0x5a, 0xd0, - 0xca, 0x63, 0x03, 0xf0, 0x2a, 0x93, 0xe2, 0x27, 0x69, 0x14, 0x7f, 0x89, 0x36, 0x14, 0x5e, 0x44, - 0x62, 0x12, 0x02, 0x17, 0x76, 0x49, 0x81, 0x35, 0x0a, 0x80, 0x1d, 0xeb, 0x12, 0x6f, 0x9d, 0xa7, - 0x86, 0xc0, 0x4f, 0x51, 0x25, 0x61, 0x03, 0xea, 0x8f, 0x3b, 0x42, 0x12, 0x39, 0x14, 0x20, 0xec, - 0x35, 0x05, 0xf9, 0x60, 0xd1, 0x5e, 0xab, 0xaa, 0x13, 0x55, 0xe4, 0xbd, 0x97, 0x64, 0x2c, 0x10, - 0x78, 0x84, 0xb6, 0x0d, 0xaa, 0x21, 0xda, 0xf1, 0x49, 0x42, 0xba, 0x74, 0x40, 0x25, 0x05, 0x61, - 0xbf, 0xa3, 0x3a, 0x1c, 0x14, 0xea, 0x60, 0x98, 0xb6, 0xa7, 0xf5, 0x63, 0x6f, 0x2b, 0x99, 0x1b, - 0xa0, 0x20, 0xaa, 0x0e, 0xaa, 0xe4, 0xce, 0x03, 0x6f, 0xa3, 0x72, 0x0c, 0xcf, 0x3a, 0x23, 0x32, - 0x18, 0x82, 0xde, 0x16, 0xef, 0xdd, 0x18, 0x9e, 0x9d, 0x4e, 0xec, 0x85, 0xcb, 0x9a, 0x3b, 0x6c, - 0xb3, 0xac, 0x39, 0x6f, 0xfa, 0x28, 0xde, 0x40, 0xef, 0xcf, 0xc2, 0x87, 0xbe, 0x64, 0x7c, 0x32, - 0x77, 0xf1, 0xf6, 0xdb, 0x7a, 0x8a, 0xb0, 0x3a, 0x75, 0x32, 0xc1, 0x14, 0x1d, 0xc9, 0x3a, 0x24, - 0x08, 0xec, 0x55, 0x35, 0xc5, 0xfb, 0x05, 0x8e, 0x5e, 0x71, 0x11, 0x7a, 0x9b, 0xf4, 0xef, 0xa7, - 0xec, 0x30, 0x08, 0xf0, 0xb7, 0xe8, 0x83, 0x1c, 0x2e, 0x87, 0x11, 0xeb, 0x83, 0xd9, 0xaa, 0x25, - 0xa0, 0x71, 0x16, 0xda, 0x53, 0x20, 0x2d, 0x37, 0x37, 0xdc, 0x9d, 0xb9, 0xc3, 0x4d, 0xe7, 0x54, - 0xbf, 0x87, 0xb6, 0xe7, 0xb8, 0x67, 0xe3, 0x7d, 0xae, 0x2e, 0xf1, 0xf6, 0x80, 0xd0, 0xe8, 0x94, - 0x0d, 0xfd, 0x1e, 0xf0, 0xb7, 0x9e, 0x6c, 0xeb, 0x41, 0x8e, 0x63, 0xfe, 0x16, 0xce, 0x76, 0x33, - 0xb7, 0x70, 0xd6, 0x35, 0xe5, 0xb6, 0xff, 0x53, 0x09, 0xad, 0x1e, 0x8b, 0x10, 0x8f, 0xd0, 0xfa, - 0x95, 0xb7, 0x8c, 0x53, 0xf4, 0x42, 0xd1, 0xf9, 0xd5, 0x83, 0xe5, 0xf2, 0xa7, 0xfd, 0xf1, 0x73, - 0x54, 0xc9, 0xbf, 0x01, 0x9a, 0x8b, 0xa1, 0x72, 0x25, 0xd5, 0xcf, 0x96, 0x2e, 0xc9, 0x12, 0xc8, - 0x5f, 0xd2, 0xcd, 0xa5, 0x2f, 0xd3, 0x22, 0x04, 0xfe, 0xe3, 0xe1, 0xc3, 0x2f, 0x2c, 0x74, 0xfb, - 0xda, 0x93, 0xb7, 0x5f, 0x14, 0x2f, 0xad, 0xa9, 0xb6, 0x96, 0xaf, 0x99, 0x91, 0x18, 0xa1, 0xf5, - 0x2b, 0xfb, 0x59, 0xe0, 0xf8, 0xb3, 0xf9, 0x45, 0x8e, 0x7f, 0xde, 0xfa, 0x55, 0x4b, 0x3f, 0x5e, - 0x9e, 0x35, 0xac, 0xa3, 0xfe, 0xcb, 0xf3, 0x9a, 0xf5, 0xea, 0xbc, 0x66, 0xfd, 0x7d, 0x5e, 0xb3, - 0x7e, 0xbd, 0xa8, 0xad, 0xbc, 0xba, 0xa8, 0xad, 0xfc, 0x75, 0x51, 0x5b, 0xf9, 0xe6, 0xab, 0x90, - 0xca, 0xde, 0xb0, 0xeb, 0xf8, 0x2c, 0x72, 0xbf, 0x98, 0xb6, 0x78, 0x44, 0xba, 0x22, 0xfd, 0xbc, - 0x7a, 0xe8, 0x33, 0x0e, 0x59, 0xb3, 0x47, 0x68, 0xec, 0x46, 0x2c, 0x18, 0x0e, 0x40, 0x5c, 0xf9, - 0xf6, 0x92, 0xe3, 0x04, 0x44, 0x77, 0x4d, 0x7d, 0x5b, 0x7d, 0xfa, 0x6f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x89, 0x70, 0x57, 0xeb, 0x9e, 0x0a, 0x00, 0x00, + // 905 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0x3f, 0x6f, 0xdb, 0x46, + 0x14, 0x37, 0xe3, 0xc8, 0xb1, 0x2e, 0x4e, 0x95, 0x5c, 0x5d, 0x84, 0x96, 0x1b, 0xd9, 0x50, 0xd1, + 0xc2, 0x51, 0x10, 0x12, 0x72, 0x01, 0x03, 0xd5, 0x66, 0x6b, 0x69, 0x81, 0x38, 0x4d, 0xe9, 0xd4, + 0x43, 0x11, 0x54, 0x38, 0x91, 0x0f, 0x14, 0x2b, 0x91, 0x47, 0xdc, 0x9d, 0xe8, 0x6a, 0x4a, 0x91, + 0x6e, 0x9d, 0xfa, 0x51, 0x3c, 0x74, 0x6d, 0xe7, 0x8c, 0x41, 0xa7, 0x4e, 0x41, 0x61, 0x0f, 0xde, + 0xfb, 0x09, 0x0a, 0xde, 0x9d, 0x44, 0x9a, 0x56, 0x23, 0xa9, 0xce, 0x22, 0xf1, 0xfd, 0xfb, 0xbd, + 0xf7, 0xbb, 0xf7, 0x1e, 0x79, 0xe8, 0xb3, 0x20, 0xfa, 0x01, 0x5c, 0x11, 0x24, 0x60, 0xc7, 0xc0, + 0xc2, 0x80, 0xf3, 0x80, 0x46, 0xdc, 0x4e, 0x9a, 0x5d, 0x10, 0xa4, 0x69, 0x8b, 0x1f, 0xad, 0x98, + 0x51, 0x41, 0xf1, 0x83, 0x89, 0x9f, 0x95, 0xf3, 0xb3, 0xb4, 0x5f, 0x75, 0xdd, 0xa7, 0x3e, 0x95, + 0x9e, 0x76, 0xfa, 0xa4, 0x82, 0xaa, 0x35, 0x97, 0xf2, 0x90, 0x72, 0xbb, 0x4b, 0x38, 0x4c, 0x20, + 0x5d, 0x1a, 0x44, 0x57, 0xec, 0x51, 0x7f, 0x62, 0x4f, 0x05, 0x6d, 0xbf, 0xaf, 0xed, 0x21, 0xf7, + 0xed, 0xa4, 0x99, 0xfe, 0x69, 0xc3, 0x86, 0x32, 0x74, 0x54, 0x46, 0x25, 0x68, 0x53, 0xe3, 0xdd, + 0x84, 0x62, 0xc2, 0x48, 0x38, 0xf6, 0xb5, 0x67, 0xf8, 0xe6, 0x88, 0xaa, 0x80, 0x7b, 0x24, 0x0c, + 0x22, 0x6a, 0xcb, 0x5f, 0xa5, 0xaa, 0xff, 0x61, 0xa0, 0xca, 0x21, 0xf7, 0xbf, 0x8d, 0x3d, 0x22, + 0xe0, 0x99, 0x44, 0xc7, 0x7b, 0xa8, 0x4c, 0x86, 0xa2, 0x47, 0x59, 0x20, 0x46, 0xa6, 0xb1, 0x6d, + 0xec, 0x94, 0x0f, 0xcc, 0x3f, 0x7f, 0x7b, 0xbc, 0xae, 0x0b, 0xdd, 0xf7, 0x3c, 0x06, 0x9c, 0x1f, + 0x09, 0x16, 0x44, 0xbe, 0x93, 0xb9, 0xe2, 0x36, 0x5a, 0x51, 0xf5, 0x99, 0x37, 0xb6, 0x8d, 0x9d, + 0xdb, 0xbb, 0x9f, 0x5a, 0xef, 0x3c, 0x75, 0x4b, 0xa5, 0x3b, 0xb8, 0xf9, 0xfa, 0xed, 0xd6, 0x92, + 0xa3, 0x43, 0x5b, 0xd6, 0xab, 0x8b, 0xd3, 0x46, 0x06, 0xfa, 0xcb, 0xc5, 0x69, 0x63, 0x33, 0xcf, + 0xae, 0x50, 0x6c, 0x7d, 0x03, 0xdd, 0x2f, 0xa8, 0x1c, 0xe0, 0x31, 0x8d, 0x38, 0xd4, 0x7f, 0x37, + 0x10, 0x3e, 0xe4, 0x7e, 0x9b, 0x01, 0x11, 0xf0, 0x94, 0x84, 0xc0, 0x63, 0xe2, 0x02, 0x7e, 0x88, + 0x56, 0x38, 0x44, 0x1e, 0x30, 0xcd, 0xed, 0xde, 0x3f, 0x6f, 0xb7, 0xee, 0x8c, 0x48, 0x38, 0x68, + 0xd5, 0x95, 0xbe, 0xee, 0x68, 0x07, 0xfc, 0x04, 0x95, 0xa3, 0x71, 0x9c, 0x26, 0xb5, 0x33, 0x83, + 0xd4, 0x24, 0x8f, 0xe6, 0x95, 0x01, 0x28, 0x6a, 0x1a, 0x3a, 0xe5, 0x55, 0x2b, 0xf0, 0x2a, 0x14, + 0x5a, 0xff, 0x18, 0x55, 0xaf, 0x6a, 0x27, 0xec, 0xce, 0x4a, 0x92, 0x9d, 0x62, 0xfe, 0xbf, 0xd8, + 0xad, 0xa3, 0x92, 0x07, 0x11, 0x0d, 0x25, 0xb3, 0xb2, 0xa3, 0x04, 0xfc, 0x3d, 0x2a, 0x9f, 0x10, + 0x1e, 0x76, 0x7a, 0x94, 0xf6, 0xcd, 0x65, 0xc9, 0x79, 0x7f, 0x06, 0xe7, 0xab, 0x65, 0x58, 0x47, + 0x20, 0xda, 0x34, 0x12, 0x8c, 0xb8, 0xe2, 0x4b, 0x4a, 0xfb, 0xce, 0x6a, 0x8a, 0x99, 0x3e, 0xe1, + 0xa7, 0xe8, 0x2e, 0xa3, 0x03, 0xe8, 0xe4, 0x80, 0xcc, 0x9b, 0xdb, 0xcb, 0x3b, 0xb7, 0x77, 0x3f, + 0x99, 0x91, 0xc6, 0xa1, 0x03, 0x70, 0x2a, 0x69, 0xf0, 0xb3, 0xcc, 0x8a, 0xbf, 0x46, 0x77, 0x24, + 0x5e, 0x48, 0x22, 0xe2, 0x03, 0xe3, 0x66, 0x49, 0x82, 0x35, 0xe6, 0x00, 0x3b, 0x54, 0x21, 0xce, + 0x1a, 0xcb, 0x04, 0x8e, 0x9f, 0xa3, 0x4a, 0x4c, 0x07, 0x81, 0x3b, 0xea, 0x70, 0x41, 0xc4, 0x90, + 0x03, 0x37, 0x57, 0x24, 0xe4, 0xa3, 0x59, 0xf3, 0x2c, 0xa3, 0x8e, 0x64, 0x90, 0xf3, 0x41, 0x9c, + 0x93, 0x80, 0xe3, 0x04, 0x6d, 0x6a, 0x54, 0x5d, 0x68, 0xc7, 0x25, 0x31, 0xe9, 0x06, 0x83, 0x40, + 0x04, 0xc0, 0xcd, 0x5b, 0x32, 0xc3, 0xde, 0x5c, 0x19, 0x74, 0xa5, 0xed, 0x71, 0xfc, 0xc8, 0xd9, + 0x88, 0xa7, 0x1a, 0x02, 0xe0, 0xf8, 0x05, 0x5a, 0x85, 0x44, 0x77, 0x73, 0xf5, 0x7d, 0x75, 0xf3, + 0x16, 0x24, 0xb2, 0x99, 0x55, 0x0b, 0x55, 0x0a, 0x36, 0xbc, 0x89, 0xca, 0x11, 0x9c, 0x74, 0x12, + 0x32, 0x18, 0x82, 0x9a, 0x41, 0x67, 0x35, 0x82, 0x93, 0xe3, 0x54, 0x9e, 0xb9, 0x02, 0x85, 0xc4, + 0x7a, 0x05, 0x0a, 0xda, 0x6c, 0xc1, 0x6f, 0xa0, 0x0f, 0x27, 0xe6, 0x7d, 0x57, 0x50, 0x96, 0x76, + 0x95, 0x5f, 0x7f, 0x07, 0x8e, 0x11, 0x96, 0x33, 0x45, 0x52, 0x4c, 0xde, 0x11, 0xb4, 0x43, 0x3c, + 0xcf, 0x5c, 0x96, 0x3d, 0x7a, 0x38, 0xc7, 0x60, 0xc9, 0x5a, 0xb8, 0x9a, 0x55, 0xf5, 0xfc, 0x9c, + 0xee, 0x7b, 0x1e, 0x7e, 0x81, 0x3e, 0x2a, 0xe0, 0x32, 0x48, 0x68, 0x1f, 0xf4, 0xcc, 0x2e, 0x00, + 0x8d, 0xf3, 0xd0, 0x8e, 0x04, 0x69, 0xd9, 0x85, 0xc3, 0xdd, 0x9a, 0x7a, 0xb8, 0xd9, 0x39, 0xd5, + 0x1f, 0xa0, 0xcd, 0x29, 0xea, 0xc9, 0xf1, 0xbe, 0x94, 0x9f, 0x86, 0xf6, 0x80, 0x04, 0xe1, 0x31, + 0x1d, 0xba, 0x3d, 0x60, 0xd7, 0x3e, 0xd9, 0xd6, 0xa3, 0x42, 0x8d, 0xc5, 0x77, 0x7b, 0x3e, 0x9b, + 0x7e, 0xb7, 0xe7, 0x55, 0xe3, 0xda, 0x76, 0x7f, 0x2e, 0xa1, 0xe5, 0x43, 0xee, 0xe3, 0x04, 0xad, + 0x5d, 0xfa, 0x76, 0x59, 0xf3, 0x0e, 0xb7, 0xf2, 0xaf, 0xee, 0x2d, 0xe6, 0x3f, 0xce, 0x8f, 0x5f, + 0xa2, 0x4a, 0xf1, 0xbb, 0xd2, 0x9c, 0x0d, 0x55, 0x08, 0xa9, 0x7e, 0xb1, 0x70, 0x48, 0xbe, 0x80, + 0xe2, 0xab, 0xbf, 0xb9, 0xf0, 0x62, 0xcf, 0x53, 0xc0, 0x7f, 0x2c, 0x1f, 0x7e, 0x65, 0xa0, 0xbb, + 0x57, 0x36, 0x6f, 0x77, 0x5e, 0xbc, 0x2c, 0xa6, 0xda, 0x5a, 0x3c, 0x66, 0x52, 0x44, 0x82, 0xd6, + 0x2e, 0xcd, 0xe7, 0x1c, 0xed, 0xcf, 0xfb, 0xcf, 0xd3, 0xfe, 0x69, 0xe3, 0x57, 0x2d, 0xfd, 0x74, + 0x71, 0xda, 0x30, 0x0e, 0xfa, 0xaf, 0xcf, 0x6a, 0xc6, 0x9b, 0xb3, 0x9a, 0xf1, 0xf7, 0x59, 0xcd, + 0xf8, 0xf5, 0xbc, 0xb6, 0xf4, 0xe6, 0xbc, 0xb6, 0xf4, 0xd7, 0x79, 0x6d, 0xe9, 0xbb, 0x6f, 0xfc, + 0x40, 0xf4, 0x86, 0x5d, 0xcb, 0xa5, 0xa1, 0xfd, 0xd5, 0x38, 0xc5, 0x13, 0xd2, 0xe5, 0xd9, 0xa5, + 0xed, 0xb1, 0x4b, 0x19, 0xe4, 0xc5, 0x1e, 0x09, 0x22, 0x3b, 0xa4, 0xde, 0x70, 0x00, 0xfc, 0xd2, + 0x8d, 0x4e, 0x8c, 0x62, 0xe0, 0xdd, 0x15, 0x79, 0x63, 0xfb, 0xfc, 0xdf, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x59, 0x0f, 0x9c, 0xb6, 0xf4, 0x0a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1040,6 +1050,18 @@ func (m *MsgUpdateNamespace) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.EvmHook != nil { + { + size, err := m.EvmHook.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } if len(m.PolicyManagerCapabilities) > 0 { for iNdEx := len(m.PolicyManagerCapabilities) - 1; iNdEx >= 0; iNdEx-- { { @@ -1096,9 +1118,9 @@ func (m *MsgUpdateNamespace) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x22 } } - if m.ContractHook != nil { + if m.WasmHook != nil { { - size, err := m.ContractHook.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.WasmHook.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -1399,8 +1421,8 @@ func (m *MsgUpdateNamespace) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - if m.ContractHook != nil { - l = m.ContractHook.Size() + if m.WasmHook != nil { + l = m.WasmHook.Size() n += 1 + l + sovTx(uint64(l)) } if len(m.RolePermissions) > 0 { @@ -1427,6 +1449,10 @@ func (m *MsgUpdateNamespace) Size() (n int) { n += 1 + l + sovTx(uint64(l)) } } + if m.EvmHook != nil { + l = m.EvmHook.Size() + n += 1 + l + sovTx(uint64(l)) + } return n } @@ -1947,7 +1973,7 @@ func (m *MsgUpdateNamespace) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ContractHook", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field WasmHook", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -1974,10 +2000,10 @@ func (m *MsgUpdateNamespace) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ContractHook == nil { - m.ContractHook = &MsgUpdateNamespace_SetContractHook{} + if m.WasmHook == nil { + m.WasmHook = &MsgUpdateNamespace_SetContractHook{} } - if err := m.ContractHook.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.WasmHook.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -2117,6 +2143,42 @@ func (m *MsgUpdateNamespace) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EvmHook", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.EvmHook == nil { + m.EvmHook = &MsgUpdateNamespace_SetContractHook{} + } + if err := m.EvmHook.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) diff --git a/client/chain/chain.go b/client/chain/chain.go index 26d5d8cf..6e60fc04 100644 --- a/client/chain/chain.go +++ b/client/chain/chain.go @@ -71,6 +71,7 @@ var ( ErrReadOnly = errors.New("client is in read-only mode") ) +// Deprecated: ChainClient is deprecated. Use ChainClientV2 instead. type ChainClient interface { CanSignTransactions() bool FromAddress() sdk.AccAddress @@ -333,6 +334,7 @@ type ChainClient interface { var _ ChainClient = &chainClient{} +// Deprecated: chainClient is deprecated. Use ChainClientV2 instead. type chainClient struct { ctx sdkclient.Context network common.Network @@ -380,6 +382,7 @@ type chainClient struct { canSign bool } +// Deprecated: NewChainClient is deprecated. Use NewChainClientV2 instead. func NewChainClient( ctx sdkclient.Context, network common.Network, diff --git a/client/exchange/exchange.go b/client/exchange/exchange.go index 9c4e17d8..cd34a6a8 100644 --- a/client/exchange/exchange.go +++ b/client/exchange/exchange.go @@ -49,7 +49,7 @@ type ExchangeClient interface { GetDerivativeFundingRates(ctx context.Context, req *derivativeExchangePB.FundingRatesRequest) (*derivativeExchangePB.FundingRatesResponse, error) GetPrice(ctx context.Context, baseSymbol string, quoteSymbol string, oracleType string, oracleScaleFactor uint32) (*oraclePB.PriceResponse, error) FetchPriceV2(ctx context.Context, filters []*oraclePB.PricePayloadV2) (*oraclePB.PriceV2Response, error) - GetOracleList(ctx context.Context) (*oraclePB.OracleListResponse, error) + GetOracleList(ctx context.Context, symbol, oracleType, token string, perPage int32) (*oraclePB.OracleListResponse, error) StreamPrices(ctx context.Context, baseSymbol string, quoteSymbol string, oracleType string) (oraclePB.InjectiveOracleRPC_StreamPricesClient, error) GetAuction(ctx context.Context, round int64) (*auctionPB.AuctionEndpointResponse, error) GetAuctions(ctx context.Context) (*auctionPB.AuctionsResponse, error) @@ -471,8 +471,13 @@ func (c *exchangeClient) FetchPriceV2(ctx context.Context, filters []*oraclePB.P return res, nil } -func (c *exchangeClient) GetOracleList(ctx context.Context) (*oraclePB.OracleListResponse, error) { - req := oraclePB.OracleListRequest{} +func (c *exchangeClient) GetOracleList(ctx context.Context, symbol, oracleType, token string, perPage int32) (*oraclePB.OracleListResponse, error) { + req := oraclePB.OracleListRequest{ + Symbol: symbol, + OracleType: oracleType, + Token: token, + PerPage: perPage, + } res, err := common.ExecuteCall(ctx, c.network.ExchangeCookieAssistant, c.oracleClient.OracleList, &req) if err != nil { diff --git a/examples/chain/14_HistoricalQueryByHeight/example.go b/examples/chain/14_HistoricalQueryByHeight/example.go index 31540c3b..b9ecdee8 100644 --- a/examples/chain/14_HistoricalQueryByHeight/example.go +++ b/examples/chain/14_HistoricalQueryByHeight/example.go @@ -7,13 +7,11 @@ import ( "os" "strconv" - "google.golang.org/grpc/metadata" - - grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" - rpchttp "github.com/cometbft/cometbft/rpc/client/http" + grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" + "google.golang.org/grpc/metadata" - "github.com/InjectiveLabs/sdk-go/chain/exchange/types" + exchangev2types "github.com/InjectiveLabs/sdk-go/chain/exchange/types/v2" "github.com/InjectiveLabs/sdk-go/client" chainclient "github.com/InjectiveLabs/sdk-go/client/chain" "github.com/InjectiveLabs/sdk-go/client/common" @@ -53,7 +51,7 @@ func main() { clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) - chainClient, err := chainclient.NewChainClient( + chainClient, err := chainclient.NewChainClientV2( clientCtx, network, common.OptionGasPrices(client.DefaultGasPriceWithDenom), @@ -115,11 +113,11 @@ func main() { } func fetchSpotMarketsAtHeight( - chainClient chainclient.ChainClient, + chainClient chainclient.ChainClientV2, height int64, status string, marketIds []string, -) (*types.QuerySpotMarketsResponse, error) { +) (*exchangev2types.QuerySpotMarketsResponse, error) { ctx := context.Background() ctxWithHeight := metadata.AppendToOutgoingContext( diff --git a/examples/chain/permissions/1_MsgCreateNamespace/example.go b/examples/chain/permissions/1_MsgCreateNamespace/example.go index 46ec35bb..ce0c9526 100644 --- a/examples/chain/permissions/1_MsgCreateNamespace/example.go +++ b/examples/chain/permissions/1_MsgCreateNamespace/example.go @@ -119,12 +119,13 @@ func main() { namespace := permissionstypes.Namespace{ Denom: denom, - ContractHook: "", + WasmHook: "", RolePermissions: []*permissionstypes.Role{&role1, &role2, &role3}, ActorRoles: []*permissionstypes.ActorRoles{&actor_role1, &actor_role2}, RoleManagers: []*permissionstypes.RoleManager{&role_manager}, PolicyStatuses: []*permissionstypes.PolicyStatus{&policy_status1, &policy_status2}, PolicyManagerCapabilities: []*permissionstypes.PolicyManagerCapability{&policy_manager_capability}, + EvmHook: "", } msg := &permissionstypes.MsgCreateNamespace{ diff --git a/examples/chain/permissions/2_MsgUpdateNamespace/example.go b/examples/chain/permissions/2_MsgUpdateNamespace/example.go index ed477dfd..a2b7533a 100644 --- a/examples/chain/permissions/2_MsgUpdateNamespace/example.go +++ b/examples/chain/permissions/2_MsgUpdateNamespace/example.go @@ -103,7 +103,7 @@ func main() { msg := &permissionstypes.MsgUpdateNamespace{ Sender: senderAddress.String(), Denom: denom, - ContractHook: &permissionstypes.MsgUpdateNamespace_SetContractHook{NewValue: "inj19ld6swyldyujcn72j7ugnu9twafhs9wxlyye5m"}, + WasmHook: &permissionstypes.MsgUpdateNamespace_SetContractHook{NewValue: "inj19ld6swyldyujcn72j7ugnu9twafhs9wxlyye5m"}, RolePermissions: []*permissionstypes.Role{&role1, &role2}, RoleManagers: []*permissionstypes.RoleManager{&role_manager}, PolicyStatuses: []*permissionstypes.PolicyStatus{&policy_status1, &policy_status2}, diff --git a/examples/exchange/oracle/3_OracleList/example.go b/examples/exchange/oracle/3_OracleList/example.go index 1e40cec2..a066531e 100644 --- a/examples/exchange/oracle/3_OracleList/example.go +++ b/examples/exchange/oracle/3_OracleList/example.go @@ -16,8 +16,11 @@ func main() { panic(err) } + symbol := "PYTH/USDT" + oracleType := "pricefeed" + ctx := context.Background() - res, err := exchangeClient.GetOracleList(ctx) + res, err := exchangeClient.GetOracleList(ctx, symbol, oracleType, "", 0) if err != nil { fmt.Println(err) } diff --git a/exchange/auction_rpc/pb/goadesign_goagen_injective_auction_rpc.pb.go b/exchange/auction_rpc/pb/goadesign_goagen_injective_auction_rpc.pb.go index 0b2fcd07..38964e22 100644 --- a/exchange/auction_rpc/pb/goadesign_goagen_injective_auction_rpc.pb.go +++ b/exchange/auction_rpc/pb/goadesign_goagen_injective_auction_rpc.pb.go @@ -319,6 +319,8 @@ type AuctionContract struct { EndTimestamp uint64 `protobuf:"varint,9,opt,name=end_timestamp,json=endTimestamp,proto3" json:"end_timestamp,omitempty"` // Max round allocation of the auction MaxRoundAllocation string `protobuf:"bytes,10,opt,name=max_round_allocation,json=maxRoundAllocation,proto3" json:"max_round_allocation,omitempty"` + // Whether any bid has been placed in the auction. + IsBidPlaced bool `protobuf:"varint,11,opt,name=is_bid_placed,json=isBidPlaced,proto3" json:"is_bid_placed,omitempty"` } func (x *AuctionContract) Reset() { @@ -423,6 +425,13 @@ func (x *AuctionContract) GetMaxRoundAllocation() string { return "" } +func (x *AuctionContract) GetIsBidPlaced() bool { + if x != nil { + return x.IsBidPlaced + } + return false +} + type Bid struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1234,6 +1243,111 @@ func (x *AccountAuctionV2) GetClaimedAssets() []*CoinPrices { return nil } +type AuctionAccountStatusRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The auction round number + Round int64 `protobuf:"zigzag64,1,opt,name=round,proto3" json:"round,omitempty"` + // Address of account + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *AuctionAccountStatusRequest) Reset() { + *x = AuctionAccountStatusRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionAccountStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionAccountStatusRequest) ProtoMessage() {} + +func (x *AuctionAccountStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionAccountStatusRequest.ProtoReflect.Descriptor instead. +func (*AuctionAccountStatusRequest) Descriptor() ([]byte, []int) { + return file_goadesign_goagen_injective_auction_rpc_proto_rawDescGZIP(), []int{17} +} + +func (x *AuctionAccountStatusRequest) GetRound() int64 { + if x != nil { + return x.Round + } + return 0 +} + +func (x *AuctionAccountStatusRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type AuctionAccountStatusResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The allowlist status of the account + Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *AuctionAccountStatusResponse) Reset() { + *x = AuctionAccountStatusResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionAccountStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionAccountStatusResponse) ProtoMessage() {} + +func (x *AuctionAccountStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionAccountStatusResponse.ProtoReflect.Descriptor instead. +func (*AuctionAccountStatusResponse) Descriptor() ([]byte, []int) { + return file_goadesign_goagen_injective_auction_rpc_proto_rawDescGZIP(), []int{18} +} + +func (x *AuctionAccountStatusResponse) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + type StreamBidsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1243,7 +1357,7 @@ type StreamBidsRequest struct { func (x *StreamBidsRequest) Reset() { *x = StreamBidsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[17] + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1256,7 +1370,7 @@ func (x *StreamBidsRequest) String() string { func (*StreamBidsRequest) ProtoMessage() {} func (x *StreamBidsRequest) ProtoReflect() protoreflect.Message { - mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[17] + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1269,7 +1383,7 @@ func (x *StreamBidsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamBidsRequest.ProtoReflect.Descriptor instead. func (*StreamBidsRequest) Descriptor() ([]byte, []int) { - return file_goadesign_goagen_injective_auction_rpc_proto_rawDescGZIP(), []int{17} + return file_goadesign_goagen_injective_auction_rpc_proto_rawDescGZIP(), []int{19} } type StreamBidsResponse struct { @@ -1288,7 +1402,7 @@ type StreamBidsResponse struct { func (x *StreamBidsResponse) Reset() { *x = StreamBidsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[18] + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1301,7 +1415,7 @@ func (x *StreamBidsResponse) String() string { func (*StreamBidsResponse) ProtoMessage() {} func (x *StreamBidsResponse) ProtoReflect() protoreflect.Message { - mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[18] + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1314,7 +1428,7 @@ func (x *StreamBidsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamBidsResponse.ProtoReflect.Descriptor instead. func (*StreamBidsResponse) Descriptor() ([]byte, []int) { - return file_goadesign_goagen_injective_auction_rpc_proto_rawDescGZIP(), []int{18} + return file_goadesign_goagen_injective_auction_rpc_proto_rawDescGZIP(), []int{20} } func (x *StreamBidsResponse) GetBidder() string { @@ -1354,7 +1468,7 @@ type InjBurntEndpointRequest struct { func (x *InjBurntEndpointRequest) Reset() { *x = InjBurntEndpointRequest{} if protoimpl.UnsafeEnabled { - mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[19] + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1367,7 +1481,7 @@ func (x *InjBurntEndpointRequest) String() string { func (*InjBurntEndpointRequest) ProtoMessage() {} func (x *InjBurntEndpointRequest) ProtoReflect() protoreflect.Message { - mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[19] + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1380,7 +1494,7 @@ func (x *InjBurntEndpointRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InjBurntEndpointRequest.ProtoReflect.Descriptor instead. func (*InjBurntEndpointRequest) Descriptor() ([]byte, []int) { - return file_goadesign_goagen_injective_auction_rpc_proto_rawDescGZIP(), []int{19} + return file_goadesign_goagen_injective_auction_rpc_proto_rawDescGZIP(), []int{21} } type InjBurntEndpointResponse struct { @@ -1394,7 +1508,7 @@ type InjBurntEndpointResponse struct { func (x *InjBurntEndpointResponse) Reset() { *x = InjBurntEndpointResponse{} if protoimpl.UnsafeEnabled { - mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[20] + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1407,7 +1521,7 @@ func (x *InjBurntEndpointResponse) String() string { func (*InjBurntEndpointResponse) ProtoMessage() {} func (x *InjBurntEndpointResponse) ProtoReflect() protoreflect.Message { - mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[20] + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1420,7 +1534,7 @@ func (x *InjBurntEndpointResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InjBurntEndpointResponse.ProtoReflect.Descriptor instead. func (*InjBurntEndpointResponse) Descriptor() ([]byte, []int) { - return file_goadesign_goagen_injective_auction_rpc_proto_rawDescGZIP(), []int{20} + return file_goadesign_goagen_injective_auction_rpc_proto_rawDescGZIP(), []int{22} } func (x *InjBurntEndpointResponse) GetTotalInjBurnt() string { @@ -1439,7 +1553,7 @@ type AuctionsStatsRequest struct { func (x *AuctionsStatsRequest) Reset() { *x = AuctionsStatsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[21] + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1452,7 +1566,7 @@ func (x *AuctionsStatsRequest) String() string { func (*AuctionsStatsRequest) ProtoMessage() {} func (x *AuctionsStatsRequest) ProtoReflect() protoreflect.Message { - mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[21] + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1465,7 +1579,7 @@ func (x *AuctionsStatsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AuctionsStatsRequest.ProtoReflect.Descriptor instead. func (*AuctionsStatsRequest) Descriptor() ([]byte, []int) { - return file_goadesign_goagen_injective_auction_rpc_proto_rawDescGZIP(), []int{21} + return file_goadesign_goagen_injective_auction_rpc_proto_rawDescGZIP(), []int{23} } type AuctionsStatsResponse struct { @@ -1482,7 +1596,7 @@ type AuctionsStatsResponse struct { func (x *AuctionsStatsResponse) Reset() { *x = AuctionsStatsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[22] + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1495,7 +1609,7 @@ func (x *AuctionsStatsResponse) String() string { func (*AuctionsStatsResponse) ProtoMessage() {} func (x *AuctionsStatsResponse) ProtoReflect() protoreflect.Message { - mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[22] + mi := &file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1508,7 +1622,7 @@ func (x *AuctionsStatsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AuctionsStatsResponse.ProtoReflect.Descriptor instead. func (*AuctionsStatsResponse) Descriptor() ([]byte, []int) { - return file_goadesign_goagen_injective_auction_rpc_proto_rawDescGZIP(), []int{22} + return file_goadesign_goagen_injective_auction_rpc_proto_rawDescGZIP(), []int{24} } func (x *AuctionsStatsResponse) GetTotalBurnt() string { @@ -1567,7 +1681,7 @@ var file_goadesign_goagen_injective_auction_rpc_proto_rawDesc = []byte{ 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x64, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x90, 0x03, 0x0a, 0x0f, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6c, 0x75, 0x65, 0x22, 0xb4, 0x03, 0x0a, 0x0f, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x69, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x69, 0x64, @@ -1592,201 +1706,220 @@ var file_goadesign_goagen_injective_auction_rpc_proto_rawDesc = []byte{ 0x74, 0x61, 0x6d, 0x70, 0x12, 0x30, 0x0a, 0x14, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x53, 0x0a, 0x03, 0x42, 0x69, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, - 0x69, 0x64, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x12, - 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x11, 0x0a, 0x0f, 0x41, - 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4e, - 0x0a, 0x10, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x66, - 0x0a, 0x18, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x65, - 0x72, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, 0x52, 0x07, 0x70, 0x65, - 0x72, 0x50, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x65, - 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, 0x65, - 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x73, 0x0a, 0x19, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x08, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x62, 0x69, 0x64, + 0x5f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, + 0x73, 0x42, 0x69, 0x64, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x22, 0x53, 0x0a, 0x03, 0x42, 0x69, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, + 0x11, 0x0a, 0x0f, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x4e, 0x0a, 0x10, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, + 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x22, 0x66, 0x0a, 0x18, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x72, 0x79, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, + 0x0a, 0x08, 0x70, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, + 0x52, 0x07, 0x70, 0x65, 0x72, 0x50, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, + 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x12, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x73, 0x0a, 0x19, 0x41, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x56, 0x32, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x08, 0x61, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x6e, 0x6a, 0x65, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, + 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x52, 0x08, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x22, + 0xe5, 0x02, 0x0a, 0x0f, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x06, 0x62, + 0x61, 0x73, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x6e, + 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x06, + 0x62, 0x61, 0x73, 0x6b, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, + 0x67, 0x5f, 0x62, 0x69, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x10, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x42, 0x69, 0x64, 0x41, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, + 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x12, 0x52, 0x0c, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x12, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x42, + 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, + 0x63, 0x74, 0x12, 0x33, 0x0a, 0x16, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x69, + 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x75, 0x73, 0x64, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x13, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x42, 0x69, 0x64, 0x41, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x73, 0x64, 0x22, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x6f, 0x69, 0x6e, + 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x69, + 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x28, 0x0a, 0x10, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, + 0x75, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x12, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, + 0x22, 0xe7, 0x02, 0x0a, 0x11, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x39, + 0x0a, 0x06, 0x62, 0x61, 0x73, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x73, 0x52, 0x06, 0x62, 0x61, 0x73, 0x6b, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x77, 0x69, 0x6e, + 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x69, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x42, 0x69, + 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x23, 0x0a, + 0x0d, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x12, 0x52, 0x0c, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x42, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x52, 0x08, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x61, 0x63, 0x74, 0x12, 0x33, 0x0a, 0x16, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, + 0x5f, 0x62, 0x69, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x75, 0x73, 0x64, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x42, 0x69, + 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x55, 0x73, 0x64, 0x22, 0x65, 0x0a, 0x18, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x19, 0x0a, 0x08, 0x70, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x11, 0x52, 0x07, 0x70, 0x65, 0x72, 0x50, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x22, 0x8a, 0x01, 0x0a, 0x19, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x75, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x43, 0x0a, 0x08, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x08, 0x61, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x12, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xd0, + 0x01, 0x0a, 0x10, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x32, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x48, 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x65, 0x64, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x73, 0x52, 0x0d, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, + 0x73, 0x22, 0x4d, 0x0a, 0x1b, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x12, 0x52, + 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x22, 0x36, 0x0a, 0x1c, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x42, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x7f, 0x0a, + 0x12, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x69, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x62, + 0x69, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x62, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, + 0x75, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, + 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x12, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x19, + 0x0a, 0x17, 0x49, 0x6e, 0x6a, 0x42, 0x75, 0x72, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x42, 0x0a, 0x18, 0x49, 0x6e, 0x6a, + 0x42, 0x75, 0x72, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x69, + 0x6e, 0x6a, 0x5f, 0x62, 0x75, 0x72, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x6a, 0x42, 0x75, 0x72, 0x6e, 0x74, 0x22, 0x16, 0x0a, + 0x14, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x60, 0x0a, 0x15, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x75, 0x72, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x75, 0x72, 0x6e, 0x74, 0x12, + 0x26, 0x0a, 0x0f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x64, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, + 0x73, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x32, 0xfb, 0x07, 0x0a, 0x13, 0x49, 0x6e, 0x6a, 0x65, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x50, 0x43, 0x12, + 0x70, 0x0a, 0x0f, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, + 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2e, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x5b, 0x0a, 0x08, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x2e, + 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x08, 0x61, - 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x22, 0xe5, 0x02, 0x0a, 0x0f, - 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x06, 0x62, 0x61, 0x73, 0x6b, 0x65, - 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, - 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x06, 0x62, 0x61, 0x73, 0x6b, - 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x69, - 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, - 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x42, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0c, 0x65, - 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x12, 0x52, - 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x42, 0x0a, 0x08, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, + 0x0a, 0x11, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x56, 0x32, 0x12, 0x2f, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x56, 0x32, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x56, 0x32, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x09, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x56, 0x32, 0x12, 0x27, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x12, 0x33, - 0x0a, 0x16, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x69, 0x64, 0x5f, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x75, 0x73, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, - 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x42, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x55, 0x73, 0x64, 0x22, 0xbc, 0x01, 0x0a, 0x0a, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, - 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x45, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2d, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x28, 0x0a, 0x10, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x12, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0xe7, 0x02, 0x0a, - 0x11, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x06, 0x62, 0x61, - 0x73, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x6e, 0x6a, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, - 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x06, 0x62, - 0x61, 0x73, 0x6b, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, - 0x5f, 0x62, 0x69, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x10, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x42, 0x69, 0x64, 0x41, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x64, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x12, - 0x52, 0x0c, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1d, - 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x12, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x42, 0x0a, - 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x12, 0x33, 0x0a, 0x16, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x69, 0x64, - 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x75, 0x73, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x13, 0x77, 0x69, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x42, 0x69, 0x64, 0x41, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x55, 0x73, 0x64, 0x22, 0x65, 0x0a, 0x18, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x19, 0x0a, 0x08, - 0x70, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x11, 0x52, 0x07, - 0x70, 0x65, 0x72, 0x50, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x8a, 0x01, - 0x0a, 0x19, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x61, - 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, - 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x75, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x08, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x12, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xd0, 0x01, 0x0a, 0x10, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x61, - 0x62, 0x6c, 0x65, 0x12, 0x48, 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x5f, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x6e, + 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x11, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x12, 0x2f, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x0d, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x22, 0x13, 0x0a, - 0x11, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x7f, 0x0a, 0x12, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x69, 0x64, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x69, 0x64, 0x64, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x69, 0x64, 0x64, 0x65, 0x72, - 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x69, 0x64, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, - 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x22, 0x19, 0x0a, 0x17, 0x49, 0x6e, 0x6a, 0x42, 0x75, 0x72, 0x6e, 0x74, 0x45, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x42, - 0x0a, 0x18, 0x49, 0x6e, 0x6a, 0x42, 0x75, 0x72, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x6a, 0x5f, 0x62, 0x75, 0x72, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x6a, 0x42, 0x75, 0x72, - 0x6e, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, - 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x60, 0x0a, 0x15, 0x41, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x75, 0x72, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, - 0x75, 0x72, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x73, - 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x73, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x32, 0xfa, 0x06, 0x0a, - 0x13, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x50, 0x43, 0x12, 0x70, 0x0a, 0x0f, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2d, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, - 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, + 0x72, 0x70, 0x63, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x69, + 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7f, + 0x0a, 0x14, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, - 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x08, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x26, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, - 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x69, 0x6e, 0x6a, + 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, - 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x11, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x56, 0x32, 0x12, 0x2f, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, + 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x63, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x69, 0x64, 0x73, 0x12, 0x28, 0x2e, + 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x69, 0x64, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x69, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x30, 0x01, 0x12, 0x73, 0x0a, 0x10, 0x49, 0x6e, 0x6a, 0x42, 0x75, 0x72, 0x6e, 0x74, + 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, - 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x69, 0x6e, 0x6a, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, - 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x09, 0x41, - 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x12, 0x27, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, + 0x2e, 0x49, 0x6e, 0x6a, 0x42, 0x75, 0x72, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, - 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x28, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x11, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, - 0x12, 0x2f, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x30, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x69, 0x64, - 0x73, 0x12, 0x28, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x42, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x69, 0x6e, - 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x69, 0x64, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x73, 0x0a, 0x10, 0x49, 0x6e, 0x6a, 0x42, - 0x75, 0x72, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x69, - 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x6a, 0x42, 0x75, 0x72, 0x6e, 0x74, 0x45, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x69, - 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x49, 0x6e, 0x6a, 0x42, 0x75, 0x72, 0x6e, 0x74, 0x45, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, - 0x0d, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2b, - 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, - 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x69, 0x6e, - 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x72, 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x1a, 0x5a, 0x18, 0x2f, 0x69, 0x6e, - 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x72, 0x70, 0x63, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x49, 0x6e, 0x6a, 0x42, 0x75, 0x72, 0x6e, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x0d, 0x41, 0x75, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x69, 0x6e, 0x6a, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, + 0x70, 0x63, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x2e, + 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x1a, 0x5a, 0x18, 0x2f, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x70, + 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1801,32 +1934,34 @@ func file_goadesign_goagen_injective_auction_rpc_proto_rawDescGZIP() []byte { return file_goadesign_goagen_injective_auction_rpc_proto_rawDescData } -var file_goadesign_goagen_injective_auction_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 24) +var file_goadesign_goagen_injective_auction_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 26) var file_goadesign_goagen_injective_auction_rpc_proto_goTypes = []interface{}{ - (*AuctionEndpointRequest)(nil), // 0: injective_auction_rpc.AuctionEndpointRequest - (*AuctionEndpointResponse)(nil), // 1: injective_auction_rpc.AuctionEndpointResponse - (*Auction)(nil), // 2: injective_auction_rpc.Auction - (*Coin)(nil), // 3: injective_auction_rpc.Coin - (*AuctionContract)(nil), // 4: injective_auction_rpc.AuctionContract - (*Bid)(nil), // 5: injective_auction_rpc.Bid - (*AuctionsRequest)(nil), // 6: injective_auction_rpc.AuctionsRequest - (*AuctionsResponse)(nil), // 7: injective_auction_rpc.AuctionsResponse - (*AuctionsHistoryV2Request)(nil), // 8: injective_auction_rpc.AuctionsHistoryV2Request - (*AuctionsHistoryV2Response)(nil), // 9: injective_auction_rpc.AuctionsHistoryV2Response - (*AuctionV2Result)(nil), // 10: injective_auction_rpc.AuctionV2Result - (*CoinPrices)(nil), // 11: injective_auction_rpc.CoinPrices - (*AuctionV2Request)(nil), // 12: injective_auction_rpc.AuctionV2Request - (*AuctionV2Response)(nil), // 13: injective_auction_rpc.AuctionV2Response - (*AccountAuctionsV2Request)(nil), // 14: injective_auction_rpc.AccountAuctionsV2Request - (*AccountAuctionsV2Response)(nil), // 15: injective_auction_rpc.AccountAuctionsV2Response - (*AccountAuctionV2)(nil), // 16: injective_auction_rpc.AccountAuctionV2 - (*StreamBidsRequest)(nil), // 17: injective_auction_rpc.StreamBidsRequest - (*StreamBidsResponse)(nil), // 18: injective_auction_rpc.StreamBidsResponse - (*InjBurntEndpointRequest)(nil), // 19: injective_auction_rpc.InjBurntEndpointRequest - (*InjBurntEndpointResponse)(nil), // 20: injective_auction_rpc.InjBurntEndpointResponse - (*AuctionsStatsRequest)(nil), // 21: injective_auction_rpc.AuctionsStatsRequest - (*AuctionsStatsResponse)(nil), // 22: injective_auction_rpc.AuctionsStatsResponse - nil, // 23: injective_auction_rpc.CoinPrices.PricesEntry + (*AuctionEndpointRequest)(nil), // 0: injective_auction_rpc.AuctionEndpointRequest + (*AuctionEndpointResponse)(nil), // 1: injective_auction_rpc.AuctionEndpointResponse + (*Auction)(nil), // 2: injective_auction_rpc.Auction + (*Coin)(nil), // 3: injective_auction_rpc.Coin + (*AuctionContract)(nil), // 4: injective_auction_rpc.AuctionContract + (*Bid)(nil), // 5: injective_auction_rpc.Bid + (*AuctionsRequest)(nil), // 6: injective_auction_rpc.AuctionsRequest + (*AuctionsResponse)(nil), // 7: injective_auction_rpc.AuctionsResponse + (*AuctionsHistoryV2Request)(nil), // 8: injective_auction_rpc.AuctionsHistoryV2Request + (*AuctionsHistoryV2Response)(nil), // 9: injective_auction_rpc.AuctionsHistoryV2Response + (*AuctionV2Result)(nil), // 10: injective_auction_rpc.AuctionV2Result + (*CoinPrices)(nil), // 11: injective_auction_rpc.CoinPrices + (*AuctionV2Request)(nil), // 12: injective_auction_rpc.AuctionV2Request + (*AuctionV2Response)(nil), // 13: injective_auction_rpc.AuctionV2Response + (*AccountAuctionsV2Request)(nil), // 14: injective_auction_rpc.AccountAuctionsV2Request + (*AccountAuctionsV2Response)(nil), // 15: injective_auction_rpc.AccountAuctionsV2Response + (*AccountAuctionV2)(nil), // 16: injective_auction_rpc.AccountAuctionV2 + (*AuctionAccountStatusRequest)(nil), // 17: injective_auction_rpc.AuctionAccountStatusRequest + (*AuctionAccountStatusResponse)(nil), // 18: injective_auction_rpc.AuctionAccountStatusResponse + (*StreamBidsRequest)(nil), // 19: injective_auction_rpc.StreamBidsRequest + (*StreamBidsResponse)(nil), // 20: injective_auction_rpc.StreamBidsResponse + (*InjBurntEndpointRequest)(nil), // 21: injective_auction_rpc.InjBurntEndpointRequest + (*InjBurntEndpointResponse)(nil), // 22: injective_auction_rpc.InjBurntEndpointResponse + (*AuctionsStatsRequest)(nil), // 23: injective_auction_rpc.AuctionsStatsRequest + (*AuctionsStatsResponse)(nil), // 24: injective_auction_rpc.AuctionsStatsResponse + nil, // 25: injective_auction_rpc.CoinPrices.PricesEntry } var file_goadesign_goagen_injective_auction_rpc_proto_depIdxs = []int32{ 2, // 0: injective_auction_rpc.AuctionEndpointResponse.auction:type_name -> injective_auction_rpc.Auction @@ -1837,7 +1972,7 @@ var file_goadesign_goagen_injective_auction_rpc_proto_depIdxs = []int32{ 10, // 5: injective_auction_rpc.AuctionsHistoryV2Response.auctions:type_name -> injective_auction_rpc.AuctionV2Result 11, // 6: injective_auction_rpc.AuctionV2Result.basket:type_name -> injective_auction_rpc.CoinPrices 4, // 7: injective_auction_rpc.AuctionV2Result.contract:type_name -> injective_auction_rpc.AuctionContract - 23, // 8: injective_auction_rpc.CoinPrices.prices:type_name -> injective_auction_rpc.CoinPrices.PricesEntry + 25, // 8: injective_auction_rpc.CoinPrices.prices:type_name -> injective_auction_rpc.CoinPrices.PricesEntry 11, // 9: injective_auction_rpc.AuctionV2Response.basket:type_name -> injective_auction_rpc.CoinPrices 4, // 10: injective_auction_rpc.AuctionV2Response.contract:type_name -> injective_auction_rpc.AuctionContract 16, // 11: injective_auction_rpc.AccountAuctionsV2Response.auctions:type_name -> injective_auction_rpc.AccountAuctionV2 @@ -1847,19 +1982,21 @@ var file_goadesign_goagen_injective_auction_rpc_proto_depIdxs = []int32{ 8, // 15: injective_auction_rpc.InjectiveAuctionRPC.AuctionsHistoryV2:input_type -> injective_auction_rpc.AuctionsHistoryV2Request 12, // 16: injective_auction_rpc.InjectiveAuctionRPC.AuctionV2:input_type -> injective_auction_rpc.AuctionV2Request 14, // 17: injective_auction_rpc.InjectiveAuctionRPC.AccountAuctionsV2:input_type -> injective_auction_rpc.AccountAuctionsV2Request - 17, // 18: injective_auction_rpc.InjectiveAuctionRPC.StreamBids:input_type -> injective_auction_rpc.StreamBidsRequest - 19, // 19: injective_auction_rpc.InjectiveAuctionRPC.InjBurntEndpoint:input_type -> injective_auction_rpc.InjBurntEndpointRequest - 21, // 20: injective_auction_rpc.InjectiveAuctionRPC.AuctionsStats:input_type -> injective_auction_rpc.AuctionsStatsRequest - 1, // 21: injective_auction_rpc.InjectiveAuctionRPC.AuctionEndpoint:output_type -> injective_auction_rpc.AuctionEndpointResponse - 7, // 22: injective_auction_rpc.InjectiveAuctionRPC.Auctions:output_type -> injective_auction_rpc.AuctionsResponse - 9, // 23: injective_auction_rpc.InjectiveAuctionRPC.AuctionsHistoryV2:output_type -> injective_auction_rpc.AuctionsHistoryV2Response - 13, // 24: injective_auction_rpc.InjectiveAuctionRPC.AuctionV2:output_type -> injective_auction_rpc.AuctionV2Response - 15, // 25: injective_auction_rpc.InjectiveAuctionRPC.AccountAuctionsV2:output_type -> injective_auction_rpc.AccountAuctionsV2Response - 18, // 26: injective_auction_rpc.InjectiveAuctionRPC.StreamBids:output_type -> injective_auction_rpc.StreamBidsResponse - 20, // 27: injective_auction_rpc.InjectiveAuctionRPC.InjBurntEndpoint:output_type -> injective_auction_rpc.InjBurntEndpointResponse - 22, // 28: injective_auction_rpc.InjectiveAuctionRPC.AuctionsStats:output_type -> injective_auction_rpc.AuctionsStatsResponse - 21, // [21:29] is the sub-list for method output_type - 13, // [13:21] is the sub-list for method input_type + 17, // 18: injective_auction_rpc.InjectiveAuctionRPC.AuctionAccountStatus:input_type -> injective_auction_rpc.AuctionAccountStatusRequest + 19, // 19: injective_auction_rpc.InjectiveAuctionRPC.StreamBids:input_type -> injective_auction_rpc.StreamBidsRequest + 21, // 20: injective_auction_rpc.InjectiveAuctionRPC.InjBurntEndpoint:input_type -> injective_auction_rpc.InjBurntEndpointRequest + 23, // 21: injective_auction_rpc.InjectiveAuctionRPC.AuctionsStats:input_type -> injective_auction_rpc.AuctionsStatsRequest + 1, // 22: injective_auction_rpc.InjectiveAuctionRPC.AuctionEndpoint:output_type -> injective_auction_rpc.AuctionEndpointResponse + 7, // 23: injective_auction_rpc.InjectiveAuctionRPC.Auctions:output_type -> injective_auction_rpc.AuctionsResponse + 9, // 24: injective_auction_rpc.InjectiveAuctionRPC.AuctionsHistoryV2:output_type -> injective_auction_rpc.AuctionsHistoryV2Response + 13, // 25: injective_auction_rpc.InjectiveAuctionRPC.AuctionV2:output_type -> injective_auction_rpc.AuctionV2Response + 15, // 26: injective_auction_rpc.InjectiveAuctionRPC.AccountAuctionsV2:output_type -> injective_auction_rpc.AccountAuctionsV2Response + 18, // 27: injective_auction_rpc.InjectiveAuctionRPC.AuctionAccountStatus:output_type -> injective_auction_rpc.AuctionAccountStatusResponse + 20, // 28: injective_auction_rpc.InjectiveAuctionRPC.StreamBids:output_type -> injective_auction_rpc.StreamBidsResponse + 22, // 29: injective_auction_rpc.InjectiveAuctionRPC.InjBurntEndpoint:output_type -> injective_auction_rpc.InjBurntEndpointResponse + 24, // 30: injective_auction_rpc.InjectiveAuctionRPC.AuctionsStats:output_type -> injective_auction_rpc.AuctionsStatsResponse + 22, // [22:31] is the sub-list for method output_type + 13, // [13:22] is the sub-list for method input_type 13, // [13:13] is the sub-list for extension type_name 13, // [13:13] is the sub-list for extension extendee 0, // [0:13] is the sub-list for field type_name @@ -2076,7 +2213,7 @@ func file_goadesign_goagen_injective_auction_rpc_proto_init() { } } file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamBidsRequest); i { + switch v := v.(*AuctionAccountStatusRequest); i { case 0: return &v.state case 1: @@ -2088,7 +2225,7 @@ func file_goadesign_goagen_injective_auction_rpc_proto_init() { } } file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamBidsResponse); i { + switch v := v.(*AuctionAccountStatusResponse); i { case 0: return &v.state case 1: @@ -2100,7 +2237,7 @@ func file_goadesign_goagen_injective_auction_rpc_proto_init() { } } file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InjBurntEndpointRequest); i { + switch v := v.(*StreamBidsRequest); i { case 0: return &v.state case 1: @@ -2112,7 +2249,7 @@ func file_goadesign_goagen_injective_auction_rpc_proto_init() { } } file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InjBurntEndpointResponse); i { + switch v := v.(*StreamBidsResponse); i { case 0: return &v.state case 1: @@ -2124,7 +2261,7 @@ func file_goadesign_goagen_injective_auction_rpc_proto_init() { } } file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AuctionsStatsRequest); i { + switch v := v.(*InjBurntEndpointRequest); i { case 0: return &v.state case 1: @@ -2136,6 +2273,30 @@ func file_goadesign_goagen_injective_auction_rpc_proto_init() { } } file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InjBurntEndpointResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuctionsStatsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_goadesign_goagen_injective_auction_rpc_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AuctionsStatsResponse); i { case 0: return &v.state @@ -2154,7 +2315,7 @@ func file_goadesign_goagen_injective_auction_rpc_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_goadesign_goagen_injective_auction_rpc_proto_rawDesc, NumEnums: 0, - NumMessages: 24, + NumMessages: 26, NumExtensions: 0, NumServices: 1, }, diff --git a/exchange/auction_rpc/pb/goadesign_goagen_injective_auction_rpc_grpc.pb.go b/exchange/auction_rpc/pb/goadesign_goagen_injective_auction_rpc_grpc.pb.go index 592523cc..56d53857 100644 --- a/exchange/auction_rpc/pb/goadesign_goagen_injective_auction_rpc_grpc.pb.go +++ b/exchange/auction_rpc/pb/goadesign_goagen_injective_auction_rpc_grpc.pb.go @@ -32,6 +32,8 @@ type InjectiveAuctionRPCClient interface { AuctionV2(ctx context.Context, in *AuctionV2Request, opts ...grpc.CallOption) (*AuctionV2Response, error) // Provide the historical auctions info for a given account AccountAuctionsV2(ctx context.Context, in *AccountAuctionsV2Request, opts ...grpc.CallOption) (*AccountAuctionsV2Response, error) + // Get the allowlist status for a specific account in an auction round + AuctionAccountStatus(ctx context.Context, in *AuctionAccountStatusRequest, opts ...grpc.CallOption) (*AuctionAccountStatusResponse, error) // StreamBids streams new bids of an auction. StreamBids(ctx context.Context, in *StreamBidsRequest, opts ...grpc.CallOption) (InjectiveAuctionRPC_StreamBidsClient, error) // InjBurntEndpoint returns the total amount of INJ burnt in auctions. @@ -93,6 +95,15 @@ func (c *injectiveAuctionRPCClient) AccountAuctionsV2(ctx context.Context, in *A return out, nil } +func (c *injectiveAuctionRPCClient) AuctionAccountStatus(ctx context.Context, in *AuctionAccountStatusRequest, opts ...grpc.CallOption) (*AuctionAccountStatusResponse, error) { + out := new(AuctionAccountStatusResponse) + err := c.cc.Invoke(ctx, "/injective_auction_rpc.InjectiveAuctionRPC/AuctionAccountStatus", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *injectiveAuctionRPCClient) StreamBids(ctx context.Context, in *StreamBidsRequest, opts ...grpc.CallOption) (InjectiveAuctionRPC_StreamBidsClient, error) { stream, err := c.cc.NewStream(ctx, &InjectiveAuctionRPC_ServiceDesc.Streams[0], "/injective_auction_rpc.InjectiveAuctionRPC/StreamBids", opts...) if err != nil { @@ -157,6 +168,8 @@ type InjectiveAuctionRPCServer interface { AuctionV2(context.Context, *AuctionV2Request) (*AuctionV2Response, error) // Provide the historical auctions info for a given account AccountAuctionsV2(context.Context, *AccountAuctionsV2Request) (*AccountAuctionsV2Response, error) + // Get the allowlist status for a specific account in an auction round + AuctionAccountStatus(context.Context, *AuctionAccountStatusRequest) (*AuctionAccountStatusResponse, error) // StreamBids streams new bids of an auction. StreamBids(*StreamBidsRequest, InjectiveAuctionRPC_StreamBidsServer) error // InjBurntEndpoint returns the total amount of INJ burnt in auctions. @@ -185,6 +198,9 @@ func (UnimplementedInjectiveAuctionRPCServer) AuctionV2(context.Context, *Auctio func (UnimplementedInjectiveAuctionRPCServer) AccountAuctionsV2(context.Context, *AccountAuctionsV2Request) (*AccountAuctionsV2Response, error) { return nil, status.Errorf(codes.Unimplemented, "method AccountAuctionsV2 not implemented") } +func (UnimplementedInjectiveAuctionRPCServer) AuctionAccountStatus(context.Context, *AuctionAccountStatusRequest) (*AuctionAccountStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AuctionAccountStatus not implemented") +} func (UnimplementedInjectiveAuctionRPCServer) StreamBids(*StreamBidsRequest, InjectiveAuctionRPC_StreamBidsServer) error { return status.Errorf(codes.Unimplemented, "method StreamBids not implemented") } @@ -297,6 +313,24 @@ func _InjectiveAuctionRPC_AccountAuctionsV2_Handler(srv interface{}, ctx context return interceptor(ctx, in, info, handler) } +func _InjectiveAuctionRPC_AuctionAccountStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuctionAccountStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InjectiveAuctionRPCServer).AuctionAccountStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/injective_auction_rpc.InjectiveAuctionRPC/AuctionAccountStatus", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InjectiveAuctionRPCServer).AuctionAccountStatus(ctx, req.(*AuctionAccountStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _InjectiveAuctionRPC_StreamBids_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(StreamBidsRequest) if err := stream.RecvMsg(m); err != nil { @@ -381,6 +415,10 @@ var InjectiveAuctionRPC_ServiceDesc = grpc.ServiceDesc{ MethodName: "AccountAuctionsV2", Handler: _InjectiveAuctionRPC_AccountAuctionsV2_Handler, }, + { + MethodName: "AuctionAccountStatus", + Handler: _InjectiveAuctionRPC_AuctionAccountStatus_Handler, + }, { MethodName: "InjBurntEndpoint", Handler: _InjectiveAuctionRPC_InjBurntEndpoint_Handler, diff --git a/exchange/derivative_exchange_rpc/pb/goadesign_goagen_injective_derivative_exchange_rpc.pb.go b/exchange/derivative_exchange_rpc/pb/goadesign_goagen_injective_derivative_exchange_rpc.pb.go index 6e42e6ed..e6dabc54 100644 --- a/exchange/derivative_exchange_rpc/pb/goadesign_goagen_injective_derivative_exchange_rpc.pb.go +++ b/exchange/derivative_exchange_rpc/pb/goadesign_goagen_injective_derivative_exchange_rpc.pb.go @@ -2970,6 +2970,10 @@ type DerivativePosition struct { FundingLast string `protobuf:"bytes,14,opt,name=funding_last,json=fundingLast,proto3" json:"funding_last,omitempty"` // Net funding fees since position opened FundingSum string `protobuf:"bytes,15,opt,name=funding_sum,json=fundingSum,proto3" json:"funding_sum,omitempty"` + // Cumulative funding entry of the position + CumulativeFundingEntry string `protobuf:"bytes,16,opt,name=cumulative_funding_entry,json=cumulativeFundingEntry,proto3" json:"cumulative_funding_entry,omitempty"` + // Effective cumulative funding entry of the position + EffectiveCumulativeFundingEntry string `protobuf:"bytes,17,opt,name=effective_cumulative_funding_entry,json=effectiveCumulativeFundingEntry,proto3" json:"effective_cumulative_funding_entry,omitempty"` } func (x *DerivativePosition) Reset() { @@ -3102,6 +3106,20 @@ func (x *DerivativePosition) GetFundingSum() string { return "" } +func (x *DerivativePosition) GetCumulativeFundingEntry() string { + if x != nil { + return x.CumulativeFundingEntry + } + return "" +} + +func (x *DerivativePosition) GetEffectiveCumulativeFundingEntry() string { + if x != nil { + return x.EffectiveCumulativeFundingEntry + } + return "" +} + type PositionsV2Request struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3321,6 +3339,10 @@ type DerivativePositionV2 struct { FundingLast string `protobuf:"bytes,13,opt,name=funding_last,json=fundingLast,proto3" json:"funding_last,omitempty"` // Net funding fees since position opened FundingSum string `protobuf:"bytes,14,opt,name=funding_sum,json=fundingSum,proto3" json:"funding_sum,omitempty"` + // Cumulative funding entry of the position + CumulativeFundingEntry string `protobuf:"bytes,15,opt,name=cumulative_funding_entry,json=cumulativeFundingEntry,proto3" json:"cumulative_funding_entry,omitempty"` + // Effective cumulative funding entry of the position + EffectiveCumulativeFundingEntry string `protobuf:"bytes,16,opt,name=effective_cumulative_funding_entry,json=effectiveCumulativeFundingEntry,proto3" json:"effective_cumulative_funding_entry,omitempty"` } func (x *DerivativePositionV2) Reset() { @@ -3446,6 +3468,20 @@ func (x *DerivativePositionV2) GetFundingSum() string { return "" } +func (x *DerivativePositionV2) GetCumulativeFundingEntry() string { + if x != nil { + return x.CumulativeFundingEntry + } + return "" +} + +func (x *DerivativePositionV2) GetEffectiveCumulativeFundingEntry() string { + if x != nil { + return x.EffectiveCumulativeFundingEntry + } + return "" +} + type LiquidablePositionsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7234,7 +7270,7 @@ var file_goadesign_goagen_injective_derivative_exchange_rpc_proto_rawDesc = []by 0x32, 0x29, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x70, 0x61, 0x67, - 0x69, 0x6e, 0x67, 0x22, 0xf4, 0x03, 0x0a, 0x12, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x69, 0x6e, 0x67, 0x22, 0xfb, 0x04, 0x0a, 0x12, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, @@ -7265,388 +7301,238 @@ var file_goadesign_goagen_injective_derivative_exchange_rpc_proto_rawDesc = []by 0x67, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x6d, 0x22, 0xde, 0x02, 0x0a, 0x12, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, - 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x12, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, - 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, - 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x65, - 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x72, - 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x1a, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xaf, 0x01, 0x0a, 0x13, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x09, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, - 0x09, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, - 0x67, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6e, 0x6a, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, - 0x61, 0x67, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x22, 0xa8, 0x03, - 0x0a, 0x14, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x1b, - 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, - 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e, - 0x74, 0x72, 0x79, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, - 0x61, 0x72, 0x67, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x61, 0x72, - 0x67, 0x69, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x6c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, - 0x6c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x12, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, - 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, - 0x6c, 0x61, 0x73, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x75, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x75, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x75, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x6d, 0x22, 0x63, 0x0a, 0x1a, 0x4c, 0x69, 0x71, 0x75, - 0x69, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, - 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x72, 0x0a, - 0x1b, 0x4c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x09, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x35, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, - 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0xbe, 0x01, 0x0a, 0x16, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, - 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6b, - 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x11, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, - 0x64, 0x73, 0x22, 0xab, 0x01, 0x0a, 0x17, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, - 0x0a, 0x08, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x08, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x41, 0x0a, - 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x6d, 0x12, 0x38, 0x0a, 0x18, 0x63, 0x75, + 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x75, + 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x4b, 0x0a, 0x22, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x75, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x1f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x75, 0x6d, 0x75, 0x6c, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x22, 0xde, 0x02, 0x0a, 0x12, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, + 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, + 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, + 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x14, + 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x1c, 0x0a, + 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x1a, 0x73, + 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x18, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x22, 0xaf, 0x01, 0x0a, 0x13, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x09, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, - 0x63, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, - 0x22, 0x88, 0x01, 0x0a, 0x0e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, - 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x12, - 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x77, 0x0a, 0x13, 0x46, - 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, - 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, 0x65, 0x6e, 0x64, - 0x54, 0x69, 0x6d, 0x65, 0x22, 0xae, 0x01, 0x0a, 0x14, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x52, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, - 0x0d, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x52, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x74, - 0x65, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, - 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x70, - 0x61, 0x67, 0x69, 0x6e, 0x67, 0x22, 0x5c, 0x0a, 0x0b, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x52, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, + 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x52, 0x09, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x70, 0x61, + 0x67, 0x69, 0x6e, 0x67, 0x22, 0xaf, 0x04, 0x0a, 0x14, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x32, 0x12, 0x16, 0x0a, + 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, + 0x69, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, + 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x72, 0x69, + 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x6c, 0x69, + 0x71, 0x75, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x5f, + 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x72, + 0x6b, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x21, 0x0a, 0x0c, 0x66, + 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x73, 0x74, 0x12, 0x1f, + 0x0a, 0x0b, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x6d, 0x12, + 0x38, 0x0a, 0x18, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x75, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x16, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x46, 0x75, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x4b, 0x0a, 0x22, 0x65, 0x66, 0x66, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x63, 0x0a, 0x1a, 0x4c, 0x69, 0x71, 0x75, 0x69, 0x64, + 0x61, 0x62, 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x72, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x22, 0xc9, 0x01, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, - 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, - 0x25, 0x0a, 0x0e, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, - 0x8a, 0x01, 0x0a, 0x17, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x08, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x72, 0x0a, 0x1b, 0x4c, + 0x69, 0x71, 0x75, 0x69, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x09, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, - 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x12, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xcb, 0x01, 0x0a, - 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1b, - 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x75, - 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, - 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x19, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6e, 0x6a, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, - 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x56, 0x32, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x12, - 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xcf, 0x03, 0x0a, 0x13, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x69, 0x64, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x12, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x12, 0x52, - 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x72, 0x6b, - 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, - 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x63, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x1d, - 0x0a, 0x0a, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, - 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x49, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x75, 0x62, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x75, 0x62, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, - 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x61, 0x64, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x63, - 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x22, 0xaa, 0x01, - 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x12, 0x52, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xe4, 0x03, 0x0a, 0x0d, 0x54, - 0x72, 0x61, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, - 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x64, 0x65, - 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0xbe, 0x01, 0x0a, 0x16, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, + 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x73, 0x6b, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x11, 0x52, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, + 0x22, 0xab, 0x01, 0x0a, 0x17, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x08, + 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, + 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, + 0x70, 0x63, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x08, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x70, + 0x61, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6e, + 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, + 0x50, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x22, 0x88, + 0x01, 0x0a, 0x0e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x12, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, - 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, - 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x65, - 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x72, - 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, - 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x27, 0x0a, - 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x64, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x61, 0x64, 0x65, 0x49, - 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, - 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, - 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, - 0x74, 0x22, 0x9f, 0x01, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x06, 0x74, 0x72, 0x61, 0x64, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, 0x64, 0x65, 0x52, 0x06, 0x74, 0x72, 0x61, 0x64, 0x65, 0x73, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x77, 0x0a, 0x13, 0x46, 0x75, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6b, 0x69, + 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x11, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x22, 0xae, 0x01, 0x0a, 0x14, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x61, + 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x0d, 0x66, + 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, + 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x61, + 0x74, 0x65, 0x52, 0x0c, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x74, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x70, 0x61, 0x67, - 0x69, 0x6e, 0x67, 0x22, 0xfa, 0x03, 0x0a, 0x0f, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x54, 0x72, 0x61, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, - 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x64, - 0x65, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x74, 0x72, 0x61, 0x64, 0x65, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x73, - 0x5f, 0x6c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x4c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x57, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, - 0x6c, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x69, 0x6e, 0x6a, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x52, 0x0d, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, - 0x79, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x79, 0x6f, - 0x75, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x66, 0x65, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, - 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x65, - 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, - 0x61, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, - 0x61, 0x64, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x63, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x70, 0x6e, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x6e, 0x6c, - 0x22, 0xbb, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, - 0x74, 0x61, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x72, 0x61, - 0x64, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x72, 0x69, 0x63, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x61, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x22, 0xe6, - 0x03, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x69, 0x6e, 0x67, 0x22, 0x5c, 0x0a, 0x0b, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x61, + 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, - 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x69, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, - 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, - 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0a, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x49, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, - 0x74, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x74, 0x72, 0x61, 0x64, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, - 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, - 0x65, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x65, 0x65, 0x52, 0x65, - 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x22, 0xa1, 0x01, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x64, - 0x65, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x06, - 0x74, 0x72, 0x61, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, - 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, - 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, 0x64, 0x65, - 0x52, 0x06, 0x74, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x67, 0x69, - 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x67, - 0x69, 0x6e, 0x67, 0x52, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x22, 0xea, 0x03, 0x0a, 0x13, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, - 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, - 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, - 0x69, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x14, - 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x6c, - 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, + 0x12, 0x0a, 0x04, 0x72, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, + 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x22, 0xc9, 0x01, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, + 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, + 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, - 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x49, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x19, 0x0a, - 0x08, 0x74, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x74, 0x72, 0x61, 0x64, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x63, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, - 0x69, 0x65, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x65, 0x65, 0x52, - 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x22, 0xa5, 0x01, 0x0a, 0x14, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x48, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x54, - 0x72, 0x61, 0x64, 0x65, 0x52, 0x05, 0x74, 0x72, 0x61, 0x64, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x22, 0xec, 0x03, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, - 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x49, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x8a, 0x01, + 0x0a, 0x17, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x6e, + 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, + 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x12, 0x52, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xcb, 0x01, 0x0a, 0x18, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, + 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x72, + 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6d, + 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x75, 0x62, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, + 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x56, + 0x32, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xcf, 0x03, 0x0a, 0x13, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x69, 0x64, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x0a, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x12, + 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, + 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, 0x65, + 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, + 0x5f, 0x69, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x72, 0x6b, + 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, + 0x73, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x49, 0x6e, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, 0x19, + 0x0a, 0x08, 0x74, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x74, 0x72, 0x61, 0x64, 0x65, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x22, 0xaa, 0x01, 0x0a, 0x14, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xe4, 0x03, 0x0a, 0x0d, 0x54, 0x72, 0x61, + 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, @@ -7676,417 +7562,584 @@ var file_goadesign_goagen_injective_derivative_exchange_rpc_proto_rawDesc = []by 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x22, - 0xa7, 0x01, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, - 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x05, 0x74, 0x72, - 0x61, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6e, 0x6a, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, 0x64, 0x65, 0x52, 0x05, 0x74, - 0x72, 0x61, 0x64, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x89, 0x01, 0x0a, 0x1b, 0x53, 0x75, - 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1b, - 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, - 0x6b, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0xb2, 0x01, 0x0a, 0x1c, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, - 0x06, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, - 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, + 0x9f, 0x01, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x06, 0x74, 0x72, 0x61, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, + 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x72, 0x61, 0x64, 0x65, 0x52, 0x06, 0x74, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x41, + 0x0a, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, + 0x70, 0x63, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, + 0x67, 0x22, 0xfa, 0x03, 0x0a, 0x0f, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x72, 0x61, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x68, + 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, + 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, + 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x64, 0x65, 0x5f, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x74, 0x72, 0x61, 0x64, 0x65, 0x45, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x6c, + 0x69, 0x71, 0x75, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0d, 0x69, 0x73, 0x4c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x57, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x6c, 0x74, + 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x67, 0x69, - 0x6e, 0x67, 0x52, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x22, 0xce, 0x01, 0x0a, 0x1b, 0x53, - 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, - 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, - 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x6a, 0x0a, 0x1c, 0x53, - 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x06, 0x74, - 0x72, 0x61, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6e, - 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, - 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, 0x64, 0x65, 0x52, - 0x06, 0x74, 0x72, 0x61, 0x64, 0x65, 0x73, 0x22, 0xfc, 0x03, 0x0a, 0x14, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, - 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1c, 0x0a, - 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x12, 0x52, - 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, - 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, 0x65, 0x6e, - 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, - 0x73, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, - 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, - 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, - 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x61, - 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x61, - 0x64, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x11, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, - 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x22, 0xad, 0x01, 0x0a, 0x15, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x51, 0x0a, 0x06, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x39, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x06, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x52, 0x06, - 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x22, 0xa9, 0x05, 0x0a, 0x16, 0x44, 0x65, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, - 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, - 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x79, 0x6f, + 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x66, + 0x65, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, + 0x69, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x65, 0x65, 0x52, + 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x64, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x61, 0x64, + 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x73, 0x69, 0x64, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, + 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x70, 0x6e, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x6e, 0x6c, 0x22, 0xbb, + 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, + 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x64, 0x65, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x69, + 0x63, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, + 0x61, 0x72, 0x67, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x22, 0xe6, 0x03, 0x0a, + 0x0f, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, + 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x69, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x12, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, + 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x75, + 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, + 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, + 0x61, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, + 0x61, 0x64, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x10, + 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, + 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, + 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, + 0x70, 0x69, 0x65, 0x6e, 0x74, 0x22, 0xa1, 0x01, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, + 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x06, 0x74, 0x72, + 0x61, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6e, 0x6a, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, + 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, 0x64, 0x65, 0x52, 0x06, + 0x74, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, + 0x67, 0x52, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x22, 0xea, 0x03, 0x0a, 0x13, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x25, + 0x0a, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x64, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x69, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x12, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, + 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0a, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, + 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x74, + 0x72, 0x61, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, + 0x72, 0x61, 0x64, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, + 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, + 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x65, 0x65, 0x52, 0x65, 0x63, + 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x22, 0xa5, 0x01, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x48, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, + 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, + 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, + 0x64, 0x65, 0x52, 0x05, 0x74, 0x72, 0x61, 0x64, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x12, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xec, + 0x03, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, + 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, + 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x69, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, - 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x74, - 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x27, 0x0a, 0x0f, - 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x51, 0x75, 0x61, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x12, 0x52, - 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, - 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x69, 0x73, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x12, - 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, - 0x0e, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, - 0x61, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, - 0x72, 0x41, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x5f, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, 0x12, - 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, 0x61, - 0x73, 0x68, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, - 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, - 0x69, 0x64, 0x22, 0xdc, 0x01, 0x0a, 0x1a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, - 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x54, - 0x79, 0x70, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x73, 0x22, 0xb3, 0x01, 0x0a, 0x1b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4f, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x39, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, + 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, + 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x61, 0x64, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, + 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x65, 0x65, 0x5f, + 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x66, 0x65, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x22, 0xa7, 0x01, + 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, 0x32, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, 0x64, 0x65, 0x52, 0x05, 0x74, 0x72, 0x61, + 0x64, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x35, 0x0a, 0x13, 0x4f, 0x70, 0x65, 0x6e, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, - 0x0a, 0x0b, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x5f, 0x64, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x73, 0x22, 0x74, - 0x0a, 0x14, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x89, 0x01, 0x0a, 0x1b, 0x53, 0x75, 0x62, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, + 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, + 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x22, 0xb2, 0x01, 0x0a, 0x1c, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x06, 0x6f, + 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x67, + 0x52, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x22, 0xce, 0x01, 0x0a, 0x1b, 0x53, 0x75, 0x62, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, + 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, + 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x6a, 0x0a, 0x1c, 0x53, 0x75, 0x62, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x06, 0x74, 0x72, 0x61, + 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x6e, 0x6a, 0x65, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x54, 0x72, 0x61, 0x64, 0x65, 0x52, 0x06, 0x74, + 0x72, 0x61, 0x64, 0x65, 0x73, 0x22, 0xfc, 0x03, 0x0a, 0x14, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, + 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6b, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, + 0x73, 0x6b, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x11, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0a, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x73, 0x43, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x72, 0x6b, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, + 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x64, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x61, 0x64, 0x65, + 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x72, + 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x11, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x4f, 0x6e, + 0x6c, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x63, 0x69, 0x64, 0x22, 0xad, 0x01, 0x0a, 0x15, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x48, + 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, + 0x0a, 0x06, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, - 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x65, 0x73, 0x74, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x73, 0x22, 0x56, 0x0a, 0x12, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x4f, 0x70, - 0x65, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, - 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, - 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x5f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x6f, 0x70, 0x65, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x32, 0xd8, 0x1c, 0x0a, - 0x1e, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x50, 0x43, 0x12, - 0x70, 0x0a, 0x07, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x31, 0x2e, 0x69, 0x6e, 0x6a, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4d, - 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, - 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, - 0x63, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x6d, 0x0a, 0x06, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x12, 0x30, 0x2e, 0x69, 0x6e, + 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x06, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x73, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x29, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x70, 0x61, + 0x67, 0x69, 0x6e, 0x67, 0x22, 0xa9, 0x05, 0x0a, 0x16, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, + 0x1d, 0x0a, 0x0a, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1b, + 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, + 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, + 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x72, 0x69, + 0x67, 0x67, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x66, 0x69, + 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x51, 0x75, 0x61, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x72, 0x65, + 0x64, 0x75, 0x63, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0c, 0x69, 0x73, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1c, 0x0a, + 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x69, + 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x5f, 0x61, 0x74, + 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, + 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x5f, 0x6f, 0x72, 0x64, 0x65, + 0x72, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6c, + 0x61, 0x63, 0x65, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, + 0x06, 0x6d, 0x61, 0x72, 0x67, 0x69, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, + 0x61, 0x72, 0x67, 0x69, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, + 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x10, + 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, + 0x22, 0xdc, 0x01, 0x0a, 0x1a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, + 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, + 0xb3, 0x01, 0x0a, 0x1b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4f, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, + 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, + 0x70, 0x63, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x35, 0x0a, 0x13, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0b, + 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x5f, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x44, 0x73, 0x22, 0x74, 0x0a, 0x14, + 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, + 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, + 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x65, 0x73, 0x74, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, + 0x74, 0x73, 0x22, 0x56, 0x0a, 0x12, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x6e, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, + 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x70, + 0x65, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x32, 0xd8, 0x1c, 0x0a, 0x1e, 0x49, + 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x50, 0x43, 0x12, 0x70, 0x0a, + 0x07, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x31, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, 0x72, + 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, - 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, - 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, - 0x63, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x81, 0x01, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x61, 0x72, 0x6b, 0x65, - 0x74, 0x12, 0x36, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, + 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x6d, 0x0a, 0x06, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x12, 0x30, 0x2e, 0x69, 0x6e, 0x6a, 0x65, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4d, 0x61, + 0x72, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x69, 0x6e, + 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, + 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, + 0x01, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x12, + 0x36, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, + 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x30, 0x01, 0x12, 0x97, 0x01, 0x0a, 0x14, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x3e, 0x2e, 0x69, 0x6e, + 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, + 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x61, 0x72, + 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x69, 0x6e, + 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, + 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x61, 0x72, + 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x94, 0x01, 0x0a, + 0x13, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x61, + 0x72, 0x6b, 0x65, 0x74, 0x12, 0x3d, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x0b, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, + 0x56, 0x32, 0x12, 0x35, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, + 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, + 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x69, 0x6e, 0x6a, 0x65, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x7f, 0x0a, 0x0c, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x56, + 0x32, 0x12, 0x36, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x61, 0x72, 0x6b, - 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, + 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x73, + 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x30, 0x01, 0x12, 0x97, 0x01, 0x0a, 0x14, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x3e, 0x2e, - 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, - 0x63, 0x2e, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, - 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, - 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, - 0x63, 0x2e, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, - 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x94, - 0x01, 0x0a, 0x13, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x12, 0x3d, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x69, 0x6e, 0x61, 0x72, - 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x90, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x56, 0x32, 0x12, 0x3b, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x56, 0x32, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x0b, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, - 0x6f, 0x6b, 0x56, 0x32, 0x12, 0x35, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x9c, 0x01, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, + 0x3f, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, + 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, + 0x6f, 0x6f, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x40, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x62, 0x6f, 0x6f, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x30, 0x01, 0x12, 0x6d, 0x0a, 0x06, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, 0x30, + 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, + 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x31, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x09, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x33, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x0b, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x12, 0x35, 0x2e, 0x69, 0x6e, 0x6a, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x36, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, + 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x94, 0x01, 0x0a, 0x13, 0x4c, 0x69, + 0x71, 0x75, 0x69, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x3d, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x61, 0x62, 0x6c, 0x65, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x3e, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x88, 0x01, 0x0a, 0x0f, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x39, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, - 0x6f, 0x6b, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x69, 0x6e, + 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x3a, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, + 0x72, 0x70, 0x63, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x0c, 0x46, + 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x74, 0x65, 0x73, 0x12, 0x36, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x0c, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, - 0x73, 0x56, 0x32, 0x12, 0x36, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, - 0x6b, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x69, 0x6e, + 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, + 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, + 0x0f, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x39, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x90, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x56, 0x32, 0x12, 0x3b, 0x2e, 0x69, 0x6e, 0x6a, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x56, 0x32, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x56, 0x32, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x9c, 0x01, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x12, 0x3f, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, - 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x62, 0x6f, 0x6f, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x6d, 0x0a, 0x06, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, - 0x12, 0x30, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, - 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x09, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x33, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, - 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, - 0x0b, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x12, 0x35, 0x2e, 0x69, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x90, 0x01, 0x0a, 0x11, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x12, + 0x3b, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, + 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, - 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x94, 0x01, 0x0a, 0x13, - 0x4c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x3d, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x61, 0x62, - 0x6c, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, - 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x71, 0x75, 0x69, 0x64, 0x61, 0x62, 0x6c, - 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x0f, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x39, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x3a, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7f, 0x0a, - 0x0c, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x74, 0x65, 0x73, 0x12, 0x36, 0x2e, + 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x81, 0x01, 0x0a, + 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, 0x36, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, - 0x63, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, + 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x75, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x52, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8a, - 0x01, 0x0a, 0x0f, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x39, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, - 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, - 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, - 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x90, 0x01, 0x0a, 0x11, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, - 0x32, 0x12, 0x3b, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, - 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, - 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x81, - 0x01, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, - 0x36, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, - 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x12, 0x6d, 0x0a, 0x06, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x69, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, + 0x12, 0x6d, 0x0a, 0x06, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x30, 0x2e, 0x69, 0x6e, 0x6a, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x54, + 0x72, 0x61, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, - 0x2e, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, - 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, - 0x70, 0x63, 0x2e, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x73, 0x0a, 0x08, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, 0x32, 0x12, 0x32, 0x2e, - 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, - 0x63, 0x2e, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x33, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, 0x32, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x36, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, + 0x2e, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x73, 0x0a, 0x08, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, 0x32, 0x12, 0x32, 0x2e, 0x69, 0x6e, + 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, + 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x33, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, - 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x0e, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, 0x32, 0x12, 0x38, 0x2e, - 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, - 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, 0x32, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x30, 0x01, 0x12, 0x97, 0x01, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x2e, - 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, - 0x63, 0x2e, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, + 0x72, 0x61, 0x64, 0x65, 0x73, 0x12, 0x36, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, - 0x63, 0x2e, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x72, 0x64, 0x65, - 0x72, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x97, - 0x01, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x72, 0x61, - 0x64, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x75, 0x62, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x75, 0x62, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x0d, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x37, 0x2e, 0x69, 0x6e, 0x6a, - 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x96, 0x01, - 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x3d, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, 0x32, 0x12, 0x38, 0x2e, 0x69, 0x6e, + 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, 0x32, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x30, 0x01, 0x12, 0x97, 0x01, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x2e, 0x69, 0x6e, + 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, + 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x69, 0x6e, + 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, + 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x97, 0x01, 0x0a, + 0x14, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x64, 0x65, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x64, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x0d, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x38, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x48, 0x69, 0x73, 0x74, + 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x96, 0x01, 0x0a, 0x13, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x48, 0x69, 0x73, 0x74, + 0x6f, 0x72, 0x79, 0x12, 0x3d, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, + 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x30, 0x01, 0x12, 0x7f, 0x0a, 0x0c, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x65, 0x73, 0x74, 0x12, 0x36, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x7f, 0x0a, 0x0c, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x12, 0x36, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, - 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, - 0x70, 0x63, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x26, 0x5a, 0x24, 0x2f, 0x69, 0x6e, 0x6a, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x70, 0x62, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x69, + 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, + 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x26, 0x5a, 0x24, 0x2f, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x70, 0x62, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/exchange/event_provider_api/pb/goadesign_goagen_event_provider_api.pb.go b/exchange/event_provider_api/pb/goadesign_goagen_event_provider_api.pb.go index d53e03c9..77590da9 100644 --- a/exchange/event_provider_api/pb/goadesign_goagen_event_provider_api.pb.go +++ b/exchange/event_provider_api/pb/goadesign_goagen_event_provider_api.pb.go @@ -402,6 +402,8 @@ type Block struct { Events []*BlockEvent `protobuf:"bytes,3,rep,name=events,proto3" json:"events,omitempty"` // Indicates whether the block is the latest one available in the event provider InSync bool `protobuf:"varint,4,opt,name=in_sync,json=inSync,proto3" json:"in_sync,omitempty"` + // Block timestamp in UNIX millis. + Time int64 `protobuf:"zigzag64,5,opt,name=time,proto3" json:"time,omitempty"` } func (x *Block) Reset() { @@ -464,6 +466,13 @@ func (x *Block) GetInSync() bool { return false } +func (x *Block) GetTime() int64 { + if x != nil { + return x.Time + } + return 0 +} + type BlockEvent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1555,7 +1564,7 @@ var file_goadesign_goagen_event_provider_api_proto_rawDesc = []byte{ 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x22, - 0x8a, 0x01, 0x0a, 0x05, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, + 0x9e, 0x01, 0x0a, 0x05, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x12, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x06, 0x65, @@ -1563,198 +1572,199 @@ var file_goadesign_goagen_event_provider_api_proto_rawDesc = []byte{ 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x6e, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x6e, 0x53, 0x79, 0x6e, 0x63, 0x22, 0x6a, 0x0a, 0x0a, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x79, - 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x79, - 0x70, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, - 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, - 0x48, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x73, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x11, 0x52, 0x06, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x5f, - 0x72, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, - 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xb7, 0x01, - 0x0a, 0x19, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x50, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x76, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x6e, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x12, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, + 0x22, 0x6a, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x19, + 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x73, 0x0a, 0x18, + 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, + 0x43, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, + 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x11, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x75, + 0x6d, 0x61, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x61, 0x62, 0x6c, + 0x65, 0x22, 0xb7, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x0c, 0x0a, 0x01, 0x76, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x76, 0x12, 0x0c, 0x0a, + 0x01, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x52, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x38, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0xca, 0x01, 0x0a, 0x0e, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0c, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x4d, 0x0a, 0x09, + 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x50, 0x43, 0x2e, 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x08, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x54, + 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5a, 0x0a, 0x0e, 0x42, 0x61, 0x73, 0x69, + 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x12, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x69, 0x6d, 0x65, 0x22, 0x65, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x11, 0x52, 0x06, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x1a, + 0x47, 0x65, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x50, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x76, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x76, 0x12, 0x0c, 0x0a, 0x01, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x01, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x01, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x05, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, + 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x54, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x42, 0x43, + 0x49, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x11, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x81, 0x01, 0x0a, + 0x1a, 0x47, 0x65, 0x74, 0x41, 0x42, 0x43, 0x49, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x76, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x76, 0x12, 0x0c, 0x0a, 0x01, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x01, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, - 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, - 0x69, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0xca, 0x01, 0x0a, 0x0e, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, - 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x4d, 0x0a, 0x09, 0x74, 0x78, 0x5f, 0x68, - 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, - 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x2e, - 0x54, 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x74, - 0x78, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x54, 0x78, 0x48, 0x61, 0x73, - 0x68, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x11, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5a, 0x0a, 0x0e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x12, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x12, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, - 0x22, 0x65, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x11, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x43, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x76, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x01, 0x76, 0x12, 0x0c, 0x0a, 0x01, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x01, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x65, - 0x12, 0x36, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, - 0x61, 0x70, 0x69, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x50, 0x43, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x42, 0x61, 0x73, - 0x69, 0x63, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x22, 0x54, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x42, 0x43, 0x49, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, 0x52, - 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x81, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, - 0x41, 0x42, 0x43, 0x49, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x76, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x01, 0x76, 0x12, 0x0c, 0x0a, 0x01, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x01, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, - 0x65, 0x12, 0x39, 0x0a, 0x09, 0x72, 0x61, 0x77, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x52, 0x08, 0x72, 0x61, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0xcc, 0x02, 0x0a, - 0x08, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x12, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x27, 0x0a, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x4a, 0x0a, 0x0b, 0x74, 0x78, 0x73, - 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, - 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, - 0x61, 0x70, 0x69, 0x2e, 0x41, 0x42, 0x43, 0x49, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x54, 0x78, 0x52, 0x0a, 0x74, 0x78, 0x73, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x4b, 0x0a, 0x12, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x5f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x42, 0x43, 0x49, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x52, 0x10, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x47, 0x0a, 0x10, 0x65, 0x6e, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, - 0x69, 0x2e, 0x41, 0x42, 0x43, 0x49, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x65, 0x6e, 0x64, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xf9, 0x01, 0x0a, 0x15, - 0x41, 0x42, 0x43, 0x49, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x65, 0x6c, 0x69, - 0x76, 0x65, 0x72, 0x54, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x11, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x67, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x69, - 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, - 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x73, 0x5f, 0x77, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x12, 0x52, 0x09, 0x67, 0x61, 0x73, 0x57, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x67, 0x61, 0x73, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x12, - 0x52, 0x07, 0x67, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x06, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x41, - 0x42, 0x43, 0x49, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x17, - 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x22, 0x62, 0x0a, 0x09, 0x41, 0x42, 0x43, 0x49, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x41, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, - 0x69, 0x2e, 0x41, 0x42, 0x43, 0x49, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, - 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x37, 0x0a, 0x0d, 0x41, - 0x42, 0x43, 0x49, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3b, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x41, 0x42, 0x43, 0x49, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x74, 0x48, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x22, 0x89, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x41, 0x42, 0x43, 0x49, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x76, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x01, 0x76, 0x12, 0x0c, 0x0a, 0x01, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x01, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x01, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x72, 0x61, 0x77, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, 0x77, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x08, 0x72, 0x61, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x32, 0xd3, 0x06, - 0x0a, 0x10, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x41, - 0x50, 0x49, 0x12, 0x6a, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x48, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2a, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, + 0x28, 0x09, 0x52, 0x01, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x72, 0x61, 0x77, 0x5f, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x61, + 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x08, 0x72, 0x61, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x22, 0xcc, 0x02, 0x0a, 0x08, 0x52, 0x61, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x16, 0x0a, + 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x12, 0x52, 0x06, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x4a, 0x0a, + 0x0b, 0x74, 0x78, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x42, 0x43, 0x49, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x54, 0x78, 0x52, 0x0a, 0x74, + 0x78, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x4b, 0x0a, 0x12, 0x62, 0x65, 0x67, + 0x69, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x42, 0x43, 0x49, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x47, 0x0a, 0x10, 0x65, 0x6e, 0x64, 0x5f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x42, 0x43, 0x49, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, + 0x0e, 0x65, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, + 0xf9, 0x01, 0x0a, 0x15, 0x41, 0x42, 0x43, 0x49, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, 0x72, 0x54, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x12, + 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, + 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x73, 0x5f, 0x77, 0x61, 0x6e, 0x74, 0x65, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x67, 0x61, 0x73, 0x57, 0x61, 0x6e, 0x74, + 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x61, 0x73, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x12, 0x52, 0x07, 0x67, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x12, 0x35, 0x0a, + 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, + 0x70, 0x69, 0x2e, 0x41, 0x42, 0x43, 0x49, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x06, 0x74, 0x78, 0x48, 0x61, 0x73, 0x68, 0x22, 0x62, 0x0a, 0x09, 0x41, + 0x42, 0x43, 0x49, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x41, 0x0a, 0x0a, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x42, 0x43, 0x49, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, + 0x37, 0x0a, 0x0d, 0x41, 0x42, 0x43, 0x49, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3b, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x41, + 0x42, 0x43, 0x49, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x74, + 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x11, 0x52, 0x06, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x41, 0x42, 0x43, + 0x49, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x74, 0x48, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0c, 0x0a, 0x01, + 0x76, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x76, 0x12, 0x0c, 0x0a, 0x01, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x01, 0x65, 0x12, 0x39, 0x0a, 0x09, 0x72, 0x61, 0x77, 0x5f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x52, + 0x61, 0x77, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x08, 0x72, 0x61, 0x77, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x32, 0xd3, 0x06, 0x0a, 0x10, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x41, 0x50, 0x49, 0x12, 0x6a, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2a, 0x2e, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, + 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, - 0x74, 0x65, 0x73, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2b, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, - 0x0a, 0x12, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x12, 0x2d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x11, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2c, 0x2e, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x74, 0x65, 0x73, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x75, 0x0a, 0x12, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x70, 0x0a, 0x11, 0x47, 0x65, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x12, 0x2c, + 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x11, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2c, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, - 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x50, 0x43, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x65, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, - 0x69, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x50, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, - 0x43, 0x12, 0x2d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x70, 0x0a, + 0x11, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x50, 0x43, 0x12, 0x2c, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2e, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x73, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x42, 0x43, 0x49, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, - 0x42, 0x43, 0x49, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x42, - 0x43, 0x49, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x42, 0x43, - 0x49, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x74, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x12, 0x35, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x42, 0x43, - 0x49, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x74, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, - 0x2e, 0x47, 0x65, 0x74, 0x41, 0x42, 0x43, 0x49, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x41, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x17, 0x5a, 0x15, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x1a, 0x2d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x73, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x50, 0x43, 0x12, 0x2d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x50, 0x43, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x42, 0x43, 0x49, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, + 0x47, 0x65, 0x74, 0x41, 0x42, 0x43, 0x49, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x42, 0x43, 0x49, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x47, 0x65, + 0x74, 0x41, 0x42, 0x43, 0x49, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x41, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x35, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, + 0x74, 0x41, 0x42, 0x43, 0x49, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x41, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x36, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x42, 0x43, 0x49, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x41, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x17, 0x5a, 0x15, 0x2f, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x69, 0x70, 0x62, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/exchange/oracle_rpc/pb/goadesign_goagen_injective_oracle_rpc.pb.go b/exchange/oracle_rpc/pb/goadesign_goagen_injective_oracle_rpc.pb.go index 2af07491..895a7431 100644 --- a/exchange/oracle_rpc/pb/goadesign_goagen_injective_oracle_rpc.pb.go +++ b/exchange/oracle_rpc/pb/goadesign_goagen_injective_oracle_rpc.pb.go @@ -31,6 +31,15 @@ type OracleListRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + // Filter by oracle symbol + Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"` + // Filter by oracle type + OracleType string `protobuf:"bytes,2,opt,name=oracle_type,json=oracleType,proto3" json:"oracle_type,omitempty"` + // Number of results per page + PerPage int32 `protobuf:"zigzag32,3,opt,name=per_page,json=perPage,proto3" json:"per_page,omitempty"` + // Pagination token from previous response + Token string `protobuf:"bytes,4,opt,name=token,proto3" json:"token,omitempty"` } func (x *OracleListRequest) Reset() { @@ -65,12 +74,43 @@ func (*OracleListRequest) Descriptor() ([]byte, []int) { return file_goadesign_goagen_injective_oracle_rpc_proto_rawDescGZIP(), []int{0} } +func (x *OracleListRequest) GetSymbol() string { + if x != nil { + return x.Symbol + } + return "" +} + +func (x *OracleListRequest) GetOracleType() string { + if x != nil { + return x.OracleType + } + return "" +} + +func (x *OracleListRequest) GetPerPage() int32 { + if x != nil { + return x.PerPage + } + return 0 +} + +func (x *OracleListRequest) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + type OracleListResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // List of oracles Oracles []*Oracle `protobuf:"bytes,1,rep,name=oracles,proto3" json:"oracles,omitempty"` + // Next tokens for pagination + Next []string `protobuf:"bytes,2,rep,name=next,proto3" json:"next,omitempty"` } func (x *OracleListResponse) Reset() { @@ -112,6 +152,13 @@ func (x *OracleListResponse) GetOracles() []*Oracle { return nil } +func (x *OracleListResponse) GetNext() []string { + if x != nil { + return x.Next + } + return nil +} + type Oracle struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -825,129 +872,136 @@ var file_goadesign_goagen_injective_oracle_rpc_proto_rawDesc = []byte{ 0x65, 0x6e, 0x5f, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, - 0x72, 0x70, 0x63, 0x22, 0x13, 0x0a, 0x11, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x12, 0x4f, 0x72, 0x61, 0x63, - 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, - 0x0a, 0x07, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, - 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x52, 0x07, 0x6f, - 0x72, 0x61, 0x63, 0x6c, 0x65, 0x73, 0x22, 0x9b, 0x01, 0x0a, 0x06, 0x4f, 0x72, 0x61, 0x63, 0x6c, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x61, 0x73, - 0x65, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x62, 0x61, 0x73, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x71, 0x75, - 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x1f, 0x0a, - 0x0b, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, - 0x72, 0x69, 0x63, 0x65, 0x22, 0xa3, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x79, - 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x61, 0x73, 0x65, - 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x5f, - 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, - 0x6f, 0x74, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x61, - 0x63, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x72, - 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, - 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x53, - 0x63, 0x61, 0x6c, 0x65, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x0d, 0x50, 0x72, - 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, - 0x72, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, - 0x65, 0x22, 0x50, 0x0a, 0x0e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x63, - 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x56, 0x32, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x73, 0x22, 0xa5, 0x01, 0x0a, 0x0e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x56, 0x32, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, - 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x61, 0x73, - 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x71, 0x75, 0x6f, 0x74, 0x65, - 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, - 0x75, 0x6f, 0x74, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, - 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x6f, - 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5f, 0x66, 0x61, 0x63, 0x74, - 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, - 0x53, 0x63, 0x61, 0x6c, 0x65, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x0f, 0x50, - 0x72, 0x69, 0x63, 0x65, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, - 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, - 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x32, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x22, 0xd7, 0x01, 0x0a, 0x0d, - 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x32, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1f, 0x0a, - 0x0b, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x62, 0x61, 0x73, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x21, - 0x0a, 0x0c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, - 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x11, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x46, 0x61, 0x63, 0x74, - 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, - 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, - 0x6b, 0x65, 0x74, 0x49, 0x64, 0x22, 0x7a, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, - 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, - 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x62, 0x61, 0x73, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x21, 0x0a, - 0x0c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x72, 0x70, 0x63, 0x22, 0x7d, 0x0a, 0x11, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, + 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x22, 0x4a, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x12, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x3d, 0x0a, - 0x1c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x42, 0x79, 0x4d, - 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, 0x22, 0x70, 0x0a, 0x1d, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x42, 0x79, 0x4d, 0x61, - 0x72, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x72, - 0x69, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x32, 0x8d, - 0x04, 0x0a, 0x12, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x72, 0x61, 0x63, - 0x6c, 0x65, 0x52, 0x50, 0x43, 0x12, 0x5f, 0x0a, 0x0a, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, - 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x69, - 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, - 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, - 0x22, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, - 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x07, 0x50, 0x72, 0x69, 0x63, - 0x65, 0x56, 0x32, 0x12, 0x24, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x65, - 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x69, 0x6e, 0x6a, 0x65, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x11, 0x52, 0x07, 0x70, 0x65, 0x72, 0x50, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x22, 0x60, 0x0a, 0x12, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x6f, 0x72, 0x61, 0x63, + 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, - 0x2e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x67, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, - 0x12, 0x29, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, - 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, - 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x69, 0x6e, - 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, - 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x82, 0x01, 0x0a, 0x15, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x42, 0x79, 0x4d, 0x61, 0x72, 0x6b, - 0x65, 0x74, 0x73, 0x12, 0x32, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x42, 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, + 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x52, 0x07, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x73, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x65, 0x78, 0x74, 0x22, 0x9b, 0x01, 0x0a, 0x06, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x5f, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x61, + 0x73, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x71, 0x75, 0x6f, 0x74, + 0x65, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x71, 0x75, 0x6f, 0x74, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, + 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x72, 0x69, + 0x63, 0x65, 0x22, 0xa3, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x79, 0x6d, 0x62, + 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x61, 0x73, 0x65, 0x53, 0x79, + 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x79, + 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x6f, 0x74, + 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x61, 0x63, 0x6c, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, + 0x61, 0x63, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x72, 0x61, 0x63, + 0x6c, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x53, 0x63, 0x61, + 0x6c, 0x65, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x25, 0x0a, 0x0d, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x22, + 0x50, 0x0a, 0x0e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, + 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x56, 0x32, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x73, 0x22, 0xa5, 0x01, 0x0a, 0x0e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x56, 0x32, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x79, 0x6d, + 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x61, 0x73, 0x65, 0x53, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x5f, 0x73, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x6f, + 0x74, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x61, 0x63, + 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, + 0x72, 0x61, 0x63, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x72, 0x61, + 0x63, 0x6c, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x53, 0x63, + 0x61, 0x6c, 0x65, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x0f, 0x50, 0x72, 0x69, + 0x63, 0x65, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, + 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, + 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, + 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x32, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x52, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x22, 0xd7, 0x01, 0x0a, 0x0d, 0x50, 0x72, + 0x69, 0x63, 0x65, 0x56, 0x32, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x62, + 0x61, 0x73, 0x65, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x62, 0x61, 0x73, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x21, 0x0a, 0x0c, + 0x71, 0x75, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, + 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x2e, 0x0a, 0x13, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, + 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x6f, + 0x72, 0x61, 0x63, 0x6c, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, + 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, + 0x74, 0x49, 0x64, 0x22, 0x7a, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x69, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x61, + 0x73, 0x65, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x62, 0x61, 0x73, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x71, + 0x75, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x1f, + 0x0a, 0x0b, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, + 0x4a, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x12, + 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x3d, 0x0a, 0x1c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x42, 0x79, 0x4d, 0x61, 0x72, - 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x19, - 0x5a, 0x17, 0x2f, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, - 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, + 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x73, 0x22, 0x70, 0x0a, 0x1d, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x42, 0x79, 0x4d, 0x61, 0x72, 0x6b, + 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, + 0x72, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x32, 0x8d, 0x04, 0x0a, + 0x12, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, + 0x52, 0x50, 0x43, 0x12, 0x5f, 0x0a, 0x0a, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x27, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, + 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x69, 0x6e, 0x6a, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, + 0x63, 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x05, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x22, 0x2e, + 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, + 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, + 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x07, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, + 0x32, 0x12, 0x24, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, + 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x56, 0x32, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, + 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x12, 0x29, + 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, + 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x69, 0x6e, 0x6a, 0x65, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, + 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x82, 0x01, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x42, 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, + 0x73, 0x12, 0x32, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, + 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x73, 0x42, 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, 0x42, 0x79, 0x4d, 0x61, 0x72, 0x6b, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x19, 0x5a, 0x17, + 0x2f, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, + 0x65, 0x5f, 0x72, 0x70, 0x63, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/exchange/portfolio_rpc/pb/goadesign_goagen_injective_portfolio_rpc.pb.go b/exchange/portfolio_rpc/pb/goadesign_goagen_injective_portfolio_rpc.pb.go index 059fd05f..a8e14e69 100644 --- a/exchange/portfolio_rpc/pb/goadesign_goagen_injective_portfolio_rpc.pb.go +++ b/exchange/portfolio_rpc/pb/goadesign_goagen_injective_portfolio_rpc.pb.go @@ -665,6 +665,10 @@ type DerivativePosition struct { FundingLast string `protobuf:"bytes,14,opt,name=funding_last,json=fundingLast,proto3" json:"funding_last,omitempty"` // Net funding fees since position opened FundingSum string `protobuf:"bytes,15,opt,name=funding_sum,json=fundingSum,proto3" json:"funding_sum,omitempty"` + // Cumulative funding entry of the position + CumulativeFundingEntry string `protobuf:"bytes,16,opt,name=cumulative_funding_entry,json=cumulativeFundingEntry,proto3" json:"cumulative_funding_entry,omitempty"` + // Effective cumulative funding entry of the position + EffectiveCumulativeFundingEntry string `protobuf:"bytes,17,opt,name=effective_cumulative_funding_entry,json=effectiveCumulativeFundingEntry,proto3" json:"effective_cumulative_funding_entry,omitempty"` } func (x *DerivativePosition) Reset() { @@ -797,6 +801,20 @@ func (x *DerivativePosition) GetFundingSum() string { return "" } +func (x *DerivativePosition) GetCumulativeFundingEntry() string { + if x != nil { + return x.CumulativeFundingEntry + } + return "" +} + +func (x *DerivativePosition) GetEffectiveCumulativeFundingEntry() string { + if x != nil { + return x.EffectiveCumulativeFundingEntry + } + return "" +} + type AccountPortfolioBalancesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1215,7 +1233,7 @@ var file_goadesign_goagen_injective_portfolio_rpc_proto_rawDesc = []byte{ 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x70, 0x6e, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x75, 0x6e, 0x72, - 0x65, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x6e, 0x6c, 0x22, 0xf4, 0x03, 0x0a, 0x12, 0x44, + 0x65, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x6e, 0x6c, 0x22, 0xfb, 0x04, 0x0a, 0x12, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x72, @@ -1247,89 +1265,98 @@ var file_goadesign_goagen_injective_portfolio_rpc_proto_rawDesc = []byte{ 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x61, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x75, 0x6d, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x75, - 0x6d, 0x22, 0x5c, 0x0a, 0x1f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, - 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, - 0x03, 0x75, 0x73, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x75, 0x73, 0x64, 0x22, - 0x6c, 0x0a, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, - 0x6c, 0x69, 0x6f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, - 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x73, 0x52, 0x09, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x22, 0xed, 0x01, - 0x0a, 0x11, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x42, 0x0a, 0x0d, - 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, - 0x69, 0x6e, 0x52, 0x0c, 0x62, 0x61, 0x6e, 0x6b, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x12, 0x4e, 0x0a, 0x0b, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x2e, - 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x56, 0x32, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x55, 0x73, 0x64, 0x22, 0x81, 0x01, - 0x0a, 0x1d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, - 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x1e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6e, 0x6f, - 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x16, - 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, - 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x32, 0x9d, 0x04, 0x0a, 0x15, 0x49, 0x6e, - 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, - 0x52, 0x50, 0x43, 0x12, 0x6b, 0x0a, 0x0c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x48, 0x6f, 0x6c, 0x64, - 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x48, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2d, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, - 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x48, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x77, 0x0a, 0x10, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, - 0x6f, 0x6c, 0x69, 0x6f, 0x12, 0x30, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, - 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, - 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x18, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x38, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, - 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, - 0x6f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x39, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, - 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8b, 0x01, 0x0a, 0x16, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, - 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x12, 0x36, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, - 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, - 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, - 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, - 0x6f, 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, + 0x6d, 0x12, 0x38, 0x0a, 0x18, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x46, + 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x4b, 0x0a, 0x22, 0x65, + 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x6e, 0x74, 0x72, + 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1f, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x43, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x46, 0x75, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x5c, 0x0a, 0x1f, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x42, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x73, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x03, 0x75, 0x73, 0x64, 0x22, 0x6c, 0x0a, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x70, 0x6f, + 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, + 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, + 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, + 0x6f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x09, 0x70, 0x6f, 0x72, 0x74, 0x66, + 0x6f, 0x6c, 0x69, 0x6f, 0x22, 0xed, 0x01, 0x0a, 0x11, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, + 0x69, 0x6f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x42, 0x0a, 0x0d, 0x62, 0x61, 0x6e, 0x6b, 0x5f, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6e, 0x6a, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, + 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x0c, 0x62, 0x61, 0x6e, 0x6b, 0x42, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x4e, 0x0a, 0x0b, 0x73, 0x75, 0x62, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, + 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, + 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x56, 0x32, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x5f, 0x75, 0x73, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x55, 0x73, 0x64, 0x22, 0x81, 0x01, 0x0a, 0x1d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x1c, 0x5a, 0x1a, 0x2f, 0x69, 0x6e, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x1e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, + 0x6c, 0x69, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, + 0x0d, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x12, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x32, 0x9d, 0x04, 0x0a, 0x15, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x50, 0x6f, + 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x52, 0x50, 0x43, 0x12, 0x6b, 0x0a, 0x0c, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x48, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x69, 0x6e, 0x6a, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, + 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x48, 0x6f, 0x6c, 0x64, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x5f, 0x72, + 0x70, 0x63, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x48, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x10, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x12, 0x30, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, - 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, + 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, + 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, + 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, + 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x8f, 0x01, 0x0a, 0x18, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, + 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x38, 0x2e, + 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, + 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, + 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, + 0x63, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, + 0x69, 0x6f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x8b, 0x01, 0x0a, 0x16, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x12, 0x36, 0x2e, + 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, + 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x6f, 0x72, + 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, + 0x42, 0x1c, 0x5a, 0x1a, 0x2f, 0x69, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, + 0x6f, 0x72, 0x74, 0x66, 0x6f, 0x6c, 0x69, 0x6f, 0x5f, 0x72, 0x70, 0x63, 0x70, 0x62, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/go.mod b/go.mod index b2f1c323..b3acc2d5 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,6 @@ require ( cosmossdk.io/x/upgrade v0.1.4 github.com/CosmWasm/wasmd v0.53.2 github.com/InjectiveLabs/suplog v1.3.3 - github.com/bandprotocol/bandchain-packet v0.0.0-00010101000000-000000000000 github.com/bcp-innovations/hyperlane-cosmos v0.0.0-00010101000000-000000000000 github.com/btcsuite/btcd v0.24.2 github.com/btcsuite/btcd/btcutil v1.1.6 @@ -253,7 +252,7 @@ replace ( github.com/bcp-innovations/hyperlane-cosmos => github.com/InjectiveLabs/hyperlane-cosmos v1.0.1-inj github.com/coder/websocket => github.com/InjectiveLabs/websocket v1.8.13 - github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.1-inj.4 + github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.1-inj.6 github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 github.com/cosmos/cosmos-sdk => github.com/InjectiveLabs/cosmos-sdk v0.50.14-inj @@ -270,7 +269,7 @@ replace ( github.com/miguelmota/go-ethereum-hdwallet => github.com/InjectiveLabs/go-ethereum-hdwallet v0.1.2 - github.com/skip-mev/block-sdk/v2 => github.com/InjectiveLabs/block-sdk/v2 v2.5.1-inj.8 + github.com/skip-mev/block-sdk/v2 => github.com/InjectiveLabs/block-sdk/v2 v2.5.1-inj.9 github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/tyler-smith/go-bip39 => github.com/InjectiveLabs/go-bip39 v1.1.0 diff --git a/go.sum b/go.sum index 2ebc440a..d7f73e44 100644 --- a/go.sum +++ b/go.sum @@ -65,10 +65,8 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48 github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1/go.mod h1:jyqM3eLpJ3IbIFDTKVz2rF9T/xWGW0rIriGwnz8l9Tk= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 h1:8nn+rsCvTq9axyEh382S0PFLBeaFwNsT43IrPWzctRU= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1/go.mod h1:viRWSEhtMZqz1rhwmOVKkWl6SwmVowfL9O2YR5gI2PE= -github.com/InjectiveLabs/bandchain-packet v0.0.4-inj-1 h1:ZnvCV/lzjWmBwuGbkAz+okucfJEyEzkU9GYK3tKU9cU= -github.com/InjectiveLabs/bandchain-packet v0.0.4-inj-1/go.mod h1:QELTDYiwnbAqIgTF9zeKr+hVlK6eVyt6Nxmh6/1mmzQ= -github.com/InjectiveLabs/cometbft v1.0.1-inj.4 h1:xBu434PJvUZI7fHP8wUs+fRlfqI+flpYbvI5mlE3W6s= -github.com/InjectiveLabs/cometbft v1.0.1-inj.4/go.mod h1:RgHHndb7wdtm9etmVj4tDn1NynC9YKIEJW9UUI3FCn4= +github.com/InjectiveLabs/cometbft v1.0.1-inj.6 h1:Q+uiKcth/gU2RKjFiFk+7BXlqW6hEUyqYoj3x2uD7ug= +github.com/InjectiveLabs/cometbft v1.0.1-inj.6/go.mod h1:RgHHndb7wdtm9etmVj4tDn1NynC9YKIEJW9UUI3FCn4= github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 h1:uXsmBVeBickTjZ2GqPNYXShoboRw1m2Cq1bKv4QCe0o= github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= github.com/InjectiveLabs/cosmos-sdk v0.50.14-inj h1:8ggLVXSVF6hz8VFB5ly1l9os4G4roqSsIzsGtH/8W70= diff --git a/injective_data/chain_messages_list.json b/injective_data/chain_messages_list.json index a1753cc8..cadea152 100644 --- a/injective_data/chain_messages_list.json +++ b/injective_data/chain_messages_list.json @@ -53,6 +53,7 @@ "injective.exchange.v1beta1.OrderData", "injective.exchange.v1beta1.SpotMarketOrderResults", "injective.exchange.v2.DerivativeMarketOrderResults", + "injective.exchange.v2.MsgActivatePostOnlyMode", "injective.exchange.v2.MsgActivateStakeGrant", "injective.exchange.v2.MsgAdminUpdateBinaryOptionsMarket", "injective.exchange.v2.MsgAtomicMarketOrderFeeMultiplierSchedule", @@ -124,13 +125,12 @@ "injective.ocr.v1beta1.MsgUpdateFeed", "injective.ocr.v1beta1.MsgUpdateParams", "injective.ocr.v1beta1.MsgWithdrawFeedRewardPool", - "injective.oracle.v1beta1.MsgRelayBandRates", + "injective.oracle.v1beta1.MsgRelayChainlinkPrices", "injective.oracle.v1beta1.MsgRelayCoinbaseMessages", "injective.oracle.v1beta1.MsgRelayPriceFeedPrice", "injective.oracle.v1beta1.MsgRelayProviderPrices", "injective.oracle.v1beta1.MsgRelayPythPrices", "injective.oracle.v1beta1.MsgRelayStorkPrices", - "injective.oracle.v1beta1.MsgRequestBandIBCRates", "injective.oracle.v1beta1.MsgUpdateParams", "injective.peggy.v1.MsgBlacklistEthereumAddresses", "injective.peggy.v1.MsgCancelSendToEth", diff --git a/injective_data/ofac.json b/injective_data/ofac.json index 413db0c0..cc19ac90 100644 --- a/injective_data/ofac.json +++ b/injective_data/ofac.json @@ -33,6 +33,7 @@ "0x57ec89a0c056163a0314e413320f9b3abe761259", "0x5a14e72060c11313e38738009254a90968f58f51", "0x5a7a51bfb49f190e5a6060a5bc6052ac14a3b59f", + "0x5d5b5dafecbf31bdb08bfd3edad4f2694372d0ef", "0x5f48c2a71b2cc96e3f0ccae4e39318ff0dc375b2", "0x67d40ee1a85bf4a4bb7ffae16de985e8427b6b45", "0x6be0ae71e6c41f2f9d0d1a3b8d0f75e6f6a0b46e", @@ -58,6 +59,7 @@ "0xa7e5d5a720f06526557c513402f2e6b5fa20b008", "0xb338962b92cd818d6aef0a32a9ecd01212a71f33", "0xb6f5ec1a0a9cd1526536d3f0426c429529471f40", + "0xc103b7dc095c904b92081eef0c1640081ec01c10", "0xc2a3829f459b3edd87791c74cd45402ba0a20be3", "0xc455f7fd3e0e12afd51fba5c106909934d8a0e4a", "0xd0975b32cea532eadddfc9c60481976e39db3472", @@ -67,6 +69,7 @@ "0xdb2720ebad55399117ddb4c4a4afd9a4ccada8fe", "0xdcbeffbecce100cce9e4b153c4e15cb885643193", "0xe1d865c3d669dcc8c57c8d023140cb204e672ee4", + "0xe1e4c5e5ed8f03ae61b581e2def126025f2b9401", "0xe3d35f68383732649669aa990832e017340dbca5", "0xe7aa314c77f4233c18c6cc84384a9247c0cf367b", "0xe950dc316b836e4eefb8308bf32bf7c72a1358ff", diff --git a/proto/injective/evm/v1/tx.proto b/proto/injective/evm/v1/tx.proto index 7db46d17..72c903a1 100644 --- a/proto/injective/evm/v1/tx.proto +++ b/proto/injective/evm/v1/tx.proto @@ -31,7 +31,8 @@ message MsgEthereumTx { option (gogoproto.goproto_getters) = false; // data is inner transaction data of the Ethereum transaction - google.protobuf.Any data = 1; + google.protobuf.Any data = 1 + [ (cosmos_proto.accepts_interface) = "injective.evm.v1.TxData" ]; // size is the encoded storage size of the transaction (DEPRECATED) double size = 2 [ (gogoproto.jsontag) = "-" ]; @@ -52,7 +53,7 @@ message MsgEthereumTx { // AllowUnprotectedTxs parameter is disabled. message LegacyTx { option (gogoproto.goproto_getters) = false; - option (cosmos_proto.implements_interface) = "TxData"; + option (cosmos_proto.implements_interface) = "injective.evm.v1.TxData"; // nonce corresponds to the account nonce (transaction sequence). uint64 nonce = 1; @@ -80,7 +81,7 @@ message LegacyTx { // AccessListTx is the data of EIP-2930 access list transactions. message AccessListTx { option (gogoproto.goproto_getters) = false; - option (cosmos_proto.implements_interface) = "TxData"; + option (cosmos_proto.implements_interface) = "injective.evm.v1.TxData"; // chain_id of the destination EVM chain string chain_id = 1 [ @@ -120,7 +121,7 @@ message AccessListTx { // DynamicFeeTx is the data of EIP-1559 dinamic fee transactions. message DynamicFeeTx { option (gogoproto.goproto_getters) = false; - option (cosmos_proto.implements_interface) = "TxData"; + option (cosmos_proto.implements_interface) = "injective.evm.v1.TxData"; // chain_id of the destination EVM chain string chain_id = 1 [ @@ -184,6 +185,9 @@ message MsgEthereumTxResponse { uint64 gas_used = 5; // include the block hash for json-rpc to use bytes block_hash = 6; + // execution_gas_used specifies the actual gas consumed during EVM execution. + // This is used for accurate gas estimation. + uint64 execution_gas_used = 7; } // MsgUpdateParams defines a Msg for updating the x/evm module parameters. diff --git a/proto/injective/exchange/v1beta1/exchange.proto b/proto/injective/exchange/v1beta1/exchange.proto index 93bfbbd0..f50ec015 100644 --- a/proto/injective/exchange/v1beta1/exchange.proto +++ b/proto/injective/exchange/v1beta1/exchange.proto @@ -20,8 +20,12 @@ message OpenNotionalCap { option (amino.name) = "injective.exchange.v1beta1.OpenNotionalCap"; oneof cap { - OpenNotionalCapUncapped uncapped = 1 [(amino.oneof_name) = "uncapped"]; - OpenNotionalCapCapped capped = 2 [(amino.oneof_name) = "capped"]; + OpenNotionalCapUncapped uncapped = 1 + [ (amino.oneof_name) = + "injective.exchange.v1beta1.OpenNotionalCapUncapped" ]; + OpenNotionalCapCapped capped = 2 + [ (amino.oneof_name) = + "injective.exchange.v1beta1.OpenNotionalCapCapped" ]; } } @@ -828,6 +832,8 @@ enum ExecutionType { LimitMatchNewOrder = 4; MarketLiquidation = 5; ExpiryMarketSettlement = 6; + OffsettingPosition = 7; + Synthetic = 8; } message SubaccountPosition { diff --git a/proto/injective/exchange/v1beta1/query.proto b/proto/injective/exchange/v1beta1/query.proto index cc2e1354..46dbc168 100644 --- a/proto/injective/exchange/v1beta1/query.proto +++ b/proto/injective/exchange/v1beta1/query.proto @@ -259,7 +259,7 @@ service Query { rpc SubaccountPositions(QuerySubaccountPositionsRequest) returns (QuerySubaccountPositionsResponse) { option (google.api.http).get = - "/injective/exchange/v1beta1/positions/{subaccount_id}"; + "/injective/exchange/v1beta1/subaccount_positions/{subaccount_id}"; } // Retrieves subaccount's position in market diff --git a/proto/injective/exchange/v2/events.proto b/proto/injective/exchange/v2/events.proto index 70c700fc..5f189b08 100644 --- a/proto/injective/exchange/v2/events.proto +++ b/proto/injective/exchange/v2/events.proto @@ -81,6 +81,10 @@ message EventBinaryOptionsMarketUpdate { BinaryOptionsMarket market = 1 [ (gogoproto.nullable) = false ]; } +message EventDerivativeMarketUpdate { + DerivativeMarket market = 1 [ (gogoproto.nullable) = false ]; +} + message EventNewSpotOrders { string market_id = 1; repeated SpotLimitOrder buy_orders = 2; @@ -343,3 +347,13 @@ message SpotOrderV2Changes { } message EventDerivativePositionV2Migration { DerivativePosition position = 1; } + +message EventPositionTransfer { + string market_id = 1; + string source_subaccount_id = 2; + string destination_subaccount_id = 3; + string quantity = 4 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; +} \ No newline at end of file diff --git a/proto/injective/exchange/v2/exchange.proto b/proto/injective/exchange/v2/exchange.proto index bdacaf6a..39d507aa 100644 --- a/proto/injective/exchange/v2/exchange.proto +++ b/proto/injective/exchange/v2/exchange.proto @@ -4,6 +4,7 @@ package injective.exchange.v2; import "gogoproto/gogo.proto"; import "amino/amino.proto"; import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; import "injective/oracle/v1beta1/oracle.proto"; import "injective/exchange/v2/market.proto"; @@ -11,6 +12,18 @@ import "injective/exchange/v2/order.proto"; option go_package = "github.com/InjectiveLabs/injective-core/injective-chain/modules/exchange/types/v2"; +// EnforcedRestrictionsContract defines a contract with its pause event +// signature +message EnforcedRestrictionsContract { + option (gogoproto.equal) = true; + // EVM address of the contract + string contract_address = 1 + [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Pause event signature for the contract (e.g. "Pause()", or + // "Pause(address)"). If left empty, it will default to "Pause()". + string pause_event_signature = 2; +} + enum ExecutionType { UnspecifiedExecutionType = 0; Market = 1; @@ -20,6 +33,7 @@ enum ExecutionType { MarketLiquidation = 5; ExpiryMarketSettlement = 6; OffsettingPosition = 7; + Synthetic = 8; } message Params { @@ -208,6 +222,11 @@ message Params { // mode will be enabled after the downtime-detector module detects a chain // downtime uint64 post_only_mode_blocks_amount_after_downtime = 35; + + // Contracts that exchange will be listening to pause markets denominated in + // respective erc20: denoms, with their pause event signatures + repeated EnforcedRestrictionsContract enforced_restrictions_contracts = 36 + [ (gogoproto.nullable) = false ]; } message NextFundingTimestamp { int64 next_timestamp = 1; } diff --git a/proto/injective/exchange/v2/market.proto b/proto/injective/exchange/v2/market.proto index 71dd5028..c9614b24 100644 --- a/proto/injective/exchange/v2/market.proto +++ b/proto/injective/exchange/v2/market.proto @@ -2,8 +2,8 @@ syntax = "proto3"; package injective.exchange.v2; import "gogoproto/gogo.proto"; -import "injective/oracle/v1beta1/oracle.proto"; import "amino/amino.proto"; +import "injective/oracle/v1beta1/oracle.proto"; option go_package = "github.com/InjectiveLabs/injective-core/injective-chain/modules/exchange/types/v2"; @@ -13,14 +13,30 @@ enum MarketStatus { Paused = 2; Demolished = 3; Expired = 4; + ForcePaused = 5; +} + +enum ForcePausedReason { + QuoteDenomPaused = 0; +} + +message ForcePausedInfo { + ForcePausedReason reason = 1; + string mark_price_at_pausing = 2 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = true + ]; } message OpenNotionalCap { option (amino.name) = "injective.exchange.v2.OpenNotionalCap"; oneof cap { - OpenNotionalCapUncapped uncapped = 1 [(amino.oneof_name) = "uncapped"]; - OpenNotionalCapCapped capped = 2 [(amino.oneof_name) = "capped"]; + OpenNotionalCapUncapped uncapped = 1 + [ (amino.oneof_name) = + "injective.exchange.v2.OpenNotionalCapUncapped" ]; + OpenNotionalCapCapped capped = 2 + [ (amino.oneof_name) = "injective.exchange.v2.OpenNotionalCapCapped" ]; } } @@ -103,6 +119,9 @@ message SpotMarket { uint32 base_decimals = 14; // quote token decimals uint32 quote_decimals = 15; + // has_disabled_minimal_protocol_fee indicates whether the minimal protocol + // fee is disabled for the market + bool has_disabled_minimal_protocol_fee = 16; } // An object describing a binary options market in Injective Protocol. @@ -178,6 +197,14 @@ message BinaryOptionsMarket { // open_notional_cap defines the maximum open notional for the market OpenNotionalCap open_notional_cap = 21 [ (gogoproto.nullable) = false ]; + + // has_disabled_minimal_protocol_fee indicates whether the minimal protocol + // fee is disabled for the market + bool has_disabled_minimal_protocol_fee = 22; + + // force_paused_info defines additional info for force paused markets, only + // set when status == ForcePaused + ForcePausedInfo force_paused_info = 23; } // An object describing a derivative market in the Injective Futures Protocol. @@ -265,6 +292,14 @@ message DerivativeMarket { // open_notional_cap defines the maximum open notional for the market OpenNotionalCap open_notional_cap = 22 [ (gogoproto.nullable) = false ]; + + // has_disabled_minimal_protocol_fee indicates whether the minimal protocol + // fee is disabled for the market + bool has_disabled_minimal_protocol_fee = 23; + + // force_paused_info defines additional info for force paused markets, only + // set when status == ForcePaused + ForcePausedInfo force_paused_info = 24; } message DerivativeMarketSettlementInfo { @@ -318,7 +353,13 @@ message ExpiryFuturesMarketInfo { int64 twap_start_timestamp = 3; // expiration_twap_start_price_cumulative defines the cumulative price for the // start of the TWAP window (in human readable format) + // Deprecated: For correctly calculating the expiration price using TWAP, we + // need to keep the cumulative price at the start of TWAP calculation + // separately for the base asset and the quote asset. Use + // expiration_twap_start_base_cumulative_price and + // expiration_twap_start_quote_cumulative_price instead. string expiration_twap_start_price_cumulative = 4 [ + deprecated = true, (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false ]; @@ -328,6 +369,20 @@ message ExpiryFuturesMarketInfo { (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false ]; + // expiration_twap_start_base_cumulative_price defines the cumulative price + // for the base asset at the start of the TWAP calculation window (in human + // readable format) + string expiration_twap_start_base_cumulative_price = 6 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + // expiration_twap_start_quote_cumulative_price defines the cumulative price + // for the quote asset at the start of the TWAP calculation window (in human + // readable format) + string expiration_twap_start_quote_cumulative_price = 7 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; } message PerpetualMarketInfo { diff --git a/proto/injective/exchange/v2/proposal.proto b/proto/injective/exchange/v2/proposal.proto index 53ac03fb..836c8d15 100644 --- a/proto/injective/exchange/v2/proposal.proto +++ b/proto/injective/exchange/v2/proposal.proto @@ -14,6 +14,12 @@ import "injective/oracle/v1beta1/oracle.proto"; option go_package = "github.com/InjectiveLabs/injective-core/injective-chain/modules/exchange/types/v2"; +enum DisableMinimalProtocolFeeUpdate { + NoUpdate = 0; + False = 1; + True = 2; +} + message SpotMarketParamUpdateProposal { option (amino.name) = "exchange/SpotMarketParamUpdateProposal"; option (gogoproto.equal) = false; @@ -73,6 +79,11 @@ message SpotMarketParamUpdateProposal { uint32 base_decimals = 13; // quote token decimals uint32 quote_decimals = 14; + + // has_disabled_minimal_protocol_fee defines whether the minimal protocol fee + // is disabled for the market + DisableMinimalProtocolFeeUpdate has_disabled_minimal_protocol_fee = 15 + [ (gogoproto.nullable) = true ]; } enum ExchangeType { @@ -476,6 +487,10 @@ message DerivativeMarketParamUpdateProposal { ]; // open_notional_cap defines the maximum open notional for the market OpenNotionalCap open_notional_cap = 19 [ (gogoproto.nullable) = true ]; + // has_disabled_minimal_protocol_fee defines whether the minimal protocol fee + // is disabled for the market + DisableMinimalProtocolFeeUpdate has_disabled_minimal_protocol_fee = 20 + [ (gogoproto.nullable) = true ]; } message AdminInfo { @@ -572,6 +587,10 @@ message BinaryOptionsMarketParamUpdateProposal { ]; // open_notional_cap defines the maximum open notional for the market OpenNotionalCap open_notional_cap = 17 [ (gogoproto.nullable) = true ]; + // has_disabled_minimal_protocol_fee defines whether the minimal protocol fee + // is disabled for the market + DisableMinimalProtocolFeeUpdate has_disabled_minimal_protocol_fee = 18 + [ (gogoproto.nullable) = true ]; } message ProviderOracleParams { diff --git a/proto/injective/exchange/v2/query.proto b/proto/injective/exchange/v2/query.proto index 734ffbac..c4308a8e 100644 --- a/proto/injective/exchange/v2/query.proto +++ b/proto/injective/exchange/v2/query.proto @@ -262,14 +262,14 @@ service Query { rpc PositionsInMarket(QueryPositionsInMarketRequest) returns (QueryPositionsInMarketResponse) { option (google.api.http).get = - "/injective/exchange/v2/positions/{market_id}"; + "/injective/exchange/v2/positions_in_market/{market_id}"; } // Retrieves subaccount's positions rpc SubaccountPositions(QuerySubaccountPositionsRequest) returns (QuerySubaccountPositionsResponse) { option (google.api.http).get = - "/injective/exchange/v2/positions/{subaccount_id}"; + "/injective/exchange/v2/subaccount_positions/{subaccount_id}"; } // Retrieves subaccount's position in market diff --git a/proto/injective/exchange/v2/tx.proto b/proto/injective/exchange/v2/tx.proto index 0162d83f..f06e4ca1 100644 --- a/proto/injective/exchange/v2/tx.proto +++ b/proto/injective/exchange/v2/tx.proto @@ -222,8 +222,14 @@ service Msg { MsgAtomicMarketOrderFeeMultiplierSchedule) returns (MsgAtomicMarketOrderFeeMultiplierScheduleResponse); + // MsgCancelPostOnlyMode defines a message to turn off the post-only mode rpc CancelPostOnlyMode(MsgCancelPostOnlyMode) returns (MsgCancelPostOnlyModeResponse); + + // MsgActivatePostOnlyMode defines a message to turn on the post-only mode for + // a number of blocks + rpc ActivatePostOnlyMode(MsgActivatePostOnlyMode) + returns (MsgActivatePostOnlyModeResponse); } message MsgUpdateSpotMarket { @@ -1580,3 +1586,19 @@ message MsgCancelPostOnlyMode { // MsgCancelPostOnlyModeResponse defines the response for MsgCancelPostOnlyMode message MsgCancelPostOnlyModeResponse {} + +// MsgActivatePostOnlyMode defines a message to turn on the post-only mode for a +// number of blocks +message MsgActivatePostOnlyMode { + option (amino.name) = "exchange/MsgActivatePostOnlyMode"; + option (cosmos.msg.v1.signer) = "sender"; + + // the sender's Injective address + string sender = 1; + // the number of blocks to activate post-only mode for + uint32 blocks_amount = 2; +} + +// MsgActivatePostOnlyModeResponse defines the response for +// MsgActivatePostOnlyMode +message MsgActivatePostOnlyModeResponse {} diff --git a/proto/injective/oracle/v1beta1/events.proto b/proto/injective/oracle/v1beta1/events.proto index 82c151fc..027cb6d5 100644 --- a/proto/injective/oracle/v1beta1/events.proto +++ b/proto/injective/oracle/v1beta1/events.proto @@ -87,3 +87,7 @@ message SetCoinbasePriceEvent { message EventSetStorkPrices { repeated StorkPriceState prices = 1; } message EventSetPythPrices { repeated PythPriceState prices = 1; } + +message EventSetChainlinkDataStreamsPrices { + repeated ChainlinkDataStreamsPriceState prices = 1; +} \ No newline at end of file diff --git a/proto/injective/oracle/v1beta1/genesis.proto b/proto/injective/oracle/v1beta1/genesis.proto index 8e2665dc..11deb334 100644 --- a/proto/injective/oracle/v1beta1/genesis.proto +++ b/proto/injective/oracle/v1beta1/genesis.proto @@ -11,25 +11,26 @@ message GenesisState { // params defines all the parameters of related to oracle. Params params = 1 [ (gogoproto.nullable) = false ]; - repeated string band_relayers = 2; + repeated string band_relayers = 2 [ deprecated = true ]; - repeated BandPriceState band_price_states = 3; + repeated BandPriceState band_price_states = 3 [ deprecated = true ]; repeated PriceFeedState price_feed_price_states = 4; repeated CoinbasePriceState coinbase_price_states = 5; - repeated BandPriceState band_ibc_price_states = 6; + repeated BandPriceState band_ibc_price_states = 6 [ deprecated = true ]; - repeated BandOracleRequest band_ibc_oracle_requests = 7; + repeated BandOracleRequest band_ibc_oracle_requests = 7 [ deprecated = true ]; - BandIBCParams band_ibc_params = 8 [ (gogoproto.nullable) = false ]; + BandIBCParams band_ibc_params = 8 + [ (gogoproto.nullable) = false, deprecated = true ]; - uint64 band_ibc_latest_client_id = 9; + uint64 band_ibc_latest_client_id = 9 [ deprecated = true ]; - repeated CalldataRecord calldata_records = 10; + repeated CalldataRecord calldata_records = 10 [ deprecated = true ]; - uint64 band_ibc_latest_request_id = 11; + uint64 band_ibc_latest_request_id = 11 [ deprecated = true ]; repeated ChainlinkPriceState chainlink_price_states = 12; @@ -42,6 +43,9 @@ message GenesisState { repeated StorkPriceState stork_price_states = 16; repeated string stork_publishers = 17; + + repeated ChainlinkDataStreamsPriceState chainlink_data_streams_price_states = + 18; } message CalldataRecord { diff --git a/proto/injective/oracle/v1beta1/oracle.proto b/proto/injective/oracle/v1beta1/oracle.proto index 2b9e2a84..2d83e5a9 100644 --- a/proto/injective/oracle/v1beta1/oracle.proto +++ b/proto/injective/oracle/v1beta1/oracle.proto @@ -13,11 +13,14 @@ message Params { option (gogoproto.equal) = true; string pyth_contract = 1; + string chainlink_verifier_proxy_contract = 2; + bool accept_unverified_chainlink_data_streams_reports = 3; + uint64 chainlink_data_streams_verification_gas_limit = 4; } enum OracleType { Unspecified = 0; - Band = 1; + Band = 1 [ deprecated = true ]; PriceFeed = 2; Coinbase = 3; Chainlink = 4; @@ -26,9 +29,10 @@ enum OracleType { API3 = 7; Uma = 8; Pyth = 9; - BandIBC = 10; + BandIBC = 10 [ deprecated = true ]; Provider = 11; Stork = 12; + ChainlinkDataStreams = 13; } message OracleInfo { @@ -46,7 +50,10 @@ message ChainlinkPriceState { PriceState price_state = 4 [ (gogoproto.nullable) = false ]; } +// DEPRECATED! Oracle price from Band is no longer supported message BandPriceState { + option deprecated = true; + string symbol = 1; string rate = 2 [ (gogoproto.customtype) = "cosmossdk.io/math.Int", @@ -150,7 +157,21 @@ message PythPriceState { PriceState price_state = 6 [ (gogoproto.nullable) = false ]; } +message ChainlinkDataStreamsPriceState { + string feed_id = 1; + string report_price = 2 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + uint64 valid_from_timestamp = 3; + uint64 observations_timestamp = 4; + PriceState price_state = 5 [ (gogoproto.nullable) = false ]; +} + +// DEPRECATED! Oracle price from Band is no longer supported message BandOracleRequest { + option deprecated = true; + // Unique Identifier for band ibc oracle request uint64 request_id = 1; @@ -186,7 +207,10 @@ message BandOracleRequest { uint64 min_source_count = 9; } +// DEPRECATED! Oracle price from Band is no longer supported message BandIBCParams { + option deprecated = true; + // true if Band IBC should be enabled bool band_ibc_enabled = 1; // block request interval to send Band IBC prices @@ -297,3 +321,10 @@ message SignedPriceOfAssetPair { ]; bytes signature = 4; } + +message ChainlinkReport { + bytes feed_id = 1; + bytes full_report = 2; + uint64 valid_from_timestamp = 3; + uint64 observations_timestamp = 4; +} diff --git a/proto/injective/oracle/v1beta1/proposal.proto b/proto/injective/oracle/v1beta1/proposal.proto index 2c149cf7..054333e5 100644 --- a/proto/injective/oracle/v1beta1/proposal.proto +++ b/proto/injective/oracle/v1beta1/proposal.proto @@ -1,15 +1,19 @@ syntax = "proto3"; package injective.oracle.v1beta1; +import "amino/amino.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; import "injective/oracle/v1beta1/oracle.proto"; -import "amino/amino.proto"; option go_package = "github.com/InjectiveLabs/injective-core/injective-chain/modules/oracle/types"; +// Deprecated: Band oracle support was removed. This message is kept for +// backward compatibility to decode historical proposals. message GrantBandOraclePrivilegeProposal { + option deprecated = true; + option (amino.name) = "oracle/GrantBandOraclePrivilegeProposal"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -21,7 +25,11 @@ message GrantBandOraclePrivilegeProposal { repeated string relayers = 3; } +// Deprecated: Band oracle support was removed. This message is kept for +// backward compatibility to decode historical proposals. message RevokeBandOraclePrivilegeProposal { + option deprecated = true; + option (amino.name) = "oracle/RevokeBandOraclePrivilegeProposal"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -87,7 +95,11 @@ message RevokePriceFeederPrivilegeProposal { repeated string relayers = 5; } +// Deprecated: Band oracle support was removed. This message is kept for +// backward compatibility to decode historical proposals. message AuthorizeBandOracleRequestProposal { + option deprecated = true; + option (amino.name) = "oracle/AuthorizeBandOracleRequestProposal"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -96,10 +108,14 @@ message AuthorizeBandOracleRequestProposal { string title = 1; string description = 2; - BandOracleRequest request = 3 [ (gogoproto.nullable) = false ]; + BandOracleRequest request = 3 [(gogoproto.nullable) = false]; } +// Deprecated: Band oracle support was removed. This message is kept for +// backward compatibility to decode historical proposals. message UpdateBandOracleRequestProposal { + option deprecated = true; + option (amino.name) = "oracle/UpdateBandOracleRequestProposal"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -112,7 +128,11 @@ message UpdateBandOracleRequestProposal { BandOracleRequest update_oracle_request = 4; } +// Deprecated: Band oracle support was removed. This message is kept for +// backward compatibility to decode historical proposals. message EnableBandIBCProposal { + option deprecated = true; + option (amino.name) = "oracle/EnableBandIBCProposal"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -122,7 +142,7 @@ message EnableBandIBCProposal { string title = 1; string description = 2; - BandIBCParams band_ibc_params = 3 [ (gogoproto.nullable) = false ]; + BandIBCParams band_ibc_params = 3 [(gogoproto.nullable) = false]; } message GrantStorkPublisherPrivilegeProposal { diff --git a/proto/injective/oracle/v1beta1/query.proto b/proto/injective/oracle/v1beta1/query.proto index f949c580..e1200de4 100644 --- a/proto/injective/oracle/v1beta1/query.proto +++ b/proto/injective/oracle/v1beta1/query.proto @@ -76,6 +76,14 @@ service Query { "/injective/oracle/v1beta1/provider_price_state/{provider}/{symbol}"; } + // Retrieves the state for all Chainlink Data Streams price feeds + rpc ChainlinkDataStreamsPriceStates( + QueryChainlinkDataStreamsPriceStatesRequest) + returns (QueryChainlinkDataStreamsPriceStatesResponse) { + option (google.api.http).get = + "/injective/oracle/v1beta1/chainlink_data_stream_price_states"; + } + // Retrieves the entire oracle module's state rpc OracleModuleState(QueryModuleStateRequest) returns (QueryModuleStateResponse) { @@ -215,6 +223,16 @@ message QueryProviderPriceStateRequest { // Query/ProviderPriceStates RPC method. message QueryProviderPriceStateResponse { PriceState price_state = 1; } +// QueryChainlinkDataStreamsPriceStatesRequest is the request type for the +// Query/ChainlinkDataStreamsPriceStates RPC method. +message QueryChainlinkDataStreamsPriceStatesRequest {} + +// QueryChainlinkDataStreamsPriceStatesResponse is the response type for the +// Query/ChainlinkDataStreamsPriceStates RPC method. +message QueryChainlinkDataStreamsPriceStatesResponse { + repeated ChainlinkDataStreamsPriceState price_states = 1; +} + // QueryModuleStateRequest is the request type for the Query/OracleModuleState // RPC method. message QueryModuleStateRequest {} diff --git a/proto/injective/oracle/v1beta1/tx.proto b/proto/injective/oracle/v1beta1/tx.proto index bc48f5e6..4ab222ec 100644 --- a/proto/injective/oracle/v1beta1/tx.proto +++ b/proto/injective/oracle/v1beta1/tx.proto @@ -23,13 +23,6 @@ service Msg { rpc RelayPriceFeedPrice(MsgRelayPriceFeedPrice) returns (MsgRelayPriceFeedPriceResponse); - // RelayBandRates defines a method for relaying rates from Band - rpc RelayBandRates(MsgRelayBandRates) returns (MsgRelayBandRatesResponse); - - // RequestBandIBCRates defines a method for fetching rates from Band ibc - rpc RequestBandIBCRates(MsgRequestBandIBCRates) - returns (MsgRequestBandIBCRatesResponse); - // RelayCoinbaseMessages defines a method for relaying price messages from // Coinbase API rpc RelayCoinbaseMessages(MsgRelayCoinbaseMessages) @@ -43,6 +36,11 @@ service Msg { // RelayPythPrices defines a method for relaying rates from the Pyth contract rpc RelayPythPrices(MsgRelayPythPrices) returns (MsgRelayPythPricesResponse); + // RelayChainlinkPrices defines a method for relaying rates from Chainlink + // Data Streams + rpc RelayChainlinkPrices(MsgRelayChainlinkPrices) + returns (MsgRelayChainlinkPricesResponse); + // UpdateParams enables updating oracle module's params via governance rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); } @@ -88,19 +86,6 @@ message MsgRelayPriceFeedPrice { message MsgRelayPriceFeedPriceResponse {} -message MsgRelayBandRates { - option (amino.name) = "oracle/MsgRelayBandRates"; - option (cosmos.msg.v1.signer) = "relayer"; - - string relayer = 1; - repeated string symbols = 2; - repeated uint64 rates = 3; - repeated uint64 resolve_times = 4; - repeated uint64 requestIDs = 5; -} - -message MsgRelayBandRatesResponse {} - // MsgRelayCoinbaseMessages defines a SDK message for relaying price messages // from Coinbase API. message MsgRelayCoinbaseMessages { @@ -130,34 +115,35 @@ message MsgRelayStorkPrices { message MsgRelayStorkPricesResponse {} -// MsgRequestBandIBCRates defines a SDK message for requesting data from -// BandChain using IBC. -message MsgRequestBandIBCRates { - option (amino.name) = "oracle/MsgRequestBandIBCRates"; +// MsgRelayPythPrices defines a SDK message for updating Pyth prices +message MsgRelayPythPrices { + option (amino.name) = "oracle/MsgRelayPythPrices"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; option (cosmos.msg.v1.signer) = "sender"; string sender = 1; - uint64 request_id = 2; + repeated PriceAttestation price_attestations = 2; } -// MsgRequestDataResponse defines the Msg/RequestBandIBCRates response type. -message MsgRequestBandIBCRatesResponse {} +// MsgRelayPythPricesResponse defines the Msg/RelayPythPrices response type. +message MsgRelayPythPricesResponse {} -// MsgRelayPythPrices defines a SDK message for updating Pyth prices -message MsgRelayPythPrices { - option (amino.name) = "oracle/MsgRelayPythPrices"; +// MsgRelayChainlinkPrices defines a SDK message for updating Chainlink Data +// Streams prices +message MsgRelayChainlinkPrices { + option (amino.name) = "oracle/MsgRelayChainlinkPrices"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; option (cosmos.msg.v1.signer) = "sender"; string sender = 1; - repeated PriceAttestation price_attestations = 2; + repeated ChainlinkReport reports = 2; } -// MsgRelayPythPricesResponse defines the Msg/RelayPythPrices response type. -message MsgRelayPythPricesResponse {} +// MsgRelayChainlinkPricesResponse defines the Msg/RelayChainlinkPrices response +// type. +message MsgRelayChainlinkPricesResponse {} message MsgUpdateParams { option (amino.name) = "oracle/MsgUpdateParams"; diff --git a/proto/injective/peggy/v1/attestation.proto b/proto/injective/peggy/v1/attestation.proto index fa6301dc..3d669077 100644 --- a/proto/injective/peggy/v1/attestation.proto +++ b/proto/injective/peggy/v1/attestation.proto @@ -3,6 +3,7 @@ package injective.peggy.v1; // TODO-JT: add ERC20DeployedEvent claim +import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; @@ -44,7 +45,8 @@ message Attestation { bool observed = 1; repeated string votes = 2; uint64 height = 3; - google.protobuf.Any claim = 4; + google.protobuf.Any claim = 4 + [ (cosmos_proto.accepts_interface) = "peggy.v1beta1.EthereumClaim" ]; } // ERC20Token unique identifier for an Ethereum ERC20 token. diff --git a/proto/injective/peggy/v1/batch.proto b/proto/injective/peggy/v1/batch.proto index c0d8afee..197e213a 100644 --- a/proto/injective/peggy/v1/batch.proto +++ b/proto/injective/peggy/v1/batch.proto @@ -1,6 +1,7 @@ syntax = "proto3"; package injective.peggy.v1; +import "cosmos_proto/cosmos.proto"; import "injective/peggy/v1/attestation.proto"; // import "injective/peggy/v1/types.proto"; @@ -8,6 +9,9 @@ option go_package = "github.com/InjectiveLabs/injective-core/injective-chain/mod // OutgoingTxBatch represents a batch of transactions going from Peggy to ETH message OutgoingTxBatch { + option (cosmos_proto.implements_interface) = + "injective.peggy.v1.EthereumSigned"; + uint64 batch_nonce = 1; uint64 batch_timeout = 2; repeated OutgoingTransferTx transactions = 3; diff --git a/proto/injective/peggy/v1/msgs.proto b/proto/injective/peggy/v1/msgs.proto index 98123551..89285de3 100644 --- a/proto/injective/peggy/v1/msgs.proto +++ b/proto/injective/peggy/v1/msgs.proto @@ -219,6 +219,7 @@ message MsgConfirmBatchResponse {} message MsgDepositClaim { option (amino.name) = "peggy/MsgDepositClaim"; option (cosmos.msg.v1.signer) = "orchestrator"; + option (cosmos_proto.implements_interface) = "peggy.v1beta1.EthereumClaim"; uint64 event_nonce = 1; uint64 block_height = 2; @@ -240,6 +241,7 @@ message MsgDepositClaimResponse {} message MsgWithdrawClaim { option (amino.name) = "peggy/MsgWithdrawClaim"; option (cosmos.msg.v1.signer) = "orchestrator"; + option (cosmos_proto.implements_interface) = "peggy.v1beta1.EthereumClaim"; uint64 event_nonce = 1; uint64 block_height = 2; @@ -256,6 +258,7 @@ message MsgWithdrawClaimResponse {} message MsgERC20DeployedClaim { option (amino.name) = "peggy/MsgERC20DeployedClaim"; option (cosmos.msg.v1.signer) = "orchestrator"; + option (cosmos_proto.implements_interface) = "peggy.v1beta1.EthereumClaim"; uint64 event_nonce = 1; uint64 block_height = 2; @@ -289,7 +292,8 @@ message MsgSubmitBadSignatureEvidence { option (amino.name) = "peggy/MsgSubmitBadSignatureEvidence"; option (cosmos.msg.v1.signer) = "sender"; - google.protobuf.Any subject = 1; + google.protobuf.Any subject = 1 [ (cosmos_proto.accepts_interface) = + "injective.peggy.v1.EthereumSigned" ]; string signature = 2; string sender = 3; } @@ -301,6 +305,7 @@ message MsgSubmitBadSignatureEvidenceResponse {} message MsgValsetUpdatedClaim { option (amino.name) = "peggy/MsgValsetUpdatedClaim"; option (cosmos.msg.v1.signer) = "orchestrator"; + option (cosmos_proto.implements_interface) = "peggy.v1beta1.EthereumClaim"; uint64 event_nonce = 1; uint64 valset_nonce = 2; diff --git a/proto/injective/peggy/v1/types.proto b/proto/injective/peggy/v1/types.proto index 5ba5964e..5dcda13e 100644 --- a/proto/injective/peggy/v1/types.proto +++ b/proto/injective/peggy/v1/types.proto @@ -1,5 +1,6 @@ syntax = "proto3"; package injective.peggy.v1; +import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; option go_package = "github.com/InjectiveLabs/injective-core/injective-chain/modules/peggy/types"; @@ -13,6 +14,9 @@ message BridgeValidator { // maintains an ETH key to sign messages, these are used to check signatures on // ETH because of the significant gas savings message Valset { + option (cosmos_proto.implements_interface) = + "injective.peggy.v1.EthereumSigned"; + uint64 nonce = 1; repeated BridgeValidator members = 2; uint64 height = 3; diff --git a/proto/injective/permissions/v1beta1/params.proto b/proto/injective/permissions/v1beta1/params.proto index 24943a89..f711019e 100644 --- a/proto/injective/permissions/v1beta1/params.proto +++ b/proto/injective/permissions/v1beta1/params.proto @@ -12,6 +12,9 @@ option go_package = "github.com/InjectiveLabs/injective-core/injective-chain/mod message Params { option (gogoproto.equal) = true; option (amino.name) = "permissions/Params"; - // Max amount of gas allowed for wasm hook queries - uint64 wasm_hook_query_max_gas = 1; + // Max amount of gas allowed for contract hook queries + uint64 contract_hook_max_gas = 1; + + // EVM addresses of contracts that will not bypass module-to-module transfers + repeated string enforced_restrictions_contracts = 2; } diff --git a/proto/injective/permissions/v1beta1/permissions.proto b/proto/injective/permissions/v1beta1/permissions.proto index b9e8cc1d..9e172c8e 100644 --- a/proto/injective/permissions/v1beta1/permissions.proto +++ b/proto/injective/permissions/v1beta1/permissions.proto @@ -10,8 +10,8 @@ option go_package = "github.com/InjectiveLabs/injective-core/injective-chain/mod message Namespace { // The tokenfactory denom to which this namespace applies to string denom = 1; - // The address of smart contract to apply code-based restrictions - string contract_hook = 2; + // The address of cosmwasm contract to apply code-based restrictions + string wasm_hook = 2; // permissions for each role repeated Role role_permissions = 3; @@ -23,6 +23,9 @@ message Namespace { repeated PolicyStatus policy_statuses = 6; // capabilities for each manager for each policy repeated PolicyManagerCapability policy_manager_capabilities = 7; + + // The address of the EVM contract to map code-based permissions + string evm_hook = 8; } // AddressRoles defines roles for an actor diff --git a/proto/injective/permissions/v1beta1/tx.proto b/proto/injective/permissions/v1beta1/tx.proto index e8ba0c9d..3165126a 100644 --- a/proto/injective/permissions/v1beta1/tx.proto +++ b/proto/injective/permissions/v1beta1/tx.proto @@ -63,8 +63,8 @@ message MsgUpdateNamespace { string denom = 2; message SetContractHook { string new_value = 1; } - // address of smart contract to apply code-based restrictions - SetContractHook contract_hook = 3; + // address of wasm smart contract to apply code-based restrictions + SetContractHook wasm_hook = 3; // role permissions to update repeated Role role_permissions = 4; // role managers to update @@ -73,6 +73,8 @@ message MsgUpdateNamespace { repeated PolicyStatus policy_statuses = 6; // policy manager capabilities to update repeated PolicyManagerCapability policy_manager_capabilities = 7; + // address of EVM smart contract to apply code-based restrictions + SetContractHook evm_hook = 8; } message MsgUpdateNamespaceResponse {}