// 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
)

// TreasuryV2ABI is the input ABI used to generate the binding from.
const TreasuryV2ABI = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_proxy\",\"type\":\"address\"},{\"internalType\":\"contractIGovernedProxy\",\"name\":\"_mnregistry_proxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_superblock_cycle\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"ref_uuid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"contractIBudgetProposal\",\"name\":\"proposal\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payout_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"BudgetProposal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Contribution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"ref_uuid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"contractIBudgetProposal\",\"name\":\"proposal\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Payout\",\"type\":\"event\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"active_proposals\",\"outputs\":[{\"internalType\":\"contractIBudgetProposal\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"contribute\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contractIGovernedContract\",\"name\":\"_newImpl\",\"type\":\"address\"}],\"name\":\"destroy\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"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\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"isSuperblock\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"listProposals\",\"outputs\":[{\"internalType\":\"contractIBudgetProposal[]\",\"name\":\"proposals\",\"type\":\"address[]\"}],\"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\":\"mnregistry_proxy\",\"outputs\":[{\"internalType\":\"contractIGovernedProxy\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"contractIBudgetProposal\",\"name\":\"proposal\",\"type\":\"address\"}],\"name\":\"proposal_uuid\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_ref_uuid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"propose\",\"outputs\":[{\"internalType\":\"contractIBudgetProposal\",\"name\":\"proposal\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"reward\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"superblock_cycle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ref_uuid\",\"type\":\"uint256\"}],\"name\":\"uuid_proposal\",\"outputs\":[{\"internalType\":\"contractIBudgetProposal\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"v1storage\",\"outputs\":[{\"internalType\":\"contractStorageTreasuryV1\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]"

// TreasuryV2Bin is the compiled bytecode used for deploying new contracts.
const TreasuryV2Bin = `608060405234801561001057600080fd5b5060405161329d38038061329d8339818101604052606081101561003357600080fd5b5080516020820151604092830151600080546001600160a01b0319166001600160a01b038516179055925191929091839083908390610071906100d4565b604051809103906000f08015801561008d573d6000803e3d6000fd5b50600280546001600160a01b03199081166001600160a01b0393841617909155600380549091169184169190911790556004819055806100c957fe5b5050505050506100e1565b61055c80612d4183390190565b612c51806100f06000396000f3fe608060405260043610620001095760003560e01c80635c0992151162000097578063d5f997891162000061578063d5f9978914620003ff578063d7bb99ba146200042d578063ec5568891462000437578063fe7334e8146200044f5762000109565b80635c0992151462000331578063b69ef8a8146200035f578063caef1d5a1462000377578063ce5494bb14620003bb5762000109565b806326c7eb1c11620000d957806326c7eb1c14620002185780632d059305146200028257806340376d5614620002c357806352782d8614620002ef5762000109565b8062f55d9d14620001705780630ef3474514620001b65780631c4b774b14620001e0578063228cb733146200020e575b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e6f7420737570706f7274656400000000000000000000000000000000000000604482015290519081900360640190fd5b3480156200017d57600080fd5b50620001b4600480360360208110156200019657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000467565b005b348015620001c357600080fd5b50620001ce62000512565b60408051918252519081900360200190f35b348015620001ed57600080fd5b50620001ce600480360360208110156200020657600080fd5b503562000518565b620001b46200053d565b3480156200022557600080fd5b506200023062000618565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156200026e57818101518382015260200162000254565b505050509050019250505060405180910390f35b3480156200028f57600080fd5b506200029a6200076a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6200029a60048036036060811015620002db57600080fd5b508035906020810135906040013562000786565b348015620002fc57600080fd5b506200031d600480360360208110156200031557600080fd5b503562000e31565b604080519115158252519081900360200190f35b3480156200033e57600080fd5b506200029a600480360360208110156200035757600080fd5b503562000e54565b3480156200036c57600080fd5b50620001ce62000efb565b3480156200038457600080fd5b50620001ce600480360360208110156200039d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000f00565b348015620003c857600080fd5b50620001b460048036036020811015620003e157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000f78565b3480156200040c57600080fd5b506200029a600480360360208110156200042557600080fd5b503562001008565b620001b462001033565b3480156200044457600080fd5b506200029a62001095565b3480156200045c57600080fd5b506200029a620010b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314620004ee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742070726f78790000000000000000000000000000000000000000000000604482015290519081900360640190fd5b620004f981620010cd565b8073ffffffffffffffffffffffffffffffffffffffff16ff5b60045481565b6000620005258262000e31565b156200053857506926f6a8f4e638030000005b919050565b60015415620005ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60018055620005bb620015a7565b6000620005c8826200115e565b905030318015801590620005dc5750600082115b156200060e576103e881831115620006005782826103e80281620005fc57fe5b0490505b6200060c8185620013f8565b505b5050600060015550565b604080516064808252610ca0820190925260609182919060208201610c80803883390190505090506000805b6064811015620006d8576000600582606481106200065e57fe5b015473ffffffffffffffffffffffffffffffffffffffff1690508015620006ce57808484806001019550815181106200069357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b5060010162000644565b508060405190808252806020026020018201604052801562000704578160200160208202803883390190505b50925060005b8181101562000763578281815181106200072057fe5b60200260200101518482815181106200073557fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001016200070a565b5050505b90565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b6000600154600014620007fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600180556103e86002850204681043561a88293000000134146200087f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f496e76616c696420666565000000000000000000000000000000000000000000604482015290519081900360640190fd5b62127500821015620008f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f546f6f20736d616c6c20706572696f6400000000000000000000000000000000604482015290519081900360640190fd5b62278d008211156200096557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f546f6f206c6172676520706572696f6400000000000000000000000000000000604482015290519081900360640190fd5b60025473ffffffffffffffffffffffffffffffffffffffff1660006200098a62001575565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16635c099215876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015620009f657600080fd5b505afa15801562000a0b573d6000803e3d6000fd5b505050506040513d602081101562000a2257600080fd5b505173ffffffffffffffffffffffffffffffffffffffff161462000aa757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5555494420696e20757365000000000000000000000000000000000000000000604482015290519081900360640190fd5b60005b606481101562000bd65760006005826064811062000ac457fe5b015473ffffffffffffffffffffffffffffffffffffffff16141562000bcd57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168287898860405162000b1890620015d8565b73ffffffffffffffffffffffffffffffffffffffff95861681529390941660208401526040808401929092526060830152608082019290925290519081900360a001906000f08015801562000b71573d6000803e3d6000fd5b509350836005826064811062000b8357fe5b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562000bd6565b60010162000aaa565b5073ffffffffffffffffffffffffffffffffffffffff831662000c5a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f546f6f206d616e79206163746976652070726f706f73616c7300000000000000604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff16632ded3227346040518263ffffffff1660e01b81526004016000604051808303818588803b15801562000ca357600080fd5b505af115801562000cb8573d6000803e3d6000fd5b5050604080517eb9f954000000000000000000000000000000000000000000000000000000008152600481018a905273ffffffffffffffffffffffffffffffffffffffff88811660248301529151918716945062b9f9549350604480820193506000929182900301818387803b15801562000d3257600080fd5b505af115801562000d47573d6000803e3d6000fd5b50505050847fa94befa3ce181974130fe36e854a282c70fb75e4decb42bfecdecbd6f88f0f5d8483898773ffffffffffffffffffffffffffffffffffffffff166329dcb0cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801562000db757600080fd5b505afa15801562000dcc573d6000803e3d6000fd5b505050506040513d602081101562000de357600080fd5b50516040805173ffffffffffffffffffffffffffffffffffffffff958616815293909416602084015282840191909152606082015290519081900360800190a2505060006001559392505050565b6000600454828162000e3f57fe5b0615801562000e4e5750600082115b92915050565b600254604080517f5c09921500000000000000000000000000000000000000000000000000000000815260048101849052905160009273ffffffffffffffffffffffffffffffffffffffff1691635c099215916024808301926020929190829003018186803b15801562000ec757600080fd5b505afa15801562000edc573d6000803e3d6000fd5b505050506040513d602081101562000ef357600080fd5b505192915050565b303190565b600254604080517fcaef1d5a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529151600093929092169163caef1d5a91602480820192602092909190829003018186803b15801562000ec757600080fd5b60005473ffffffffffffffffffffffffffffffffffffffff16331462000fff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742070726f78790000000000000000000000000000000000000000000000604482015290519081900360640190fd5b62001005815b50565b600581606481106200101657fe5b015473ffffffffffffffffffffffffffffffffffffffff16905081565b341562001093577f4d154d4aae216bed6d0926db77c00df2b57c6b5ba4eee05775de20facede3a7b6200106562001575565b6040805173ffffffffffffffffffffffffffffffffffffffff90921682523460208301528051918290030190a15b565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b600254604080517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152915191909216916313af403591602480830192600092919082900301818387803b1580156200114257600080fd5b505af115801562001157573d6000803e3d6000fd5b5050505050565b60008080808080805b6064811015620013ed57600581606481106200117f57fe5b015473ffffffffffffffffffffffffffffffffffffffff1695508515620013e4578573ffffffffffffffffffffffffffffffffffffffff16633b2a1b146040518163ffffffff1660e01b815260040160806040518083038186803b158015620011e757600080fd5b505afa158015620011fc573d6000803e3d6000fd5b505050506040513d60808110156200121357600080fd5b5080516020820151604083015160609093015191975095509093509150831562001345578115620012a75795810195858882606481106200125057fe5b602002015173ffffffffffffffffffffffffffffffffffffffff9091169052848882606481106200127d57fe5b60200201516020018181525050818882606481106200129857fe5b6020020151604001526200133f565b8573ffffffffffffffffffffffffffffffffffffffff166383197ef06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620012f057600080fd5b505af115801562001305573d6000803e3d6000fd5b50505050600581606481106200131757fe5b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b620013e4565b8215620013e4578573ffffffffffffffffffffffffffffffffffffffff1663e52253816040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200139557600080fd5b505af1158015620013aa573d6000803e3d6000fd5b5050505060058160648110620013bc57fe5b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b60010162001167565b505050505050919050565b6000805b60648110156200156f578281606481106200141357fe5b602002015151915073ffffffffffffffffffffffffffffffffffffffff821615620015665760006103e8858584606481106200144b57fe5b60200201516040015102816200145d57fe5b0490508382606481106200146d57fe5b6020020151604001518111156200148057fe5b8273ffffffffffffffffffffffffffffffffffffffff166310cac8a5826040518263ffffffff1660e01b81526004016000604051808303818588803b158015620014c957600080fd5b505af1158015620014de573d6000803e3d6000fd5b5050505050838260648110620014f057fe5b6020020151602001517f5f7341a552ae2d452b071917104c05fbac3663936a69be768a05c40605056e7d8483604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a2505b600101620013fc565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314156200159f57503262000767565b503362000767565b60405180610c8001604052806064905b620015c1620015e6565b815260200190600190039081620015b75790505090565b6115ff806200161e83390190565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152509056fe60806040523480156200001157600080fd5b50604051620015ff380380620015ff833981810160405260a08110156200003757600080fd5b5080516020808301516040808501516060860151608090960151600180546001600160a01b0319908116331790915543600255600080546001600160a01b03808a16918416821783554285016003556004805491891691909416178355600b805460ff1916604290811790915586517f8abf60770000000000000000000000000000000000000000000000000000000081529651999a9799959894968b96600a96899693958d95909485949193638abf60779383830193909290829003018186803b1580156200010657600080fd5b505afa1580156200011b573d6000803e3d6000fd5b505050506040513d60208110156200013257600080fd5b5051604080517f06661abd00000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216916306661abd9160048082019260a092909190829003018186803b1580156200019057600080fd5b505afa158015620001a5573d6000803e3d6000fd5b505050506040513d60a0811015620001bc57600080fd5b5060408101516080909101519092509050806200023a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f7420726561647920666f722070726f706f73616c73000000000000000000604482015290519081900360640190fd5b60028104821015620002ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41637469766520776569676874203c20312f3220657665722077656967687400604482015290519081900360640190fd5b600160ff871610156200032157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f51756f72756d206d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b606460ff871611156200039557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f51756f72756d206d617800000000000000000000000000000000000000000000604482015290519081900360640190fd5b6008829055606460ff8716830204600955603360ff871610620003be57600954600a55620003c9565b60646033830204600a555b6000600954116200043b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f51756f72756d2077656967687400000000000000000000000000000000000000604482015290519081900360640190fd5b6000600a5411620004ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f46696e6973682077656967687400000000000000000000000000000000000000604482015290519081900360640190fd5b505050600f96909655505050600e919091555050505061112c80620004d36000396000f3fe6080604052600436106101b75760003560e01c80637639b1eb116100ec578063aec2ccae1161008a578063c40a70f811610064578063c40a70f8146104df578063c86e6c15146104f4578063e522538114610509578063fe7334e81461051e576101b7565b8063aec2ccae14610475578063bd4c1f39146104b5578063c2472ef8146104ca576101b7565b806391840a6b116100c657806391840a6b146103f6578063990a663b1461040b5780639d5e6c9d14610420578063adfaa72e14610435576101b7565b80637639b1eb146103b75780637b352962146103cc57806383197ef0146103e1576101b7565b80634cafdfb21161015957806356c2a0a11161013357806356c2a0a1146103245780635c31f2201461033957806360f96a8f1461036457806375df0f99146103a2576101b7565b80634cafdfb2146102d1578063504881df146102e65780635051a5ec146102fb576101b7565b80632ded3227116101955780632ded3227146102645780633b2a1b141461026c5780633ccfd60b146102a75780633d1db3e9146102bc576101b7565b80630b62be451461021e57806310cac8a51461024557806329dcb0cf1461024f575b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f7420616c6c6f776564000000000000000000000000000000000000000000604482015290519081900360640190fd5b34801561022a57600080fd5b50610233610533565b60408051918252519081900360200190f35b61024d610539565b005b34801561025b57600080fd5b50610233610550565b61024d610556565b34801561027857600080fd5b506102816105e6565b604080519485529215156020850152901515838301526060830152519081900360800190f35b3480156102b357600080fd5b5061024d61061e565b3480156102c857600080fd5b506102336106db565b3480156102dd57600080fd5b506102336106e1565b3480156102f257600080fd5b506102336106e7565b34801561030757600080fd5b506103106106ed565b604080519115158252519081900360200190f35b34801561033057600080fd5b5061024d610746565b34801561034557600080fd5b5061034e610759565b6040805160ff9092168252519081900360200190f35b34801561037057600080fd5b50610379610762565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156103ae57600080fd5b5061023361077e565b3480156103c357600080fd5b50610233610784565b3480156103d857600080fd5b5061031061078a565b3480156103ed57600080fd5b5061024d6107b4565b34801561040257600080fd5b50610233610855565b34801561041757600080fd5b5061023361085b565b34801561042c57600080fd5b50610379610861565b34801561044157600080fd5b506103106004803603602081101561045857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661087d565b34801561048157600080fd5b506103106004803603602081101561049857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a17565b3480156104c157600080fd5b50610233610a2c565b3480156104d657600080fd5b5061024d610a32565b3480156104eb57600080fd5b50610379610a45565b34801561050057600080fd5b50610233610a61565b34801561051557600080fd5b5061024d610a67565b34801561052a57600080fd5b50610379610dbc565b60025481565b600d8054340190819055600e54101561054e57fe5b565b60035481565b60015473ffffffffffffffffffffffffffffffffffffffff1633146105dc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4f6e6c7920706172656e74000000000000000000000000000000000000000000604482015290519081900360640190fd5b6005805434019055565b600f54600080806105f56106ed565b92506105ff61078a565b9150600e54600d54111561060f57fe5b600d54600e5403905090919293565b6106266106ed565b61069157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f742061636365707465640000000000000000000000000000000000000000604482015290519081900360640190fd5b60045460405173ffffffffffffffffffffffffffffffffffffffff90911690303180156108fc02916000818181858888f193505050501580156106d8573d6000803e3d6000fd5b50565b600a5481565b600e5481565b600d5481565b6000600a546006541061070257506001610743565b61070a61078a565b61071657506000610743565b60095460075460065401101561072e57506000610743565b600b5460095460649160ff1602046006541190505b90565b61074e610dd8565b600780549091019055565b600b5460ff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60065481565b6000426003541115806107a15750600a5460065410155b806107af5750600a54600754115b905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331461083a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4f6e6c7920706172656e74000000000000000000000000000000000000000000604482015290519081900360640190fd5b60045473ffffffffffffffffffffffffffffffffffffffff16ff5b60085481565b60055481565b60045473ffffffffffffffffffffffffffffffffffffffff1690565b60008054604080517f8abf60770000000000000000000000000000000000000000000000000000000081529051839273ffffffffffffffffffffffffffffffffffffffff1691638abf6077916004808301926020929190829003018186803b1580156108e857600080fd5b505afa1580156108fc573d6000803e3d6000fd5b505050506040513d602081101561091257600080fd5b5051604080517fb83e160500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015291519293506000929184169163b83e16059160248082019260e092909190829003018186803b15801561098a57600080fd5b505afa15801561099e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060e08110156109c357600080fd5b5060a00151600354909150421080156109dd575060025481105b8015610a0f575073ffffffffffffffffffffffffffffffffffffffff84166000908152600c602052604090205460ff16155b949350505050565b600c6020526000908152604090205460ff1681565b600f5481565b610a3a610dd8565b600680549091019055565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b610a6f61078a565b8015610a805750610a7e6106ed565b155b610aeb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7420636f6c6c65637461626c650000000000000000000000000000000000604482015290519081900360640190fd5b60015473ffffffffffffffffffffffffffffffffffffffff163314610b7157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4f6e6c7920706172656e74000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638abf60776040518163ffffffff1660e01b815260040160206040518083038186803b158015610bda57600080fd5b505afa158015610bee573d6000803e3d6000fd5b505050506040513d6020811015610c0457600080fd5b5051604080517fa2731784000000000000000000000000000000000000000000000000000000008152905191925060009173ffffffffffffffffffffffffffffffffffffffff84169163a2731784916004808301926020929190829003018186803b158015610c7257600080fd5b505afa158015610c86573d6000803e3d6000fd5b505050506040513d6020811015610c9c57600080fd5b5051604080517f8abf6077000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921691638abf607791600480820192602092909190829003018186803b158015610d0657600080fd5b505afa158015610d1a573d6000803e3d6000fd5b505050506040513d6020811015610d3057600080fd5b5051604080517fd7bb99ba000000000000000000000000000000000000000000000000000000008152905191925073ffffffffffffffffffffffffffffffffffffffff83169163d7bb99ba91303191600480830192600092919082900301818588803b158015610d9f57600080fd5b505af1158015610db3573d6000803e3d6000fd5b50505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60004260035411610e4a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f46696e6973686564000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638abf60776040518163ffffffff1660e01b815260040160206040518083038186803b158015610eb357600080fd5b505afa158015610ec7573d6000803e3d6000fd5b505050506040513d6020811015610edd57600080fd5b5051604080517fb83e160500000000000000000000000000000000000000000000000000000000815233600482018190529151929350909160009173ffffffffffffffffffffffffffffffffffffffff85169163b83e16059160248082019260e092909190829003018186803b158015610f5657600080fd5b505afa158015610f6a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060e0811015610f8f57600080fd5b50608081015160a0909101516002549195509150811061101057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f7420656c696769626c650000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c602052604090205460ff16156110a557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f416c726561647920766f74656400000000000000000000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055509056fea265627a7a72315820e5e97d2670fa57167c7905e4e899751e87aa3624c34289ac3f5005da752f470164736f6c63430005100032a265627a7a72315820507295a13fdce8c7176f727f61fe8ee5bbe6fbda5506096b41a6750897d3838a64736f6c634300051000326080604052600080546001600160a01b03191633179055610537806100256000396000f3fe608060405234801561001057600080fd5b50600436106100715760003560e01c806341c0e1b51161005057806341c0e1b5146101175780635c0992151461011f578063caef1d5a1461016557610071565b8062b9f9541461007657806313af4035146100b15780633c97f294146100e4575b600080fd5b6100af6004803603604081101561008c57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff166101aa565b005b6100af600480360360208110156100c757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661028e565b6100af600480360360208110156100fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661035b565b6100af61043f565b61013c6004803603602081101561013557600080fd5b50356104c8565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101986004803603602081101561017b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104f0565b60408051918252519081900360200190f35b60005473ffffffffffffffffffffffffffffffffffffffff16331461023057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e6f74206f776e65722100000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000828152600160209081526040808320805473ffffffffffffffffffffffffffffffffffffffff9095167fffffffffffffffffffffffff000000000000000000000000000000000000000090951685179055928252600290522055565b60005473ffffffffffffffffffffffffffffffffffffffff16331461031457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e6f74206f776e65722100000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e6f74206f776e65722100000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260026020908152604080832080549084905583526001909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e6f74206f776e65722100000000000000000000000000000000000000000000604482015290519081900360640190fd5b33ff5b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6002602052600090815260409020548156fea265627a7a723158209132ef2adc675d140660df84591611984a1559600c22d153262f85df18b5669964736f6c63430005100032`

// DeployTreasuryV2 deploys a new Ethereum contract, binding an instance of TreasuryV2 to it.
func DeployTreasuryV2(auth *bind.TransactOpts, backend bind.ContractBackend, _proxy common.Address, _mnregistry_proxy common.Address, _superblock_cycle *big.Int) (common.Address, *types.Transaction, *TreasuryV2, error) {
	parsed, err := abi.JSON(strings.NewReader(TreasuryV2ABI))
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(TreasuryV2Bin), backend, _proxy, _mnregistry_proxy, _superblock_cycle)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &TreasuryV2{TreasuryV2Caller: TreasuryV2Caller{contract: contract}, TreasuryV2Transactor: TreasuryV2Transactor{contract: contract}, TreasuryV2Filterer: TreasuryV2Filterer{contract: contract}}, nil
}

// TreasuryV2Bin is the compiled bytecode of contract after deployment.
const TreasuryV2RuntimeBin = `608060405260043610620001095760003560e01c80635c0992151162000097578063d5f997891162000061578063d5f9978914620003ff578063d7bb99ba146200042d578063ec5568891462000437578063fe7334e8146200044f5762000109565b80635c0992151462000331578063b69ef8a8146200035f578063caef1d5a1462000377578063ce5494bb14620003bb5762000109565b806326c7eb1c11620000d957806326c7eb1c14620002185780632d059305146200028257806340376d5614620002c357806352782d8614620002ef5762000109565b8062f55d9d14620001705780630ef3474514620001b65780631c4b774b14620001e0578063228cb733146200020e575b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e6f7420737570706f7274656400000000000000000000000000000000000000604482015290519081900360640190fd5b3480156200017d57600080fd5b50620001b4600480360360208110156200019657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000467565b005b348015620001c357600080fd5b50620001ce62000512565b60408051918252519081900360200190f35b348015620001ed57600080fd5b50620001ce600480360360208110156200020657600080fd5b503562000518565b620001b46200053d565b3480156200022557600080fd5b506200023062000618565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156200026e57818101518382015260200162000254565b505050509050019250505060405180910390f35b3480156200028f57600080fd5b506200029a6200076a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6200029a60048036036060811015620002db57600080fd5b508035906020810135906040013562000786565b348015620002fc57600080fd5b506200031d600480360360208110156200031557600080fd5b503562000e31565b604080519115158252519081900360200190f35b3480156200033e57600080fd5b506200029a600480360360208110156200035757600080fd5b503562000e54565b3480156200036c57600080fd5b50620001ce62000efb565b3480156200038457600080fd5b50620001ce600480360360208110156200039d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000f00565b348015620003c857600080fd5b50620001b460048036036020811015620003e157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000f78565b3480156200040c57600080fd5b506200029a600480360360208110156200042557600080fd5b503562001008565b620001b462001033565b3480156200044457600080fd5b506200029a62001095565b3480156200045c57600080fd5b506200029a620010b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314620004ee57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742070726f78790000000000000000000000000000000000000000000000604482015290519081900360640190fd5b620004f981620010cd565b8073ffffffffffffffffffffffffffffffffffffffff16ff5b60045481565b6000620005258262000e31565b156200053857506926f6a8f4e638030000005b919050565b60015415620005ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60018055620005bb620015a7565b6000620005c8826200115e565b905030318015801590620005dc5750600082115b156200060e576103e881831115620006005782826103e80281620005fc57fe5b0490505b6200060c8185620013f8565b505b5050600060015550565b604080516064808252610ca0820190925260609182919060208201610c80803883390190505090506000805b6064811015620006d8576000600582606481106200065e57fe5b015473ffffffffffffffffffffffffffffffffffffffff1690508015620006ce57808484806001019550815181106200069357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b5060010162000644565b508060405190808252806020026020018201604052801562000704578160200160208202803883390190505b50925060005b8181101562000763578281815181106200072057fe5b60200260200101518482815181106200073557fe5b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001016200070a565b5050505b90565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b6000600154600014620007fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f5265656e74727900000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600180556103e86002850204681043561a88293000000134146200087f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f496e76616c696420666565000000000000000000000000000000000000000000604482015290519081900360640190fd5b62127500821015620008f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f546f6f20736d616c6c20706572696f6400000000000000000000000000000000604482015290519081900360640190fd5b62278d008211156200096557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f546f6f206c6172676520706572696f6400000000000000000000000000000000604482015290519081900360640190fd5b60025473ffffffffffffffffffffffffffffffffffffffff1660006200098a62001575565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16635c099215876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015620009f657600080fd5b505afa15801562000a0b573d6000803e3d6000fd5b505050506040513d602081101562000a2257600080fd5b505173ffffffffffffffffffffffffffffffffffffffff161462000aa757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5555494420696e20757365000000000000000000000000000000000000000000604482015290519081900360640190fd5b60005b606481101562000bd65760006005826064811062000ac457fe5b015473ffffffffffffffffffffffffffffffffffffffff16141562000bcd57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168287898860405162000b1890620015d8565b73ffffffffffffffffffffffffffffffffffffffff95861681529390941660208401526040808401929092526060830152608082019290925290519081900360a001906000f08015801562000b71573d6000803e3d6000fd5b509350836005826064811062000b8357fe5b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562000bd6565b60010162000aaa565b5073ffffffffffffffffffffffffffffffffffffffff831662000c5a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f546f6f206d616e79206163746976652070726f706f73616c7300000000000000604482015290519081900360640190fd5b8273ffffffffffffffffffffffffffffffffffffffff16632ded3227346040518263ffffffff1660e01b81526004016000604051808303818588803b15801562000ca357600080fd5b505af115801562000cb8573d6000803e3d6000fd5b5050604080517eb9f954000000000000000000000000000000000000000000000000000000008152600481018a905273ffffffffffffffffffffffffffffffffffffffff88811660248301529151918716945062b9f9549350604480820193506000929182900301818387803b15801562000d3257600080fd5b505af115801562000d47573d6000803e3d6000fd5b50505050847fa94befa3ce181974130fe36e854a282c70fb75e4decb42bfecdecbd6f88f0f5d8483898773ffffffffffffffffffffffffffffffffffffffff166329dcb0cf6040518163ffffffff1660e01b815260040160206040518083038186803b15801562000db757600080fd5b505afa15801562000dcc573d6000803e3d6000fd5b505050506040513d602081101562000de357600080fd5b50516040805173ffffffffffffffffffffffffffffffffffffffff958616815293909416602084015282840191909152606082015290519081900360800190a2505060006001559392505050565b6000600454828162000e3f57fe5b0615801562000e4e5750600082115b92915050565b600254604080517f5c09921500000000000000000000000000000000000000000000000000000000815260048101849052905160009273ffffffffffffffffffffffffffffffffffffffff1691635c099215916024808301926020929190829003018186803b15801562000ec757600080fd5b505afa15801562000edc573d6000803e3d6000fd5b505050506040513d602081101562000ef357600080fd5b505192915050565b303190565b600254604080517fcaef1d5a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529151600093929092169163caef1d5a91602480820192602092909190829003018186803b15801562000ec757600080fd5b60005473ffffffffffffffffffffffffffffffffffffffff16331462000fff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742070726f78790000000000000000000000000000000000000000000000604482015290519081900360640190fd5b62001005815b50565b600581606481106200101657fe5b015473ffffffffffffffffffffffffffffffffffffffff16905081565b341562001093577f4d154d4aae216bed6d0926db77c00df2b57c6b5ba4eee05775de20facede3a7b6200106562001575565b6040805173ffffffffffffffffffffffffffffffffffffffff90921682523460208301528051918290030190a15b565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b600254604080517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152915191909216916313af403591602480830192600092919082900301818387803b1580156200114257600080fd5b505af115801562001157573d6000803e3d6000fd5b5050505050565b60008080808080805b6064811015620013ed57600581606481106200117f57fe5b015473ffffffffffffffffffffffffffffffffffffffff1695508515620013e4578573ffffffffffffffffffffffffffffffffffffffff16633b2a1b146040518163ffffffff1660e01b815260040160806040518083038186803b158015620011e757600080fd5b505afa158015620011fc573d6000803e3d6000fd5b505050506040513d60808110156200121357600080fd5b5080516020820151604083015160609093015191975095509093509150831562001345578115620012a75795810195858882606481106200125057fe5b602002015173ffffffffffffffffffffffffffffffffffffffff9091169052848882606481106200127d57fe5b60200201516020018181525050818882606481106200129857fe5b6020020151604001526200133f565b8573ffffffffffffffffffffffffffffffffffffffff166383197ef06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620012f057600080fd5b505af115801562001305573d6000803e3d6000fd5b50505050600581606481106200131757fe5b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b620013e4565b8215620013e4578573ffffffffffffffffffffffffffffffffffffffff1663e52253816040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200139557600080fd5b505af1158015620013aa573d6000803e3d6000fd5b5050505060058160648110620013bc57fe5b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b60010162001167565b505050505050919050565b6000805b60648110156200156f578281606481106200141357fe5b602002015151915073ffffffffffffffffffffffffffffffffffffffff821615620015665760006103e8858584606481106200144b57fe5b60200201516040015102816200145d57fe5b0490508382606481106200146d57fe5b6020020151604001518111156200148057fe5b8273ffffffffffffffffffffffffffffffffffffffff166310cac8a5826040518263ffffffff1660e01b81526004016000604051808303818588803b158015620014c957600080fd5b505af1158015620014de573d6000803e3d6000fd5b5050505050838260648110620014f057fe5b6020020151602001517f5f7341a552ae2d452b071917104c05fbac3663936a69be768a05c40605056e7d8483604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a2505b600101620013fc565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314156200159f57503262000767565b503362000767565b60405180610c8001604052806064905b620015c1620015e6565b815260200190600190039081620015b75790505090565b6115ff806200161e83390190565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152509056fe60806040523480156200001157600080fd5b50604051620015ff380380620015ff833981810160405260a08110156200003757600080fd5b5080516020808301516040808501516060860151608090960151600180546001600160a01b0319908116331790915543600255600080546001600160a01b03808a16918416821783554285016003556004805491891691909416178355600b805460ff1916604290811790915586517f8abf60770000000000000000000000000000000000000000000000000000000081529651999a9799959894968b96600a96899693958d95909485949193638abf60779383830193909290829003018186803b1580156200010657600080fd5b505afa1580156200011b573d6000803e3d6000fd5b505050506040513d60208110156200013257600080fd5b5051604080517f06661abd00000000000000000000000000000000000000000000000000000000815290516001600160a01b03909216916306661abd9160048082019260a092909190829003018186803b1580156200019057600080fd5b505afa158015620001a5573d6000803e3d6000fd5b505050506040513d60a0811015620001bc57600080fd5b5060408101516080909101519092509050806200023a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f7420726561647920666f722070726f706f73616c73000000000000000000604482015290519081900360640190fd5b60028104821015620002ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41637469766520776569676874203c20312f3220657665722077656967687400604482015290519081900360640190fd5b600160ff871610156200032157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f51756f72756d206d696e00000000000000000000000000000000000000000000604482015290519081900360640190fd5b606460ff871611156200039557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f51756f72756d206d617800000000000000000000000000000000000000000000604482015290519081900360640190fd5b6008829055606460ff8716830204600955603360ff871610620003be57600954600a55620003c9565b60646033830204600a555b6000600954116200043b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f51756f72756d2077656967687400000000000000000000000000000000000000604482015290519081900360640190fd5b6000600a5411620004ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f46696e6973682077656967687400000000000000000000000000000000000000604482015290519081900360640190fd5b505050600f96909655505050600e919091555050505061112c80620004d36000396000f3fe6080604052600436106101b75760003560e01c80637639b1eb116100ec578063aec2ccae1161008a578063c40a70f811610064578063c40a70f8146104df578063c86e6c15146104f4578063e522538114610509578063fe7334e81461051e576101b7565b8063aec2ccae14610475578063bd4c1f39146104b5578063c2472ef8146104ca576101b7565b806391840a6b116100c657806391840a6b146103f6578063990a663b1461040b5780639d5e6c9d14610420578063adfaa72e14610435576101b7565b80637639b1eb146103b75780637b352962146103cc57806383197ef0146103e1576101b7565b80634cafdfb21161015957806356c2a0a11161013357806356c2a0a1146103245780635c31f2201461033957806360f96a8f1461036457806375df0f99146103a2576101b7565b80634cafdfb2146102d1578063504881df146102e65780635051a5ec146102fb576101b7565b80632ded3227116101955780632ded3227146102645780633b2a1b141461026c5780633ccfd60b146102a75780633d1db3e9146102bc576101b7565b80630b62be451461021e57806310cac8a51461024557806329dcb0cf1461024f575b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f7420616c6c6f776564000000000000000000000000000000000000000000604482015290519081900360640190fd5b34801561022a57600080fd5b50610233610533565b60408051918252519081900360200190f35b61024d610539565b005b34801561025b57600080fd5b50610233610550565b61024d610556565b34801561027857600080fd5b506102816105e6565b604080519485529215156020850152901515838301526060830152519081900360800190f35b3480156102b357600080fd5b5061024d61061e565b3480156102c857600080fd5b506102336106db565b3480156102dd57600080fd5b506102336106e1565b3480156102f257600080fd5b506102336106e7565b34801561030757600080fd5b506103106106ed565b604080519115158252519081900360200190f35b34801561033057600080fd5b5061024d610746565b34801561034557600080fd5b5061034e610759565b6040805160ff9092168252519081900360200190f35b34801561037057600080fd5b50610379610762565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156103ae57600080fd5b5061023361077e565b3480156103c357600080fd5b50610233610784565b3480156103d857600080fd5b5061031061078a565b3480156103ed57600080fd5b5061024d6107b4565b34801561040257600080fd5b50610233610855565b34801561041757600080fd5b5061023361085b565b34801561042c57600080fd5b50610379610861565b34801561044157600080fd5b506103106004803603602081101561045857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661087d565b34801561048157600080fd5b506103106004803603602081101561049857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a17565b3480156104c157600080fd5b50610233610a2c565b3480156104d657600080fd5b5061024d610a32565b3480156104eb57600080fd5b50610379610a45565b34801561050057600080fd5b50610233610a61565b34801561051557600080fd5b5061024d610a67565b34801561052a57600080fd5b50610379610dbc565b60025481565b600d8054340190819055600e54101561054e57fe5b565b60035481565b60015473ffffffffffffffffffffffffffffffffffffffff1633146105dc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4f6e6c7920706172656e74000000000000000000000000000000000000000000604482015290519081900360640190fd5b6005805434019055565b600f54600080806105f56106ed565b92506105ff61078a565b9150600e54600d54111561060f57fe5b600d54600e5403905090919293565b6106266106ed565b61069157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f742061636365707465640000000000000000000000000000000000000000604482015290519081900360640190fd5b60045460405173ffffffffffffffffffffffffffffffffffffffff90911690303180156108fc02916000818181858888f193505050501580156106d8573d6000803e3d6000fd5b50565b600a5481565b600e5481565b600d5481565b6000600a546006541061070257506001610743565b61070a61078a565b61071657506000610743565b60095460075460065401101561072e57506000610743565b600b5460095460649160ff1602046006541190505b90565b61074e610dd8565b600780549091019055565b600b5460ff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b60065481565b6000426003541115806107a15750600a5460065410155b806107af5750600a54600754115b905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331461083a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4f6e6c7920706172656e74000000000000000000000000000000000000000000604482015290519081900360640190fd5b60045473ffffffffffffffffffffffffffffffffffffffff16ff5b60085481565b60055481565b60045473ffffffffffffffffffffffffffffffffffffffff1690565b60008054604080517f8abf60770000000000000000000000000000000000000000000000000000000081529051839273ffffffffffffffffffffffffffffffffffffffff1691638abf6077916004808301926020929190829003018186803b1580156108e857600080fd5b505afa1580156108fc573d6000803e3d6000fd5b505050506040513d602081101561091257600080fd5b5051604080517fb83e160500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015291519293506000929184169163b83e16059160248082019260e092909190829003018186803b15801561098a57600080fd5b505afa15801561099e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060e08110156109c357600080fd5b5060a00151600354909150421080156109dd575060025481105b8015610a0f575073ffffffffffffffffffffffffffffffffffffffff84166000908152600c602052604090205460ff16155b949350505050565b600c6020526000908152604090205460ff1681565b600f5481565b610a3a610dd8565b600680549091019055565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b610a6f61078a565b8015610a805750610a7e6106ed565b155b610aeb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7420636f6c6c65637461626c650000000000000000000000000000000000604482015290519081900360640190fd5b60015473ffffffffffffffffffffffffffffffffffffffff163314610b7157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4f6e6c7920706172656e74000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638abf60776040518163ffffffff1660e01b815260040160206040518083038186803b158015610bda57600080fd5b505afa158015610bee573d6000803e3d6000fd5b505050506040513d6020811015610c0457600080fd5b5051604080517fa2731784000000000000000000000000000000000000000000000000000000008152905191925060009173ffffffffffffffffffffffffffffffffffffffff84169163a2731784916004808301926020929190829003018186803b158015610c7257600080fd5b505afa158015610c86573d6000803e3d6000fd5b505050506040513d6020811015610c9c57600080fd5b5051604080517f8abf6077000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921691638abf607791600480820192602092909190829003018186803b158015610d0657600080fd5b505afa158015610d1a573d6000803e3d6000fd5b505050506040513d6020811015610d3057600080fd5b5051604080517fd7bb99ba000000000000000000000000000000000000000000000000000000008152905191925073ffffffffffffffffffffffffffffffffffffffff83169163d7bb99ba91303191600480830192600092919082900301818588803b158015610d9f57600080fd5b505af1158015610db3573d6000803e3d6000fd5b50505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60004260035411610e4a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f46696e6973686564000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638abf60776040518163ffffffff1660e01b815260040160206040518083038186803b158015610eb357600080fd5b505afa158015610ec7573d6000803e3d6000fd5b505050506040513d6020811015610edd57600080fd5b5051604080517fb83e160500000000000000000000000000000000000000000000000000000000815233600482018190529151929350909160009173ffffffffffffffffffffffffffffffffffffffff85169163b83e16059160248082019260e092909190829003018186803b158015610f5657600080fd5b505afa158015610f6a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060e0811015610f8f57600080fd5b50608081015160a0909101516002549195509150811061101057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f7420656c696769626c650000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c602052604090205460ff16156110a557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f416c726561647920766f74656400000000000000000000000000000000000000604482015290519081900360640190fd5b5073ffffffffffffffffffffffffffffffffffffffff166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055509056fea265627a7a72315820e5e97d2670fa57167c7905e4e899751e87aa3624c34289ac3f5005da752f470164736f6c63430005100032a265627a7a72315820507295a13fdce8c7176f727f61fe8ee5bbe6fbda5506096b41a6750897d3838a64736f6c63430005100032`

// TreasuryV2 is an auto generated Go binding around an Ethereum contract.
type TreasuryV2 struct {
	TreasuryV2Caller     // Read-only binding to the contract
	TreasuryV2Transactor // Write-only binding to the contract
	TreasuryV2Filterer   // Log filterer for contract events
}

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

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

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

// TreasuryV2Session is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type TreasuryV2Session struct {
	Contract     *TreasuryV2       // 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
}

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

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

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

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

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

// NewTreasuryV2 creates a new instance of TreasuryV2, bound to a specific deployed contract.
func NewTreasuryV2(address common.Address, backend bind.ContractBackend) (*TreasuryV2, error) {
	contract, err := bindTreasuryV2(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &TreasuryV2{TreasuryV2Caller: TreasuryV2Caller{contract: contract}, TreasuryV2Transactor: TreasuryV2Transactor{contract: contract}, TreasuryV2Filterer: TreasuryV2Filterer{contract: contract}}, nil
}

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

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

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

// bindTreasuryV2 binds a generic wrapper to an already deployed contract.
func bindTreasuryV2(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(TreasuryV2ABI))
	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 (_TreasuryV2 *TreasuryV2Raw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error {
	return _TreasuryV2.Contract.TreasuryV2Caller.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 (_TreasuryV2 *TreasuryV2Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _TreasuryV2.Contract.TreasuryV2Transactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_TreasuryV2 *TreasuryV2Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _TreasuryV2.Contract.TreasuryV2Transactor.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 (_TreasuryV2 *TreasuryV2CallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error {
	return _TreasuryV2.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 (_TreasuryV2 *TreasuryV2TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _TreasuryV2.Contract.contract.Transfer(opts)
}

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

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

// ActiveProposals is a free data retrieval call binding the contract method 0xd5f99789.
//
// Solidity: function active_proposals(uint256 ) constant returns(address)
func (_TreasuryV2 *TreasuryV2Session) ActiveProposals(arg0 *big.Int) (common.Address, error) {
	return _TreasuryV2.Contract.ActiveProposals(&_TreasuryV2.CallOpts, arg0)
}

// ActiveProposals is a free data retrieval call binding the contract method 0xd5f99789.
//
// Solidity: function active_proposals(uint256 ) constant returns(address)
func (_TreasuryV2 *TreasuryV2CallerSession) ActiveProposals(arg0 *big.Int) (common.Address, error) {
	return _TreasuryV2.Contract.ActiveProposals(&_TreasuryV2.CallOpts, arg0)
}

// Balance is a free data retrieval call binding the contract method 0xb69ef8a8.
//
// Solidity: function balance() constant returns(uint256 amount)
func (_TreasuryV2 *TreasuryV2Caller) Balance(opts *bind.CallOpts) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _TreasuryV2.contract.Call(opts, out, "balance")
	return *ret0, err
}

// Balance is a free data retrieval call binding the contract method 0xb69ef8a8.
//
// Solidity: function balance() constant returns(uint256 amount)
func (_TreasuryV2 *TreasuryV2Session) Balance() (*big.Int, error) {
	return _TreasuryV2.Contract.Balance(&_TreasuryV2.CallOpts)
}

// Balance is a free data retrieval call binding the contract method 0xb69ef8a8.
//
// Solidity: function balance() constant returns(uint256 amount)
func (_TreasuryV2 *TreasuryV2CallerSession) Balance() (*big.Int, error) {
	return _TreasuryV2.Contract.Balance(&_TreasuryV2.CallOpts)
}

// GetReward is a free data retrieval call binding the contract method 0x1c4b774b.
//
// Solidity: function getReward(uint256 _blockNumber) constant returns(uint256 amount)
func (_TreasuryV2 *TreasuryV2Caller) GetReward(opts *bind.CallOpts, _blockNumber *big.Int) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _TreasuryV2.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 (_TreasuryV2 *TreasuryV2Session) GetReward(_blockNumber *big.Int) (*big.Int, error) {
	return _TreasuryV2.Contract.GetReward(&_TreasuryV2.CallOpts, _blockNumber)
}

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

// IsSuperblock is a free data retrieval call binding the contract method 0x52782d86.
//
// Solidity: function isSuperblock(uint256 _blockNumber) constant returns(bool)
func (_TreasuryV2 *TreasuryV2Caller) IsSuperblock(opts *bind.CallOpts, _blockNumber *big.Int) (bool, error) {
	var (
		ret0 = new(bool)
	)
	out := ret0
	err := _TreasuryV2.contract.Call(opts, out, "isSuperblock", _blockNumber)
	return *ret0, err
}

// IsSuperblock is a free data retrieval call binding the contract method 0x52782d86.
//
// Solidity: function isSuperblock(uint256 _blockNumber) constant returns(bool)
func (_TreasuryV2 *TreasuryV2Session) IsSuperblock(_blockNumber *big.Int) (bool, error) {
	return _TreasuryV2.Contract.IsSuperblock(&_TreasuryV2.CallOpts, _blockNumber)
}

// IsSuperblock is a free data retrieval call binding the contract method 0x52782d86.
//
// Solidity: function isSuperblock(uint256 _blockNumber) constant returns(bool)
func (_TreasuryV2 *TreasuryV2CallerSession) IsSuperblock(_blockNumber *big.Int) (bool, error) {
	return _TreasuryV2.Contract.IsSuperblock(&_TreasuryV2.CallOpts, _blockNumber)
}

// ListProposals is a free data retrieval call binding the contract method 0x26c7eb1c.
//
// Solidity: function listProposals() constant returns(address[] proposals)
func (_TreasuryV2 *TreasuryV2Caller) ListProposals(opts *bind.CallOpts) ([]common.Address, error) {
	var (
		ret0 = new([]common.Address)
	)
	out := ret0
	err := _TreasuryV2.contract.Call(opts, out, "listProposals")
	return *ret0, err
}

// ListProposals is a free data retrieval call binding the contract method 0x26c7eb1c.
//
// Solidity: function listProposals() constant returns(address[] proposals)
func (_TreasuryV2 *TreasuryV2Session) ListProposals() ([]common.Address, error) {
	return _TreasuryV2.Contract.ListProposals(&_TreasuryV2.CallOpts)
}

// ListProposals is a free data retrieval call binding the contract method 0x26c7eb1c.
//
// Solidity: function listProposals() constant returns(address[] proposals)
func (_TreasuryV2 *TreasuryV2CallerSession) ListProposals() ([]common.Address, error) {
	return _TreasuryV2.Contract.ListProposals(&_TreasuryV2.CallOpts)
}

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

// MnregistryProxy is a free data retrieval call binding the contract method 0xfe7334e8.
//
// Solidity: function mnregistry_proxy() constant returns(address)
func (_TreasuryV2 *TreasuryV2Session) MnregistryProxy() (common.Address, error) {
	return _TreasuryV2.Contract.MnregistryProxy(&_TreasuryV2.CallOpts)
}

// MnregistryProxy is a free data retrieval call binding the contract method 0xfe7334e8.
//
// Solidity: function mnregistry_proxy() constant returns(address)
func (_TreasuryV2 *TreasuryV2CallerSession) MnregistryProxy() (common.Address, error) {
	return _TreasuryV2.Contract.MnregistryProxy(&_TreasuryV2.CallOpts)
}

// ProposalUuid is a free data retrieval call binding the contract method 0xcaef1d5a.
//
// Solidity: function proposal_uuid(address proposal) constant returns(uint256)
func (_TreasuryV2 *TreasuryV2Caller) ProposalUuid(opts *bind.CallOpts, proposal common.Address) (*big.Int, error) {
	var (
		ret0 = new(*big.Int)
	)
	out := ret0
	err := _TreasuryV2.contract.Call(opts, out, "proposal_uuid", proposal)
	return *ret0, err
}

// ProposalUuid is a free data retrieval call binding the contract method 0xcaef1d5a.
//
// Solidity: function proposal_uuid(address proposal) constant returns(uint256)
func (_TreasuryV2 *TreasuryV2Session) ProposalUuid(proposal common.Address) (*big.Int, error) {
	return _TreasuryV2.Contract.ProposalUuid(&_TreasuryV2.CallOpts, proposal)
}

// ProposalUuid is a free data retrieval call binding the contract method 0xcaef1d5a.
//
// Solidity: function proposal_uuid(address proposal) constant returns(uint256)
func (_TreasuryV2 *TreasuryV2CallerSession) ProposalUuid(proposal common.Address) (*big.Int, error) {
	return _TreasuryV2.Contract.ProposalUuid(&_TreasuryV2.CallOpts, proposal)
}

// Proxy is a free data retrieval call binding the contract method 0xec556889.
//
// Solidity: function proxy() constant returns(address)
func (_TreasuryV2 *TreasuryV2Caller) Proxy(opts *bind.CallOpts) (common.Address, error) {
	var (
		ret0 = new(common.Address)
	)
	out := ret0
	err := _TreasuryV2.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 (_TreasuryV2 *TreasuryV2Session) Proxy() (common.Address, error) {
	return _TreasuryV2.Contract.Proxy(&_TreasuryV2.CallOpts)
}

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

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

// SuperblockCycle is a free data retrieval call binding the contract method 0x0ef34745.
//
// Solidity: function superblock_cycle() constant returns(uint256)
func (_TreasuryV2 *TreasuryV2Session) SuperblockCycle() (*big.Int, error) {
	return _TreasuryV2.Contract.SuperblockCycle(&_TreasuryV2.CallOpts)
}

// SuperblockCycle is a free data retrieval call binding the contract method 0x0ef34745.
//
// Solidity: function superblock_cycle() constant returns(uint256)
func (_TreasuryV2 *TreasuryV2CallerSession) SuperblockCycle() (*big.Int, error) {
	return _TreasuryV2.Contract.SuperblockCycle(&_TreasuryV2.CallOpts)
}

// UuidProposal is a free data retrieval call binding the contract method 0x5c099215.
//
// Solidity: function uuid_proposal(uint256 _ref_uuid) constant returns(address)
func (_TreasuryV2 *TreasuryV2Caller) UuidProposal(opts *bind.CallOpts, _ref_uuid *big.Int) (common.Address, error) {
	var (
		ret0 = new(common.Address)
	)
	out := ret0
	err := _TreasuryV2.contract.Call(opts, out, "uuid_proposal", _ref_uuid)
	return *ret0, err
}

// UuidProposal is a free data retrieval call binding the contract method 0x5c099215.
//
// Solidity: function uuid_proposal(uint256 _ref_uuid) constant returns(address)
func (_TreasuryV2 *TreasuryV2Session) UuidProposal(_ref_uuid *big.Int) (common.Address, error) {
	return _TreasuryV2.Contract.UuidProposal(&_TreasuryV2.CallOpts, _ref_uuid)
}

// UuidProposal is a free data retrieval call binding the contract method 0x5c099215.
//
// Solidity: function uuid_proposal(uint256 _ref_uuid) constant returns(address)
func (_TreasuryV2 *TreasuryV2CallerSession) UuidProposal(_ref_uuid *big.Int) (common.Address, error) {
	return _TreasuryV2.Contract.UuidProposal(&_TreasuryV2.CallOpts, _ref_uuid)
}

// V1storage is a free data retrieval call binding the contract method 0x2d059305.
//
// Solidity: function v1storage() constant returns(address)
func (_TreasuryV2 *TreasuryV2Caller) V1storage(opts *bind.CallOpts) (common.Address, error) {
	var (
		ret0 = new(common.Address)
	)
	out := ret0
	err := _TreasuryV2.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 (_TreasuryV2 *TreasuryV2Session) V1storage() (common.Address, error) {
	return _TreasuryV2.Contract.V1storage(&_TreasuryV2.CallOpts)
}

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

// Contribute is a paid mutator transaction binding the contract method 0xd7bb99ba.
//
// Solidity: function contribute() returns()
func (_TreasuryV2 *TreasuryV2Transactor) Contribute(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _TreasuryV2.contract.Transact(opts, "contribute")
}

// Contribute is a paid mutator transaction binding the contract method 0xd7bb99ba.
//
// Solidity: function contribute() returns()
func (_TreasuryV2 *TreasuryV2Session) Contribute() (*types.Transaction, error) {
	return _TreasuryV2.Contract.Contribute(&_TreasuryV2.TransactOpts)
}

// Contribute is a paid mutator transaction binding the contract method 0xd7bb99ba.
//
// Solidity: function contribute() returns()
func (_TreasuryV2 *TreasuryV2TransactorSession) Contribute() (*types.Transaction, error) {
	return _TreasuryV2.Contract.Contribute(&_TreasuryV2.TransactOpts)
}

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

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

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

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

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

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

// Propose is a paid mutator transaction binding the contract method 0x40376d56.
//
// Solidity: function propose(uint256 _amount, uint256 _ref_uuid, uint256 _period) returns(address proposal)
func (_TreasuryV2 *TreasuryV2Transactor) Propose(opts *bind.TransactOpts, _amount *big.Int, _ref_uuid *big.Int, _period *big.Int) (*types.Transaction, error) {
	return _TreasuryV2.contract.Transact(opts, "propose", _amount, _ref_uuid, _period)
}

// Propose is a paid mutator transaction binding the contract method 0x40376d56.
//
// Solidity: function propose(uint256 _amount, uint256 _ref_uuid, uint256 _period) returns(address proposal)
func (_TreasuryV2 *TreasuryV2Session) Propose(_amount *big.Int, _ref_uuid *big.Int, _period *big.Int) (*types.Transaction, error) {
	return _TreasuryV2.Contract.Propose(&_TreasuryV2.TransactOpts, _amount, _ref_uuid, _period)
}

// Propose is a paid mutator transaction binding the contract method 0x40376d56.
//
// Solidity: function propose(uint256 _amount, uint256 _ref_uuid, uint256 _period) returns(address proposal)
func (_TreasuryV2 *TreasuryV2TransactorSession) Propose(_amount *big.Int, _ref_uuid *big.Int, _period *big.Int) (*types.Transaction, error) {
	return _TreasuryV2.Contract.Propose(&_TreasuryV2.TransactOpts, _amount, _ref_uuid, _period)
}

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

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

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

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

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

// TreasuryV2BudgetProposal represents a BudgetProposal event raised by the TreasuryV2 contract.
type TreasuryV2BudgetProposal struct {
	RefUuid       *big.Int
	Proposal      common.Address
	PayoutAddress common.Address
	Amount        *big.Int
	Deadline      *big.Int
	Raw           types.Log // Blockchain specific contextual infos
}

// FilterBudgetProposal is a free log retrieval operation binding the contract event 0xa94befa3ce181974130fe36e854a282c70fb75e4decb42bfecdecbd6f88f0f5d.
//
// Solidity: event BudgetProposal(uint256 indexed ref_uuid, address proposal, address payout_address, uint256 amount, uint256 deadline)
func (_TreasuryV2 *TreasuryV2Filterer) FilterBudgetProposal(opts *bind.FilterOpts, ref_uuid []*big.Int) (*TreasuryV2BudgetProposalIterator, error) {

	var ref_uuidRule []interface{}
	for _, ref_uuidItem := range ref_uuid {
		ref_uuidRule = append(ref_uuidRule, ref_uuidItem)
	}

	logs, sub, err := _TreasuryV2.contract.FilterLogs(opts, "BudgetProposal", ref_uuidRule)
	if err != nil {
		return nil, err
	}
	return &TreasuryV2BudgetProposalIterator{contract: _TreasuryV2.contract, event: "BudgetProposal", logs: logs, sub: sub}, nil
}

// WatchBudgetProposal is a free log subscription operation binding the contract event 0xa94befa3ce181974130fe36e854a282c70fb75e4decb42bfecdecbd6f88f0f5d.
//
// Solidity: event BudgetProposal(uint256 indexed ref_uuid, address proposal, address payout_address, uint256 amount, uint256 deadline)
func (_TreasuryV2 *TreasuryV2Filterer) WatchBudgetProposal(opts *bind.WatchOpts, sink chan<- *TreasuryV2BudgetProposal, ref_uuid []*big.Int) (event.Subscription, error) {

	var ref_uuidRule []interface{}
	for _, ref_uuidItem := range ref_uuid {
		ref_uuidRule = append(ref_uuidRule, ref_uuidItem)
	}

	logs, sub, err := _TreasuryV2.contract.WatchLogs(opts, "BudgetProposal", ref_uuidRule)
	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(TreasuryV2BudgetProposal)
				if err := _TreasuryV2.contract.UnpackLog(event, "BudgetProposal", 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
}

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

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

// TreasuryV2Contribution represents a Contribution event raised by the TreasuryV2 contract.
type TreasuryV2Contribution struct {
	From   common.Address
	Amount *big.Int
	Raw    types.Log // Blockchain specific contextual infos
}

// FilterContribution is a free log retrieval operation binding the contract event 0x4d154d4aae216bed6d0926db77c00df2b57c6b5ba4eee05775de20facede3a7b.
//
// Solidity: event Contribution(address from, uint256 amount)
func (_TreasuryV2 *TreasuryV2Filterer) FilterContribution(opts *bind.FilterOpts) (*TreasuryV2ContributionIterator, error) {

	logs, sub, err := _TreasuryV2.contract.FilterLogs(opts, "Contribution")
	if err != nil {
		return nil, err
	}
	return &TreasuryV2ContributionIterator{contract: _TreasuryV2.contract, event: "Contribution", logs: logs, sub: sub}, nil
}

// WatchContribution is a free log subscription operation binding the contract event 0x4d154d4aae216bed6d0926db77c00df2b57c6b5ba4eee05775de20facede3a7b.
//
// Solidity: event Contribution(address from, uint256 amount)
func (_TreasuryV2 *TreasuryV2Filterer) WatchContribution(opts *bind.WatchOpts, sink chan<- *TreasuryV2Contribution) (event.Subscription, error) {

	logs, sub, err := _TreasuryV2.contract.WatchLogs(opts, "Contribution")
	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(TreasuryV2Contribution)
				if err := _TreasuryV2.contract.UnpackLog(event, "Contribution", 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
}

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

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

// TreasuryV2Payout represents a Payout event raised by the TreasuryV2 contract.
type TreasuryV2Payout struct {
	RefUuid  *big.Int
	Proposal common.Address
	Amount   *big.Int
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterPayout is a free log retrieval operation binding the contract event 0x5f7341a552ae2d452b071917104c05fbac3663936a69be768a05c40605056e7d.
//
// Solidity: event Payout(uint256 indexed ref_uuid, address proposal, uint256 amount)
func (_TreasuryV2 *TreasuryV2Filterer) FilterPayout(opts *bind.FilterOpts, ref_uuid []*big.Int) (*TreasuryV2PayoutIterator, error) {

	var ref_uuidRule []interface{}
	for _, ref_uuidItem := range ref_uuid {
		ref_uuidRule = append(ref_uuidRule, ref_uuidItem)
	}

	logs, sub, err := _TreasuryV2.contract.FilterLogs(opts, "Payout", ref_uuidRule)
	if err != nil {
		return nil, err
	}
	return &TreasuryV2PayoutIterator{contract: _TreasuryV2.contract, event: "Payout", logs: logs, sub: sub}, nil
}

// WatchPayout is a free log subscription operation binding the contract event 0x5f7341a552ae2d452b071917104c05fbac3663936a69be768a05c40605056e7d.
//
// Solidity: event Payout(uint256 indexed ref_uuid, address proposal, uint256 amount)
func (_TreasuryV2 *TreasuryV2Filterer) WatchPayout(opts *bind.WatchOpts, sink chan<- *TreasuryV2Payout, ref_uuid []*big.Int) (event.Subscription, error) {

	var ref_uuidRule []interface{}
	for _, ref_uuidItem := range ref_uuid {
		ref_uuidRule = append(ref_uuidRule, ref_uuidItem)
	}

	logs, sub, err := _TreasuryV2.contract.WatchLogs(opts, "Payout", ref_uuidRule)
	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(TreasuryV2Payout)
				if err := _TreasuryV2.contract.UnpackLog(event, "Payout", 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
}
