// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.

package abi

import (
	"math/big"
	"strings"

	ethereum "github.com/energicryptocurrency/energi"
	"github.com/energicryptocurrency/energi/accounts/abi"
	"github.com/energicryptocurrency/energi/accounts/abi/bind"
	"github.com/energicryptocurrency/energi/common"
	"github.com/energicryptocurrency/energi/core/types"
	"github.com/energicryptocurrency/energi/event"
)

// Reference imports to suppress errors if they are not otherwise used.
var (
	_ = big.NewInt
	_ = strings.NewReader
	_ = ethereum.NotFound
	_ = abi.U256
	_ = bind.Bind
	_ = common.Big1
	_ = types.BloomLookup
	_ = event.NewSubscription
)

// MasternodeRegistryV2ABI is the input ABI used to generate the binding from.
const MasternodeRegistryV2ABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"contractIGovernedProxy\",\"name\":\"_token_proxy\",\"type\":\"address\"},{\"internalType\":\"contractIGovernedProxy\",\"name\":\"_treasury_proxy\",\"type\":\"address\"},{\"internalType\":\"uint256[5]\",\"name\":\"_config\",\"type\":\"uint256[5]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"masternode\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"ipv4address\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32[2]\",\"name\":\"enode\",\"type\":\"bytes32[2]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"}],\"name\":\"Announced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"masternode\",\"type\":\"address\"}],\"name\":\"Deactivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"masternode\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"Denounced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"masternode\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"Invalidation\",\"type\":\"event\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"masternode\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"ipv4address\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[2]\",\"name\":\"enode\",\"type\":\"bytes32[2]\"}],\"name\":\"announce\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"masternode\",\"type\":\"address\"}],\"name\":\"canHeartbeat\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"can_heartbeat\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"masternode\",\"type\":\"address\"}],\"name\":\"canInvalidate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"can_invalidate\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"cleanup_period\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"collateralLimits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"active\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"total\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"active_collateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"total_collateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max_of_all_times\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"curr_validation_ends\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"curr_validation_offset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"current_masternode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"current_payouts\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"masternode\",\"type\":\"address\"}],\"name\":\"denounce\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contractIGovernedContract\",\"name\":\"_newImpl\",\"type\":\"address\"}],\"name\":\"destroy\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"enumerate\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"masternodes\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"enumerateActive\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"masternodes\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"getReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"block_number\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"block_hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"sw_features\",\"type\":\"uint256\"}],\"name\":\"heartbeat\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"masternode\",\"type\":\"address\"}],\"name\":\"info\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"ipv4address\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[2]\",\"name\":\"enode\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"announced_block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sw_features\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"masternode\",\"type\":\"address\"}],\"name\":\"invalidate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"masternode\",\"type\":\"address\"}],\"name\":\"isActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"last_block_number\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contractIGovernedContract\",\"name\":\"_oldImpl\",\"type\":\"address\"}],\"name\":\"migrate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"mn_active\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"mn_active_collateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"mn_announced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"mn_announced_collateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"mn_ever_collateral\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"mn_status\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"sw_features\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"next_heartbeat\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"inactive_since\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"validator_index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"invalidations\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"seq_payouts\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"last_vote_epoch\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"onCollateralUpdate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ownerInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"masternode\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"ipv4address\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[2]\",\"name\":\"enode\",\"type\":\"bytes32[2]\"},{\"internalType\":\"uint256\",\"name\":\"collateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"announced_block\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sw_features\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"payments_per_block\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"require_validation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"reward\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_proxy\",\"outputs\":[{\"internalType\":\"contractIGovernedProxy\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"treasury_proxy\",\"outputs\":[{\"internalType\":\"contractIGovernedProxy\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"v1storage\",\"outputs\":[{\"internalType\":\"contractStorageMasternodeRegistryV1\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"masternode\",\"type\":\"address\"}],\"name\":\"validationTarget\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"validation_periods\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validator_list\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]"

// MasternodeRegistryV2Bin is the compiled bytecode used for deploying new contracts.
const MasternodeRegistryV2Bin = `60806040523480156200001157600080fd5b5060405162004c8338038062004c8383398181016040526101008110156200003857600080fd5b5080516020820151604080840151600080546001600160a01b0319166001600160a01b038616179055905192939192909160600190620000789062000262565b604051809103906000f08015801562000095573d6000803e3d6000fd5b50600280546001600160a01b03199081166001600160a01b03938416179091556003805482168684161790556004805490911691841691909117905580516008819055602082015160098190556040830151600a556080830151600b5511156200016057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f56616c69646174696f6e73203e20526571756972650000000000000000000000604482015290519081900360640190fd5b6060810151600c819055683635c9adc5dea00000811015620001e357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e697469616c20636f6c6c61746572616c0000000000000000000000000000604482015290519081900360640190fd5b620001f66001600160e01b036200020116565b505050505062000270565b60135443106200026057601154600954808210156200022257505062000260565b60008183816200022e57fe5b049050818110156200023d5750805b43808201601355600019808501910140816200025557fe5b066001016014555050505b565b61097b806200430883390190565b61408880620002806000396000f3fe60806040526004361061029f5760003560e01c806373b245401161016e578063cb4f40c5116100cb578063d9966aba1161007f578063e2cb219511610064578063e2cb2195146109f4578063ec55688914610a22578063ff9f78b314610a375761029f565b8063d9966aba1461094f578063e1d6f43a1461098f5761029f565b8063ce5494bb116100b0578063ce5494bb1461087e578063d13ef5a5146108be578063d70d5c30146108fe5761029f565b8063cb4f40c514610829578063cdc7d4ad1461083e5761029f565b8063a273178411610122578063b83e160511610107578063b83e160514610769578063c3db74d6146107a9578063ca0e551f146107e95761029f565b8063a27317841461073f578063ab00fdc4146107545761029f565b806391ceac961161015357806391ceac96146106a05780639c5e8ae2146106d65780639f8a13d7146106eb5761029f565b806373b245401461067657806384afd47f1461068b5761029f565b80632e941dc41161021c578063521f284d116101d057806357f2a7d8116101b557806357f2a7d8146106375780635f6e2c7b1461064c5780636d41ff4e146106615761029f565b8063521f284d1461060d578063542396fd146106225761029f565b806337a3931f1161020157806337a3931f1461052b5780634d1b4dae1461056b5780634e60b981146105e35761029f565b80632e941dc41461050157806335ab13f6146105165761029f565b80631a26763c116102735780631eeaebb2116102585780631eeaebb2146104cf578063228cb733146104e45780632d059305146104ec5761029f565b80631a26763c146104675780631c4b774b146104a55761029f565b8062f55d9d1461030657806306661abd146103485780630aae7a6b1461038857806318a2ac1914610440575b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e6f7420737570706f7274656400000000000000000000000000000000000000604482015290519081900360640190fd5b34801561031257600080fd5b506103466004803603602081101561032957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a4c565b005b34801561035457600080fd5b5061035d610af4565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b34801561039457600080fd5b506103c8600480360360208110156103ab57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b0e565b6040805173ffffffffffffffffffffffffffffffffffffffff8816815263ffffffff871660208201529081810190869080838360005b838110156104165781810151838201526020016103fe565b50505050905001848152602001838152602001828152602001965050505050505060405180910390f35b34801561044c57600080fd5b50610455610c3a565b60408051918252519081900360200190f35b34801561047357600080fd5b5061047c610c40565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156104b157600080fd5b50610455600480360360208110156104c857600080fd5b5035610c5c565b3480156104db57600080fd5b50610455610d94565b610346610d9a565b3480156104f857600080fd5b5061047c61104f565b34801561050d57600080fd5b5061045561106b565b34801561052257600080fd5b50610455611071565b34801561053757600080fd5b506103466004803603602081101561054e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611077565b34801561057757600080fd5b506105ab6004803603602081101561058e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611440565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b3480156105ef57600080fd5b5061047c6004803603602081101561060657600080fd5b503561147d565b34801561061957600080fd5b506104556114b1565b34801561062e57600080fd5b506104556114b7565b34801561064357600080fd5b506104556114bd565b34801561065857600080fd5b506104556114c3565b34801561066d57600080fd5b506104556114c9565b34801561068257600080fd5b506104556114cf565b34801561069757600080fd5b5061047c6114d5565b3480156106ac57600080fd5b50610346600480360360608110156106c357600080fd5b50803590602081013590604001356114f1565b3480156106e257600080fd5b506104556117a1565b3480156106f757600080fd5b5061072b6004803603602081101561070e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166117a7565b604080519115158252519081900360200190f35b34801561074b57600080fd5b5061047c6117df565b34801561076057600080fd5b506104556117fb565b34801561077557600080fd5b506103c86004803603602081101561078c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611801565b3480156107b557600080fd5b5061047c600480360360208110156107cc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166119aa565b3480156107f557600080fd5b506103466004803603602081101561080c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611a2f565b34801561083557600080fd5b50610455611ab3565b34801561084a57600080fd5b506103466004803603602081101561086157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611ab9565b34801561088a57600080fd5b50610346600480360360208110156108a157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611cdd565b3480156108ca57600080fd5b5061072b600480360360208110156108e157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611d6f565b34801561090a57600080fd5b506103466004803603608081101561092157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169063ffffffff60208201351690604001611df6565b34801561095b57600080fd5b5061072b6004803603602081101561097257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611ec4565b34801561099b57600080fd5b506109a4611f07565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156109e05781810151838201526020016109c8565b505050509050019250505060405180910390f35b348015610a0057600080fd5b50610a09611fb9565b6040805192835260208301919091528051918290030190f35b348015610a2e57600080fd5b5061047c611fd2565b348015610a4357600080fd5b506109a4611fee565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ad257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742070726f78790000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610adb816120c3565b8073ffffffffffffffffffffffffffffffffffffffff16ff5b600f54600554600d54600e54600c54939492939192909190565b600080610b19613fb4565b6000806000610b26613fd2565b600254610b499073ffffffffffffffffffffffffffffffffffffffff1689612152565b608081015190915073ffffffffffffffffffffffffffffffffffffffff16610bd257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6b6e6f776e206d61737465726e6f64650000000000000000000000000000604482015290519081900360640190fd5b608081015160e0820151604080518082018252818501518152606085015160208083019190915280860151955173ffffffffffffffffffffffffffffffffffffffff909d16600090815260109091529190912054929b919a9099509297509195509350915050565b60095481565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60048054604080517f8abf60770000000000000000000000000000000000000000000000000000000081529051600093849373ffffffffffffffffffffffffffffffffffffffff1692638abf60779281830192602092829003018186803b158015610cc657600080fd5b505afa158015610cda573d6000803e3d6000fd5b505050506040513d6020811015610cf057600080fd5b505190508215801590610d7d57508073ffffffffffffffffffffffffffffffffffffffff166352782d86846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610d4f57600080fd5b505afa158015610d63573d6000803e3d6000fd5b505050506040513d6020811015610d7957600080fd5b5051155b15610d8e57677ed7cd92ff12000091505b50919050565b60125481565b60015415610e0957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60018055343031036000811315610f37576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638abf60776040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8457600080fd5b505afa158015610e98573d6000803e3d6000fd5b505050506040513d6020811015610eae57600080fd5b5051604080517f228cb733000000000000000000000000000000000000000000000000000000008152905191925073ffffffffffffffffffffffffffffffffffffffff83169163228cb733918591600480830192600092919082900301818588803b158015610f1c57600080fd5b505af1158015610f30573d6000803e3d6000fd5b5050505050505b677ed7cd92ff120000341415611047574360125410610fb757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616c6c206f757473696465206f6620676f7665726e616e6365210000000000604482015290519081900360640190fd5b43601255610fc3612284565b34303114610fcd57fe5b600b54600081677ed7cd92ff12000081610fe357fe5b049050815b801561104357620186a05a11610ffa57fe5b620186a05a1180156110125750611010826122fd565b155b1561101c57610ffa565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01610fe8565b5050505b506000600155565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b60085481565b600154156110e657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001805560006110f4612570565b90508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561119157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e76616c69646174696f6e20666f722073656c660000000000000000000000604482015290519081900360640190fd5b60135473ffffffffffffffffffffffffffffffffffffffff821660009081526010602052604090206111c3838261259f565b61122e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4e6f74206163746976652063616c6c6572000000000000000000000000000000604482015290519081900360640190fd5b818160060154106112a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e76616c69646174656400000000000000000000000000604482015290519081900360640190fd5b8373ffffffffffffffffffffffffffffffffffffffff166112c0846119aa565b73ffffffffffffffffffffffffffffffffffffffff161461134257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f496e76616c696420746172676574000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152601060205260409020611371858261259f565b6113dc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4e6f742061637469766520746172676574000000000000000000000000000000604482015290519081900360640190fd5b60068201839055600481018054600101905560405173ffffffffffffffffffffffffffffffffffffffff80861691908716907f389d58799d7eca76264c556a007ffbc7c60caa4e3c8ea0564e791af3a1b9d33190600090a350506000600155505050565b6010602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919087565b6011818154811061148a57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600f5481565b600b5481565b600e5481565b600a5481565b600d5481565b60145481565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6001541561156057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60018055600a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff438590030111156115f957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f546f6f206f6c6420626c6f636b00000000000000000000000000000000000000604482015290519081900360640190fd5b8183401461166857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f426c6f636b206d69736d61746368000000000000000000000000000000000000604482015290519081900360640190fd5b6000611672612570565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090209091506116a4828261259f565b61170f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e6f742061637469766500000000000000000000000000000000000000000000604482015290519081900360640190fd5b428160010154111561178257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f546f6f206561726c790000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61178a6125ee565b420160018083019190915592905550600090555050565b60075481565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604081206117d790839061259f565b90505b919050565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b60008061180c613fb4565b600254604080517f28d566be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015291516000938493849391169182916328d566be916024808301926020929190829003018186803b15801561188657600080fd5b505afa15801561189a573d6000803e3d6000fd5b505050506040513d60208110156118b057600080fd5b5051965073ffffffffffffffffffffffffffffffffffffffff871661193657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f556e6b6e6f776e206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b61193e613fd2565b6119488289612152565b60e0810151604080518082018252818401518152606084015160208083019190915280850151945173ffffffffffffffffffffffffffffffffffffffff8e1660009081526010909252929020549b9d929c509a92995097509095509350505050565b60115460145460009190808214156119c0576001015b73ffffffffffffffffffffffffffffffffffffffff841660009081526010602052604090206003015482828201816119f457fe5b06905060118181548110611a0457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1695945050505050565b60015415611a9e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001805561104781611aae612570565b612605565b600c5481565b60015415611b2857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60018055600254604080517f28d566be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529151919092169160009183916328d566be916024808301926020929190829003018186803b158015611ba457600080fd5b505afa158015611bb8573d6000803e3d6000fd5b505050506040513d6020811015611bce57600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff8116611bf4575050611047565b600080611c0085612ab1565b91509150611c0c613fd2565b600254611c2f9073ffffffffffffffffffffffffffffffffffffffff1685612152565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260106020526040812091925090611c6490838686612bf1565b90506001816003811115611c7457fe5b1415611ccf57683635c9adc5dea000008410611cc55760e0820151611c97613fb4565b5060408051808201825290840151815260608401516020820152611cbe878a888585612c50565b5050611ccf565b611ccf8588612605565b505050505050506000600155565b60005473ffffffffffffffffffffffffffffffffffffffff163314611d6357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742070726f78790000000000000000000000000000000000000000000000604482015290519081900360640190fd5b611d6c81612f92565b50565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260408120611d9e838261259f565b8015611daf57506013548160060154105b8015611def57508273ffffffffffffffffffffffffffffffffffffffff16611dd6846119aa565b73ffffffffffffffffffffffffffffffffffffffff1614155b9392505050565b60015415611e6557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600180556000611e73612570565b90506000611e8082613854565b9050611eb885838387876002806020026040519081016040528092919082600260200280828437600092019190915250612c50915050565b50506000600155505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260408120611ef3838261259f565b8015611def57506001015442101592915050565b6060600f54604051908082528060200260200182016040528015611f35578160200160208202803883390190505b50905060005b8151811015611fb55760118181548110611f5157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828281518110611f8857fe5b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101611f3b565b5090565b683635c9adc5dea000009069152d02c7e14af680000090565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b606060055460405190808252806020026020018201604052801561201c578160200160208202803883390190505b5060065490915073ffffffffffffffffffffffffffffffffffffffff168061204457506120c0565b8061204d613fd2565b60005b8285828151811061205d57fe5b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201015260025461208e911684612152565b60c08101519350915060010173ffffffffffffffffffffffffffffffffffffffff808416908516141561205057505050505b90565b600254604080517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152915191909216916313af403591602480830192600092919082900301818387803b15801561213757600080fd5b505af115801561214b573d6000803e3d6000fd5b5050505050565b61215a613fd2565b8273ffffffffffffffffffffffffffffffffffffffff1663412cbac0836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506101006040518083038186803b1580156121d857600080fd5b505afa1580156121ec573d6000803e3d6000fd5b505050506040513d61010081101561220357600080fd5b50805160208083015160408085015160608087015160808089015160a0808b015160c0808d015160e09d8e015163ffffffff169d8f019d909d5273ffffffffffffffffffffffffffffffffffffffff9c8d16908e01528b16908c01529890981697890197909752870195909552850193909352830191909152815292915050565b60135443106122fb57601154600954808210156122a25750506122fb565b60008183816122ad57fe5b049050818110156122bb5750805b438082016013557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808501910140816122f057fe5b066001016014555050505b565b60065460075460009173ffffffffffffffffffffffffffffffffffffffff16908161232d576001925050506117da565b612335613fd2565b6002546123589073ffffffffffffffffffffffffffffffffffffffff1684612152565b73ffffffffffffffffffffffffffffffffffffffff841660009081526010602052604090206004810154600582015460019095019492935090918410156123a35760078490556123f9565b60006004830181905560c0840151600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790556007555b600061240583856138da565b9050600081600381111561241557fe5b14156124795761242482613905565b15806124655750836080015173ffffffffffffffffffffffffffffffffffffffff166108fc899081150290604051600060405180830381858888f193505050505b1561247957600196505050505050506117da565b600181600381111561248757fe5b14156124a05761249b868560800151612605565b612562565b600583015415612544576000600584015542600284015560208401516124c7908790613936565b60c0840151600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560006007819055604051918816917f749cb6b4c510bc468cf6b9c2086d6f0a54d6b18e25d37bf3200e68eab0880c009190a2612562565b600a5483600201544203111561256257612562868560800151612605565b506000979650505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314156125985750326120c0565b50336120c0565b60006125a9613fd2565b6002546125cc9073ffffffffffffffffffffffffffffffffffffffff1685612152565b905060006125da84836138da565b60038111156125e557fe5b14949350505050565b600f546004026107088110156120c0575061070890565b60025473ffffffffffffffffffffffffffffffffffffffff16612626613fd2565b6126308285612152565b608081015190915073ffffffffffffffffffffffffffffffffffffffff16612659575050612aad565b806080015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126f757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c6964206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b8373ffffffffffffffffffffffffffffffffffffffff168160c0015173ffffffffffffffffffffffffffffffffffffffff16141561275c57600680547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561292a565b60065473ffffffffffffffffffffffffffffffffffffffff858116911614156127ce5760c0810151600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560006007555b60a081015160c0820151604080517f1f9579ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015260006024820181905260448201819052600160648301529284166084820152905192851692631f9579ca9260a48084019391929182900301818387803b15801561286557600080fd5b505af1158015612879573d6000803e3d6000fd5b50505060c082015160a0830151604080517f1f9579ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201526001602482015291831660448301526000606483018190526084830181905290519286169350631f9579ca9260a48084019382900301818387803b15801561291157600080fd5b505af1158015612925573d6000803e3d6000fd5b505050505b602080820151600e805491909103905573ffffffffffffffffffffffffffffffffffffffff85166000908152601090915260409020600501541561297657612976848260200151613936565b73ffffffffffffffffffffffffffffffffffffffff808516600081815260106020526040808220828155600181018390556002810183905560038101839055600480820184905560058201849055600690910183905581517f72f5f2570000000000000000000000000000000000000000000000000000000081529081019390935251928516926372f5f25792602480820193929182900301818387803b158015612a2057600080fd5b505af1158015612a34573d6000803e3d6000fd5b5050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555050608081015160405173ffffffffffffffffffffffffffffffffffffffff918216918616907f55faf8e51ab442f8d8510476317b2e313144c3db60adc284affef64140fe855290600090a350505b5050565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638abf60776040518163ffffffff1660e01b815260040160206040518083038186803b158015612b1c57600080fd5b505afa158015612b30573d6000803e3d6000fd5b505050506040513d6020811015612b4657600080fd5b5051604080517f78c7d97900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015282519316926378c7d97992602480840193919291829003018186803b158015612bb457600080fd5b505afa158015612bc8573d6000803e3d6000fd5b505050506040513d6040811015612bde57600080fd5b5080516020909101519094909350915050565b6000846005015460001415612c0857506002612c48565b6001850154611c2001421115612c2057506003612c48565b83602001518314612c3357506001612c48565b8351821115612c4457506001612c48565b5060005b949350505050565b60025473ffffffffffffffffffffffffffffffffffffffff16612c738186613a8b565b612c7d8187613b5e565b612c8683613bfa565b600080612c938389613dd9565b915091508273ffffffffffffffffffffffffffffffffffffffff1663f71169df898988888b43888a6040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018763ffffffff1663ffffffff16815260200186600260200280838360005b83811015612d68578181015183820152602001612d50565b505050509050018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200198505050505050505050600060405180830381600087803b158015612e0357600080fd5b505af1158015612e17573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff88166000908152601060205260409020426001820155683635c9adc5dea000008704600580830191909155600f805460019081019091558154019055600d805488019055600e8054880190819055600c54811115612e8e57600c8190555b601180546003840181905560018101825560009182527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8d81169182179092556040805163ffffffff8c168152928d169391927f935a2f33570c4840d82856d75f5d0aafca32c5e6b31db5627552304a7dc82c09928c928c928f92909160208301918591908190849084905b83811015612f6c578181015183820152602001612f54565b50505050905001828152602001935050505060405180910390a350505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166341c0e1b56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ffc57600080fd5b505af1158015613010573d6000803e3d6000fd5b5050505060008190508073ffffffffffffffffffffffffffffffffffffffff16632d0593056040518163ffffffff1660e01b815260040160206040518083038186803b15801561305f57600080fd5b505afa158015613073573d6000803e3d6000fd5b505050506040513d602081101561308957600080fd5b5051600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055604080517fab00fdc400000000000000000000000000000000000000000000000000000000815290519183169163ab00fdc491600480820192602092909190829003018186803b15801561311f57600080fd5b505afa158015613133573d6000803e3d6000fd5b505050506040513d602081101561314957600080fd5b5051600555604080517f1a26763c000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff831691631a26763c916004808301926020929190829003018186803b1580156131b457600080fd5b505afa1580156131c8573d6000803e3d6000fd5b505050506040513d60208110156131de57600080fd5b5051600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055604080517f9c5e8ae2000000000000000000000000000000000000000000000000000000008152905191831691639c5e8ae291600480820192602092909190829003018186803b15801561327457600080fd5b505afa158015613288573d6000803e3d6000fd5b505050506040513d602081101561329e57600080fd5b5051600755604080517fcb4f40c5000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff83169163cb4f40c5916004808301926020929190829003018186803b15801561330957600080fd5b505afa15801561331d573d6000803e3d6000fd5b505050506040513d602081101561333357600080fd5b5051600c55604080517f6d41ff4e000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff831691636d41ff4e916004808301926020929190829003018186803b15801561339e57600080fd5b505afa1580156133b2573d6000803e3d6000fd5b505050506040513d60208110156133c857600080fd5b5051600d55604080517f57f2a7d8000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916357f2a7d8916004808301926020929190829003018186803b15801561343357600080fd5b505afa158015613447573d6000803e3d6000fd5b505050506040513d602081101561345d57600080fd5b5051600e55604080517f521f284d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff83169163521f284d916004808301926020929190829003018186803b1580156134c857600080fd5b505afa1580156134dc573d6000803e3d6000fd5b505050506040513d60208110156134f257600080fd5b5051600f55604080517fff9f78b3000000000000000000000000000000000000000000000000000000008152905160609173ffffffffffffffffffffffffffffffffffffffff84169163ff9f78b391600480820192600092909190829003018186803b15801561356157600080fd5b505afa158015613575573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405260208110156135bc57600080fd5b81019080805160405193929190846401000000008211156135dc57600080fd5b9083019060208201858111156135f157600080fd5b825186602082028301116401000000008211171561360e57600080fd5b82525081516020918201928201910280838360005b8381101561363b578181015183820152602001613623565b5050505091909101604052505043601255505080519091505b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101901561384657600082828151811061368b57fe5b6020026020010151905061369d614016565b8473ffffffffffffffffffffffffffffffffffffffff16634d1b4dae836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506101006040518083038186803b15801561371b57600080fd5b505afa15801561372f573d6000803e3d6000fd5b505050506040513d61010081101561374657600080fd5b50805160408083015160a08085015160c08087015160e090970151908801908152918701958652608087019081528684019283529386526004888102420160208089019182526011805460608b0181815260018083019093557f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6890910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9d909d169c8d17905560009b8c5260109092529590992097518855519387019390935590516002860155945160038501559051908301555160058201559051600690910155613654565b5061384f612284565b505050565b600061385f82612ab1565b509050683635c9adc5dea000008110156117da57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420636f6c6c61746572616c0000000000000000000000000000604482015290519081900360640190fd5b60008060006138ec8460800151612ab1565b915091506138fc85858484612bf1565b95945050505050565b6000600854600f54101561391b575060016117da565b600060026009546001018161392c57fe5b0490921092915050565b60118054600091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061396a57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff86811684526010909252604080842060039081015493909216808552932001819055601180549293509091839190839081106139c557fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506011805480613a1857fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055908101909155600f805490910190555050600d805491909103905550565b60008273ffffffffffffffffffffffffffffffffffffffff166328d566be836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613b0a57600080fd5b505afa158015613b1e573d6000803e3d6000fd5b505050506040513d6020811015613b3457600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81161561384f5761384f8183612605565b613b66613fd2565b613b708383612152565b608081015190915073ffffffffffffffffffffffffffffffffffffffff161561384f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c6964206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b63ff000000811662ff0000821661ff008316637f0000008314801590613c24575082630a00000014155b8015613c4257508263c0000000148015613c4057508162a80000145b155b8015613c6557508263ac000000148015613c6357508162f000001662100000145b155b8015613c7057508215155b8015613c935750826364000000148015613c9157508162c000001662400000145b155b8015613cb157508263a9000000148015613caf57508162fe0000145b155b8015613cd457508263c6000000148015613cd257508162fe00001662120000145b155b8015613cff57508263c6000000148015613cf057508162330000145b8015613cfd575080616400145b155b8015613d2657508263cb000000148015613d17575081155b8015613d24575080617100145b155b8015613d3c57508263f00000001663e000000014155b8015613d5257508263f00000001663f000000014155b8015613d6857508363ffffffff1663ffffffff14155b613dd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f57726f6e67204950000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b50505050565b60065473ffffffffffffffffffffffffffffffffffffffff1660008115613f6357613e02613fd2565b613e0c8584612152565b60a0810151604080517f1f9579ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260006024830181905260448301819052600160648401528982166084840152925193965093945092881692631f9579ca9260a4808301939282900301818387803b158015613ea257600080fd5b505af1158015613eb6573d6000803e3d6000fd5b5050604080517f1f9579ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152600160248301528881166044830152600060648301819052608483018190529251908a169450631f9579ca935060a4808301939282900301818387803b158015613f4557600080fd5b505af1158015613f59573d6000803e3d6000fd5b5050505050613fad565b5050600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316179055600060075580805b9250929050565b60405180604001604052806002906020820280388339509192915050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6040518060e0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fea265627a7a723158208fe498240a92095cbc10d67d69cd9b4ebb0d6010dbd5b22c663e05b5c94ac4b964736f6c634300051000326080604052600080546001600160a01b03191633179055610956806100256000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063412cbac01161005b578063412cbac01461016857806341c0e1b5146101fa57806372f5f25714610202578063f71169df146102355761007d565b806313af4035146100825780631f9579ca146100b757806328d566be1461010c575b600080fd5b6100b56004803603602081101561009857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661029f565b005b6100b5600480360360a08110156100cd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135151591604082013581169160608101351515916080909101351661036c565b61013f6004803603602081101561012257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104b1565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61019b6004803603602081101561017e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104d9565b60408051988952602089019790975287870195909552606087019390935273ffffffffffffffffffffffffffffffffffffffff9182166080870152811660a08601521660c084015263ffffffff1660e083015251908190036101000190f35b6100b5610551565b6100b56004803603602081101561021857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166105da565b6100b5600480360361012081101561024c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169163ffffffff60408301351691606081019160a08201359160c08101359160e0820135811691610100013516610720565b60005473ffffffffffffffffffffffffffffffffffffffff16331461032557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e6f74206f776e65722100000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e6f74206f776e65722100000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff851660009081526001602052604090208415610460576005810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86161790555b82156104a9576006810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b505050505050565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6001602081905260009182526040909120805491810154600282015460038301546004840154600585015460069095015493949293919273ffffffffffffffffffffffffffffffffffffffff918216929082169181169074010000000000000000000000000000000000000000900463ffffffff1688565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e6f74206f776e65722100000000000000000000000000000000000000000000604482015290519081900360640190fd5b33ff5b60005473ffffffffffffffffffffffffffffffffffffffff16331461066057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e6f74206f776e65722100000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff90811660008181526001602081815260408084206004810180549097168552600280845291852080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915595855291839052838255918101839055908101829055600381019190915582548216909255600582018054909116905560060180547fffffffffffffffff000000000000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107a657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e6f74206f776e65722100000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff80891660009081526001602052604090206004810154909190811690891681146108515773ffffffffffffffffffffffffffffffffffffffff8116156107fd57fe5b73ffffffffffffffffffffffffffffffffffffffff898116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016918c169190911790555b5060048101805473ffffffffffffffffffffffffffffffffffffffff998a167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600682018054883560028501556020909801356003840155600183019690965593815560050180549288169284169290921790915590941663ffffffff9390931674010000000000000000000000000000000000000000027fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff909216919091179092161790555056fea265627a7a72315820084dd4f667ff4f2d4043bb7f2fe175f0a2c1e803388bba185f45294c80f2fad864736f6c63430005100032`

// DeployMasternodeRegistryV2 deploys a new Ethereum contract, binding an instance of MasternodeRegistryV2 to it.
func DeployMasternodeRegistryV2(auth *bind.TransactOpts, backend bind.ContractBackend, _proxy common.Address, _token_proxy common.Address, _treasury_proxy common.Address, _config [5]*big.Int) (common.Address, *types.Transaction, *MasternodeRegistryV2, error) {
	parsed, err := abi.JSON(strings.NewReader(MasternodeRegistryV2ABI))
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(MasternodeRegistryV2Bin), backend, _proxy, _token_proxy, _treasury_proxy, _config)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &MasternodeRegistryV2{MasternodeRegistryV2Caller: MasternodeRegistryV2Caller{contract: contract}, MasternodeRegistryV2Transactor: MasternodeRegistryV2Transactor{contract: contract}, MasternodeRegistryV2Filterer: MasternodeRegistryV2Filterer{contract: contract}}, nil
}

// MasternodeRegistryV2Bin is the compiled bytecode of contract after deployment.
const MasternodeRegistryV2RuntimeBin = `60806040526004361061029f5760003560e01c806373b245401161016e578063cb4f40c5116100cb578063d9966aba1161007f578063e2cb219511610064578063e2cb2195146109f4578063ec55688914610a22578063ff9f78b314610a375761029f565b8063d9966aba1461094f578063e1d6f43a1461098f5761029f565b8063ce5494bb116100b0578063ce5494bb1461087e578063d13ef5a5146108be578063d70d5c30146108fe5761029f565b8063cb4f40c514610829578063cdc7d4ad1461083e5761029f565b8063a273178411610122578063b83e160511610107578063b83e160514610769578063c3db74d6146107a9578063ca0e551f146107e95761029f565b8063a27317841461073f578063ab00fdc4146107545761029f565b806391ceac961161015357806391ceac96146106a05780639c5e8ae2146106d65780639f8a13d7146106eb5761029f565b806373b245401461067657806384afd47f1461068b5761029f565b80632e941dc41161021c578063521f284d116101d057806357f2a7d8116101b557806357f2a7d8146106375780635f6e2c7b1461064c5780636d41ff4e146106615761029f565b8063521f284d1461060d578063542396fd146106225761029f565b806337a3931f1161020157806337a3931f1461052b5780634d1b4dae1461056b5780634e60b981146105e35761029f565b80632e941dc41461050157806335ab13f6146105165761029f565b80631a26763c116102735780631eeaebb2116102585780631eeaebb2146104cf578063228cb733146104e45780632d059305146104ec5761029f565b80631a26763c146104675780631c4b774b146104a55761029f565b8062f55d9d1461030657806306661abd146103485780630aae7a6b1461038857806318a2ac1914610440575b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e6f7420737570706f7274656400000000000000000000000000000000000000604482015290519081900360640190fd5b34801561031257600080fd5b506103466004803603602081101561032957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a4c565b005b34801561035457600080fd5b5061035d610af4565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b34801561039457600080fd5b506103c8600480360360208110156103ab57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b0e565b6040805173ffffffffffffffffffffffffffffffffffffffff8816815263ffffffff871660208201529081810190869080838360005b838110156104165781810151838201526020016103fe565b50505050905001848152602001838152602001828152602001965050505050505060405180910390f35b34801561044c57600080fd5b50610455610c3a565b60408051918252519081900360200190f35b34801561047357600080fd5b5061047c610c40565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156104b157600080fd5b50610455600480360360208110156104c857600080fd5b5035610c5c565b3480156104db57600080fd5b50610455610d94565b610346610d9a565b3480156104f857600080fd5b5061047c61104f565b34801561050d57600080fd5b5061045561106b565b34801561052257600080fd5b50610455611071565b34801561053757600080fd5b506103466004803603602081101561054e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611077565b34801561057757600080fd5b506105ab6004803603602081101561058e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611440565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b3480156105ef57600080fd5b5061047c6004803603602081101561060657600080fd5b503561147d565b34801561061957600080fd5b506104556114b1565b34801561062e57600080fd5b506104556114b7565b34801561064357600080fd5b506104556114bd565b34801561065857600080fd5b506104556114c3565b34801561066d57600080fd5b506104556114c9565b34801561068257600080fd5b506104556114cf565b34801561069757600080fd5b5061047c6114d5565b3480156106ac57600080fd5b50610346600480360360608110156106c357600080fd5b50803590602081013590604001356114f1565b3480156106e257600080fd5b506104556117a1565b3480156106f757600080fd5b5061072b6004803603602081101561070e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166117a7565b604080519115158252519081900360200190f35b34801561074b57600080fd5b5061047c6117df565b34801561076057600080fd5b506104556117fb565b34801561077557600080fd5b506103c86004803603602081101561078c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611801565b3480156107b557600080fd5b5061047c600480360360208110156107cc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166119aa565b3480156107f557600080fd5b506103466004803603602081101561080c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611a2f565b34801561083557600080fd5b50610455611ab3565b34801561084a57600080fd5b506103466004803603602081101561086157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611ab9565b34801561088a57600080fd5b50610346600480360360208110156108a157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611cdd565b3480156108ca57600080fd5b5061072b600480360360208110156108e157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611d6f565b34801561090a57600080fd5b506103466004803603608081101561092157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169063ffffffff60208201351690604001611df6565b34801561095b57600080fd5b5061072b6004803603602081101561097257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611ec4565b34801561099b57600080fd5b506109a4611f07565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156109e05781810151838201526020016109c8565b505050509050019250505060405180910390f35b348015610a0057600080fd5b50610a09611fb9565b6040805192835260208301919091528051918290030190f35b348015610a2e57600080fd5b5061047c611fd2565b348015610a4357600080fd5b506109a4611fee565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ad257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742070726f78790000000000000000000000000000000000000000000000604482015290519081900360640190fd5b610adb816120c3565b8073ffffffffffffffffffffffffffffffffffffffff16ff5b600f54600554600d54600e54600c54939492939192909190565b600080610b19613fb4565b6000806000610b26613fd2565b600254610b499073ffffffffffffffffffffffffffffffffffffffff1689612152565b608081015190915073ffffffffffffffffffffffffffffffffffffffff16610bd257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6b6e6f776e206d61737465726e6f64650000000000000000000000000000604482015290519081900360640190fd5b608081015160e0820151604080518082018252818501518152606085015160208083019190915280860151955173ffffffffffffffffffffffffffffffffffffffff909d16600090815260109091529190912054929b919a9099509297509195509350915050565b60095481565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60048054604080517f8abf60770000000000000000000000000000000000000000000000000000000081529051600093849373ffffffffffffffffffffffffffffffffffffffff1692638abf60779281830192602092829003018186803b158015610cc657600080fd5b505afa158015610cda573d6000803e3d6000fd5b505050506040513d6020811015610cf057600080fd5b505190508215801590610d7d57508073ffffffffffffffffffffffffffffffffffffffff166352782d86846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610d4f57600080fd5b505afa158015610d63573d6000803e3d6000fd5b505050506040513d6020811015610d7957600080fd5b5051155b15610d8e57677ed7cd92ff12000091505b50919050565b60125481565b60015415610e0957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60018055343031036000811315610f37576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638abf60776040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8457600080fd5b505afa158015610e98573d6000803e3d6000fd5b505050506040513d6020811015610eae57600080fd5b5051604080517f228cb733000000000000000000000000000000000000000000000000000000008152905191925073ffffffffffffffffffffffffffffffffffffffff83169163228cb733918591600480830192600092919082900301818588803b158015610f1c57600080fd5b505af1158015610f30573d6000803e3d6000fd5b5050505050505b677ed7cd92ff120000341415611047574360125410610fb757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616c6c206f757473696465206f6620676f7665726e616e6365210000000000604482015290519081900360640190fd5b43601255610fc3612284565b34303114610fcd57fe5b600b54600081677ed7cd92ff12000081610fe357fe5b049050815b801561104357620186a05a11610ffa57fe5b620186a05a1180156110125750611010826122fd565b155b1561101c57610ffa565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01610fe8565b5050505b506000600155565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b60085481565b600154156110e657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001805560006110f4612570565b90508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561119157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e76616c69646174696f6e20666f722073656c660000000000000000000000604482015290519081900360640190fd5b60135473ffffffffffffffffffffffffffffffffffffffff821660009081526010602052604090206111c3838261259f565b61122e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4e6f74206163746976652063616c6c6572000000000000000000000000000000604482015290519081900360640190fd5b818160060154106112a057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e76616c69646174656400000000000000000000000000604482015290519081900360640190fd5b8373ffffffffffffffffffffffffffffffffffffffff166112c0846119aa565b73ffffffffffffffffffffffffffffffffffffffff161461134257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f496e76616c696420746172676574000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152601060205260409020611371858261259f565b6113dc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4e6f742061637469766520746172676574000000000000000000000000000000604482015290519081900360640190fd5b60068201839055600481018054600101905560405173ffffffffffffffffffffffffffffffffffffffff80861691908716907f389d58799d7eca76264c556a007ffbc7c60caa4e3c8ea0564e791af3a1b9d33190600090a350506000600155505050565b6010602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919087565b6011818154811061148a57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600f5481565b600b5481565b600e5481565b600a5481565b600d5481565b60145481565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6001541561156057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60018055600a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff438590030111156115f957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f546f6f206f6c6420626c6f636b00000000000000000000000000000000000000604482015290519081900360640190fd5b8183401461166857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f426c6f636b206d69736d61746368000000000000000000000000000000000000604482015290519081900360640190fd5b6000611672612570565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090209091506116a4828261259f565b61170f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e6f742061637469766500000000000000000000000000000000000000000000604482015290519081900360640190fd5b428160010154111561178257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f546f6f206561726c790000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61178a6125ee565b420160018083019190915592905550600090555050565b60075481565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604081206117d790839061259f565b90505b919050565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b60008061180c613fb4565b600254604080517f28d566be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015291516000938493849391169182916328d566be916024808301926020929190829003018186803b15801561188657600080fd5b505afa15801561189a573d6000803e3d6000fd5b505050506040513d60208110156118b057600080fd5b5051965073ffffffffffffffffffffffffffffffffffffffff871661193657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f556e6b6e6f776e206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b61193e613fd2565b6119488289612152565b60e0810151604080518082018252818401518152606084015160208083019190915280850151945173ffffffffffffffffffffffffffffffffffffffff8e1660009081526010909252929020549b9d929c509a92995097509095509350505050565b60115460145460009190808214156119c0576001015b73ffffffffffffffffffffffffffffffffffffffff841660009081526010602052604090206003015482828201816119f457fe5b06905060118181548110611a0457fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1695945050505050565b60015415611a9e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001805561104781611aae612570565b612605565b600c5481565b60015415611b2857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60018055600254604080517f28d566be00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529151919092169160009183916328d566be916024808301926020929190829003018186803b158015611ba457600080fd5b505afa158015611bb8573d6000803e3d6000fd5b505050506040513d6020811015611bce57600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff8116611bf4575050611047565b600080611c0085612ab1565b91509150611c0c613fd2565b600254611c2f9073ffffffffffffffffffffffffffffffffffffffff1685612152565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260106020526040812091925090611c6490838686612bf1565b90506001816003811115611c7457fe5b1415611ccf57683635c9adc5dea000008410611cc55760e0820151611c97613fb4565b5060408051808201825290840151815260608401516020820152611cbe878a888585612c50565b5050611ccf565b611ccf8588612605565b505050505050506000600155565b60005473ffffffffffffffffffffffffffffffffffffffff163314611d6357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742070726f78790000000000000000000000000000000000000000000000604482015290519081900360640190fd5b611d6c81612f92565b50565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260408120611d9e838261259f565b8015611daf57506013548160060154105b8015611def57508273ffffffffffffffffffffffffffffffffffffffff16611dd6846119aa565b73ffffffffffffffffffffffffffffffffffffffff1614155b9392505050565b60015415611e6557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600180556000611e73612570565b90506000611e8082613854565b9050611eb885838387876002806020026040519081016040528092919082600260200280828437600092019190915250612c50915050565b50506000600155505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260408120611ef3838261259f565b8015611def57506001015442101592915050565b6060600f54604051908082528060200260200182016040528015611f35578160200160208202803883390190505b50905060005b8151811015611fb55760118181548110611f5157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828281518110611f8857fe5b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101611f3b565b5090565b683635c9adc5dea000009069152d02c7e14af680000090565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b606060055460405190808252806020026020018201604052801561201c578160200160208202803883390190505b5060065490915073ffffffffffffffffffffffffffffffffffffffff168061204457506120c0565b8061204d613fd2565b60005b8285828151811061205d57fe5b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201015260025461208e911684612152565b60c08101519350915060010173ffffffffffffffffffffffffffffffffffffffff808416908516141561205057505050505b90565b600254604080517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152915191909216916313af403591602480830192600092919082900301818387803b15801561213757600080fd5b505af115801561214b573d6000803e3d6000fd5b5050505050565b61215a613fd2565b8273ffffffffffffffffffffffffffffffffffffffff1663412cbac0836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506101006040518083038186803b1580156121d857600080fd5b505afa1580156121ec573d6000803e3d6000fd5b505050506040513d61010081101561220357600080fd5b50805160208083015160408085015160608087015160808089015160a0808b015160c0808d015160e09d8e015163ffffffff169d8f019d909d5273ffffffffffffffffffffffffffffffffffffffff9c8d16908e01528b16908c01529890981697890197909752870195909552850193909352830191909152815292915050565b60135443106122fb57601154600954808210156122a25750506122fb565b60008183816122ad57fe5b049050818110156122bb5750805b438082016013557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808501910140816122f057fe5b066001016014555050505b565b60065460075460009173ffffffffffffffffffffffffffffffffffffffff16908161232d576001925050506117da565b612335613fd2565b6002546123589073ffffffffffffffffffffffffffffffffffffffff1684612152565b73ffffffffffffffffffffffffffffffffffffffff841660009081526010602052604090206004810154600582015460019095019492935090918410156123a35760078490556123f9565b60006004830181905560c0840151600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790556007555b600061240583856138da565b9050600081600381111561241557fe5b14156124795761242482613905565b15806124655750836080015173ffffffffffffffffffffffffffffffffffffffff166108fc899081150290604051600060405180830381858888f193505050505b1561247957600196505050505050506117da565b600181600381111561248757fe5b14156124a05761249b868560800151612605565b612562565b600583015415612544576000600584015542600284015560208401516124c7908790613936565b60c0840151600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560006007819055604051918816917f749cb6b4c510bc468cf6b9c2086d6f0a54d6b18e25d37bf3200e68eab0880c009190a2612562565b600a5483600201544203111561256257612562868560800151612605565b506000979650505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314156125985750326120c0565b50336120c0565b60006125a9613fd2565b6002546125cc9073ffffffffffffffffffffffffffffffffffffffff1685612152565b905060006125da84836138da565b60038111156125e557fe5b14949350505050565b600f546004026107088110156120c0575061070890565b60025473ffffffffffffffffffffffffffffffffffffffff16612626613fd2565b6126308285612152565b608081015190915073ffffffffffffffffffffffffffffffffffffffff16612659575050612aad565b806080015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126f757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c6964206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b8373ffffffffffffffffffffffffffffffffffffffff168160c0015173ffffffffffffffffffffffffffffffffffffffff16141561275c57600680547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561292a565b60065473ffffffffffffffffffffffffffffffffffffffff858116911614156127ce5760c0810151600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560006007555b60a081015160c0820151604080517f1f9579ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015260006024820181905260448201819052600160648301529284166084820152905192851692631f9579ca9260a48084019391929182900301818387803b15801561286557600080fd5b505af1158015612879573d6000803e3d6000fd5b50505060c082015160a0830151604080517f1f9579ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201526001602482015291831660448301526000606483018190526084830181905290519286169350631f9579ca9260a48084019382900301818387803b15801561291157600080fd5b505af1158015612925573d6000803e3d6000fd5b505050505b602080820151600e805491909103905573ffffffffffffffffffffffffffffffffffffffff85166000908152601090915260409020600501541561297657612976848260200151613936565b73ffffffffffffffffffffffffffffffffffffffff808516600081815260106020526040808220828155600181018390556002810183905560038101839055600480820184905560058201849055600690910183905581517f72f5f2570000000000000000000000000000000000000000000000000000000081529081019390935251928516926372f5f25792602480820193929182900301818387803b158015612a2057600080fd5b505af1158015612a34573d6000803e3d6000fd5b5050600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555050608081015160405173ffffffffffffffffffffffffffffffffffffffff918216918616907f55faf8e51ab442f8d8510476317b2e313144c3db60adc284affef64140fe855290600090a350505b5050565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638abf60776040518163ffffffff1660e01b815260040160206040518083038186803b158015612b1c57600080fd5b505afa158015612b30573d6000803e3d6000fd5b505050506040513d6020811015612b4657600080fd5b5051604080517f78c7d97900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015282519316926378c7d97992602480840193919291829003018186803b158015612bb457600080fd5b505afa158015612bc8573d6000803e3d6000fd5b505050506040513d6040811015612bde57600080fd5b5080516020909101519094909350915050565b6000846005015460001415612c0857506002612c48565b6001850154611c2001421115612c2057506003612c48565b83602001518314612c3357506001612c48565b8351821115612c4457506001612c48565b5060005b949350505050565b60025473ffffffffffffffffffffffffffffffffffffffff16612c738186613a8b565b612c7d8187613b5e565b612c8683613bfa565b600080612c938389613dd9565b915091508273ffffffffffffffffffffffffffffffffffffffff1663f71169df898988888b43888a6040518963ffffffff1660e01b8152600401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018763ffffffff1663ffffffff16815260200186600260200280838360005b83811015612d68578181015183820152602001612d50565b505050509050018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200198505050505050505050600060405180830381600087803b158015612e0357600080fd5b505af1158015612e17573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff88166000908152601060205260409020426001820155683635c9adc5dea000008704600580830191909155600f805460019081019091558154019055600d805488019055600e8054880190819055600c54811115612e8e57600c8190555b601180546003840181905560018101825560009182527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8d81169182179092556040805163ffffffff8c168152928d169391927f935a2f33570c4840d82856d75f5d0aafca32c5e6b31db5627552304a7dc82c09928c928c928f92909160208301918591908190849084905b83811015612f6c578181015183820152602001612f54565b50505050905001828152602001935050505060405180910390a350505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166341c0e1b56040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ffc57600080fd5b505af1158015613010573d6000803e3d6000fd5b5050505060008190508073ffffffffffffffffffffffffffffffffffffffff16632d0593056040518163ffffffff1660e01b815260040160206040518083038186803b15801561305f57600080fd5b505afa158015613073573d6000803e3d6000fd5b505050506040513d602081101561308957600080fd5b5051600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055604080517fab00fdc400000000000000000000000000000000000000000000000000000000815290519183169163ab00fdc491600480820192602092909190829003018186803b15801561311f57600080fd5b505afa158015613133573d6000803e3d6000fd5b505050506040513d602081101561314957600080fd5b5051600555604080517f1a26763c000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff831691631a26763c916004808301926020929190829003018186803b1580156131b457600080fd5b505afa1580156131c8573d6000803e3d6000fd5b505050506040513d60208110156131de57600080fd5b5051600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055604080517f9c5e8ae2000000000000000000000000000000000000000000000000000000008152905191831691639c5e8ae291600480820192602092909190829003018186803b15801561327457600080fd5b505afa158015613288573d6000803e3d6000fd5b505050506040513d602081101561329e57600080fd5b5051600755604080517fcb4f40c5000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff83169163cb4f40c5916004808301926020929190829003018186803b15801561330957600080fd5b505afa15801561331d573d6000803e3d6000fd5b505050506040513d602081101561333357600080fd5b5051600c55604080517f6d41ff4e000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff831691636d41ff4e916004808301926020929190829003018186803b15801561339e57600080fd5b505afa1580156133b2573d6000803e3d6000fd5b505050506040513d60208110156133c857600080fd5b5051600d55604080517f57f2a7d8000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916357f2a7d8916004808301926020929190829003018186803b15801561343357600080fd5b505afa158015613447573d6000803e3d6000fd5b505050506040513d602081101561345d57600080fd5b5051600e55604080517f521f284d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff83169163521f284d916004808301926020929190829003018186803b1580156134c857600080fd5b505afa1580156134dc573d6000803e3d6000fd5b505050506040513d60208110156134f257600080fd5b5051600f55604080517fff9f78b3000000000000000000000000000000000000000000000000000000008152905160609173ffffffffffffffffffffffffffffffffffffffff84169163ff9f78b391600480820192600092909190829003018186803b15801561356157600080fd5b505afa158015613575573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405260208110156135bc57600080fd5b81019080805160405193929190846401000000008211156135dc57600080fd5b9083019060208201858111156135f157600080fd5b825186602082028301116401000000008211171561360e57600080fd5b82525081516020918201928201910280838360005b8381101561363b578181015183820152602001613623565b5050505091909101604052505043601255505080519091505b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101901561384657600082828151811061368b57fe5b6020026020010151905061369d614016565b8473ffffffffffffffffffffffffffffffffffffffff16634d1b4dae836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506101006040518083038186803b15801561371b57600080fd5b505afa15801561372f573d6000803e3d6000fd5b505050506040513d61010081101561374657600080fd5b50805160408083015160a08085015160c08087015160e090970151908801908152918701958652608087019081528684019283529386526004888102420160208089019182526011805460608b0181815260018083019093557f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6890910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9d909d169c8d17905560009b8c5260109092529590992097518855519387019390935590516002860155945160038501559051908301555160058201559051600690910155613654565b5061384f612284565b505050565b600061385f82612ab1565b509050683635c9adc5dea000008110156117da57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420636f6c6c61746572616c0000000000000000000000000000604482015290519081900360640190fd5b60008060006138ec8460800151612ab1565b915091506138fc85858484612bf1565b95945050505050565b6000600854600f54101561391b575060016117da565b600060026009546001018161392c57fe5b0490921092915050565b60118054600091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061396a57fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff86811684526010909252604080842060039081015493909216808552932001819055601180549293509091839190839081106139c557fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506011805480613a1857fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055908101909155600f805490910190555050600d805491909103905550565b60008273ffffffffffffffffffffffffffffffffffffffff166328d566be836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613b0a57600080fd5b505afa158015613b1e573d6000803e3d6000fd5b505050506040513d6020811015613b3457600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff81161561384f5761384f8183612605565b613b66613fd2565b613b708383612152565b608081015190915073ffffffffffffffffffffffffffffffffffffffff161561384f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c6964206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b63ff000000811662ff0000821661ff008316637f0000008314801590613c24575082630a00000014155b8015613c4257508263c0000000148015613c4057508162a80000145b155b8015613c6557508263ac000000148015613c6357508162f000001662100000145b155b8015613c7057508215155b8015613c935750826364000000148015613c9157508162c000001662400000145b155b8015613cb157508263a9000000148015613caf57508162fe0000145b155b8015613cd457508263c6000000148015613cd257508162fe00001662120000145b155b8015613cff57508263c6000000148015613cf057508162330000145b8015613cfd575080616400145b155b8015613d2657508263cb000000148015613d17575081155b8015613d24575080617100145b155b8015613d3c57508263f00000001663e000000014155b8015613d5257508263f00000001663f000000014155b8015613d6857508363ffffffff1663ffffffff14155b613dd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f57726f6e67204950000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b50505050565b60065473ffffffffffffffffffffffffffffffffffffffff1660008115613f6357613e02613fd2565b613e0c8584612152565b60a0810151604080517f1f9579ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260006024830181905260448301819052600160648401528982166084840152925193965093945092881692631f9579ca9260a4808301939282900301818387803b158015613ea257600080fd5b505af1158015613eb6573d6000803e3d6000fd5b5050604080517f1f9579ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152600160248301528881166044830152600060648301819052608483018190529251908a169450631f9579ca935060a4808301939282900301818387803b158015613f4557600080fd5b505af1158015613f59573d6000803e3d6000fd5b5050505050613fad565b5050600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316179055600060075580805b9250929050565b60405180604001604052806002906020820280388339509192915050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6040518060e0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fea265627a7a723158208fe498240a92095cbc10d67d69cd9b4ebb0d6010dbd5b22c663e05b5c94ac4b964736f6c63430005100032`

// MasternodeRegistryV2 is an auto generated Go binding around an Ethereum contract.
type MasternodeRegistryV2 struct {
	MasternodeRegistryV2Caller     // Read-only binding to the contract
	MasternodeRegistryV2Transactor // Write-only binding to the contract
	MasternodeRegistryV2Filterer   // Log filterer for contract events
}

// MasternodeRegistryV2Caller is an auto generated read-only Go binding around an Ethereum contract.
type MasternodeRegistryV2Caller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// MasternodeRegistryV2Transactor is an auto generated write-only Go binding around an Ethereum contract.
type MasternodeRegistryV2Transactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// MasternodeRegistryV2Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
type MasternodeRegistryV2Filterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// MasternodeRegistryV2Session is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type MasternodeRegistryV2Session struct {
	Contract     *MasternodeRegistryV2 // Generic contract binding to set the session for
	CallOpts     bind.CallOpts         // Call options to use throughout this session
	TransactOpts bind.TransactOpts     // Transaction auth options to use throughout this session
}

// MasternodeRegistryV2CallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type MasternodeRegistryV2CallerSession struct {
	Contract *MasternodeRegistryV2Caller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts               // Call options to use throughout this session
}

// MasternodeRegistryV2TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type MasternodeRegistryV2TransactorSession struct {
	Contract     *MasternodeRegistryV2Transactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts               // Transaction auth options to use throughout this session
}

// MasternodeRegistryV2Raw is an auto generated low-level Go binding around an Ethereum contract.
type MasternodeRegistryV2Raw struct {
	Contract *MasternodeRegistryV2 // Generic contract binding to access the raw methods on
}

// MasternodeRegistryV2CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type MasternodeRegistryV2CallerRaw struct {
	Contract *MasternodeRegistryV2Caller // Generic read-only contract binding to access the raw methods on
}

// MasternodeRegistryV2TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type MasternodeRegistryV2TransactorRaw struct {
	Contract *MasternodeRegistryV2Transactor // Generic write-only contract binding to access the raw methods on
}

// NewMasternodeRegistryV2 creates a new instance of MasternodeRegistryV2, bound to a specific deployed contract.
func NewMasternodeRegistryV2(address common.Address, backend bind.ContractBackend) (*MasternodeRegistryV2, error) {
	contract, err := bindMasternodeRegistryV2(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &MasternodeRegistryV2{MasternodeRegistryV2Caller: MasternodeRegistryV2Caller{contract: contract}, MasternodeRegistryV2Transactor: MasternodeRegistryV2Transactor{contract: contract}, MasternodeRegistryV2Filterer: MasternodeRegistryV2Filterer{contract: contract}}, nil
}

// NewMasternodeRegistryV2Caller creates a new read-only instance of MasternodeRegistryV2, bound to a specific deployed contract.
func NewMasternodeRegistryV2Caller(address common.Address, caller bind.ContractCaller) (*MasternodeRegistryV2Caller, error) {
	contract, err := bindMasternodeRegistryV2(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &MasternodeRegistryV2Caller{contract: contract}, nil
}

// NewMasternodeRegistryV2Transactor creates a new write-only instance of MasternodeRegistryV2, bound to a specific deployed contract.
func NewMasternodeRegistryV2Transactor(address common.Address, transactor bind.ContractTransactor) (*MasternodeRegistryV2Transactor, error) {
	contract, err := bindMasternodeRegistryV2(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &MasternodeRegistryV2Transactor{contract: contract}, nil
}

// NewMasternodeRegistryV2Filterer creates a new log filterer instance of MasternodeRegistryV2, bound to a specific deployed contract.
func NewMasternodeRegistryV2Filterer(address common.Address, filterer bind.ContractFilterer) (*MasternodeRegistryV2Filterer, error) {
	contract, err := bindMasternodeRegistryV2(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &MasternodeRegistryV2Filterer{contract: contract}, nil
}

// bindMasternodeRegistryV2 binds a generic wrapper to an already deployed contract.
func bindMasternodeRegistryV2(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(MasternodeRegistryV2ABI))
	if err != nil {
		return nil, err
	}
	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}

// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_MasternodeRegistryV2 *MasternodeRegistryV2Raw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error {
	return _MasternodeRegistryV2.Contract.MasternodeRegistryV2Caller.contract.Call(opts, result, method, params...)
}

// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_MasternodeRegistryV2 *MasternodeRegistryV2Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.MasternodeRegistryV2Transactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_MasternodeRegistryV2 *MasternodeRegistryV2Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.MasternodeRegistryV2Transactor.contract.Transact(opts, method, params...)
}

// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error {
	return _MasternodeRegistryV2.Contract.contract.Call(opts, result, method, params...)
}

// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_MasternodeRegistryV2 *MasternodeRegistryV2TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_MasternodeRegistryV2 *MasternodeRegistryV2TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.contract.Transact(opts, method, params...)
}

// CanHeartbeat is a free data retrieval call binding the contract method 0xd9966aba.
//
// Solidity: function canHeartbeat(address masternode) constant returns(bool can_heartbeat)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) CanHeartbeat(opts *bind.CallOpts, masternode common.Address) (bool, error) {
	var (
		ret0 = new(bool)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "canHeartbeat", masternode)
	return *ret0, err
}

// CanHeartbeat is a free data retrieval call binding the contract method 0xd9966aba.
//
// Solidity: function canHeartbeat(address masternode) constant returns(bool can_heartbeat)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) CanHeartbeat(masternode common.Address) (bool, error) {
	return _MasternodeRegistryV2.Contract.CanHeartbeat(&_MasternodeRegistryV2.CallOpts, masternode)
}

// CanHeartbeat is a free data retrieval call binding the contract method 0xd9966aba.
//
// Solidity: function canHeartbeat(address masternode) constant returns(bool can_heartbeat)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) CanHeartbeat(masternode common.Address) (bool, error) {
	return _MasternodeRegistryV2.Contract.CanHeartbeat(&_MasternodeRegistryV2.CallOpts, masternode)
}

// CanInvalidate is a free data retrieval call binding the contract method 0xd13ef5a5.
//
// Solidity: function canInvalidate(address masternode) constant returns(bool can_invalidate)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) CanInvalidate(opts *bind.CallOpts, masternode common.Address) (bool, error) {
	var (
		ret0 = new(bool)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "canInvalidate", masternode)
	return *ret0, err
}

// CanInvalidate is a free data retrieval call binding the contract method 0xd13ef5a5.
//
// Solidity: function canInvalidate(address masternode) constant returns(bool can_invalidate)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) CanInvalidate(masternode common.Address) (bool, error) {
	return _MasternodeRegistryV2.Contract.CanInvalidate(&_MasternodeRegistryV2.CallOpts, masternode)
}

// CanInvalidate is a free data retrieval call binding the contract method 0xd13ef5a5.
//
// Solidity: function canInvalidate(address masternode) constant returns(bool can_invalidate)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) CanInvalidate(masternode common.Address) (bool, error) {
	return _MasternodeRegistryV2.Contract.CanInvalidate(&_MasternodeRegistryV2.CallOpts, masternode)
}

// CleanupPeriod is a free data retrieval call binding the contract method 0x5f6e2c7b.
//
// Solidity: function cleanup_period() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) CleanupPeriod(opts *bind.CallOpts) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "cleanup_period")
	return *ret0, err
}

// CleanupPeriod is a free data retrieval call binding the contract method 0x5f6e2c7b.
//
// Solidity: function cleanup_period() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) CleanupPeriod() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.CleanupPeriod(&_MasternodeRegistryV2.CallOpts)
}

// CleanupPeriod is a free data retrieval call binding the contract method 0x5f6e2c7b.
//
// Solidity: function cleanup_period() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) CleanupPeriod() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.CleanupPeriod(&_MasternodeRegistryV2.CallOpts)
}

// CollateralLimits is a free data retrieval call binding the contract method 0xe2cb2195.
//
// Solidity: function collateralLimits() constant returns(uint256 min, uint256 max)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) CollateralLimits(opts *bind.CallOpts) (struct {
	Min *big.Int
	Max *big.Int
}, error) {
	ret := new(struct {
		Min *big.Int
		Max *big.Int
	})
	out := ret
	err := _MasternodeRegistryV2.contract.Call(opts, out, "collateralLimits")
	return *ret, err
}

// CollateralLimits is a free data retrieval call binding the contract method 0xe2cb2195.
//
// Solidity: function collateralLimits() constant returns(uint256 min, uint256 max)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) CollateralLimits() (struct {
	Min *big.Int
	Max *big.Int
}, error) {
	return _MasternodeRegistryV2.Contract.CollateralLimits(&_MasternodeRegistryV2.CallOpts)
}

// CollateralLimits is a free data retrieval call binding the contract method 0xe2cb2195.
//
// Solidity: function collateralLimits() constant returns(uint256 min, uint256 max)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) CollateralLimits() (struct {
	Min *big.Int
	Max *big.Int
}, error) {
	return _MasternodeRegistryV2.Contract.CollateralLimits(&_MasternodeRegistryV2.CallOpts)
}

// Count is a free data retrieval call binding the contract method 0x06661abd.
//
// Solidity: function count() constant returns(uint256 active, uint256 total, uint256 active_collateral, uint256 total_collateral, uint256 max_of_all_times)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) Count(opts *bind.CallOpts) (struct {
	Active           *big.Int
	Total            *big.Int
	ActiveCollateral *big.Int
	TotalCollateral  *big.Int
	MaxOfAllTimes    *big.Int
}, error) {
	ret := new(struct {
		Active           *big.Int
		Total            *big.Int
		ActiveCollateral *big.Int
		TotalCollateral  *big.Int
		MaxOfAllTimes    *big.Int
	})
	out := ret
	err := _MasternodeRegistryV2.contract.Call(opts, out, "count")
	return *ret, err
}

// Count is a free data retrieval call binding the contract method 0x06661abd.
//
// Solidity: function count() constant returns(uint256 active, uint256 total, uint256 active_collateral, uint256 total_collateral, uint256 max_of_all_times)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) Count() (struct {
	Active           *big.Int
	Total            *big.Int
	ActiveCollateral *big.Int
	TotalCollateral  *big.Int
	MaxOfAllTimes    *big.Int
}, error) {
	return _MasternodeRegistryV2.Contract.Count(&_MasternodeRegistryV2.CallOpts)
}

// Count is a free data retrieval call binding the contract method 0x06661abd.
//
// Solidity: function count() constant returns(uint256 active, uint256 total, uint256 active_collateral, uint256 total_collateral, uint256 max_of_all_times)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) Count() (struct {
	Active           *big.Int
	Total            *big.Int
	ActiveCollateral *big.Int
	TotalCollateral  *big.Int
	MaxOfAllTimes    *big.Int
}, error) {
	return _MasternodeRegistryV2.Contract.Count(&_MasternodeRegistryV2.CallOpts)
}

// CurrValidationEnds is a free data retrieval call binding the contract method 0x2e941dc4.
//
// Solidity: function curr_validation_ends() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) CurrValidationEnds(opts *bind.CallOpts) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "curr_validation_ends")
	return *ret0, err
}

// CurrValidationEnds is a free data retrieval call binding the contract method 0x2e941dc4.
//
// Solidity: function curr_validation_ends() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) CurrValidationEnds() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.CurrValidationEnds(&_MasternodeRegistryV2.CallOpts)
}

// CurrValidationEnds is a free data retrieval call binding the contract method 0x2e941dc4.
//
// Solidity: function curr_validation_ends() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) CurrValidationEnds() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.CurrValidationEnds(&_MasternodeRegistryV2.CallOpts)
}

// CurrValidationOffset is a free data retrieval call binding the contract method 0x73b24540.
//
// Solidity: function curr_validation_offset() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) CurrValidationOffset(opts *bind.CallOpts) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "curr_validation_offset")
	return *ret0, err
}

// CurrValidationOffset is a free data retrieval call binding the contract method 0x73b24540.
//
// Solidity: function curr_validation_offset() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) CurrValidationOffset() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.CurrValidationOffset(&_MasternodeRegistryV2.CallOpts)
}

// CurrValidationOffset is a free data retrieval call binding the contract method 0x73b24540.
//
// Solidity: function curr_validation_offset() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) CurrValidationOffset() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.CurrValidationOffset(&_MasternodeRegistryV2.CallOpts)
}

// CurrentMasternode is a free data retrieval call binding the contract method 0x1a26763c.
//
// Solidity: function current_masternode() constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) CurrentMasternode(opts *bind.CallOpts) (common.Address, error) {
	var (
		ret0 = new(common.Address)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "current_masternode")
	return *ret0, err
}

// CurrentMasternode is a free data retrieval call binding the contract method 0x1a26763c.
//
// Solidity: function current_masternode() constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) CurrentMasternode() (common.Address, error) {
	return _MasternodeRegistryV2.Contract.CurrentMasternode(&_MasternodeRegistryV2.CallOpts)
}

// CurrentMasternode is a free data retrieval call binding the contract method 0x1a26763c.
//
// Solidity: function current_masternode() constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) CurrentMasternode() (common.Address, error) {
	return _MasternodeRegistryV2.Contract.CurrentMasternode(&_MasternodeRegistryV2.CallOpts)
}

// CurrentPayouts is a free data retrieval call binding the contract method 0x9c5e8ae2.
//
// Solidity: function current_payouts() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) CurrentPayouts(opts *bind.CallOpts) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "current_payouts")
	return *ret0, err
}

// CurrentPayouts is a free data retrieval call binding the contract method 0x9c5e8ae2.
//
// Solidity: function current_payouts() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) CurrentPayouts() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.CurrentPayouts(&_MasternodeRegistryV2.CallOpts)
}

// CurrentPayouts is a free data retrieval call binding the contract method 0x9c5e8ae2.
//
// Solidity: function current_payouts() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) CurrentPayouts() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.CurrentPayouts(&_MasternodeRegistryV2.CallOpts)
}

// Enumerate is a free data retrieval call binding the contract method 0xff9f78b3.
//
// Solidity: function enumerate() constant returns(address[] masternodes)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) Enumerate(opts *bind.CallOpts) ([]common.Address, error) {
	var (
		ret0 = new([]common.Address)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "enumerate")
	return *ret0, err
}

// Enumerate is a free data retrieval call binding the contract method 0xff9f78b3.
//
// Solidity: function enumerate() constant returns(address[] masternodes)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) Enumerate() ([]common.Address, error) {
	return _MasternodeRegistryV2.Contract.Enumerate(&_MasternodeRegistryV2.CallOpts)
}

// Enumerate is a free data retrieval call binding the contract method 0xff9f78b3.
//
// Solidity: function enumerate() constant returns(address[] masternodes)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) Enumerate() ([]common.Address, error) {
	return _MasternodeRegistryV2.Contract.Enumerate(&_MasternodeRegistryV2.CallOpts)
}

// EnumerateActive is a free data retrieval call binding the contract method 0xe1d6f43a.
//
// Solidity: function enumerateActive() constant returns(address[] masternodes)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) EnumerateActive(opts *bind.CallOpts) ([]common.Address, error) {
	var (
		ret0 = new([]common.Address)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "enumerateActive")
	return *ret0, err
}

// EnumerateActive is a free data retrieval call binding the contract method 0xe1d6f43a.
//
// Solidity: function enumerateActive() constant returns(address[] masternodes)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) EnumerateActive() ([]common.Address, error) {
	return _MasternodeRegistryV2.Contract.EnumerateActive(&_MasternodeRegistryV2.CallOpts)
}

// EnumerateActive is a free data retrieval call binding the contract method 0xe1d6f43a.
//
// Solidity: function enumerateActive() constant returns(address[] masternodes)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) EnumerateActive() ([]common.Address, error) {
	return _MasternodeRegistryV2.Contract.EnumerateActive(&_MasternodeRegistryV2.CallOpts)
}

// GetReward is a free data retrieval call binding the contract method 0x1c4b774b.
//
// Solidity: function getReward(uint256 _blockNumber) constant returns(uint256 amount)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) GetReward(opts *bind.CallOpts, _blockNumber *big.Int) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "getReward", _blockNumber)
	return *ret0, err
}

// GetReward is a free data retrieval call binding the contract method 0x1c4b774b.
//
// Solidity: function getReward(uint256 _blockNumber) constant returns(uint256 amount)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) GetReward(_blockNumber *big.Int) (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.GetReward(&_MasternodeRegistryV2.CallOpts, _blockNumber)
}

// GetReward is a free data retrieval call binding the contract method 0x1c4b774b.
//
// Solidity: function getReward(uint256 _blockNumber) constant returns(uint256 amount)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) GetReward(_blockNumber *big.Int) (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.GetReward(&_MasternodeRegistryV2.CallOpts, _blockNumber)
}

// Info is a free data retrieval call binding the contract method 0x0aae7a6b.
//
// Solidity: function info(address masternode) constant returns(address owner, uint32 ipv4address, bytes32[2] enode, uint256 collateral, uint256 announced_block, uint256 sw_features)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) Info(opts *bind.CallOpts, masternode common.Address) (struct {
	Owner          common.Address
	Ipv4address    uint32
	Enode          [2][32]byte
	Collateral     *big.Int
	AnnouncedBlock *big.Int
	SwFeatures     *big.Int
}, error) {
	ret := new(struct {
		Owner          common.Address
		Ipv4address    uint32
		Enode          [2][32]byte
		Collateral     *big.Int
		AnnouncedBlock *big.Int
		SwFeatures     *big.Int
	})
	out := ret
	err := _MasternodeRegistryV2.contract.Call(opts, out, "info", masternode)
	return *ret, err
}

// Info is a free data retrieval call binding the contract method 0x0aae7a6b.
//
// Solidity: function info(address masternode) constant returns(address owner, uint32 ipv4address, bytes32[2] enode, uint256 collateral, uint256 announced_block, uint256 sw_features)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) Info(masternode common.Address) (struct {
	Owner          common.Address
	Ipv4address    uint32
	Enode          [2][32]byte
	Collateral     *big.Int
	AnnouncedBlock *big.Int
	SwFeatures     *big.Int
}, error) {
	return _MasternodeRegistryV2.Contract.Info(&_MasternodeRegistryV2.CallOpts, masternode)
}

// Info is a free data retrieval call binding the contract method 0x0aae7a6b.
//
// Solidity: function info(address masternode) constant returns(address owner, uint32 ipv4address, bytes32[2] enode, uint256 collateral, uint256 announced_block, uint256 sw_features)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) Info(masternode common.Address) (struct {
	Owner          common.Address
	Ipv4address    uint32
	Enode          [2][32]byte
	Collateral     *big.Int
	AnnouncedBlock *big.Int
	SwFeatures     *big.Int
}, error) {
	return _MasternodeRegistryV2.Contract.Info(&_MasternodeRegistryV2.CallOpts, masternode)
}

// IsActive is a free data retrieval call binding the contract method 0x9f8a13d7.
//
// Solidity: function isActive(address masternode) constant returns(bool)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) IsActive(opts *bind.CallOpts, masternode common.Address) (bool, error) {
	var (
		ret0 = new(bool)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "isActive", masternode)
	return *ret0, err
}

// IsActive is a free data retrieval call binding the contract method 0x9f8a13d7.
//
// Solidity: function isActive(address masternode) constant returns(bool)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) IsActive(masternode common.Address) (bool, error) {
	return _MasternodeRegistryV2.Contract.IsActive(&_MasternodeRegistryV2.CallOpts, masternode)
}

// IsActive is a free data retrieval call binding the contract method 0x9f8a13d7.
//
// Solidity: function isActive(address masternode) constant returns(bool)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) IsActive(masternode common.Address) (bool, error) {
	return _MasternodeRegistryV2.Contract.IsActive(&_MasternodeRegistryV2.CallOpts, masternode)
}

// LastBlockNumber is a free data retrieval call binding the contract method 0x1eeaebb2.
//
// Solidity: function last_block_number() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) LastBlockNumber(opts *bind.CallOpts) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "last_block_number")
	return *ret0, err
}

// LastBlockNumber is a free data retrieval call binding the contract method 0x1eeaebb2.
//
// Solidity: function last_block_number() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) LastBlockNumber() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.LastBlockNumber(&_MasternodeRegistryV2.CallOpts)
}

// LastBlockNumber is a free data retrieval call binding the contract method 0x1eeaebb2.
//
// Solidity: function last_block_number() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) LastBlockNumber() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.LastBlockNumber(&_MasternodeRegistryV2.CallOpts)
}

// MnActive is a free data retrieval call binding the contract method 0x521f284d.
//
// Solidity: function mn_active() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) MnActive(opts *bind.CallOpts) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "mn_active")
	return *ret0, err
}

// MnActive is a free data retrieval call binding the contract method 0x521f284d.
//
// Solidity: function mn_active() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) MnActive() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.MnActive(&_MasternodeRegistryV2.CallOpts)
}

// MnActive is a free data retrieval call binding the contract method 0x521f284d.
//
// Solidity: function mn_active() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) MnActive() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.MnActive(&_MasternodeRegistryV2.CallOpts)
}

// MnActiveCollateral is a free data retrieval call binding the contract method 0x6d41ff4e.
//
// Solidity: function mn_active_collateral() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) MnActiveCollateral(opts *bind.CallOpts) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "mn_active_collateral")
	return *ret0, err
}

// MnActiveCollateral is a free data retrieval call binding the contract method 0x6d41ff4e.
//
// Solidity: function mn_active_collateral() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) MnActiveCollateral() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.MnActiveCollateral(&_MasternodeRegistryV2.CallOpts)
}

// MnActiveCollateral is a free data retrieval call binding the contract method 0x6d41ff4e.
//
// Solidity: function mn_active_collateral() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) MnActiveCollateral() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.MnActiveCollateral(&_MasternodeRegistryV2.CallOpts)
}

// MnAnnounced is a free data retrieval call binding the contract method 0xab00fdc4.
//
// Solidity: function mn_announced() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) MnAnnounced(opts *bind.CallOpts) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "mn_announced")
	return *ret0, err
}

// MnAnnounced is a free data retrieval call binding the contract method 0xab00fdc4.
//
// Solidity: function mn_announced() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) MnAnnounced() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.MnAnnounced(&_MasternodeRegistryV2.CallOpts)
}

// MnAnnounced is a free data retrieval call binding the contract method 0xab00fdc4.
//
// Solidity: function mn_announced() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) MnAnnounced() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.MnAnnounced(&_MasternodeRegistryV2.CallOpts)
}

// MnAnnouncedCollateral is a free data retrieval call binding the contract method 0x57f2a7d8.
//
// Solidity: function mn_announced_collateral() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) MnAnnouncedCollateral(opts *bind.CallOpts) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "mn_announced_collateral")
	return *ret0, err
}

// MnAnnouncedCollateral is a free data retrieval call binding the contract method 0x57f2a7d8.
//
// Solidity: function mn_announced_collateral() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) MnAnnouncedCollateral() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.MnAnnouncedCollateral(&_MasternodeRegistryV2.CallOpts)
}

// MnAnnouncedCollateral is a free data retrieval call binding the contract method 0x57f2a7d8.
//
// Solidity: function mn_announced_collateral() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) MnAnnouncedCollateral() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.MnAnnouncedCollateral(&_MasternodeRegistryV2.CallOpts)
}

// MnEverCollateral is a free data retrieval call binding the contract method 0xcb4f40c5.
//
// Solidity: function mn_ever_collateral() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) MnEverCollateral(opts *bind.CallOpts) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "mn_ever_collateral")
	return *ret0, err
}

// MnEverCollateral is a free data retrieval call binding the contract method 0xcb4f40c5.
//
// Solidity: function mn_ever_collateral() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) MnEverCollateral() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.MnEverCollateral(&_MasternodeRegistryV2.CallOpts)
}

// MnEverCollateral is a free data retrieval call binding the contract method 0xcb4f40c5.
//
// Solidity: function mn_ever_collateral() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) MnEverCollateral() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.MnEverCollateral(&_MasternodeRegistryV2.CallOpts)
}

// MnStatus is a free data retrieval call binding the contract method 0x4d1b4dae.
//
// Solidity: function mn_status(address ) constant returns(uint256 sw_features, uint256 next_heartbeat, uint256 inactive_since, uint256 validator_index, uint256 invalidations, uint256 seq_payouts, uint256 last_vote_epoch)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) MnStatus(opts *bind.CallOpts, arg0 common.Address) (struct {
	SwFeatures     *big.Int
	NextHeartbeat  *big.Int
	InactiveSince  *big.Int
	ValidatorIndex *big.Int
	Invalidations  *big.Int
	SeqPayouts     *big.Int
	LastVoteEpoch  *big.Int
}, error) {
	ret := new(struct {
		SwFeatures     *big.Int
		NextHeartbeat  *big.Int
		InactiveSince  *big.Int
		ValidatorIndex *big.Int
		Invalidations  *big.Int
		SeqPayouts     *big.Int
		LastVoteEpoch  *big.Int
	})
	out := ret
	err := _MasternodeRegistryV2.contract.Call(opts, out, "mn_status", arg0)
	return *ret, err
}

// MnStatus is a free data retrieval call binding the contract method 0x4d1b4dae.
//
// Solidity: function mn_status(address ) constant returns(uint256 sw_features, uint256 next_heartbeat, uint256 inactive_since, uint256 validator_index, uint256 invalidations, uint256 seq_payouts, uint256 last_vote_epoch)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) MnStatus(arg0 common.Address) (struct {
	SwFeatures     *big.Int
	NextHeartbeat  *big.Int
	InactiveSince  *big.Int
	ValidatorIndex *big.Int
	Invalidations  *big.Int
	SeqPayouts     *big.Int
	LastVoteEpoch  *big.Int
}, error) {
	return _MasternodeRegistryV2.Contract.MnStatus(&_MasternodeRegistryV2.CallOpts, arg0)
}

// MnStatus is a free data retrieval call binding the contract method 0x4d1b4dae.
//
// Solidity: function mn_status(address ) constant returns(uint256 sw_features, uint256 next_heartbeat, uint256 inactive_since, uint256 validator_index, uint256 invalidations, uint256 seq_payouts, uint256 last_vote_epoch)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) MnStatus(arg0 common.Address) (struct {
	SwFeatures     *big.Int
	NextHeartbeat  *big.Int
	InactiveSince  *big.Int
	ValidatorIndex *big.Int
	Invalidations  *big.Int
	SeqPayouts     *big.Int
	LastVoteEpoch  *big.Int
}, error) {
	return _MasternodeRegistryV2.Contract.MnStatus(&_MasternodeRegistryV2.CallOpts, arg0)
}

// OwnerInfo is a free data retrieval call binding the contract method 0xb83e1605.
//
// Solidity: function ownerInfo(address owner) constant returns(address masternode, uint32 ipv4address, bytes32[2] enode, uint256 collateral, uint256 announced_block, uint256 sw_features)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) OwnerInfo(opts *bind.CallOpts, owner common.Address) (struct {
	Masternode     common.Address
	Ipv4address    uint32
	Enode          [2][32]byte
	Collateral     *big.Int
	AnnouncedBlock *big.Int
	SwFeatures     *big.Int
}, error) {
	ret := new(struct {
		Masternode     common.Address
		Ipv4address    uint32
		Enode          [2][32]byte
		Collateral     *big.Int
		AnnouncedBlock *big.Int
		SwFeatures     *big.Int
	})
	out := ret
	err := _MasternodeRegistryV2.contract.Call(opts, out, "ownerInfo", owner)
	return *ret, err
}

// OwnerInfo is a free data retrieval call binding the contract method 0xb83e1605.
//
// Solidity: function ownerInfo(address owner) constant returns(address masternode, uint32 ipv4address, bytes32[2] enode, uint256 collateral, uint256 announced_block, uint256 sw_features)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) OwnerInfo(owner common.Address) (struct {
	Masternode     common.Address
	Ipv4address    uint32
	Enode          [2][32]byte
	Collateral     *big.Int
	AnnouncedBlock *big.Int
	SwFeatures     *big.Int
}, error) {
	return _MasternodeRegistryV2.Contract.OwnerInfo(&_MasternodeRegistryV2.CallOpts, owner)
}

// OwnerInfo is a free data retrieval call binding the contract method 0xb83e1605.
//
// Solidity: function ownerInfo(address owner) constant returns(address masternode, uint32 ipv4address, bytes32[2] enode, uint256 collateral, uint256 announced_block, uint256 sw_features)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) OwnerInfo(owner common.Address) (struct {
	Masternode     common.Address
	Ipv4address    uint32
	Enode          [2][32]byte
	Collateral     *big.Int
	AnnouncedBlock *big.Int
	SwFeatures     *big.Int
}, error) {
	return _MasternodeRegistryV2.Contract.OwnerInfo(&_MasternodeRegistryV2.CallOpts, owner)
}

// PaymentsPerBlock is a free data retrieval call binding the contract method 0x542396fd.
//
// Solidity: function payments_per_block() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) PaymentsPerBlock(opts *bind.CallOpts) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "payments_per_block")
	return *ret0, err
}

// PaymentsPerBlock is a free data retrieval call binding the contract method 0x542396fd.
//
// Solidity: function payments_per_block() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) PaymentsPerBlock() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.PaymentsPerBlock(&_MasternodeRegistryV2.CallOpts)
}

// PaymentsPerBlock is a free data retrieval call binding the contract method 0x542396fd.
//
// Solidity: function payments_per_block() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) PaymentsPerBlock() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.PaymentsPerBlock(&_MasternodeRegistryV2.CallOpts)
}

// Proxy is a free data retrieval call binding the contract method 0xec556889.
//
// Solidity: function proxy() constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) Proxy(opts *bind.CallOpts) (common.Address, error) {
	var (
		ret0 = new(common.Address)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "proxy")
	return *ret0, err
}

// Proxy is a free data retrieval call binding the contract method 0xec556889.
//
// Solidity: function proxy() constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) Proxy() (common.Address, error) {
	return _MasternodeRegistryV2.Contract.Proxy(&_MasternodeRegistryV2.CallOpts)
}

// Proxy is a free data retrieval call binding the contract method 0xec556889.
//
// Solidity: function proxy() constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) Proxy() (common.Address, error) {
	return _MasternodeRegistryV2.Contract.Proxy(&_MasternodeRegistryV2.CallOpts)
}

// RequireValidation is a free data retrieval call binding the contract method 0x35ab13f6.
//
// Solidity: function require_validation() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) RequireValidation(opts *bind.CallOpts) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "require_validation")
	return *ret0, err
}

// RequireValidation is a free data retrieval call binding the contract method 0x35ab13f6.
//
// Solidity: function require_validation() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) RequireValidation() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.RequireValidation(&_MasternodeRegistryV2.CallOpts)
}

// RequireValidation is a free data retrieval call binding the contract method 0x35ab13f6.
//
// Solidity: function require_validation() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) RequireValidation() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.RequireValidation(&_MasternodeRegistryV2.CallOpts)
}

// TokenProxy is a free data retrieval call binding the contract method 0x84afd47f.
//
// Solidity: function token_proxy() constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) TokenProxy(opts *bind.CallOpts) (common.Address, error) {
	var (
		ret0 = new(common.Address)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "token_proxy")
	return *ret0, err
}

// TokenProxy is a free data retrieval call binding the contract method 0x84afd47f.
//
// Solidity: function token_proxy() constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) TokenProxy() (common.Address, error) {
	return _MasternodeRegistryV2.Contract.TokenProxy(&_MasternodeRegistryV2.CallOpts)
}

// TokenProxy is a free data retrieval call binding the contract method 0x84afd47f.
//
// Solidity: function token_proxy() constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) TokenProxy() (common.Address, error) {
	return _MasternodeRegistryV2.Contract.TokenProxy(&_MasternodeRegistryV2.CallOpts)
}

// TreasuryProxy is a free data retrieval call binding the contract method 0xa2731784.
//
// Solidity: function treasury_proxy() constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) TreasuryProxy(opts *bind.CallOpts) (common.Address, error) {
	var (
		ret0 = new(common.Address)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "treasury_proxy")
	return *ret0, err
}

// TreasuryProxy is a free data retrieval call binding the contract method 0xa2731784.
//
// Solidity: function treasury_proxy() constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) TreasuryProxy() (common.Address, error) {
	return _MasternodeRegistryV2.Contract.TreasuryProxy(&_MasternodeRegistryV2.CallOpts)
}

// TreasuryProxy is a free data retrieval call binding the contract method 0xa2731784.
//
// Solidity: function treasury_proxy() constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) TreasuryProxy() (common.Address, error) {
	return _MasternodeRegistryV2.Contract.TreasuryProxy(&_MasternodeRegistryV2.CallOpts)
}

// V1storage is a free data retrieval call binding the contract method 0x2d059305.
//
// Solidity: function v1storage() constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) V1storage(opts *bind.CallOpts) (common.Address, error) {
	var (
		ret0 = new(common.Address)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "v1storage")
	return *ret0, err
}

// V1storage is a free data retrieval call binding the contract method 0x2d059305.
//
// Solidity: function v1storage() constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) V1storage() (common.Address, error) {
	return _MasternodeRegistryV2.Contract.V1storage(&_MasternodeRegistryV2.CallOpts)
}

// V1storage is a free data retrieval call binding the contract method 0x2d059305.
//
// Solidity: function v1storage() constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) V1storage() (common.Address, error) {
	return _MasternodeRegistryV2.Contract.V1storage(&_MasternodeRegistryV2.CallOpts)
}

// ValidationTarget is a free data retrieval call binding the contract method 0xc3db74d6.
//
// Solidity: function validationTarget(address masternode) constant returns(address target)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) ValidationTarget(opts *bind.CallOpts, masternode common.Address) (common.Address, error) {
	var (
		ret0 = new(common.Address)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "validationTarget", masternode)
	return *ret0, err
}

// ValidationTarget is a free data retrieval call binding the contract method 0xc3db74d6.
//
// Solidity: function validationTarget(address masternode) constant returns(address target)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) ValidationTarget(masternode common.Address) (common.Address, error) {
	return _MasternodeRegistryV2.Contract.ValidationTarget(&_MasternodeRegistryV2.CallOpts, masternode)
}

// ValidationTarget is a free data retrieval call binding the contract method 0xc3db74d6.
//
// Solidity: function validationTarget(address masternode) constant returns(address target)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) ValidationTarget(masternode common.Address) (common.Address, error) {
	return _MasternodeRegistryV2.Contract.ValidationTarget(&_MasternodeRegistryV2.CallOpts, masternode)
}

// ValidationPeriods is a free data retrieval call binding the contract method 0x18a2ac19.
//
// Solidity: function validation_periods() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) ValidationPeriods(opts *bind.CallOpts) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "validation_periods")
	return *ret0, err
}

// ValidationPeriods is a free data retrieval call binding the contract method 0x18a2ac19.
//
// Solidity: function validation_periods() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) ValidationPeriods() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.ValidationPeriods(&_MasternodeRegistryV2.CallOpts)
}

// ValidationPeriods is a free data retrieval call binding the contract method 0x18a2ac19.
//
// Solidity: function validation_periods() constant returns(uint256)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) ValidationPeriods() (*big.Int, error) {
	return _MasternodeRegistryV2.Contract.ValidationPeriods(&_MasternodeRegistryV2.CallOpts)
}

// ValidatorList is a free data retrieval call binding the contract method 0x4e60b981.
//
// Solidity: function validator_list(uint256 ) constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Caller) ValidatorList(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) {
	var (
		ret0 = new(common.Address)
	)
	out := ret0
	err := _MasternodeRegistryV2.contract.Call(opts, out, "validator_list", arg0)
	return *ret0, err
}

// ValidatorList is a free data retrieval call binding the contract method 0x4e60b981.
//
// Solidity: function validator_list(uint256 ) constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) ValidatorList(arg0 *big.Int) (common.Address, error) {
	return _MasternodeRegistryV2.Contract.ValidatorList(&_MasternodeRegistryV2.CallOpts, arg0)
}

// ValidatorList is a free data retrieval call binding the contract method 0x4e60b981.
//
// Solidity: function validator_list(uint256 ) constant returns(address)
func (_MasternodeRegistryV2 *MasternodeRegistryV2CallerSession) ValidatorList(arg0 *big.Int) (common.Address, error) {
	return _MasternodeRegistryV2.Contract.ValidatorList(&_MasternodeRegistryV2.CallOpts, arg0)
}

// Announce is a paid mutator transaction binding the contract method 0xd70d5c30.
//
// Solidity: function announce(address masternode, uint32 ipv4address, bytes32[2] enode) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Transactor) Announce(opts *bind.TransactOpts, masternode common.Address, ipv4address uint32, enode [2][32]byte) (*types.Transaction, error) {
	return _MasternodeRegistryV2.contract.Transact(opts, "announce", masternode, ipv4address, enode)
}

// Announce is a paid mutator transaction binding the contract method 0xd70d5c30.
//
// Solidity: function announce(address masternode, uint32 ipv4address, bytes32[2] enode) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) Announce(masternode common.Address, ipv4address uint32, enode [2][32]byte) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.Announce(&_MasternodeRegistryV2.TransactOpts, masternode, ipv4address, enode)
}

// Announce is a paid mutator transaction binding the contract method 0xd70d5c30.
//
// Solidity: function announce(address masternode, uint32 ipv4address, bytes32[2] enode) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2TransactorSession) Announce(masternode common.Address, ipv4address uint32, enode [2][32]byte) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.Announce(&_MasternodeRegistryV2.TransactOpts, masternode, ipv4address, enode)
}

// Denounce is a paid mutator transaction binding the contract method 0xca0e551f.
//
// Solidity: function denounce(address masternode) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Transactor) Denounce(opts *bind.TransactOpts, masternode common.Address) (*types.Transaction, error) {
	return _MasternodeRegistryV2.contract.Transact(opts, "denounce", masternode)
}

// Denounce is a paid mutator transaction binding the contract method 0xca0e551f.
//
// Solidity: function denounce(address masternode) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) Denounce(masternode common.Address) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.Denounce(&_MasternodeRegistryV2.TransactOpts, masternode)
}

// Denounce is a paid mutator transaction binding the contract method 0xca0e551f.
//
// Solidity: function denounce(address masternode) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2TransactorSession) Denounce(masternode common.Address) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.Denounce(&_MasternodeRegistryV2.TransactOpts, masternode)
}

// Destroy is a paid mutator transaction binding the contract method 0x00f55d9d.
//
// Solidity: function destroy(address _newImpl) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Transactor) Destroy(opts *bind.TransactOpts, _newImpl common.Address) (*types.Transaction, error) {
	return _MasternodeRegistryV2.contract.Transact(opts, "destroy", _newImpl)
}

// Destroy is a paid mutator transaction binding the contract method 0x00f55d9d.
//
// Solidity: function destroy(address _newImpl) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) Destroy(_newImpl common.Address) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.Destroy(&_MasternodeRegistryV2.TransactOpts, _newImpl)
}

// Destroy is a paid mutator transaction binding the contract method 0x00f55d9d.
//
// Solidity: function destroy(address _newImpl) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2TransactorSession) Destroy(_newImpl common.Address) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.Destroy(&_MasternodeRegistryV2.TransactOpts, _newImpl)
}

// Heartbeat is a paid mutator transaction binding the contract method 0x91ceac96.
//
// Solidity: function heartbeat(uint256 block_number, bytes32 block_hash, uint256 sw_features) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Transactor) Heartbeat(opts *bind.TransactOpts, block_number *big.Int, block_hash [32]byte, sw_features *big.Int) (*types.Transaction, error) {
	return _MasternodeRegistryV2.contract.Transact(opts, "heartbeat", block_number, block_hash, sw_features)
}

// Heartbeat is a paid mutator transaction binding the contract method 0x91ceac96.
//
// Solidity: function heartbeat(uint256 block_number, bytes32 block_hash, uint256 sw_features) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) Heartbeat(block_number *big.Int, block_hash [32]byte, sw_features *big.Int) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.Heartbeat(&_MasternodeRegistryV2.TransactOpts, block_number, block_hash, sw_features)
}

// Heartbeat is a paid mutator transaction binding the contract method 0x91ceac96.
//
// Solidity: function heartbeat(uint256 block_number, bytes32 block_hash, uint256 sw_features) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2TransactorSession) Heartbeat(block_number *big.Int, block_hash [32]byte, sw_features *big.Int) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.Heartbeat(&_MasternodeRegistryV2.TransactOpts, block_number, block_hash, sw_features)
}

// Invalidate is a paid mutator transaction binding the contract method 0x37a3931f.
//
// Solidity: function invalidate(address masternode) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Transactor) Invalidate(opts *bind.TransactOpts, masternode common.Address) (*types.Transaction, error) {
	return _MasternodeRegistryV2.contract.Transact(opts, "invalidate", masternode)
}

// Invalidate is a paid mutator transaction binding the contract method 0x37a3931f.
//
// Solidity: function invalidate(address masternode) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) Invalidate(masternode common.Address) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.Invalidate(&_MasternodeRegistryV2.TransactOpts, masternode)
}

// Invalidate is a paid mutator transaction binding the contract method 0x37a3931f.
//
// Solidity: function invalidate(address masternode) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2TransactorSession) Invalidate(masternode common.Address) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.Invalidate(&_MasternodeRegistryV2.TransactOpts, masternode)
}

// Migrate is a paid mutator transaction binding the contract method 0xce5494bb.
//
// Solidity: function migrate(address _oldImpl) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Transactor) Migrate(opts *bind.TransactOpts, _oldImpl common.Address) (*types.Transaction, error) {
	return _MasternodeRegistryV2.contract.Transact(opts, "migrate", _oldImpl)
}

// Migrate is a paid mutator transaction binding the contract method 0xce5494bb.
//
// Solidity: function migrate(address _oldImpl) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) Migrate(_oldImpl common.Address) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.Migrate(&_MasternodeRegistryV2.TransactOpts, _oldImpl)
}

// Migrate is a paid mutator transaction binding the contract method 0xce5494bb.
//
// Solidity: function migrate(address _oldImpl) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2TransactorSession) Migrate(_oldImpl common.Address) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.Migrate(&_MasternodeRegistryV2.TransactOpts, _oldImpl)
}

// OnCollateralUpdate is a paid mutator transaction binding the contract method 0xcdc7d4ad.
//
// Solidity: function onCollateralUpdate(address owner) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Transactor) OnCollateralUpdate(opts *bind.TransactOpts, owner common.Address) (*types.Transaction, error) {
	return _MasternodeRegistryV2.contract.Transact(opts, "onCollateralUpdate", owner)
}

// OnCollateralUpdate is a paid mutator transaction binding the contract method 0xcdc7d4ad.
//
// Solidity: function onCollateralUpdate(address owner) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) OnCollateralUpdate(owner common.Address) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.OnCollateralUpdate(&_MasternodeRegistryV2.TransactOpts, owner)
}

// OnCollateralUpdate is a paid mutator transaction binding the contract method 0xcdc7d4ad.
//
// Solidity: function onCollateralUpdate(address owner) returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2TransactorSession) OnCollateralUpdate(owner common.Address) (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.OnCollateralUpdate(&_MasternodeRegistryV2.TransactOpts, owner)
}

// Reward is a paid mutator transaction binding the contract method 0x228cb733.
//
// Solidity: function reward() returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Transactor) Reward(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _MasternodeRegistryV2.contract.Transact(opts, "reward")
}

// Reward is a paid mutator transaction binding the contract method 0x228cb733.
//
// Solidity: function reward() returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2Session) Reward() (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.Reward(&_MasternodeRegistryV2.TransactOpts)
}

// Reward is a paid mutator transaction binding the contract method 0x228cb733.
//
// Solidity: function reward() returns()
func (_MasternodeRegistryV2 *MasternodeRegistryV2TransactorSession) Reward() (*types.Transaction, error) {
	return _MasternodeRegistryV2.Contract.Reward(&_MasternodeRegistryV2.TransactOpts)
}

// MasternodeRegistryV2AnnouncedIterator is returned from FilterAnnounced and is used to iterate over the raw logs and unpacked data for Announced events raised by the MasternodeRegistryV2 contract.
type MasternodeRegistryV2AnnouncedIterator struct {
	Event *MasternodeRegistryV2Announced // 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 *MasternodeRegistryV2AnnouncedIterator) 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(MasternodeRegistryV2Announced)
			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(MasternodeRegistryV2Announced)
		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 *MasternodeRegistryV2AnnouncedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *MasternodeRegistryV2AnnouncedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// MasternodeRegistryV2Announced represents a Announced event raised by the MasternodeRegistryV2 contract.
type MasternodeRegistryV2Announced struct {
	Masternode  common.Address
	Owner       common.Address
	Ipv4address uint32
	Enode       [2][32]byte
	Collateral  *big.Int
	Raw         types.Log // Blockchain specific contextual infos
}

// FilterAnnounced is a free log retrieval operation binding the contract event 0x935a2f33570c4840d82856d75f5d0aafca32c5e6b31db5627552304a7dc82c09.
//
// Solidity: event Announced(address indexed masternode, address indexed owner, uint32 ipv4address, bytes32[2] enode, uint256 collateral)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Filterer) FilterAnnounced(opts *bind.FilterOpts, masternode []common.Address, owner []common.Address) (*MasternodeRegistryV2AnnouncedIterator, error) {

	var masternodeRule []interface{}
	for _, masternodeItem := range masternode {
		masternodeRule = append(masternodeRule, masternodeItem)
	}
	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}

	logs, sub, err := _MasternodeRegistryV2.contract.FilterLogs(opts, "Announced", masternodeRule, ownerRule)
	if err != nil {
		return nil, err
	}
	return &MasternodeRegistryV2AnnouncedIterator{contract: _MasternodeRegistryV2.contract, event: "Announced", logs: logs, sub: sub}, nil
}

// WatchAnnounced is a free log subscription operation binding the contract event 0x935a2f33570c4840d82856d75f5d0aafca32c5e6b31db5627552304a7dc82c09.
//
// Solidity: event Announced(address indexed masternode, address indexed owner, uint32 ipv4address, bytes32[2] enode, uint256 collateral)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Filterer) WatchAnnounced(opts *bind.WatchOpts, sink chan<- *MasternodeRegistryV2Announced, masternode []common.Address, owner []common.Address) (event.Subscription, error) {

	var masternodeRule []interface{}
	for _, masternodeItem := range masternode {
		masternodeRule = append(masternodeRule, masternodeItem)
	}
	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}

	logs, sub, err := _MasternodeRegistryV2.contract.WatchLogs(opts, "Announced", masternodeRule, ownerRule)
	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(MasternodeRegistryV2Announced)
				if err := _MasternodeRegistryV2.contract.UnpackLog(event, "Announced", 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
}

// MasternodeRegistryV2DeactivatedIterator is returned from FilterDeactivated and is used to iterate over the raw logs and unpacked data for Deactivated events raised by the MasternodeRegistryV2 contract.
type MasternodeRegistryV2DeactivatedIterator struct {
	Event *MasternodeRegistryV2Deactivated // 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 *MasternodeRegistryV2DeactivatedIterator) 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(MasternodeRegistryV2Deactivated)
			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(MasternodeRegistryV2Deactivated)
		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 *MasternodeRegistryV2DeactivatedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *MasternodeRegistryV2DeactivatedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// MasternodeRegistryV2Deactivated represents a Deactivated event raised by the MasternodeRegistryV2 contract.
type MasternodeRegistryV2Deactivated struct {
	Masternode common.Address
	Raw        types.Log // Blockchain specific contextual infos
}

// FilterDeactivated is a free log retrieval operation binding the contract event 0x749cb6b4c510bc468cf6b9c2086d6f0a54d6b18e25d37bf3200e68eab0880c00.
//
// Solidity: event Deactivated(address indexed masternode)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Filterer) FilterDeactivated(opts *bind.FilterOpts, masternode []common.Address) (*MasternodeRegistryV2DeactivatedIterator, error) {

	var masternodeRule []interface{}
	for _, masternodeItem := range masternode {
		masternodeRule = append(masternodeRule, masternodeItem)
	}

	logs, sub, err := _MasternodeRegistryV2.contract.FilterLogs(opts, "Deactivated", masternodeRule)
	if err != nil {
		return nil, err
	}
	return &MasternodeRegistryV2DeactivatedIterator{contract: _MasternodeRegistryV2.contract, event: "Deactivated", logs: logs, sub: sub}, nil
}

// WatchDeactivated is a free log subscription operation binding the contract event 0x749cb6b4c510bc468cf6b9c2086d6f0a54d6b18e25d37bf3200e68eab0880c00.
//
// Solidity: event Deactivated(address indexed masternode)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Filterer) WatchDeactivated(opts *bind.WatchOpts, sink chan<- *MasternodeRegistryV2Deactivated, masternode []common.Address) (event.Subscription, error) {

	var masternodeRule []interface{}
	for _, masternodeItem := range masternode {
		masternodeRule = append(masternodeRule, masternodeItem)
	}

	logs, sub, err := _MasternodeRegistryV2.contract.WatchLogs(opts, "Deactivated", masternodeRule)
	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(MasternodeRegistryV2Deactivated)
				if err := _MasternodeRegistryV2.contract.UnpackLog(event, "Deactivated", 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
}

// MasternodeRegistryV2DenouncedIterator is returned from FilterDenounced and is used to iterate over the raw logs and unpacked data for Denounced events raised by the MasternodeRegistryV2 contract.
type MasternodeRegistryV2DenouncedIterator struct {
	Event *MasternodeRegistryV2Denounced // 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 *MasternodeRegistryV2DenouncedIterator) 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(MasternodeRegistryV2Denounced)
			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(MasternodeRegistryV2Denounced)
		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 *MasternodeRegistryV2DenouncedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *MasternodeRegistryV2DenouncedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// MasternodeRegistryV2Denounced represents a Denounced event raised by the MasternodeRegistryV2 contract.
type MasternodeRegistryV2Denounced struct {
	Masternode common.Address
	Owner      common.Address
	Raw        types.Log // Blockchain specific contextual infos
}

// FilterDenounced is a free log retrieval operation binding the contract event 0x55faf8e51ab442f8d8510476317b2e313144c3db60adc284affef64140fe8552.
//
// Solidity: event Denounced(address indexed masternode, address indexed owner)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Filterer) FilterDenounced(opts *bind.FilterOpts, masternode []common.Address, owner []common.Address) (*MasternodeRegistryV2DenouncedIterator, error) {

	var masternodeRule []interface{}
	for _, masternodeItem := range masternode {
		masternodeRule = append(masternodeRule, masternodeItem)
	}
	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}

	logs, sub, err := _MasternodeRegistryV2.contract.FilterLogs(opts, "Denounced", masternodeRule, ownerRule)
	if err != nil {
		return nil, err
	}
	return &MasternodeRegistryV2DenouncedIterator{contract: _MasternodeRegistryV2.contract, event: "Denounced", logs: logs, sub: sub}, nil
}

// WatchDenounced is a free log subscription operation binding the contract event 0x55faf8e51ab442f8d8510476317b2e313144c3db60adc284affef64140fe8552.
//
// Solidity: event Denounced(address indexed masternode, address indexed owner)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Filterer) WatchDenounced(opts *bind.WatchOpts, sink chan<- *MasternodeRegistryV2Denounced, masternode []common.Address, owner []common.Address) (event.Subscription, error) {

	var masternodeRule []interface{}
	for _, masternodeItem := range masternode {
		masternodeRule = append(masternodeRule, masternodeItem)
	}
	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}

	logs, sub, err := _MasternodeRegistryV2.contract.WatchLogs(opts, "Denounced", masternodeRule, ownerRule)
	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(MasternodeRegistryV2Denounced)
				if err := _MasternodeRegistryV2.contract.UnpackLog(event, "Denounced", 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
}

// MasternodeRegistryV2InvalidationIterator is returned from FilterInvalidation and is used to iterate over the raw logs and unpacked data for Invalidation events raised by the MasternodeRegistryV2 contract.
type MasternodeRegistryV2InvalidationIterator struct {
	Event *MasternodeRegistryV2Invalidation // 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 *MasternodeRegistryV2InvalidationIterator) 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(MasternodeRegistryV2Invalidation)
			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(MasternodeRegistryV2Invalidation)
		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 *MasternodeRegistryV2InvalidationIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *MasternodeRegistryV2InvalidationIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// MasternodeRegistryV2Invalidation represents a Invalidation event raised by the MasternodeRegistryV2 contract.
type MasternodeRegistryV2Invalidation struct {
	Masternode common.Address
	Validator  common.Address
	Raw        types.Log // Blockchain specific contextual infos
}

// FilterInvalidation is a free log retrieval operation binding the contract event 0x389d58799d7eca76264c556a007ffbc7c60caa4e3c8ea0564e791af3a1b9d331.
//
// Solidity: event Invalidation(address indexed masternode, address indexed validator)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Filterer) FilterInvalidation(opts *bind.FilterOpts, masternode []common.Address, validator []common.Address) (*MasternodeRegistryV2InvalidationIterator, error) {

	var masternodeRule []interface{}
	for _, masternodeItem := range masternode {
		masternodeRule = append(masternodeRule, masternodeItem)
	}
	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}

	logs, sub, err := _MasternodeRegistryV2.contract.FilterLogs(opts, "Invalidation", masternodeRule, validatorRule)
	if err != nil {
		return nil, err
	}
	return &MasternodeRegistryV2InvalidationIterator{contract: _MasternodeRegistryV2.contract, event: "Invalidation", logs: logs, sub: sub}, nil
}

// WatchInvalidation is a free log subscription operation binding the contract event 0x389d58799d7eca76264c556a007ffbc7c60caa4e3c8ea0564e791af3a1b9d331.
//
// Solidity: event Invalidation(address indexed masternode, address indexed validator)
func (_MasternodeRegistryV2 *MasternodeRegistryV2Filterer) WatchInvalidation(opts *bind.WatchOpts, sink chan<- *MasternodeRegistryV2Invalidation, masternode []common.Address, validator []common.Address) (event.Subscription, error) {

	var masternodeRule []interface{}
	for _, masternodeItem := range masternode {
		masternodeRule = append(masternodeRule, masternodeItem)
	}
	var validatorRule []interface{}
	for _, validatorItem := range validator {
		validatorRule = append(validatorRule, validatorItem)
	}

	logs, sub, err := _MasternodeRegistryV2.contract.WatchLogs(opts, "Invalidation", masternodeRule, validatorRule)
	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(MasternodeRegistryV2Invalidation)
				if err := _MasternodeRegistryV2.contract.UnpackLog(event, "Invalidation", 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
}
