github.com/diadata-org/diadata@v1.4.593/pkg/dia/scraper/exchange-scrapers/velodrome/velodrome.go (about)

     1  // Code generated - DO NOT EDIT.
     2  // This file is a generated binding and any manual changes will be lost.
     3  
     4  package velodrome
     5  
     6  import (
     7  	"errors"
     8  	"math/big"
     9  	"strings"
    10  
    11  	ethereum "github.com/ethereum/go-ethereum"
    12  	"github.com/ethereum/go-ethereum/accounts/abi"
    13  	"github.com/ethereum/go-ethereum/accounts/abi/bind"
    14  	"github.com/ethereum/go-ethereum/common"
    15  	"github.com/ethereum/go-ethereum/core/types"
    16  	"github.com/ethereum/go-ethereum/event"
    17  )
    18  
    19  // Reference imports to suppress errors if they are not otherwise used.
    20  var (
    21  	_ = errors.New
    22  	_ = big.NewInt
    23  	_ = strings.NewReader
    24  	_ = ethereum.NotFound
    25  	_ = bind.Bind
    26  	_ = common.Big1
    27  	_ = types.BloomLookup
    28  	_ = event.NewSubscription
    29  )
    30  
    31  // ClonesMetaData contains all meta data concerning the Clones contract.
    32  var ClonesMetaData = &bind.MetaData{
    33  	ABI: "[]",
    34  	Bin: "0x607a6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea2646970667358221220aa659e64033eadb68f61388be31a1ea2eecadeeaf7e1bc07b0dc35e8805162e864736f6c637827302e382e32322d646576656c6f702e323032332e382e342b636f6d6d69742e35313137313235370058",
    35  }
    36  
    37  // ClonesABI is the input ABI used to generate the binding from.
    38  // Deprecated: Use ClonesMetaData.ABI instead.
    39  var ClonesABI = ClonesMetaData.ABI
    40  
    41  // ClonesBin is the compiled bytecode used for deploying new contracts.
    42  // Deprecated: Use ClonesMetaData.Bin instead.
    43  var ClonesBin = ClonesMetaData.Bin
    44  
    45  // DeployClones deploys a new Ethereum contract, binding an instance of Clones to it.
    46  func DeployClones(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Clones, error) {
    47  	parsed, err := ClonesMetaData.GetAbi()
    48  	if err != nil {
    49  		return common.Address{}, nil, nil, err
    50  	}
    51  	if parsed == nil {
    52  		return common.Address{}, nil, nil, errors.New("GetABI returned nil")
    53  	}
    54  
    55  	address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ClonesBin), backend)
    56  	if err != nil {
    57  		return common.Address{}, nil, nil, err
    58  	}
    59  	return address, tx, &Clones{ClonesCaller: ClonesCaller{contract: contract}, ClonesTransactor: ClonesTransactor{contract: contract}, ClonesFilterer: ClonesFilterer{contract: contract}}, nil
    60  }
    61  
    62  // Clones is an auto generated Go binding around an Ethereum contract.
    63  type Clones struct {
    64  	ClonesCaller     // Read-only binding to the contract
    65  	ClonesTransactor // Write-only binding to the contract
    66  	ClonesFilterer   // Log filterer for contract events
    67  }
    68  
    69  // ClonesCaller is an auto generated read-only Go binding around an Ethereum contract.
    70  type ClonesCaller struct {
    71  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    72  }
    73  
    74  // ClonesTransactor is an auto generated write-only Go binding around an Ethereum contract.
    75  type ClonesTransactor struct {
    76  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    77  }
    78  
    79  // ClonesFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
    80  type ClonesFilterer struct {
    81  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    82  }
    83  
    84  // ClonesSession is an auto generated Go binding around an Ethereum contract,
    85  // with pre-set call and transact options.
    86  type ClonesSession struct {
    87  	Contract     *Clones           // Generic contract binding to set the session for
    88  	CallOpts     bind.CallOpts     // Call options to use throughout this session
    89  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
    90  }
    91  
    92  // ClonesCallerSession is an auto generated read-only Go binding around an Ethereum contract,
    93  // with pre-set call options.
    94  type ClonesCallerSession struct {
    95  	Contract *ClonesCaller // Generic contract caller binding to set the session for
    96  	CallOpts bind.CallOpts // Call options to use throughout this session
    97  }
    98  
    99  // ClonesTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
   100  // with pre-set transact options.
   101  type ClonesTransactorSession struct {
   102  	Contract     *ClonesTransactor // Generic contract transactor binding to set the session for
   103  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   104  }
   105  
   106  // ClonesRaw is an auto generated low-level Go binding around an Ethereum contract.
   107  type ClonesRaw struct {
   108  	Contract *Clones // Generic contract binding to access the raw methods on
   109  }
   110  
   111  // ClonesCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
   112  type ClonesCallerRaw struct {
   113  	Contract *ClonesCaller // Generic read-only contract binding to access the raw methods on
   114  }
   115  
   116  // ClonesTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
   117  type ClonesTransactorRaw struct {
   118  	Contract *ClonesTransactor // Generic write-only contract binding to access the raw methods on
   119  }
   120  
   121  // NewClones creates a new instance of Clones, bound to a specific deployed contract.
   122  func NewClones(address common.Address, backend bind.ContractBackend) (*Clones, error) {
   123  	contract, err := bindClones(address, backend, backend, backend)
   124  	if err != nil {
   125  		return nil, err
   126  	}
   127  	return &Clones{ClonesCaller: ClonesCaller{contract: contract}, ClonesTransactor: ClonesTransactor{contract: contract}, ClonesFilterer: ClonesFilterer{contract: contract}}, nil
   128  }
   129  
   130  // NewClonesCaller creates a new read-only instance of Clones, bound to a specific deployed contract.
   131  func NewClonesCaller(address common.Address, caller bind.ContractCaller) (*ClonesCaller, error) {
   132  	contract, err := bindClones(address, caller, nil, nil)
   133  	if err != nil {
   134  		return nil, err
   135  	}
   136  	return &ClonesCaller{contract: contract}, nil
   137  }
   138  
   139  // NewClonesTransactor creates a new write-only instance of Clones, bound to a specific deployed contract.
   140  func NewClonesTransactor(address common.Address, transactor bind.ContractTransactor) (*ClonesTransactor, error) {
   141  	contract, err := bindClones(address, nil, transactor, nil)
   142  	if err != nil {
   143  		return nil, err
   144  	}
   145  	return &ClonesTransactor{contract: contract}, nil
   146  }
   147  
   148  // NewClonesFilterer creates a new log filterer instance of Clones, bound to a specific deployed contract.
   149  func NewClonesFilterer(address common.Address, filterer bind.ContractFilterer) (*ClonesFilterer, error) {
   150  	contract, err := bindClones(address, nil, nil, filterer)
   151  	if err != nil {
   152  		return nil, err
   153  	}
   154  	return &ClonesFilterer{contract: contract}, nil
   155  }
   156  
   157  // bindClones binds a generic wrapper to an already deployed contract.
   158  func bindClones(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
   159  	parsed, err := abi.JSON(strings.NewReader(ClonesABI))
   160  	if err != nil {
   161  		return nil, err
   162  	}
   163  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
   164  }
   165  
   166  // Call invokes the (constant) contract method with params as input values and
   167  // sets the output to result. The result type might be a single field for simple
   168  // returns, a slice of interfaces for anonymous returns and a struct for named
   169  // returns.
   170  func (_Clones *ClonesRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   171  	return _Clones.Contract.ClonesCaller.contract.Call(opts, result, method, params...)
   172  }
   173  
   174  // Transfer initiates a plain transaction to move funds to the contract, calling
   175  // its default method if one is available.
   176  func (_Clones *ClonesRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   177  	return _Clones.Contract.ClonesTransactor.contract.Transfer(opts)
   178  }
   179  
   180  // Transact invokes the (paid) contract method with params as input values.
   181  func (_Clones *ClonesRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   182  	return _Clones.Contract.ClonesTransactor.contract.Transact(opts, method, params...)
   183  }
   184  
   185  // Call invokes the (constant) contract method with params as input values and
   186  // sets the output to result. The result type might be a single field for simple
   187  // returns, a slice of interfaces for anonymous returns and a struct for named
   188  // returns.
   189  func (_Clones *ClonesCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   190  	return _Clones.Contract.contract.Call(opts, result, method, params...)
   191  }
   192  
   193  // Transfer initiates a plain transaction to move funds to the contract, calling
   194  // its default method if one is available.
   195  func (_Clones *ClonesTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   196  	return _Clones.Contract.contract.Transfer(opts)
   197  }
   198  
   199  // Transact invokes the (paid) contract method with params as input values.
   200  func (_Clones *ClonesTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   201  	return _Clones.Contract.contract.Transact(opts, method, params...)
   202  }
   203  
   204  // IERC20MetaData contains all meta data concerning the IERC20 contract.
   205  var IERC20MetaData = &bind.MetaData{
   206  	ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
   207  	Sigs: map[string]string{
   208  		"dd62ed3e": "allowance(address,address)",
   209  		"095ea7b3": "approve(address,uint256)",
   210  		"70a08231": "balanceOf(address)",
   211  		"18160ddd": "totalSupply()",
   212  		"a9059cbb": "transfer(address,uint256)",
   213  		"23b872dd": "transferFrom(address,address,uint256)",
   214  	},
   215  }
   216  
   217  // IERC20ABI is the input ABI used to generate the binding from.
   218  // Deprecated: Use IERC20MetaData.ABI instead.
   219  var IERC20ABI = IERC20MetaData.ABI
   220  
   221  // Deprecated: Use IERC20MetaData.Sigs instead.
   222  // IERC20FuncSigs maps the 4-byte function signature to its string representation.
   223  var IERC20FuncSigs = IERC20MetaData.Sigs
   224  
   225  // IERC20 is an auto generated Go binding around an Ethereum contract.
   226  type IERC20 struct {
   227  	IERC20Caller     // Read-only binding to the contract
   228  	IERC20Transactor // Write-only binding to the contract
   229  	IERC20Filterer   // Log filterer for contract events
   230  }
   231  
   232  // IERC20Caller is an auto generated read-only Go binding around an Ethereum contract.
   233  type IERC20Caller struct {
   234  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   235  }
   236  
   237  // IERC20Transactor is an auto generated write-only Go binding around an Ethereum contract.
   238  type IERC20Transactor struct {
   239  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   240  }
   241  
   242  // IERC20Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
   243  type IERC20Filterer struct {
   244  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   245  }
   246  
   247  // IERC20Session is an auto generated Go binding around an Ethereum contract,
   248  // with pre-set call and transact options.
   249  type IERC20Session struct {
   250  	Contract     *IERC20           // Generic contract binding to set the session for
   251  	CallOpts     bind.CallOpts     // Call options to use throughout this session
   252  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   253  }
   254  
   255  // IERC20CallerSession is an auto generated read-only Go binding around an Ethereum contract,
   256  // with pre-set call options.
   257  type IERC20CallerSession struct {
   258  	Contract *IERC20Caller // Generic contract caller binding to set the session for
   259  	CallOpts bind.CallOpts // Call options to use throughout this session
   260  }
   261  
   262  // IERC20TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
   263  // with pre-set transact options.
   264  type IERC20TransactorSession struct {
   265  	Contract     *IERC20Transactor // Generic contract transactor binding to set the session for
   266  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   267  }
   268  
   269  // IERC20Raw is an auto generated low-level Go binding around an Ethereum contract.
   270  type IERC20Raw struct {
   271  	Contract *IERC20 // Generic contract binding to access the raw methods on
   272  }
   273  
   274  // IERC20CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
   275  type IERC20CallerRaw struct {
   276  	Contract *IERC20Caller // Generic read-only contract binding to access the raw methods on
   277  }
   278  
   279  // IERC20TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
   280  type IERC20TransactorRaw struct {
   281  	Contract *IERC20Transactor // Generic write-only contract binding to access the raw methods on
   282  }
   283  
   284  // NewIERC20 creates a new instance of IERC20, bound to a specific deployed contract.
   285  func NewIERC20(address common.Address, backend bind.ContractBackend) (*IERC20, error) {
   286  	contract, err := bindIERC20(address, backend, backend, backend)
   287  	if err != nil {
   288  		return nil, err
   289  	}
   290  	return &IERC20{IERC20Caller: IERC20Caller{contract: contract}, IERC20Transactor: IERC20Transactor{contract: contract}, IERC20Filterer: IERC20Filterer{contract: contract}}, nil
   291  }
   292  
   293  // NewIERC20Caller creates a new read-only instance of IERC20, bound to a specific deployed contract.
   294  func NewIERC20Caller(address common.Address, caller bind.ContractCaller) (*IERC20Caller, error) {
   295  	contract, err := bindIERC20(address, caller, nil, nil)
   296  	if err != nil {
   297  		return nil, err
   298  	}
   299  	return &IERC20Caller{contract: contract}, nil
   300  }
   301  
   302  // NewIERC20Transactor creates a new write-only instance of IERC20, bound to a specific deployed contract.
   303  func NewIERC20Transactor(address common.Address, transactor bind.ContractTransactor) (*IERC20Transactor, error) {
   304  	contract, err := bindIERC20(address, nil, transactor, nil)
   305  	if err != nil {
   306  		return nil, err
   307  	}
   308  	return &IERC20Transactor{contract: contract}, nil
   309  }
   310  
   311  // NewIERC20Filterer creates a new log filterer instance of IERC20, bound to a specific deployed contract.
   312  func NewIERC20Filterer(address common.Address, filterer bind.ContractFilterer) (*IERC20Filterer, error) {
   313  	contract, err := bindIERC20(address, nil, nil, filterer)
   314  	if err != nil {
   315  		return nil, err
   316  	}
   317  	return &IERC20Filterer{contract: contract}, nil
   318  }
   319  
   320  // bindIERC20 binds a generic wrapper to an already deployed contract.
   321  func bindIERC20(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
   322  	parsed, err := abi.JSON(strings.NewReader(IERC20ABI))
   323  	if err != nil {
   324  		return nil, err
   325  	}
   326  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
   327  }
   328  
   329  // Call invokes the (constant) contract method with params as input values and
   330  // sets the output to result. The result type might be a single field for simple
   331  // returns, a slice of interfaces for anonymous returns and a struct for named
   332  // returns.
   333  func (_IERC20 *IERC20Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   334  	return _IERC20.Contract.IERC20Caller.contract.Call(opts, result, method, params...)
   335  }
   336  
   337  // Transfer initiates a plain transaction to move funds to the contract, calling
   338  // its default method if one is available.
   339  func (_IERC20 *IERC20Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   340  	return _IERC20.Contract.IERC20Transactor.contract.Transfer(opts)
   341  }
   342  
   343  // Transact invokes the (paid) contract method with params as input values.
   344  func (_IERC20 *IERC20Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   345  	return _IERC20.Contract.IERC20Transactor.contract.Transact(opts, method, params...)
   346  }
   347  
   348  // Call invokes the (constant) contract method with params as input values and
   349  // sets the output to result. The result type might be a single field for simple
   350  // returns, a slice of interfaces for anonymous returns and a struct for named
   351  // returns.
   352  func (_IERC20 *IERC20CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   353  	return _IERC20.Contract.contract.Call(opts, result, method, params...)
   354  }
   355  
   356  // Transfer initiates a plain transaction to move funds to the contract, calling
   357  // its default method if one is available.
   358  func (_IERC20 *IERC20TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   359  	return _IERC20.Contract.contract.Transfer(opts)
   360  }
   361  
   362  // Transact invokes the (paid) contract method with params as input values.
   363  func (_IERC20 *IERC20TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   364  	return _IERC20.Contract.contract.Transact(opts, method, params...)
   365  }
   366  
   367  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
   368  //
   369  // Solidity: function allowance(address owner, address spender) view returns(uint256)
   370  func (_IERC20 *IERC20Caller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) {
   371  	var out []interface{}
   372  	err := _IERC20.contract.Call(opts, &out, "allowance", owner, spender)
   373  
   374  	if err != nil {
   375  		return *new(*big.Int), err
   376  	}
   377  
   378  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   379  
   380  	return out0, err
   381  
   382  }
   383  
   384  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
   385  //
   386  // Solidity: function allowance(address owner, address spender) view returns(uint256)
   387  func (_IERC20 *IERC20Session) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
   388  	return _IERC20.Contract.Allowance(&_IERC20.CallOpts, owner, spender)
   389  }
   390  
   391  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
   392  //
   393  // Solidity: function allowance(address owner, address spender) view returns(uint256)
   394  func (_IERC20 *IERC20CallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
   395  	return _IERC20.Contract.Allowance(&_IERC20.CallOpts, owner, spender)
   396  }
   397  
   398  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
   399  //
   400  // Solidity: function balanceOf(address account) view returns(uint256)
   401  func (_IERC20 *IERC20Caller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) {
   402  	var out []interface{}
   403  	err := _IERC20.contract.Call(opts, &out, "balanceOf", account)
   404  
   405  	if err != nil {
   406  		return *new(*big.Int), err
   407  	}
   408  
   409  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   410  
   411  	return out0, err
   412  
   413  }
   414  
   415  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
   416  //
   417  // Solidity: function balanceOf(address account) view returns(uint256)
   418  func (_IERC20 *IERC20Session) BalanceOf(account common.Address) (*big.Int, error) {
   419  	return _IERC20.Contract.BalanceOf(&_IERC20.CallOpts, account)
   420  }
   421  
   422  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
   423  //
   424  // Solidity: function balanceOf(address account) view returns(uint256)
   425  func (_IERC20 *IERC20CallerSession) BalanceOf(account common.Address) (*big.Int, error) {
   426  	return _IERC20.Contract.BalanceOf(&_IERC20.CallOpts, account)
   427  }
   428  
   429  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
   430  //
   431  // Solidity: function totalSupply() view returns(uint256)
   432  func (_IERC20 *IERC20Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
   433  	var out []interface{}
   434  	err := _IERC20.contract.Call(opts, &out, "totalSupply")
   435  
   436  	if err != nil {
   437  		return *new(*big.Int), err
   438  	}
   439  
   440  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   441  
   442  	return out0, err
   443  
   444  }
   445  
   446  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
   447  //
   448  // Solidity: function totalSupply() view returns(uint256)
   449  func (_IERC20 *IERC20Session) TotalSupply() (*big.Int, error) {
   450  	return _IERC20.Contract.TotalSupply(&_IERC20.CallOpts)
   451  }
   452  
   453  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
   454  //
   455  // Solidity: function totalSupply() view returns(uint256)
   456  func (_IERC20 *IERC20CallerSession) TotalSupply() (*big.Int, error) {
   457  	return _IERC20.Contract.TotalSupply(&_IERC20.CallOpts)
   458  }
   459  
   460  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
   461  //
   462  // Solidity: function approve(address spender, uint256 amount) returns(bool)
   463  func (_IERC20 *IERC20Transactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) {
   464  	return _IERC20.contract.Transact(opts, "approve", spender, amount)
   465  }
   466  
   467  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
   468  //
   469  // Solidity: function approve(address spender, uint256 amount) returns(bool)
   470  func (_IERC20 *IERC20Session) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
   471  	return _IERC20.Contract.Approve(&_IERC20.TransactOpts, spender, amount)
   472  }
   473  
   474  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
   475  //
   476  // Solidity: function approve(address spender, uint256 amount) returns(bool)
   477  func (_IERC20 *IERC20TransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
   478  	return _IERC20.Contract.Approve(&_IERC20.TransactOpts, spender, amount)
   479  }
   480  
   481  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
   482  //
   483  // Solidity: function transfer(address to, uint256 amount) returns(bool)
   484  func (_IERC20 *IERC20Transactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) {
   485  	return _IERC20.contract.Transact(opts, "transfer", to, amount)
   486  }
   487  
   488  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
   489  //
   490  // Solidity: function transfer(address to, uint256 amount) returns(bool)
   491  func (_IERC20 *IERC20Session) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) {
   492  	return _IERC20.Contract.Transfer(&_IERC20.TransactOpts, to, amount)
   493  }
   494  
   495  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
   496  //
   497  // Solidity: function transfer(address to, uint256 amount) returns(bool)
   498  func (_IERC20 *IERC20TransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) {
   499  	return _IERC20.Contract.Transfer(&_IERC20.TransactOpts, to, amount)
   500  }
   501  
   502  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
   503  //
   504  // Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool)
   505  func (_IERC20 *IERC20Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) {
   506  	return _IERC20.contract.Transact(opts, "transferFrom", from, to, amount)
   507  }
   508  
   509  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
   510  //
   511  // Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool)
   512  func (_IERC20 *IERC20Session) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) {
   513  	return _IERC20.Contract.TransferFrom(&_IERC20.TransactOpts, from, to, amount)
   514  }
   515  
   516  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
   517  //
   518  // Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool)
   519  func (_IERC20 *IERC20TransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) {
   520  	return _IERC20.Contract.TransferFrom(&_IERC20.TransactOpts, from, to, amount)
   521  }
   522  
   523  // IERC20ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the IERC20 contract.
   524  type IERC20ApprovalIterator struct {
   525  	Event *IERC20Approval // Event containing the contract specifics and raw log
   526  
   527  	contract *bind.BoundContract // Generic contract to use for unpacking event data
   528  	event    string              // Event name to use for unpacking event data
   529  
   530  	logs chan types.Log        // Log channel receiving the found contract events
   531  	sub  ethereum.Subscription // Subscription for errors, completion and termination
   532  	done bool                  // Whether the subscription completed delivering logs
   533  	fail error                 // Occurred error to stop iteration
   534  }
   535  
   536  // Next advances the iterator to the subsequent event, returning whether there
   537  // are any more events found. In case of a retrieval or parsing error, false is
   538  // returned and Error() can be queried for the exact failure.
   539  func (it *IERC20ApprovalIterator) Next() bool {
   540  	// If the iterator failed, stop iterating
   541  	if it.fail != nil {
   542  		return false
   543  	}
   544  	// If the iterator completed, deliver directly whatever's available
   545  	if it.done {
   546  		select {
   547  		case log := <-it.logs:
   548  			it.Event = new(IERC20Approval)
   549  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
   550  				it.fail = err
   551  				return false
   552  			}
   553  			it.Event.Raw = log
   554  			return true
   555  
   556  		default:
   557  			return false
   558  		}
   559  	}
   560  	// Iterator still in progress, wait for either a data or an error event
   561  	select {
   562  	case log := <-it.logs:
   563  		it.Event = new(IERC20Approval)
   564  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
   565  			it.fail = err
   566  			return false
   567  		}
   568  		it.Event.Raw = log
   569  		return true
   570  
   571  	case err := <-it.sub.Err():
   572  		it.done = true
   573  		it.fail = err
   574  		return it.Next()
   575  	}
   576  }
   577  
   578  // Error returns any retrieval or parsing error occurred during filtering.
   579  func (it *IERC20ApprovalIterator) Error() error {
   580  	return it.fail
   581  }
   582  
   583  // Close terminates the iteration process, releasing any pending underlying
   584  // resources.
   585  func (it *IERC20ApprovalIterator) Close() error {
   586  	it.sub.Unsubscribe()
   587  	return nil
   588  }
   589  
   590  // IERC20Approval represents a Approval event raised by the IERC20 contract.
   591  type IERC20Approval struct {
   592  	Owner   common.Address
   593  	Spender common.Address
   594  	Value   *big.Int
   595  	Raw     types.Log // Blockchain specific contextual infos
   596  }
   597  
   598  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
   599  //
   600  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
   601  func (_IERC20 *IERC20Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*IERC20ApprovalIterator, error) {
   602  
   603  	var ownerRule []interface{}
   604  	for _, ownerItem := range owner {
   605  		ownerRule = append(ownerRule, ownerItem)
   606  	}
   607  	var spenderRule []interface{}
   608  	for _, spenderItem := range spender {
   609  		spenderRule = append(spenderRule, spenderItem)
   610  	}
   611  
   612  	logs, sub, err := _IERC20.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
   613  	if err != nil {
   614  		return nil, err
   615  	}
   616  	return &IERC20ApprovalIterator{contract: _IERC20.contract, event: "Approval", logs: logs, sub: sub}, nil
   617  }
   618  
   619  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
   620  //
   621  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
   622  func (_IERC20 *IERC20Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IERC20Approval, owner []common.Address, spender []common.Address) (event.Subscription, error) {
   623  
   624  	var ownerRule []interface{}
   625  	for _, ownerItem := range owner {
   626  		ownerRule = append(ownerRule, ownerItem)
   627  	}
   628  	var spenderRule []interface{}
   629  	for _, spenderItem := range spender {
   630  		spenderRule = append(spenderRule, spenderItem)
   631  	}
   632  
   633  	logs, sub, err := _IERC20.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
   634  	if err != nil {
   635  		return nil, err
   636  	}
   637  	return event.NewSubscription(func(quit <-chan struct{}) error {
   638  		defer sub.Unsubscribe()
   639  		for {
   640  			select {
   641  			case log := <-logs:
   642  				// New log arrived, parse the event and forward to the user
   643  				event := new(IERC20Approval)
   644  				if err := _IERC20.contract.UnpackLog(event, "Approval", log); err != nil {
   645  					return err
   646  				}
   647  				event.Raw = log
   648  
   649  				select {
   650  				case sink <- event:
   651  				case err := <-sub.Err():
   652  					return err
   653  				case <-quit:
   654  					return nil
   655  				}
   656  			case err := <-sub.Err():
   657  				return err
   658  			case <-quit:
   659  				return nil
   660  			}
   661  		}
   662  	}), nil
   663  }
   664  
   665  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
   666  //
   667  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
   668  func (_IERC20 *IERC20Filterer) ParseApproval(log types.Log) (*IERC20Approval, error) {
   669  	event := new(IERC20Approval)
   670  	if err := _IERC20.contract.UnpackLog(event, "Approval", log); err != nil {
   671  		return nil, err
   672  	}
   673  	event.Raw = log
   674  	return event, nil
   675  }
   676  
   677  // IERC20TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the IERC20 contract.
   678  type IERC20TransferIterator struct {
   679  	Event *IERC20Transfer // Event containing the contract specifics and raw log
   680  
   681  	contract *bind.BoundContract // Generic contract to use for unpacking event data
   682  	event    string              // Event name to use for unpacking event data
   683  
   684  	logs chan types.Log        // Log channel receiving the found contract events
   685  	sub  ethereum.Subscription // Subscription for errors, completion and termination
   686  	done bool                  // Whether the subscription completed delivering logs
   687  	fail error                 // Occurred error to stop iteration
   688  }
   689  
   690  // Next advances the iterator to the subsequent event, returning whether there
   691  // are any more events found. In case of a retrieval or parsing error, false is
   692  // returned and Error() can be queried for the exact failure.
   693  func (it *IERC20TransferIterator) Next() bool {
   694  	// If the iterator failed, stop iterating
   695  	if it.fail != nil {
   696  		return false
   697  	}
   698  	// If the iterator completed, deliver directly whatever's available
   699  	if it.done {
   700  		select {
   701  		case log := <-it.logs:
   702  			it.Event = new(IERC20Transfer)
   703  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
   704  				it.fail = err
   705  				return false
   706  			}
   707  			it.Event.Raw = log
   708  			return true
   709  
   710  		default:
   711  			return false
   712  		}
   713  	}
   714  	// Iterator still in progress, wait for either a data or an error event
   715  	select {
   716  	case log := <-it.logs:
   717  		it.Event = new(IERC20Transfer)
   718  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
   719  			it.fail = err
   720  			return false
   721  		}
   722  		it.Event.Raw = log
   723  		return true
   724  
   725  	case err := <-it.sub.Err():
   726  		it.done = true
   727  		it.fail = err
   728  		return it.Next()
   729  	}
   730  }
   731  
   732  // Error returns any retrieval or parsing error occurred during filtering.
   733  func (it *IERC20TransferIterator) Error() error {
   734  	return it.fail
   735  }
   736  
   737  // Close terminates the iteration process, releasing any pending underlying
   738  // resources.
   739  func (it *IERC20TransferIterator) Close() error {
   740  	it.sub.Unsubscribe()
   741  	return nil
   742  }
   743  
   744  // IERC20Transfer represents a Transfer event raised by the IERC20 contract.
   745  type IERC20Transfer struct {
   746  	From  common.Address
   747  	To    common.Address
   748  	Value *big.Int
   749  	Raw   types.Log // Blockchain specific contextual infos
   750  }
   751  
   752  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
   753  //
   754  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
   755  func (_IERC20 *IERC20Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*IERC20TransferIterator, error) {
   756  
   757  	var fromRule []interface{}
   758  	for _, fromItem := range from {
   759  		fromRule = append(fromRule, fromItem)
   760  	}
   761  	var toRule []interface{}
   762  	for _, toItem := range to {
   763  		toRule = append(toRule, toItem)
   764  	}
   765  
   766  	logs, sub, err := _IERC20.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
   767  	if err != nil {
   768  		return nil, err
   769  	}
   770  	return &IERC20TransferIterator{contract: _IERC20.contract, event: "Transfer", logs: logs, sub: sub}, nil
   771  }
   772  
   773  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
   774  //
   775  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
   776  func (_IERC20 *IERC20Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IERC20Transfer, from []common.Address, to []common.Address) (event.Subscription, error) {
   777  
   778  	var fromRule []interface{}
   779  	for _, fromItem := range from {
   780  		fromRule = append(fromRule, fromItem)
   781  	}
   782  	var toRule []interface{}
   783  	for _, toItem := range to {
   784  		toRule = append(toRule, toItem)
   785  	}
   786  
   787  	logs, sub, err := _IERC20.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
   788  	if err != nil {
   789  		return nil, err
   790  	}
   791  	return event.NewSubscription(func(quit <-chan struct{}) error {
   792  		defer sub.Unsubscribe()
   793  		for {
   794  			select {
   795  			case log := <-logs:
   796  				// New log arrived, parse the event and forward to the user
   797  				event := new(IERC20Transfer)
   798  				if err := _IERC20.contract.UnpackLog(event, "Transfer", log); err != nil {
   799  					return err
   800  				}
   801  				event.Raw = log
   802  
   803  				select {
   804  				case sink <- event:
   805  				case err := <-sub.Err():
   806  					return err
   807  				case <-quit:
   808  					return nil
   809  				}
   810  			case err := <-sub.Err():
   811  				return err
   812  			case <-quit:
   813  				return nil
   814  			}
   815  		}
   816  	}), nil
   817  }
   818  
   819  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
   820  //
   821  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
   822  func (_IERC20 *IERC20Filterer) ParseTransfer(log types.Log) (*IERC20Transfer, error) {
   823  	event := new(IERC20Transfer)
   824  	if err := _IERC20.contract.UnpackLog(event, "Transfer", log); err != nil {
   825  		return nil, err
   826  	}
   827  	event.Raw = log
   828  	return event, nil
   829  }
   830  
   831  // IERC20MetadataMetaData contains all meta data concerning the IERC20Metadata contract.
   832  var IERC20MetadataMetaData = &bind.MetaData{
   833  	ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
   834  	Sigs: map[string]string{
   835  		"dd62ed3e": "allowance(address,address)",
   836  		"095ea7b3": "approve(address,uint256)",
   837  		"70a08231": "balanceOf(address)",
   838  		"313ce567": "decimals()",
   839  		"06fdde03": "name()",
   840  		"95d89b41": "symbol()",
   841  		"18160ddd": "totalSupply()",
   842  		"a9059cbb": "transfer(address,uint256)",
   843  		"23b872dd": "transferFrom(address,address,uint256)",
   844  	},
   845  }
   846  
   847  // IERC20MetadataABI is the input ABI used to generate the binding from.
   848  // Deprecated: Use IERC20MetadataMetaData.ABI instead.
   849  var IERC20MetadataABI = IERC20MetadataMetaData.ABI
   850  
   851  // Deprecated: Use IERC20MetadataMetaData.Sigs instead.
   852  // IERC20MetadataFuncSigs maps the 4-byte function signature to its string representation.
   853  var IERC20MetadataFuncSigs = IERC20MetadataMetaData.Sigs
   854  
   855  // IERC20Metadata is an auto generated Go binding around an Ethereum contract.
   856  type IERC20Metadata struct {
   857  	IERC20MetadataCaller     // Read-only binding to the contract
   858  	IERC20MetadataTransactor // Write-only binding to the contract
   859  	IERC20MetadataFilterer   // Log filterer for contract events
   860  }
   861  
   862  // IERC20MetadataCaller is an auto generated read-only Go binding around an Ethereum contract.
   863  type IERC20MetadataCaller struct {
   864  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   865  }
   866  
   867  // IERC20MetadataTransactor is an auto generated write-only Go binding around an Ethereum contract.
   868  type IERC20MetadataTransactor struct {
   869  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   870  }
   871  
   872  // IERC20MetadataFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
   873  type IERC20MetadataFilterer struct {
   874  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   875  }
   876  
   877  // IERC20MetadataSession is an auto generated Go binding around an Ethereum contract,
   878  // with pre-set call and transact options.
   879  type IERC20MetadataSession struct {
   880  	Contract     *IERC20Metadata   // Generic contract binding to set the session for
   881  	CallOpts     bind.CallOpts     // Call options to use throughout this session
   882  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   883  }
   884  
   885  // IERC20MetadataCallerSession is an auto generated read-only Go binding around an Ethereum contract,
   886  // with pre-set call options.
   887  type IERC20MetadataCallerSession struct {
   888  	Contract *IERC20MetadataCaller // Generic contract caller binding to set the session for
   889  	CallOpts bind.CallOpts         // Call options to use throughout this session
   890  }
   891  
   892  // IERC20MetadataTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
   893  // with pre-set transact options.
   894  type IERC20MetadataTransactorSession struct {
   895  	Contract     *IERC20MetadataTransactor // Generic contract transactor binding to set the session for
   896  	TransactOpts bind.TransactOpts         // Transaction auth options to use throughout this session
   897  }
   898  
   899  // IERC20MetadataRaw is an auto generated low-level Go binding around an Ethereum contract.
   900  type IERC20MetadataRaw struct {
   901  	Contract *IERC20Metadata // Generic contract binding to access the raw methods on
   902  }
   903  
   904  // IERC20MetadataCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
   905  type IERC20MetadataCallerRaw struct {
   906  	Contract *IERC20MetadataCaller // Generic read-only contract binding to access the raw methods on
   907  }
   908  
   909  // IERC20MetadataTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
   910  type IERC20MetadataTransactorRaw struct {
   911  	Contract *IERC20MetadataTransactor // Generic write-only contract binding to access the raw methods on
   912  }
   913  
   914  // NewIERC20Metadata creates a new instance of IERC20Metadata, bound to a specific deployed contract.
   915  func NewIERC20Metadata(address common.Address, backend bind.ContractBackend) (*IERC20Metadata, error) {
   916  	contract, err := bindIERC20Metadata(address, backend, backend, backend)
   917  	if err != nil {
   918  		return nil, err
   919  	}
   920  	return &IERC20Metadata{IERC20MetadataCaller: IERC20MetadataCaller{contract: contract}, IERC20MetadataTransactor: IERC20MetadataTransactor{contract: contract}, IERC20MetadataFilterer: IERC20MetadataFilterer{contract: contract}}, nil
   921  }
   922  
   923  // NewIERC20MetadataCaller creates a new read-only instance of IERC20Metadata, bound to a specific deployed contract.
   924  func NewIERC20MetadataCaller(address common.Address, caller bind.ContractCaller) (*IERC20MetadataCaller, error) {
   925  	contract, err := bindIERC20Metadata(address, caller, nil, nil)
   926  	if err != nil {
   927  		return nil, err
   928  	}
   929  	return &IERC20MetadataCaller{contract: contract}, nil
   930  }
   931  
   932  // NewIERC20MetadataTransactor creates a new write-only instance of IERC20Metadata, bound to a specific deployed contract.
   933  func NewIERC20MetadataTransactor(address common.Address, transactor bind.ContractTransactor) (*IERC20MetadataTransactor, error) {
   934  	contract, err := bindIERC20Metadata(address, nil, transactor, nil)
   935  	if err != nil {
   936  		return nil, err
   937  	}
   938  	return &IERC20MetadataTransactor{contract: contract}, nil
   939  }
   940  
   941  // NewIERC20MetadataFilterer creates a new log filterer instance of IERC20Metadata, bound to a specific deployed contract.
   942  func NewIERC20MetadataFilterer(address common.Address, filterer bind.ContractFilterer) (*IERC20MetadataFilterer, error) {
   943  	contract, err := bindIERC20Metadata(address, nil, nil, filterer)
   944  	if err != nil {
   945  		return nil, err
   946  	}
   947  	return &IERC20MetadataFilterer{contract: contract}, nil
   948  }
   949  
   950  // bindIERC20Metadata binds a generic wrapper to an already deployed contract.
   951  func bindIERC20Metadata(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
   952  	parsed, err := abi.JSON(strings.NewReader(IERC20MetadataABI))
   953  	if err != nil {
   954  		return nil, err
   955  	}
   956  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
   957  }
   958  
   959  // Call invokes the (constant) contract method with params as input values and
   960  // sets the output to result. The result type might be a single field for simple
   961  // returns, a slice of interfaces for anonymous returns and a struct for named
   962  // returns.
   963  func (_IERC20Metadata *IERC20MetadataRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   964  	return _IERC20Metadata.Contract.IERC20MetadataCaller.contract.Call(opts, result, method, params...)
   965  }
   966  
   967  // Transfer initiates a plain transaction to move funds to the contract, calling
   968  // its default method if one is available.
   969  func (_IERC20Metadata *IERC20MetadataRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   970  	return _IERC20Metadata.Contract.IERC20MetadataTransactor.contract.Transfer(opts)
   971  }
   972  
   973  // Transact invokes the (paid) contract method with params as input values.
   974  func (_IERC20Metadata *IERC20MetadataRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   975  	return _IERC20Metadata.Contract.IERC20MetadataTransactor.contract.Transact(opts, method, params...)
   976  }
   977  
   978  // Call invokes the (constant) contract method with params as input values and
   979  // sets the output to result. The result type might be a single field for simple
   980  // returns, a slice of interfaces for anonymous returns and a struct for named
   981  // returns.
   982  func (_IERC20Metadata *IERC20MetadataCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   983  	return _IERC20Metadata.Contract.contract.Call(opts, result, method, params...)
   984  }
   985  
   986  // Transfer initiates a plain transaction to move funds to the contract, calling
   987  // its default method if one is available.
   988  func (_IERC20Metadata *IERC20MetadataTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   989  	return _IERC20Metadata.Contract.contract.Transfer(opts)
   990  }
   991  
   992  // Transact invokes the (paid) contract method with params as input values.
   993  func (_IERC20Metadata *IERC20MetadataTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   994  	return _IERC20Metadata.Contract.contract.Transact(opts, method, params...)
   995  }
   996  
   997  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
   998  //
   999  // Solidity: function allowance(address owner, address spender) view returns(uint256)
  1000  func (_IERC20Metadata *IERC20MetadataCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) {
  1001  	var out []interface{}
  1002  	err := _IERC20Metadata.contract.Call(opts, &out, "allowance", owner, spender)
  1003  
  1004  	if err != nil {
  1005  		return *new(*big.Int), err
  1006  	}
  1007  
  1008  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1009  
  1010  	return out0, err
  1011  
  1012  }
  1013  
  1014  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
  1015  //
  1016  // Solidity: function allowance(address owner, address spender) view returns(uint256)
  1017  func (_IERC20Metadata *IERC20MetadataSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
  1018  	return _IERC20Metadata.Contract.Allowance(&_IERC20Metadata.CallOpts, owner, spender)
  1019  }
  1020  
  1021  // Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
  1022  //
  1023  // Solidity: function allowance(address owner, address spender) view returns(uint256)
  1024  func (_IERC20Metadata *IERC20MetadataCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
  1025  	return _IERC20Metadata.Contract.Allowance(&_IERC20Metadata.CallOpts, owner, spender)
  1026  }
  1027  
  1028  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  1029  //
  1030  // Solidity: function balanceOf(address account) view returns(uint256)
  1031  func (_IERC20Metadata *IERC20MetadataCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) {
  1032  	var out []interface{}
  1033  	err := _IERC20Metadata.contract.Call(opts, &out, "balanceOf", account)
  1034  
  1035  	if err != nil {
  1036  		return *new(*big.Int), err
  1037  	}
  1038  
  1039  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1040  
  1041  	return out0, err
  1042  
  1043  }
  1044  
  1045  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  1046  //
  1047  // Solidity: function balanceOf(address account) view returns(uint256)
  1048  func (_IERC20Metadata *IERC20MetadataSession) BalanceOf(account common.Address) (*big.Int, error) {
  1049  	return _IERC20Metadata.Contract.BalanceOf(&_IERC20Metadata.CallOpts, account)
  1050  }
  1051  
  1052  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  1053  //
  1054  // Solidity: function balanceOf(address account) view returns(uint256)
  1055  func (_IERC20Metadata *IERC20MetadataCallerSession) BalanceOf(account common.Address) (*big.Int, error) {
  1056  	return _IERC20Metadata.Contract.BalanceOf(&_IERC20Metadata.CallOpts, account)
  1057  }
  1058  
  1059  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
  1060  //
  1061  // Solidity: function decimals() view returns(uint8)
  1062  func (_IERC20Metadata *IERC20MetadataCaller) Decimals(opts *bind.CallOpts) (uint8, error) {
  1063  	var out []interface{}
  1064  	err := _IERC20Metadata.contract.Call(opts, &out, "decimals")
  1065  
  1066  	if err != nil {
  1067  		return *new(uint8), err
  1068  	}
  1069  
  1070  	out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
  1071  
  1072  	return out0, err
  1073  
  1074  }
  1075  
  1076  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
  1077  //
  1078  // Solidity: function decimals() view returns(uint8)
  1079  func (_IERC20Metadata *IERC20MetadataSession) Decimals() (uint8, error) {
  1080  	return _IERC20Metadata.Contract.Decimals(&_IERC20Metadata.CallOpts)
  1081  }
  1082  
  1083  // Decimals is a free data retrieval call binding the contract method 0x313ce567.
  1084  //
  1085  // Solidity: function decimals() view returns(uint8)
  1086  func (_IERC20Metadata *IERC20MetadataCallerSession) Decimals() (uint8, error) {
  1087  	return _IERC20Metadata.Contract.Decimals(&_IERC20Metadata.CallOpts)
  1088  }
  1089  
  1090  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  1091  //
  1092  // Solidity: function name() view returns(string)
  1093  func (_IERC20Metadata *IERC20MetadataCaller) Name(opts *bind.CallOpts) (string, error) {
  1094  	var out []interface{}
  1095  	err := _IERC20Metadata.contract.Call(opts, &out, "name")
  1096  
  1097  	if err != nil {
  1098  		return *new(string), err
  1099  	}
  1100  
  1101  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  1102  
  1103  	return out0, err
  1104  
  1105  }
  1106  
  1107  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  1108  //
  1109  // Solidity: function name() view returns(string)
  1110  func (_IERC20Metadata *IERC20MetadataSession) Name() (string, error) {
  1111  	return _IERC20Metadata.Contract.Name(&_IERC20Metadata.CallOpts)
  1112  }
  1113  
  1114  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  1115  //
  1116  // Solidity: function name() view returns(string)
  1117  func (_IERC20Metadata *IERC20MetadataCallerSession) Name() (string, error) {
  1118  	return _IERC20Metadata.Contract.Name(&_IERC20Metadata.CallOpts)
  1119  }
  1120  
  1121  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  1122  //
  1123  // Solidity: function symbol() view returns(string)
  1124  func (_IERC20Metadata *IERC20MetadataCaller) Symbol(opts *bind.CallOpts) (string, error) {
  1125  	var out []interface{}
  1126  	err := _IERC20Metadata.contract.Call(opts, &out, "symbol")
  1127  
  1128  	if err != nil {
  1129  		return *new(string), err
  1130  	}
  1131  
  1132  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  1133  
  1134  	return out0, err
  1135  
  1136  }
  1137  
  1138  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  1139  //
  1140  // Solidity: function symbol() view returns(string)
  1141  func (_IERC20Metadata *IERC20MetadataSession) Symbol() (string, error) {
  1142  	return _IERC20Metadata.Contract.Symbol(&_IERC20Metadata.CallOpts)
  1143  }
  1144  
  1145  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  1146  //
  1147  // Solidity: function symbol() view returns(string)
  1148  func (_IERC20Metadata *IERC20MetadataCallerSession) Symbol() (string, error) {
  1149  	return _IERC20Metadata.Contract.Symbol(&_IERC20Metadata.CallOpts)
  1150  }
  1151  
  1152  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  1153  //
  1154  // Solidity: function totalSupply() view returns(uint256)
  1155  func (_IERC20Metadata *IERC20MetadataCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
  1156  	var out []interface{}
  1157  	err := _IERC20Metadata.contract.Call(opts, &out, "totalSupply")
  1158  
  1159  	if err != nil {
  1160  		return *new(*big.Int), err
  1161  	}
  1162  
  1163  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1164  
  1165  	return out0, err
  1166  
  1167  }
  1168  
  1169  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  1170  //
  1171  // Solidity: function totalSupply() view returns(uint256)
  1172  func (_IERC20Metadata *IERC20MetadataSession) TotalSupply() (*big.Int, error) {
  1173  	return _IERC20Metadata.Contract.TotalSupply(&_IERC20Metadata.CallOpts)
  1174  }
  1175  
  1176  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  1177  //
  1178  // Solidity: function totalSupply() view returns(uint256)
  1179  func (_IERC20Metadata *IERC20MetadataCallerSession) TotalSupply() (*big.Int, error) {
  1180  	return _IERC20Metadata.Contract.TotalSupply(&_IERC20Metadata.CallOpts)
  1181  }
  1182  
  1183  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  1184  //
  1185  // Solidity: function approve(address spender, uint256 amount) returns(bool)
  1186  func (_IERC20Metadata *IERC20MetadataTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) {
  1187  	return _IERC20Metadata.contract.Transact(opts, "approve", spender, amount)
  1188  }
  1189  
  1190  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  1191  //
  1192  // Solidity: function approve(address spender, uint256 amount) returns(bool)
  1193  func (_IERC20Metadata *IERC20MetadataSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
  1194  	return _IERC20Metadata.Contract.Approve(&_IERC20Metadata.TransactOpts, spender, amount)
  1195  }
  1196  
  1197  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  1198  //
  1199  // Solidity: function approve(address spender, uint256 amount) returns(bool)
  1200  func (_IERC20Metadata *IERC20MetadataTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) {
  1201  	return _IERC20Metadata.Contract.Approve(&_IERC20Metadata.TransactOpts, spender, amount)
  1202  }
  1203  
  1204  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  1205  //
  1206  // Solidity: function transfer(address to, uint256 amount) returns(bool)
  1207  func (_IERC20Metadata *IERC20MetadataTransactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) {
  1208  	return _IERC20Metadata.contract.Transact(opts, "transfer", to, amount)
  1209  }
  1210  
  1211  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  1212  //
  1213  // Solidity: function transfer(address to, uint256 amount) returns(bool)
  1214  func (_IERC20Metadata *IERC20MetadataSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) {
  1215  	return _IERC20Metadata.Contract.Transfer(&_IERC20Metadata.TransactOpts, to, amount)
  1216  }
  1217  
  1218  // Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
  1219  //
  1220  // Solidity: function transfer(address to, uint256 amount) returns(bool)
  1221  func (_IERC20Metadata *IERC20MetadataTransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) {
  1222  	return _IERC20Metadata.Contract.Transfer(&_IERC20Metadata.TransactOpts, to, amount)
  1223  }
  1224  
  1225  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  1226  //
  1227  // Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool)
  1228  func (_IERC20Metadata *IERC20MetadataTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) {
  1229  	return _IERC20Metadata.contract.Transact(opts, "transferFrom", from, to, amount)
  1230  }
  1231  
  1232  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  1233  //
  1234  // Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool)
  1235  func (_IERC20Metadata *IERC20MetadataSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) {
  1236  	return _IERC20Metadata.Contract.TransferFrom(&_IERC20Metadata.TransactOpts, from, to, amount)
  1237  }
  1238  
  1239  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  1240  //
  1241  // Solidity: function transferFrom(address from, address to, uint256 amount) returns(bool)
  1242  func (_IERC20Metadata *IERC20MetadataTransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) {
  1243  	return _IERC20Metadata.Contract.TransferFrom(&_IERC20Metadata.TransactOpts, from, to, amount)
  1244  }
  1245  
  1246  // IERC20MetadataApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the IERC20Metadata contract.
  1247  type IERC20MetadataApprovalIterator struct {
  1248  	Event *IERC20MetadataApproval // Event containing the contract specifics and raw log
  1249  
  1250  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1251  	event    string              // Event name to use for unpacking event data
  1252  
  1253  	logs chan types.Log        // Log channel receiving the found contract events
  1254  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1255  	done bool                  // Whether the subscription completed delivering logs
  1256  	fail error                 // Occurred error to stop iteration
  1257  }
  1258  
  1259  // Next advances the iterator to the subsequent event, returning whether there
  1260  // are any more events found. In case of a retrieval or parsing error, false is
  1261  // returned and Error() can be queried for the exact failure.
  1262  func (it *IERC20MetadataApprovalIterator) Next() bool {
  1263  	// If the iterator failed, stop iterating
  1264  	if it.fail != nil {
  1265  		return false
  1266  	}
  1267  	// If the iterator completed, deliver directly whatever's available
  1268  	if it.done {
  1269  		select {
  1270  		case log := <-it.logs:
  1271  			it.Event = new(IERC20MetadataApproval)
  1272  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1273  				it.fail = err
  1274  				return false
  1275  			}
  1276  			it.Event.Raw = log
  1277  			return true
  1278  
  1279  		default:
  1280  			return false
  1281  		}
  1282  	}
  1283  	// Iterator still in progress, wait for either a data or an error event
  1284  	select {
  1285  	case log := <-it.logs:
  1286  		it.Event = new(IERC20MetadataApproval)
  1287  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1288  			it.fail = err
  1289  			return false
  1290  		}
  1291  		it.Event.Raw = log
  1292  		return true
  1293  
  1294  	case err := <-it.sub.Err():
  1295  		it.done = true
  1296  		it.fail = err
  1297  		return it.Next()
  1298  	}
  1299  }
  1300  
  1301  // Error returns any retrieval or parsing error occurred during filtering.
  1302  func (it *IERC20MetadataApprovalIterator) Error() error {
  1303  	return it.fail
  1304  }
  1305  
  1306  // Close terminates the iteration process, releasing any pending underlying
  1307  // resources.
  1308  func (it *IERC20MetadataApprovalIterator) Close() error {
  1309  	it.sub.Unsubscribe()
  1310  	return nil
  1311  }
  1312  
  1313  // IERC20MetadataApproval represents a Approval event raised by the IERC20Metadata contract.
  1314  type IERC20MetadataApproval struct {
  1315  	Owner   common.Address
  1316  	Spender common.Address
  1317  	Value   *big.Int
  1318  	Raw     types.Log // Blockchain specific contextual infos
  1319  }
  1320  
  1321  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  1322  //
  1323  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
  1324  func (_IERC20Metadata *IERC20MetadataFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*IERC20MetadataApprovalIterator, error) {
  1325  
  1326  	var ownerRule []interface{}
  1327  	for _, ownerItem := range owner {
  1328  		ownerRule = append(ownerRule, ownerItem)
  1329  	}
  1330  	var spenderRule []interface{}
  1331  	for _, spenderItem := range spender {
  1332  		spenderRule = append(spenderRule, spenderItem)
  1333  	}
  1334  
  1335  	logs, sub, err := _IERC20Metadata.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
  1336  	if err != nil {
  1337  		return nil, err
  1338  	}
  1339  	return &IERC20MetadataApprovalIterator{contract: _IERC20Metadata.contract, event: "Approval", logs: logs, sub: sub}, nil
  1340  }
  1341  
  1342  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  1343  //
  1344  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
  1345  func (_IERC20Metadata *IERC20MetadataFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IERC20MetadataApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) {
  1346  
  1347  	var ownerRule []interface{}
  1348  	for _, ownerItem := range owner {
  1349  		ownerRule = append(ownerRule, ownerItem)
  1350  	}
  1351  	var spenderRule []interface{}
  1352  	for _, spenderItem := range spender {
  1353  		spenderRule = append(spenderRule, spenderItem)
  1354  	}
  1355  
  1356  	logs, sub, err := _IERC20Metadata.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
  1357  	if err != nil {
  1358  		return nil, err
  1359  	}
  1360  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1361  		defer sub.Unsubscribe()
  1362  		for {
  1363  			select {
  1364  			case log := <-logs:
  1365  				// New log arrived, parse the event and forward to the user
  1366  				event := new(IERC20MetadataApproval)
  1367  				if err := _IERC20Metadata.contract.UnpackLog(event, "Approval", log); err != nil {
  1368  					return err
  1369  				}
  1370  				event.Raw = log
  1371  
  1372  				select {
  1373  				case sink <- event:
  1374  				case err := <-sub.Err():
  1375  					return err
  1376  				case <-quit:
  1377  					return nil
  1378  				}
  1379  			case err := <-sub.Err():
  1380  				return err
  1381  			case <-quit:
  1382  				return nil
  1383  			}
  1384  		}
  1385  	}), nil
  1386  }
  1387  
  1388  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  1389  //
  1390  // Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
  1391  func (_IERC20Metadata *IERC20MetadataFilterer) ParseApproval(log types.Log) (*IERC20MetadataApproval, error) {
  1392  	event := new(IERC20MetadataApproval)
  1393  	if err := _IERC20Metadata.contract.UnpackLog(event, "Approval", log); err != nil {
  1394  		return nil, err
  1395  	}
  1396  	event.Raw = log
  1397  	return event, nil
  1398  }
  1399  
  1400  // IERC20MetadataTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the IERC20Metadata contract.
  1401  type IERC20MetadataTransferIterator struct {
  1402  	Event *IERC20MetadataTransfer // Event containing the contract specifics and raw log
  1403  
  1404  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1405  	event    string              // Event name to use for unpacking event data
  1406  
  1407  	logs chan types.Log        // Log channel receiving the found contract events
  1408  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1409  	done bool                  // Whether the subscription completed delivering logs
  1410  	fail error                 // Occurred error to stop iteration
  1411  }
  1412  
  1413  // Next advances the iterator to the subsequent event, returning whether there
  1414  // are any more events found. In case of a retrieval or parsing error, false is
  1415  // returned and Error() can be queried for the exact failure.
  1416  func (it *IERC20MetadataTransferIterator) Next() bool {
  1417  	// If the iterator failed, stop iterating
  1418  	if it.fail != nil {
  1419  		return false
  1420  	}
  1421  	// If the iterator completed, deliver directly whatever's available
  1422  	if it.done {
  1423  		select {
  1424  		case log := <-it.logs:
  1425  			it.Event = new(IERC20MetadataTransfer)
  1426  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1427  				it.fail = err
  1428  				return false
  1429  			}
  1430  			it.Event.Raw = log
  1431  			return true
  1432  
  1433  		default:
  1434  			return false
  1435  		}
  1436  	}
  1437  	// Iterator still in progress, wait for either a data or an error event
  1438  	select {
  1439  	case log := <-it.logs:
  1440  		it.Event = new(IERC20MetadataTransfer)
  1441  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1442  			it.fail = err
  1443  			return false
  1444  		}
  1445  		it.Event.Raw = log
  1446  		return true
  1447  
  1448  	case err := <-it.sub.Err():
  1449  		it.done = true
  1450  		it.fail = err
  1451  		return it.Next()
  1452  	}
  1453  }
  1454  
  1455  // Error returns any retrieval or parsing error occurred during filtering.
  1456  func (it *IERC20MetadataTransferIterator) Error() error {
  1457  	return it.fail
  1458  }
  1459  
  1460  // Close terminates the iteration process, releasing any pending underlying
  1461  // resources.
  1462  func (it *IERC20MetadataTransferIterator) Close() error {
  1463  	it.sub.Unsubscribe()
  1464  	return nil
  1465  }
  1466  
  1467  // IERC20MetadataTransfer represents a Transfer event raised by the IERC20Metadata contract.
  1468  type IERC20MetadataTransfer struct {
  1469  	From  common.Address
  1470  	To    common.Address
  1471  	Value *big.Int
  1472  	Raw   types.Log // Blockchain specific contextual infos
  1473  }
  1474  
  1475  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  1476  //
  1477  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
  1478  func (_IERC20Metadata *IERC20MetadataFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*IERC20MetadataTransferIterator, error) {
  1479  
  1480  	var fromRule []interface{}
  1481  	for _, fromItem := range from {
  1482  		fromRule = append(fromRule, fromItem)
  1483  	}
  1484  	var toRule []interface{}
  1485  	for _, toItem := range to {
  1486  		toRule = append(toRule, toItem)
  1487  	}
  1488  
  1489  	logs, sub, err := _IERC20Metadata.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
  1490  	if err != nil {
  1491  		return nil, err
  1492  	}
  1493  	return &IERC20MetadataTransferIterator{contract: _IERC20Metadata.contract, event: "Transfer", logs: logs, sub: sub}, nil
  1494  }
  1495  
  1496  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  1497  //
  1498  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
  1499  func (_IERC20Metadata *IERC20MetadataFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IERC20MetadataTransfer, from []common.Address, to []common.Address) (event.Subscription, error) {
  1500  
  1501  	var fromRule []interface{}
  1502  	for _, fromItem := range from {
  1503  		fromRule = append(fromRule, fromItem)
  1504  	}
  1505  	var toRule []interface{}
  1506  	for _, toItem := range to {
  1507  		toRule = append(toRule, toItem)
  1508  	}
  1509  
  1510  	logs, sub, err := _IERC20Metadata.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
  1511  	if err != nil {
  1512  		return nil, err
  1513  	}
  1514  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1515  		defer sub.Unsubscribe()
  1516  		for {
  1517  			select {
  1518  			case log := <-logs:
  1519  				// New log arrived, parse the event and forward to the user
  1520  				event := new(IERC20MetadataTransfer)
  1521  				if err := _IERC20Metadata.contract.UnpackLog(event, "Transfer", log); err != nil {
  1522  					return err
  1523  				}
  1524  				event.Raw = log
  1525  
  1526  				select {
  1527  				case sink <- event:
  1528  				case err := <-sub.Err():
  1529  					return err
  1530  				case <-quit:
  1531  					return nil
  1532  				}
  1533  			case err := <-sub.Err():
  1534  				return err
  1535  			case <-quit:
  1536  				return nil
  1537  			}
  1538  		}
  1539  	}), nil
  1540  }
  1541  
  1542  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  1543  //
  1544  // Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
  1545  func (_IERC20Metadata *IERC20MetadataFilterer) ParseTransfer(log types.Log) (*IERC20MetadataTransfer, error) {
  1546  	event := new(IERC20MetadataTransfer)
  1547  	if err := _IERC20Metadata.contract.UnpackLog(event, "Transfer", log); err != nil {
  1548  		return nil, err
  1549  	}
  1550  	event.Raw = log
  1551  	return event, nil
  1552  }
  1553  
  1554  // IPoolMetaData contains all meta data concerning the IPool contract.
  1555  var IPoolMetaData = &bind.MetaData{
  1556  	ABI: "[{\"inputs\":[],\"name\":\"BelowMinimumK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositsNotEqual\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FactoryAlreadySet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientInputAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientLiquidityBurned\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientLiquidityMinted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientOutputAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTo\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IsPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"K\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEmergencyCouncil\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Claim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Fees\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0In\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1In\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reserve0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reserve1\",\"type\":\"uint256\"}],\"name\":\"Sync\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getAmountOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_reserve0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserve1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_blockTimestampLast\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token1\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_stable\",\"type\":\"bool\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"metadata\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dec0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dec1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"r0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"r1\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"st\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"t0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"t1\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"skim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount0Out\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1Out\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
  1557  	Sigs: map[string]string{
  1558  		"89afcb44": "burn(address)",
  1559  		"d294f093": "claimFees()",
  1560  		"f140a35a": "getAmountOut(uint256,address)",
  1561  		"0902f1ac": "getReserves()",
  1562  		"e4bbb5a8": "initialize(address,address,bool)",
  1563  		"392f37e9": "metadata()",
  1564  		"6a627842": "mint(address)",
  1565  		"bc25cf77": "skim(address)",
  1566  		"22be3de1": "stable()",
  1567  		"022c0d9f": "swap(uint256,uint256,address,bytes)",
  1568  		"0dfe1681": "token0()",
  1569  		"d21220a7": "token1()",
  1570  		"9d63848a": "tokens()",
  1571  	},
  1572  }
  1573  
  1574  // IPoolABI is the input ABI used to generate the binding from.
  1575  // Deprecated: Use IPoolMetaData.ABI instead.
  1576  var IPoolABI = IPoolMetaData.ABI
  1577  
  1578  // Deprecated: Use IPoolMetaData.Sigs instead.
  1579  // IPoolFuncSigs maps the 4-byte function signature to its string representation.
  1580  var IPoolFuncSigs = IPoolMetaData.Sigs
  1581  
  1582  // IPool is an auto generated Go binding around an Ethereum contract.
  1583  type IPool struct {
  1584  	IPoolCaller     // Read-only binding to the contract
  1585  	IPoolTransactor // Write-only binding to the contract
  1586  	IPoolFilterer   // Log filterer for contract events
  1587  }
  1588  
  1589  // IPoolCaller is an auto generated read-only Go binding around an Ethereum contract.
  1590  type IPoolCaller struct {
  1591  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  1592  }
  1593  
  1594  // IPoolTransactor is an auto generated write-only Go binding around an Ethereum contract.
  1595  type IPoolTransactor struct {
  1596  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  1597  }
  1598  
  1599  // IPoolFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  1600  type IPoolFilterer struct {
  1601  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  1602  }
  1603  
  1604  // IPoolSession is an auto generated Go binding around an Ethereum contract,
  1605  // with pre-set call and transact options.
  1606  type IPoolSession struct {
  1607  	Contract     *IPool            // Generic contract binding to set the session for
  1608  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  1609  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  1610  }
  1611  
  1612  // IPoolCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  1613  // with pre-set call options.
  1614  type IPoolCallerSession struct {
  1615  	Contract *IPoolCaller  // Generic contract caller binding to set the session for
  1616  	CallOpts bind.CallOpts // Call options to use throughout this session
  1617  }
  1618  
  1619  // IPoolTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  1620  // with pre-set transact options.
  1621  type IPoolTransactorSession struct {
  1622  	Contract     *IPoolTransactor  // Generic contract transactor binding to set the session for
  1623  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  1624  }
  1625  
  1626  // IPoolRaw is an auto generated low-level Go binding around an Ethereum contract.
  1627  type IPoolRaw struct {
  1628  	Contract *IPool // Generic contract binding to access the raw methods on
  1629  }
  1630  
  1631  // IPoolCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  1632  type IPoolCallerRaw struct {
  1633  	Contract *IPoolCaller // Generic read-only contract binding to access the raw methods on
  1634  }
  1635  
  1636  // IPoolTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  1637  type IPoolTransactorRaw struct {
  1638  	Contract *IPoolTransactor // Generic write-only contract binding to access the raw methods on
  1639  }
  1640  
  1641  // NewIPool creates a new instance of IPool, bound to a specific deployed contract.
  1642  func NewIPool(address common.Address, backend bind.ContractBackend) (*IPool, error) {
  1643  	contract, err := bindIPool(address, backend, backend, backend)
  1644  	if err != nil {
  1645  		return nil, err
  1646  	}
  1647  	return &IPool{IPoolCaller: IPoolCaller{contract: contract}, IPoolTransactor: IPoolTransactor{contract: contract}, IPoolFilterer: IPoolFilterer{contract: contract}}, nil
  1648  }
  1649  
  1650  // NewIPoolCaller creates a new read-only instance of IPool, bound to a specific deployed contract.
  1651  func NewIPoolCaller(address common.Address, caller bind.ContractCaller) (*IPoolCaller, error) {
  1652  	contract, err := bindIPool(address, caller, nil, nil)
  1653  	if err != nil {
  1654  		return nil, err
  1655  	}
  1656  	return &IPoolCaller{contract: contract}, nil
  1657  }
  1658  
  1659  // NewIPoolTransactor creates a new write-only instance of IPool, bound to a specific deployed contract.
  1660  func NewIPoolTransactor(address common.Address, transactor bind.ContractTransactor) (*IPoolTransactor, error) {
  1661  	contract, err := bindIPool(address, nil, transactor, nil)
  1662  	if err != nil {
  1663  		return nil, err
  1664  	}
  1665  	return &IPoolTransactor{contract: contract}, nil
  1666  }
  1667  
  1668  // NewIPoolFilterer creates a new log filterer instance of IPool, bound to a specific deployed contract.
  1669  func NewIPoolFilterer(address common.Address, filterer bind.ContractFilterer) (*IPoolFilterer, error) {
  1670  	contract, err := bindIPool(address, nil, nil, filterer)
  1671  	if err != nil {
  1672  		return nil, err
  1673  	}
  1674  	return &IPoolFilterer{contract: contract}, nil
  1675  }
  1676  
  1677  // bindIPool binds a generic wrapper to an already deployed contract.
  1678  func bindIPool(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  1679  	parsed, err := abi.JSON(strings.NewReader(IPoolABI))
  1680  	if err != nil {
  1681  		return nil, err
  1682  	}
  1683  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  1684  }
  1685  
  1686  // Call invokes the (constant) contract method with params as input values and
  1687  // sets the output to result. The result type might be a single field for simple
  1688  // returns, a slice of interfaces for anonymous returns and a struct for named
  1689  // returns.
  1690  func (_IPool *IPoolRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  1691  	return _IPool.Contract.IPoolCaller.contract.Call(opts, result, method, params...)
  1692  }
  1693  
  1694  // Transfer initiates a plain transaction to move funds to the contract, calling
  1695  // its default method if one is available.
  1696  func (_IPool *IPoolRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  1697  	return _IPool.Contract.IPoolTransactor.contract.Transfer(opts)
  1698  }
  1699  
  1700  // Transact invokes the (paid) contract method with params as input values.
  1701  func (_IPool *IPoolRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  1702  	return _IPool.Contract.IPoolTransactor.contract.Transact(opts, method, params...)
  1703  }
  1704  
  1705  // Call invokes the (constant) contract method with params as input values and
  1706  // sets the output to result. The result type might be a single field for simple
  1707  // returns, a slice of interfaces for anonymous returns and a struct for named
  1708  // returns.
  1709  func (_IPool *IPoolCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  1710  	return _IPool.Contract.contract.Call(opts, result, method, params...)
  1711  }
  1712  
  1713  // Transfer initiates a plain transaction to move funds to the contract, calling
  1714  // its default method if one is available.
  1715  func (_IPool *IPoolTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  1716  	return _IPool.Contract.contract.Transfer(opts)
  1717  }
  1718  
  1719  // Transact invokes the (paid) contract method with params as input values.
  1720  func (_IPool *IPoolTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  1721  	return _IPool.Contract.contract.Transact(opts, method, params...)
  1722  }
  1723  
  1724  // GetAmountOut is a free data retrieval call binding the contract method 0xf140a35a.
  1725  //
  1726  // Solidity: function getAmountOut(uint256 , address ) view returns(uint256)
  1727  func (_IPool *IPoolCaller) GetAmountOut(opts *bind.CallOpts, arg0 *big.Int, arg1 common.Address) (*big.Int, error) {
  1728  	var out []interface{}
  1729  	err := _IPool.contract.Call(opts, &out, "getAmountOut", arg0, arg1)
  1730  
  1731  	if err != nil {
  1732  		return *new(*big.Int), err
  1733  	}
  1734  
  1735  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1736  
  1737  	return out0, err
  1738  
  1739  }
  1740  
  1741  // GetAmountOut is a free data retrieval call binding the contract method 0xf140a35a.
  1742  //
  1743  // Solidity: function getAmountOut(uint256 , address ) view returns(uint256)
  1744  func (_IPool *IPoolSession) GetAmountOut(arg0 *big.Int, arg1 common.Address) (*big.Int, error) {
  1745  	return _IPool.Contract.GetAmountOut(&_IPool.CallOpts, arg0, arg1)
  1746  }
  1747  
  1748  // GetAmountOut is a free data retrieval call binding the contract method 0xf140a35a.
  1749  //
  1750  // Solidity: function getAmountOut(uint256 , address ) view returns(uint256)
  1751  func (_IPool *IPoolCallerSession) GetAmountOut(arg0 *big.Int, arg1 common.Address) (*big.Int, error) {
  1752  	return _IPool.Contract.GetAmountOut(&_IPool.CallOpts, arg0, arg1)
  1753  }
  1754  
  1755  // GetReserves is a free data retrieval call binding the contract method 0x0902f1ac.
  1756  //
  1757  // Solidity: function getReserves() view returns(uint256 _reserve0, uint256 _reserve1, uint256 _blockTimestampLast)
  1758  func (_IPool *IPoolCaller) GetReserves(opts *bind.CallOpts) (struct {
  1759  	Reserve0           *big.Int
  1760  	Reserve1           *big.Int
  1761  	BlockTimestampLast *big.Int
  1762  }, error) {
  1763  	var out []interface{}
  1764  	err := _IPool.contract.Call(opts, &out, "getReserves")
  1765  
  1766  	outstruct := new(struct {
  1767  		Reserve0           *big.Int
  1768  		Reserve1           *big.Int
  1769  		BlockTimestampLast *big.Int
  1770  	})
  1771  	if err != nil {
  1772  		return *outstruct, err
  1773  	}
  1774  
  1775  	outstruct.Reserve0 = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1776  	outstruct.Reserve1 = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)
  1777  	outstruct.BlockTimestampLast = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int)
  1778  
  1779  	return *outstruct, err
  1780  
  1781  }
  1782  
  1783  // GetReserves is a free data retrieval call binding the contract method 0x0902f1ac.
  1784  //
  1785  // Solidity: function getReserves() view returns(uint256 _reserve0, uint256 _reserve1, uint256 _blockTimestampLast)
  1786  func (_IPool *IPoolSession) GetReserves() (struct {
  1787  	Reserve0           *big.Int
  1788  	Reserve1           *big.Int
  1789  	BlockTimestampLast *big.Int
  1790  }, error) {
  1791  	return _IPool.Contract.GetReserves(&_IPool.CallOpts)
  1792  }
  1793  
  1794  // GetReserves is a free data retrieval call binding the contract method 0x0902f1ac.
  1795  //
  1796  // Solidity: function getReserves() view returns(uint256 _reserve0, uint256 _reserve1, uint256 _blockTimestampLast)
  1797  func (_IPool *IPoolCallerSession) GetReserves() (struct {
  1798  	Reserve0           *big.Int
  1799  	Reserve1           *big.Int
  1800  	BlockTimestampLast *big.Int
  1801  }, error) {
  1802  	return _IPool.Contract.GetReserves(&_IPool.CallOpts)
  1803  }
  1804  
  1805  // Metadata is a free data retrieval call binding the contract method 0x392f37e9.
  1806  //
  1807  // Solidity: function metadata() view returns(uint256 dec0, uint256 dec1, uint256 r0, uint256 r1, bool st, address t0, address t1)
  1808  func (_IPool *IPoolCaller) Metadata(opts *bind.CallOpts) (struct {
  1809  	Dec0 *big.Int
  1810  	Dec1 *big.Int
  1811  	R0   *big.Int
  1812  	R1   *big.Int
  1813  	St   bool
  1814  	T0   common.Address
  1815  	T1   common.Address
  1816  }, error) {
  1817  	var out []interface{}
  1818  	err := _IPool.contract.Call(opts, &out, "metadata")
  1819  
  1820  	outstruct := new(struct {
  1821  		Dec0 *big.Int
  1822  		Dec1 *big.Int
  1823  		R0   *big.Int
  1824  		R1   *big.Int
  1825  		St   bool
  1826  		T0   common.Address
  1827  		T1   common.Address
  1828  	})
  1829  	if err != nil {
  1830  		return *outstruct, err
  1831  	}
  1832  
  1833  	outstruct.Dec0 = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1834  	outstruct.Dec1 = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)
  1835  	outstruct.R0 = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int)
  1836  	outstruct.R1 = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int)
  1837  	outstruct.St = *abi.ConvertType(out[4], new(bool)).(*bool)
  1838  	outstruct.T0 = *abi.ConvertType(out[5], new(common.Address)).(*common.Address)
  1839  	outstruct.T1 = *abi.ConvertType(out[6], new(common.Address)).(*common.Address)
  1840  
  1841  	return *outstruct, err
  1842  
  1843  }
  1844  
  1845  // Metadata is a free data retrieval call binding the contract method 0x392f37e9.
  1846  //
  1847  // Solidity: function metadata() view returns(uint256 dec0, uint256 dec1, uint256 r0, uint256 r1, bool st, address t0, address t1)
  1848  func (_IPool *IPoolSession) Metadata() (struct {
  1849  	Dec0 *big.Int
  1850  	Dec1 *big.Int
  1851  	R0   *big.Int
  1852  	R1   *big.Int
  1853  	St   bool
  1854  	T0   common.Address
  1855  	T1   common.Address
  1856  }, error) {
  1857  	return _IPool.Contract.Metadata(&_IPool.CallOpts)
  1858  }
  1859  
  1860  // Metadata is a free data retrieval call binding the contract method 0x392f37e9.
  1861  //
  1862  // Solidity: function metadata() view returns(uint256 dec0, uint256 dec1, uint256 r0, uint256 r1, bool st, address t0, address t1)
  1863  func (_IPool *IPoolCallerSession) Metadata() (struct {
  1864  	Dec0 *big.Int
  1865  	Dec1 *big.Int
  1866  	R0   *big.Int
  1867  	R1   *big.Int
  1868  	St   bool
  1869  	T0   common.Address
  1870  	T1   common.Address
  1871  }, error) {
  1872  	return _IPool.Contract.Metadata(&_IPool.CallOpts)
  1873  }
  1874  
  1875  // Stable is a free data retrieval call binding the contract method 0x22be3de1.
  1876  //
  1877  // Solidity: function stable() view returns(bool)
  1878  func (_IPool *IPoolCaller) Stable(opts *bind.CallOpts) (bool, error) {
  1879  	var out []interface{}
  1880  	err := _IPool.contract.Call(opts, &out, "stable")
  1881  
  1882  	if err != nil {
  1883  		return *new(bool), err
  1884  	}
  1885  
  1886  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  1887  
  1888  	return out0, err
  1889  
  1890  }
  1891  
  1892  // Stable is a free data retrieval call binding the contract method 0x22be3de1.
  1893  //
  1894  // Solidity: function stable() view returns(bool)
  1895  func (_IPool *IPoolSession) Stable() (bool, error) {
  1896  	return _IPool.Contract.Stable(&_IPool.CallOpts)
  1897  }
  1898  
  1899  // Stable is a free data retrieval call binding the contract method 0x22be3de1.
  1900  //
  1901  // Solidity: function stable() view returns(bool)
  1902  func (_IPool *IPoolCallerSession) Stable() (bool, error) {
  1903  	return _IPool.Contract.Stable(&_IPool.CallOpts)
  1904  }
  1905  
  1906  // Token0 is a free data retrieval call binding the contract method 0x0dfe1681.
  1907  //
  1908  // Solidity: function token0() view returns(address)
  1909  func (_IPool *IPoolCaller) Token0(opts *bind.CallOpts) (common.Address, error) {
  1910  	var out []interface{}
  1911  	err := _IPool.contract.Call(opts, &out, "token0")
  1912  
  1913  	if err != nil {
  1914  		return *new(common.Address), err
  1915  	}
  1916  
  1917  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  1918  
  1919  	return out0, err
  1920  
  1921  }
  1922  
  1923  // Token0 is a free data retrieval call binding the contract method 0x0dfe1681.
  1924  //
  1925  // Solidity: function token0() view returns(address)
  1926  func (_IPool *IPoolSession) Token0() (common.Address, error) {
  1927  	return _IPool.Contract.Token0(&_IPool.CallOpts)
  1928  }
  1929  
  1930  // Token0 is a free data retrieval call binding the contract method 0x0dfe1681.
  1931  //
  1932  // Solidity: function token0() view returns(address)
  1933  func (_IPool *IPoolCallerSession) Token0() (common.Address, error) {
  1934  	return _IPool.Contract.Token0(&_IPool.CallOpts)
  1935  }
  1936  
  1937  // Token1 is a free data retrieval call binding the contract method 0xd21220a7.
  1938  //
  1939  // Solidity: function token1() view returns(address)
  1940  func (_IPool *IPoolCaller) Token1(opts *bind.CallOpts) (common.Address, error) {
  1941  	var out []interface{}
  1942  	err := _IPool.contract.Call(opts, &out, "token1")
  1943  
  1944  	if err != nil {
  1945  		return *new(common.Address), err
  1946  	}
  1947  
  1948  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  1949  
  1950  	return out0, err
  1951  
  1952  }
  1953  
  1954  // Token1 is a free data retrieval call binding the contract method 0xd21220a7.
  1955  //
  1956  // Solidity: function token1() view returns(address)
  1957  func (_IPool *IPoolSession) Token1() (common.Address, error) {
  1958  	return _IPool.Contract.Token1(&_IPool.CallOpts)
  1959  }
  1960  
  1961  // Token1 is a free data retrieval call binding the contract method 0xd21220a7.
  1962  //
  1963  // Solidity: function token1() view returns(address)
  1964  func (_IPool *IPoolCallerSession) Token1() (common.Address, error) {
  1965  	return _IPool.Contract.Token1(&_IPool.CallOpts)
  1966  }
  1967  
  1968  // Tokens is a free data retrieval call binding the contract method 0x9d63848a.
  1969  //
  1970  // Solidity: function tokens() view returns(address, address)
  1971  func (_IPool *IPoolCaller) Tokens(opts *bind.CallOpts) (common.Address, common.Address, error) {
  1972  	var out []interface{}
  1973  	err := _IPool.contract.Call(opts, &out, "tokens")
  1974  
  1975  	if err != nil {
  1976  		return *new(common.Address), *new(common.Address), err
  1977  	}
  1978  
  1979  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  1980  	out1 := *abi.ConvertType(out[1], new(common.Address)).(*common.Address)
  1981  
  1982  	return out0, out1, err
  1983  
  1984  }
  1985  
  1986  // Tokens is a free data retrieval call binding the contract method 0x9d63848a.
  1987  //
  1988  // Solidity: function tokens() view returns(address, address)
  1989  func (_IPool *IPoolSession) Tokens() (common.Address, common.Address, error) {
  1990  	return _IPool.Contract.Tokens(&_IPool.CallOpts)
  1991  }
  1992  
  1993  // Tokens is a free data retrieval call binding the contract method 0x9d63848a.
  1994  //
  1995  // Solidity: function tokens() view returns(address, address)
  1996  func (_IPool *IPoolCallerSession) Tokens() (common.Address, common.Address, error) {
  1997  	return _IPool.Contract.Tokens(&_IPool.CallOpts)
  1998  }
  1999  
  2000  // Burn is a paid mutator transaction binding the contract method 0x89afcb44.
  2001  //
  2002  // Solidity: function burn(address to) returns(uint256 amount0, uint256 amount1)
  2003  func (_IPool *IPoolTransactor) Burn(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
  2004  	return _IPool.contract.Transact(opts, "burn", to)
  2005  }
  2006  
  2007  // Burn is a paid mutator transaction binding the contract method 0x89afcb44.
  2008  //
  2009  // Solidity: function burn(address to) returns(uint256 amount0, uint256 amount1)
  2010  func (_IPool *IPoolSession) Burn(to common.Address) (*types.Transaction, error) {
  2011  	return _IPool.Contract.Burn(&_IPool.TransactOpts, to)
  2012  }
  2013  
  2014  // Burn is a paid mutator transaction binding the contract method 0x89afcb44.
  2015  //
  2016  // Solidity: function burn(address to) returns(uint256 amount0, uint256 amount1)
  2017  func (_IPool *IPoolTransactorSession) Burn(to common.Address) (*types.Transaction, error) {
  2018  	return _IPool.Contract.Burn(&_IPool.TransactOpts, to)
  2019  }
  2020  
  2021  // ClaimFees is a paid mutator transaction binding the contract method 0xd294f093.
  2022  //
  2023  // Solidity: function claimFees() returns(uint256, uint256)
  2024  func (_IPool *IPoolTransactor) ClaimFees(opts *bind.TransactOpts) (*types.Transaction, error) {
  2025  	return _IPool.contract.Transact(opts, "claimFees")
  2026  }
  2027  
  2028  // ClaimFees is a paid mutator transaction binding the contract method 0xd294f093.
  2029  //
  2030  // Solidity: function claimFees() returns(uint256, uint256)
  2031  func (_IPool *IPoolSession) ClaimFees() (*types.Transaction, error) {
  2032  	return _IPool.Contract.ClaimFees(&_IPool.TransactOpts)
  2033  }
  2034  
  2035  // ClaimFees is a paid mutator transaction binding the contract method 0xd294f093.
  2036  //
  2037  // Solidity: function claimFees() returns(uint256, uint256)
  2038  func (_IPool *IPoolTransactorSession) ClaimFees() (*types.Transaction, error) {
  2039  	return _IPool.Contract.ClaimFees(&_IPool.TransactOpts)
  2040  }
  2041  
  2042  // Initialize is a paid mutator transaction binding the contract method 0xe4bbb5a8.
  2043  //
  2044  // Solidity: function initialize(address _token0, address _token1, bool _stable) returns()
  2045  func (_IPool *IPoolTransactor) Initialize(opts *bind.TransactOpts, _token0 common.Address, _token1 common.Address, _stable bool) (*types.Transaction, error) {
  2046  	return _IPool.contract.Transact(opts, "initialize", _token0, _token1, _stable)
  2047  }
  2048  
  2049  // Initialize is a paid mutator transaction binding the contract method 0xe4bbb5a8.
  2050  //
  2051  // Solidity: function initialize(address _token0, address _token1, bool _stable) returns()
  2052  func (_IPool *IPoolSession) Initialize(_token0 common.Address, _token1 common.Address, _stable bool) (*types.Transaction, error) {
  2053  	return _IPool.Contract.Initialize(&_IPool.TransactOpts, _token0, _token1, _stable)
  2054  }
  2055  
  2056  // Initialize is a paid mutator transaction binding the contract method 0xe4bbb5a8.
  2057  //
  2058  // Solidity: function initialize(address _token0, address _token1, bool _stable) returns()
  2059  func (_IPool *IPoolTransactorSession) Initialize(_token0 common.Address, _token1 common.Address, _stable bool) (*types.Transaction, error) {
  2060  	return _IPool.Contract.Initialize(&_IPool.TransactOpts, _token0, _token1, _stable)
  2061  }
  2062  
  2063  // Mint is a paid mutator transaction binding the contract method 0x6a627842.
  2064  //
  2065  // Solidity: function mint(address to) returns(uint256 liquidity)
  2066  func (_IPool *IPoolTransactor) Mint(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
  2067  	return _IPool.contract.Transact(opts, "mint", to)
  2068  }
  2069  
  2070  // Mint is a paid mutator transaction binding the contract method 0x6a627842.
  2071  //
  2072  // Solidity: function mint(address to) returns(uint256 liquidity)
  2073  func (_IPool *IPoolSession) Mint(to common.Address) (*types.Transaction, error) {
  2074  	return _IPool.Contract.Mint(&_IPool.TransactOpts, to)
  2075  }
  2076  
  2077  // Mint is a paid mutator transaction binding the contract method 0x6a627842.
  2078  //
  2079  // Solidity: function mint(address to) returns(uint256 liquidity)
  2080  func (_IPool *IPoolTransactorSession) Mint(to common.Address) (*types.Transaction, error) {
  2081  	return _IPool.Contract.Mint(&_IPool.TransactOpts, to)
  2082  }
  2083  
  2084  // Skim is a paid mutator transaction binding the contract method 0xbc25cf77.
  2085  //
  2086  // Solidity: function skim(address to) returns()
  2087  func (_IPool *IPoolTransactor) Skim(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) {
  2088  	return _IPool.contract.Transact(opts, "skim", to)
  2089  }
  2090  
  2091  // Skim is a paid mutator transaction binding the contract method 0xbc25cf77.
  2092  //
  2093  // Solidity: function skim(address to) returns()
  2094  func (_IPool *IPoolSession) Skim(to common.Address) (*types.Transaction, error) {
  2095  	return _IPool.Contract.Skim(&_IPool.TransactOpts, to)
  2096  }
  2097  
  2098  // Skim is a paid mutator transaction binding the contract method 0xbc25cf77.
  2099  //
  2100  // Solidity: function skim(address to) returns()
  2101  func (_IPool *IPoolTransactorSession) Skim(to common.Address) (*types.Transaction, error) {
  2102  	return _IPool.Contract.Skim(&_IPool.TransactOpts, to)
  2103  }
  2104  
  2105  // Swap is a paid mutator transaction binding the contract method 0x022c0d9f.
  2106  //
  2107  // Solidity: function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes data) returns()
  2108  func (_IPool *IPoolTransactor) Swap(opts *bind.TransactOpts, amount0Out *big.Int, amount1Out *big.Int, to common.Address, data []byte) (*types.Transaction, error) {
  2109  	return _IPool.contract.Transact(opts, "swap", amount0Out, amount1Out, to, data)
  2110  }
  2111  
  2112  // Swap is a paid mutator transaction binding the contract method 0x022c0d9f.
  2113  //
  2114  // Solidity: function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes data) returns()
  2115  func (_IPool *IPoolSession) Swap(amount0Out *big.Int, amount1Out *big.Int, to common.Address, data []byte) (*types.Transaction, error) {
  2116  	return _IPool.Contract.Swap(&_IPool.TransactOpts, amount0Out, amount1Out, to, data)
  2117  }
  2118  
  2119  // Swap is a paid mutator transaction binding the contract method 0x022c0d9f.
  2120  //
  2121  // Solidity: function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes data) returns()
  2122  func (_IPool *IPoolTransactorSession) Swap(amount0Out *big.Int, amount1Out *big.Int, to common.Address, data []byte) (*types.Transaction, error) {
  2123  	return _IPool.Contract.Swap(&_IPool.TransactOpts, amount0Out, amount1Out, to, data)
  2124  }
  2125  
  2126  // IPoolBurnIterator is returned from FilterBurn and is used to iterate over the raw logs and unpacked data for Burn events raised by the IPool contract.
  2127  type IPoolBurnIterator struct {
  2128  	Event *IPoolBurn // Event containing the contract specifics and raw log
  2129  
  2130  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2131  	event    string              // Event name to use for unpacking event data
  2132  
  2133  	logs chan types.Log        // Log channel receiving the found contract events
  2134  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2135  	done bool                  // Whether the subscription completed delivering logs
  2136  	fail error                 // Occurred error to stop iteration
  2137  }
  2138  
  2139  // Next advances the iterator to the subsequent event, returning whether there
  2140  // are any more events found. In case of a retrieval or parsing error, false is
  2141  // returned and Error() can be queried for the exact failure.
  2142  func (it *IPoolBurnIterator) Next() bool {
  2143  	// If the iterator failed, stop iterating
  2144  	if it.fail != nil {
  2145  		return false
  2146  	}
  2147  	// If the iterator completed, deliver directly whatever's available
  2148  	if it.done {
  2149  		select {
  2150  		case log := <-it.logs:
  2151  			it.Event = new(IPoolBurn)
  2152  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2153  				it.fail = err
  2154  				return false
  2155  			}
  2156  			it.Event.Raw = log
  2157  			return true
  2158  
  2159  		default:
  2160  			return false
  2161  		}
  2162  	}
  2163  	// Iterator still in progress, wait for either a data or an error event
  2164  	select {
  2165  	case log := <-it.logs:
  2166  		it.Event = new(IPoolBurn)
  2167  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2168  			it.fail = err
  2169  			return false
  2170  		}
  2171  		it.Event.Raw = log
  2172  		return true
  2173  
  2174  	case err := <-it.sub.Err():
  2175  		it.done = true
  2176  		it.fail = err
  2177  		return it.Next()
  2178  	}
  2179  }
  2180  
  2181  // Error returns any retrieval or parsing error occurred during filtering.
  2182  func (it *IPoolBurnIterator) Error() error {
  2183  	return it.fail
  2184  }
  2185  
  2186  // Close terminates the iteration process, releasing any pending underlying
  2187  // resources.
  2188  func (it *IPoolBurnIterator) Close() error {
  2189  	it.sub.Unsubscribe()
  2190  	return nil
  2191  }
  2192  
  2193  // IPoolBurn represents a Burn event raised by the IPool contract.
  2194  type IPoolBurn struct {
  2195  	Sender  common.Address
  2196  	To      common.Address
  2197  	Amount0 *big.Int
  2198  	Amount1 *big.Int
  2199  	Raw     types.Log // Blockchain specific contextual infos
  2200  }
  2201  
  2202  // FilterBurn is a free log retrieval operation binding the contract event 0x5d624aa9c148153ab3446c1b154f660ee7701e549fe9b62dab7171b1c80e6fa2.
  2203  //
  2204  // Solidity: event Burn(address indexed sender, address indexed to, uint256 amount0, uint256 amount1)
  2205  func (_IPool *IPoolFilterer) FilterBurn(opts *bind.FilterOpts, sender []common.Address, to []common.Address) (*IPoolBurnIterator, error) {
  2206  
  2207  	var senderRule []interface{}
  2208  	for _, senderItem := range sender {
  2209  		senderRule = append(senderRule, senderItem)
  2210  	}
  2211  	var toRule []interface{}
  2212  	for _, toItem := range to {
  2213  		toRule = append(toRule, toItem)
  2214  	}
  2215  
  2216  	logs, sub, err := _IPool.contract.FilterLogs(opts, "Burn", senderRule, toRule)
  2217  	if err != nil {
  2218  		return nil, err
  2219  	}
  2220  	return &IPoolBurnIterator{contract: _IPool.contract, event: "Burn", logs: logs, sub: sub}, nil
  2221  }
  2222  
  2223  // WatchBurn is a free log subscription operation binding the contract event 0x5d624aa9c148153ab3446c1b154f660ee7701e549fe9b62dab7171b1c80e6fa2.
  2224  //
  2225  // Solidity: event Burn(address indexed sender, address indexed to, uint256 amount0, uint256 amount1)
  2226  func (_IPool *IPoolFilterer) WatchBurn(opts *bind.WatchOpts, sink chan<- *IPoolBurn, sender []common.Address, to []common.Address) (event.Subscription, error) {
  2227  
  2228  	var senderRule []interface{}
  2229  	for _, senderItem := range sender {
  2230  		senderRule = append(senderRule, senderItem)
  2231  	}
  2232  	var toRule []interface{}
  2233  	for _, toItem := range to {
  2234  		toRule = append(toRule, toItem)
  2235  	}
  2236  
  2237  	logs, sub, err := _IPool.contract.WatchLogs(opts, "Burn", senderRule, toRule)
  2238  	if err != nil {
  2239  		return nil, err
  2240  	}
  2241  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2242  		defer sub.Unsubscribe()
  2243  		for {
  2244  			select {
  2245  			case log := <-logs:
  2246  				// New log arrived, parse the event and forward to the user
  2247  				event := new(IPoolBurn)
  2248  				if err := _IPool.contract.UnpackLog(event, "Burn", log); err != nil {
  2249  					return err
  2250  				}
  2251  				event.Raw = log
  2252  
  2253  				select {
  2254  				case sink <- event:
  2255  				case err := <-sub.Err():
  2256  					return err
  2257  				case <-quit:
  2258  					return nil
  2259  				}
  2260  			case err := <-sub.Err():
  2261  				return err
  2262  			case <-quit:
  2263  				return nil
  2264  			}
  2265  		}
  2266  	}), nil
  2267  }
  2268  
  2269  // ParseBurn is a log parse operation binding the contract event 0x5d624aa9c148153ab3446c1b154f660ee7701e549fe9b62dab7171b1c80e6fa2.
  2270  //
  2271  // Solidity: event Burn(address indexed sender, address indexed to, uint256 amount0, uint256 amount1)
  2272  func (_IPool *IPoolFilterer) ParseBurn(log types.Log) (*IPoolBurn, error) {
  2273  	event := new(IPoolBurn)
  2274  	if err := _IPool.contract.UnpackLog(event, "Burn", log); err != nil {
  2275  		return nil, err
  2276  	}
  2277  	event.Raw = log
  2278  	return event, nil
  2279  }
  2280  
  2281  // IPoolClaimIterator is returned from FilterClaim and is used to iterate over the raw logs and unpacked data for Claim events raised by the IPool contract.
  2282  type IPoolClaimIterator struct {
  2283  	Event *IPoolClaim // Event containing the contract specifics and raw log
  2284  
  2285  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2286  	event    string              // Event name to use for unpacking event data
  2287  
  2288  	logs chan types.Log        // Log channel receiving the found contract events
  2289  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2290  	done bool                  // Whether the subscription completed delivering logs
  2291  	fail error                 // Occurred error to stop iteration
  2292  }
  2293  
  2294  // Next advances the iterator to the subsequent event, returning whether there
  2295  // are any more events found. In case of a retrieval or parsing error, false is
  2296  // returned and Error() can be queried for the exact failure.
  2297  func (it *IPoolClaimIterator) Next() bool {
  2298  	// If the iterator failed, stop iterating
  2299  	if it.fail != nil {
  2300  		return false
  2301  	}
  2302  	// If the iterator completed, deliver directly whatever's available
  2303  	if it.done {
  2304  		select {
  2305  		case log := <-it.logs:
  2306  			it.Event = new(IPoolClaim)
  2307  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2308  				it.fail = err
  2309  				return false
  2310  			}
  2311  			it.Event.Raw = log
  2312  			return true
  2313  
  2314  		default:
  2315  			return false
  2316  		}
  2317  	}
  2318  	// Iterator still in progress, wait for either a data or an error event
  2319  	select {
  2320  	case log := <-it.logs:
  2321  		it.Event = new(IPoolClaim)
  2322  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2323  			it.fail = err
  2324  			return false
  2325  		}
  2326  		it.Event.Raw = log
  2327  		return true
  2328  
  2329  	case err := <-it.sub.Err():
  2330  		it.done = true
  2331  		it.fail = err
  2332  		return it.Next()
  2333  	}
  2334  }
  2335  
  2336  // Error returns any retrieval or parsing error occurred during filtering.
  2337  func (it *IPoolClaimIterator) Error() error {
  2338  	return it.fail
  2339  }
  2340  
  2341  // Close terminates the iteration process, releasing any pending underlying
  2342  // resources.
  2343  func (it *IPoolClaimIterator) Close() error {
  2344  	it.sub.Unsubscribe()
  2345  	return nil
  2346  }
  2347  
  2348  // IPoolClaim represents a Claim event raised by the IPool contract.
  2349  type IPoolClaim struct {
  2350  	Sender    common.Address
  2351  	Recipient common.Address
  2352  	Amount0   *big.Int
  2353  	Amount1   *big.Int
  2354  	Raw       types.Log // Blockchain specific contextual infos
  2355  }
  2356  
  2357  // FilterClaim is a free log retrieval operation binding the contract event 0x865ca08d59f5cb456e85cd2f7ef63664ea4f73327414e9d8152c4158b0e94645.
  2358  //
  2359  // Solidity: event Claim(address indexed sender, address indexed recipient, uint256 amount0, uint256 amount1)
  2360  func (_IPool *IPoolFilterer) FilterClaim(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*IPoolClaimIterator, error) {
  2361  
  2362  	var senderRule []interface{}
  2363  	for _, senderItem := range sender {
  2364  		senderRule = append(senderRule, senderItem)
  2365  	}
  2366  	var recipientRule []interface{}
  2367  	for _, recipientItem := range recipient {
  2368  		recipientRule = append(recipientRule, recipientItem)
  2369  	}
  2370  
  2371  	logs, sub, err := _IPool.contract.FilterLogs(opts, "Claim", senderRule, recipientRule)
  2372  	if err != nil {
  2373  		return nil, err
  2374  	}
  2375  	return &IPoolClaimIterator{contract: _IPool.contract, event: "Claim", logs: logs, sub: sub}, nil
  2376  }
  2377  
  2378  // WatchClaim is a free log subscription operation binding the contract event 0x865ca08d59f5cb456e85cd2f7ef63664ea4f73327414e9d8152c4158b0e94645.
  2379  //
  2380  // Solidity: event Claim(address indexed sender, address indexed recipient, uint256 amount0, uint256 amount1)
  2381  func (_IPool *IPoolFilterer) WatchClaim(opts *bind.WatchOpts, sink chan<- *IPoolClaim, sender []common.Address, recipient []common.Address) (event.Subscription, error) {
  2382  
  2383  	var senderRule []interface{}
  2384  	for _, senderItem := range sender {
  2385  		senderRule = append(senderRule, senderItem)
  2386  	}
  2387  	var recipientRule []interface{}
  2388  	for _, recipientItem := range recipient {
  2389  		recipientRule = append(recipientRule, recipientItem)
  2390  	}
  2391  
  2392  	logs, sub, err := _IPool.contract.WatchLogs(opts, "Claim", senderRule, recipientRule)
  2393  	if err != nil {
  2394  		return nil, err
  2395  	}
  2396  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2397  		defer sub.Unsubscribe()
  2398  		for {
  2399  			select {
  2400  			case log := <-logs:
  2401  				// New log arrived, parse the event and forward to the user
  2402  				event := new(IPoolClaim)
  2403  				if err := _IPool.contract.UnpackLog(event, "Claim", log); err != nil {
  2404  					return err
  2405  				}
  2406  				event.Raw = log
  2407  
  2408  				select {
  2409  				case sink <- event:
  2410  				case err := <-sub.Err():
  2411  					return err
  2412  				case <-quit:
  2413  					return nil
  2414  				}
  2415  			case err := <-sub.Err():
  2416  				return err
  2417  			case <-quit:
  2418  				return nil
  2419  			}
  2420  		}
  2421  	}), nil
  2422  }
  2423  
  2424  // ParseClaim is a log parse operation binding the contract event 0x865ca08d59f5cb456e85cd2f7ef63664ea4f73327414e9d8152c4158b0e94645.
  2425  //
  2426  // Solidity: event Claim(address indexed sender, address indexed recipient, uint256 amount0, uint256 amount1)
  2427  func (_IPool *IPoolFilterer) ParseClaim(log types.Log) (*IPoolClaim, error) {
  2428  	event := new(IPoolClaim)
  2429  	if err := _IPool.contract.UnpackLog(event, "Claim", log); err != nil {
  2430  		return nil, err
  2431  	}
  2432  	event.Raw = log
  2433  	return event, nil
  2434  }
  2435  
  2436  // IPoolFeesIterator is returned from FilterFees and is used to iterate over the raw logs and unpacked data for Fees events raised by the IPool contract.
  2437  type IPoolFeesIterator struct {
  2438  	Event *IPoolFees // Event containing the contract specifics and raw log
  2439  
  2440  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2441  	event    string              // Event name to use for unpacking event data
  2442  
  2443  	logs chan types.Log        // Log channel receiving the found contract events
  2444  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2445  	done bool                  // Whether the subscription completed delivering logs
  2446  	fail error                 // Occurred error to stop iteration
  2447  }
  2448  
  2449  // Next advances the iterator to the subsequent event, returning whether there
  2450  // are any more events found. In case of a retrieval or parsing error, false is
  2451  // returned and Error() can be queried for the exact failure.
  2452  func (it *IPoolFeesIterator) Next() bool {
  2453  	// If the iterator failed, stop iterating
  2454  	if it.fail != nil {
  2455  		return false
  2456  	}
  2457  	// If the iterator completed, deliver directly whatever's available
  2458  	if it.done {
  2459  		select {
  2460  		case log := <-it.logs:
  2461  			it.Event = new(IPoolFees)
  2462  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2463  				it.fail = err
  2464  				return false
  2465  			}
  2466  			it.Event.Raw = log
  2467  			return true
  2468  
  2469  		default:
  2470  			return false
  2471  		}
  2472  	}
  2473  	// Iterator still in progress, wait for either a data or an error event
  2474  	select {
  2475  	case log := <-it.logs:
  2476  		it.Event = new(IPoolFees)
  2477  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2478  			it.fail = err
  2479  			return false
  2480  		}
  2481  		it.Event.Raw = log
  2482  		return true
  2483  
  2484  	case err := <-it.sub.Err():
  2485  		it.done = true
  2486  		it.fail = err
  2487  		return it.Next()
  2488  	}
  2489  }
  2490  
  2491  // Error returns any retrieval or parsing error occurred during filtering.
  2492  func (it *IPoolFeesIterator) Error() error {
  2493  	return it.fail
  2494  }
  2495  
  2496  // Close terminates the iteration process, releasing any pending underlying
  2497  // resources.
  2498  func (it *IPoolFeesIterator) Close() error {
  2499  	it.sub.Unsubscribe()
  2500  	return nil
  2501  }
  2502  
  2503  // IPoolFees represents a Fees event raised by the IPool contract.
  2504  type IPoolFees struct {
  2505  	Sender  common.Address
  2506  	Amount0 *big.Int
  2507  	Amount1 *big.Int
  2508  	Raw     types.Log // Blockchain specific contextual infos
  2509  }
  2510  
  2511  // FilterFees is a free log retrieval operation binding the contract event 0x112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a8602.
  2512  //
  2513  // Solidity: event Fees(address indexed sender, uint256 amount0, uint256 amount1)
  2514  func (_IPool *IPoolFilterer) FilterFees(opts *bind.FilterOpts, sender []common.Address) (*IPoolFeesIterator, error) {
  2515  
  2516  	var senderRule []interface{}
  2517  	for _, senderItem := range sender {
  2518  		senderRule = append(senderRule, senderItem)
  2519  	}
  2520  
  2521  	logs, sub, err := _IPool.contract.FilterLogs(opts, "Fees", senderRule)
  2522  	if err != nil {
  2523  		return nil, err
  2524  	}
  2525  	return &IPoolFeesIterator{contract: _IPool.contract, event: "Fees", logs: logs, sub: sub}, nil
  2526  }
  2527  
  2528  // WatchFees is a free log subscription operation binding the contract event 0x112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a8602.
  2529  //
  2530  // Solidity: event Fees(address indexed sender, uint256 amount0, uint256 amount1)
  2531  func (_IPool *IPoolFilterer) WatchFees(opts *bind.WatchOpts, sink chan<- *IPoolFees, sender []common.Address) (event.Subscription, error) {
  2532  
  2533  	var senderRule []interface{}
  2534  	for _, senderItem := range sender {
  2535  		senderRule = append(senderRule, senderItem)
  2536  	}
  2537  
  2538  	logs, sub, err := _IPool.contract.WatchLogs(opts, "Fees", senderRule)
  2539  	if err != nil {
  2540  		return nil, err
  2541  	}
  2542  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2543  		defer sub.Unsubscribe()
  2544  		for {
  2545  			select {
  2546  			case log := <-logs:
  2547  				// New log arrived, parse the event and forward to the user
  2548  				event := new(IPoolFees)
  2549  				if err := _IPool.contract.UnpackLog(event, "Fees", log); err != nil {
  2550  					return err
  2551  				}
  2552  				event.Raw = log
  2553  
  2554  				select {
  2555  				case sink <- event:
  2556  				case err := <-sub.Err():
  2557  					return err
  2558  				case <-quit:
  2559  					return nil
  2560  				}
  2561  			case err := <-sub.Err():
  2562  				return err
  2563  			case <-quit:
  2564  				return nil
  2565  			}
  2566  		}
  2567  	}), nil
  2568  }
  2569  
  2570  // ParseFees is a log parse operation binding the contract event 0x112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a8602.
  2571  //
  2572  // Solidity: event Fees(address indexed sender, uint256 amount0, uint256 amount1)
  2573  func (_IPool *IPoolFilterer) ParseFees(log types.Log) (*IPoolFees, error) {
  2574  	event := new(IPoolFees)
  2575  	if err := _IPool.contract.UnpackLog(event, "Fees", log); err != nil {
  2576  		return nil, err
  2577  	}
  2578  	event.Raw = log
  2579  	return event, nil
  2580  }
  2581  
  2582  // IPoolMintIterator is returned from FilterMint and is used to iterate over the raw logs and unpacked data for Mint events raised by the IPool contract.
  2583  type IPoolMintIterator struct {
  2584  	Event *IPoolMint // Event containing the contract specifics and raw log
  2585  
  2586  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2587  	event    string              // Event name to use for unpacking event data
  2588  
  2589  	logs chan types.Log        // Log channel receiving the found contract events
  2590  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2591  	done bool                  // Whether the subscription completed delivering logs
  2592  	fail error                 // Occurred error to stop iteration
  2593  }
  2594  
  2595  // Next advances the iterator to the subsequent event, returning whether there
  2596  // are any more events found. In case of a retrieval or parsing error, false is
  2597  // returned and Error() can be queried for the exact failure.
  2598  func (it *IPoolMintIterator) Next() bool {
  2599  	// If the iterator failed, stop iterating
  2600  	if it.fail != nil {
  2601  		return false
  2602  	}
  2603  	// If the iterator completed, deliver directly whatever's available
  2604  	if it.done {
  2605  		select {
  2606  		case log := <-it.logs:
  2607  			it.Event = new(IPoolMint)
  2608  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2609  				it.fail = err
  2610  				return false
  2611  			}
  2612  			it.Event.Raw = log
  2613  			return true
  2614  
  2615  		default:
  2616  			return false
  2617  		}
  2618  	}
  2619  	// Iterator still in progress, wait for either a data or an error event
  2620  	select {
  2621  	case log := <-it.logs:
  2622  		it.Event = new(IPoolMint)
  2623  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2624  			it.fail = err
  2625  			return false
  2626  		}
  2627  		it.Event.Raw = log
  2628  		return true
  2629  
  2630  	case err := <-it.sub.Err():
  2631  		it.done = true
  2632  		it.fail = err
  2633  		return it.Next()
  2634  	}
  2635  }
  2636  
  2637  // Error returns any retrieval or parsing error occurred during filtering.
  2638  func (it *IPoolMintIterator) Error() error {
  2639  	return it.fail
  2640  }
  2641  
  2642  // Close terminates the iteration process, releasing any pending underlying
  2643  // resources.
  2644  func (it *IPoolMintIterator) Close() error {
  2645  	it.sub.Unsubscribe()
  2646  	return nil
  2647  }
  2648  
  2649  // IPoolMint represents a Mint event raised by the IPool contract.
  2650  type IPoolMint struct {
  2651  	Sender  common.Address
  2652  	Amount0 *big.Int
  2653  	Amount1 *big.Int
  2654  	Raw     types.Log // Blockchain specific contextual infos
  2655  }
  2656  
  2657  // FilterMint is a free log retrieval operation binding the contract event 0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f.
  2658  //
  2659  // Solidity: event Mint(address indexed sender, uint256 amount0, uint256 amount1)
  2660  func (_IPool *IPoolFilterer) FilterMint(opts *bind.FilterOpts, sender []common.Address) (*IPoolMintIterator, error) {
  2661  
  2662  	var senderRule []interface{}
  2663  	for _, senderItem := range sender {
  2664  		senderRule = append(senderRule, senderItem)
  2665  	}
  2666  
  2667  	logs, sub, err := _IPool.contract.FilterLogs(opts, "Mint", senderRule)
  2668  	if err != nil {
  2669  		return nil, err
  2670  	}
  2671  	return &IPoolMintIterator{contract: _IPool.contract, event: "Mint", logs: logs, sub: sub}, nil
  2672  }
  2673  
  2674  // WatchMint is a free log subscription operation binding the contract event 0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f.
  2675  //
  2676  // Solidity: event Mint(address indexed sender, uint256 amount0, uint256 amount1)
  2677  func (_IPool *IPoolFilterer) WatchMint(opts *bind.WatchOpts, sink chan<- *IPoolMint, sender []common.Address) (event.Subscription, error) {
  2678  
  2679  	var senderRule []interface{}
  2680  	for _, senderItem := range sender {
  2681  		senderRule = append(senderRule, senderItem)
  2682  	}
  2683  
  2684  	logs, sub, err := _IPool.contract.WatchLogs(opts, "Mint", senderRule)
  2685  	if err != nil {
  2686  		return nil, err
  2687  	}
  2688  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2689  		defer sub.Unsubscribe()
  2690  		for {
  2691  			select {
  2692  			case log := <-logs:
  2693  				// New log arrived, parse the event and forward to the user
  2694  				event := new(IPoolMint)
  2695  				if err := _IPool.contract.UnpackLog(event, "Mint", log); err != nil {
  2696  					return err
  2697  				}
  2698  				event.Raw = log
  2699  
  2700  				select {
  2701  				case sink <- event:
  2702  				case err := <-sub.Err():
  2703  					return err
  2704  				case <-quit:
  2705  					return nil
  2706  				}
  2707  			case err := <-sub.Err():
  2708  				return err
  2709  			case <-quit:
  2710  				return nil
  2711  			}
  2712  		}
  2713  	}), nil
  2714  }
  2715  
  2716  // ParseMint is a log parse operation binding the contract event 0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f.
  2717  //
  2718  // Solidity: event Mint(address indexed sender, uint256 amount0, uint256 amount1)
  2719  func (_IPool *IPoolFilterer) ParseMint(log types.Log) (*IPoolMint, error) {
  2720  	event := new(IPoolMint)
  2721  	if err := _IPool.contract.UnpackLog(event, "Mint", log); err != nil {
  2722  		return nil, err
  2723  	}
  2724  	event.Raw = log
  2725  	return event, nil
  2726  }
  2727  
  2728  // IPoolSwapIterator is returned from FilterSwap and is used to iterate over the raw logs and unpacked data for Swap events raised by the IPool contract.
  2729  type IPoolSwapIterator struct {
  2730  	Event *IPoolSwap // Event containing the contract specifics and raw log
  2731  
  2732  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2733  	event    string              // Event name to use for unpacking event data
  2734  
  2735  	logs chan types.Log        // Log channel receiving the found contract events
  2736  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2737  	done bool                  // Whether the subscription completed delivering logs
  2738  	fail error                 // Occurred error to stop iteration
  2739  }
  2740  
  2741  // Next advances the iterator to the subsequent event, returning whether there
  2742  // are any more events found. In case of a retrieval or parsing error, false is
  2743  // returned and Error() can be queried for the exact failure.
  2744  func (it *IPoolSwapIterator) Next() bool {
  2745  	// If the iterator failed, stop iterating
  2746  	if it.fail != nil {
  2747  		return false
  2748  	}
  2749  	// If the iterator completed, deliver directly whatever's available
  2750  	if it.done {
  2751  		select {
  2752  		case log := <-it.logs:
  2753  			it.Event = new(IPoolSwap)
  2754  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2755  				it.fail = err
  2756  				return false
  2757  			}
  2758  			it.Event.Raw = log
  2759  			return true
  2760  
  2761  		default:
  2762  			return false
  2763  		}
  2764  	}
  2765  	// Iterator still in progress, wait for either a data or an error event
  2766  	select {
  2767  	case log := <-it.logs:
  2768  		it.Event = new(IPoolSwap)
  2769  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2770  			it.fail = err
  2771  			return false
  2772  		}
  2773  		it.Event.Raw = log
  2774  		return true
  2775  
  2776  	case err := <-it.sub.Err():
  2777  		it.done = true
  2778  		it.fail = err
  2779  		return it.Next()
  2780  	}
  2781  }
  2782  
  2783  // Error returns any retrieval or parsing error occurred during filtering.
  2784  func (it *IPoolSwapIterator) Error() error {
  2785  	return it.fail
  2786  }
  2787  
  2788  // Close terminates the iteration process, releasing any pending underlying
  2789  // resources.
  2790  func (it *IPoolSwapIterator) Close() error {
  2791  	it.sub.Unsubscribe()
  2792  	return nil
  2793  }
  2794  
  2795  // IPoolSwap represents a Swap event raised by the IPool contract.
  2796  type IPoolSwap struct {
  2797  	Sender     common.Address
  2798  	To         common.Address
  2799  	Amount0In  *big.Int
  2800  	Amount1In  *big.Int
  2801  	Amount0Out *big.Int
  2802  	Amount1Out *big.Int
  2803  	Raw        types.Log // Blockchain specific contextual infos
  2804  }
  2805  
  2806  // FilterSwap is a free log retrieval operation binding the contract event 0xb3e2773606abfd36b5bd91394b3a54d1398336c65005baf7bf7a05efeffaf75b.
  2807  //
  2808  // Solidity: event Swap(address indexed sender, address indexed to, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out)
  2809  func (_IPool *IPoolFilterer) FilterSwap(opts *bind.FilterOpts, sender []common.Address, to []common.Address) (*IPoolSwapIterator, error) {
  2810  
  2811  	var senderRule []interface{}
  2812  	for _, senderItem := range sender {
  2813  		senderRule = append(senderRule, senderItem)
  2814  	}
  2815  	var toRule []interface{}
  2816  	for _, toItem := range to {
  2817  		toRule = append(toRule, toItem)
  2818  	}
  2819  
  2820  	logs, sub, err := _IPool.contract.FilterLogs(opts, "Swap", senderRule, toRule)
  2821  	if err != nil {
  2822  		return nil, err
  2823  	}
  2824  	return &IPoolSwapIterator{contract: _IPool.contract, event: "Swap", logs: logs, sub: sub}, nil
  2825  }
  2826  
  2827  // WatchSwap is a free log subscription operation binding the contract event 0xb3e2773606abfd36b5bd91394b3a54d1398336c65005baf7bf7a05efeffaf75b.
  2828  //
  2829  // Solidity: event Swap(address indexed sender, address indexed to, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out)
  2830  func (_IPool *IPoolFilterer) WatchSwap(opts *bind.WatchOpts, sink chan<- *IPoolSwap, sender []common.Address, to []common.Address) (event.Subscription, error) {
  2831  
  2832  	var senderRule []interface{}
  2833  	for _, senderItem := range sender {
  2834  		senderRule = append(senderRule, senderItem)
  2835  	}
  2836  	var toRule []interface{}
  2837  	for _, toItem := range to {
  2838  		toRule = append(toRule, toItem)
  2839  	}
  2840  
  2841  	logs, sub, err := _IPool.contract.WatchLogs(opts, "Swap", senderRule, toRule)
  2842  	if err != nil {
  2843  		return nil, err
  2844  	}
  2845  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2846  		defer sub.Unsubscribe()
  2847  		for {
  2848  			select {
  2849  			case log := <-logs:
  2850  				// New log arrived, parse the event and forward to the user
  2851  				event := new(IPoolSwap)
  2852  				if err := _IPool.contract.UnpackLog(event, "Swap", log); err != nil {
  2853  					return err
  2854  				}
  2855  				event.Raw = log
  2856  
  2857  				select {
  2858  				case sink <- event:
  2859  				case err := <-sub.Err():
  2860  					return err
  2861  				case <-quit:
  2862  					return nil
  2863  				}
  2864  			case err := <-sub.Err():
  2865  				return err
  2866  			case <-quit:
  2867  				return nil
  2868  			}
  2869  		}
  2870  	}), nil
  2871  }
  2872  
  2873  // ParseSwap is a log parse operation binding the contract event 0xb3e2773606abfd36b5bd91394b3a54d1398336c65005baf7bf7a05efeffaf75b.
  2874  //
  2875  // Solidity: event Swap(address indexed sender, address indexed to, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out)
  2876  func (_IPool *IPoolFilterer) ParseSwap(log types.Log) (*IPoolSwap, error) {
  2877  	event := new(IPoolSwap)
  2878  	if err := _IPool.contract.UnpackLog(event, "Swap", log); err != nil {
  2879  		return nil, err
  2880  	}
  2881  	event.Raw = log
  2882  	return event, nil
  2883  }
  2884  
  2885  // IPoolSyncIterator is returned from FilterSync and is used to iterate over the raw logs and unpacked data for Sync events raised by the IPool contract.
  2886  type IPoolSyncIterator struct {
  2887  	Event *IPoolSync // Event containing the contract specifics and raw log
  2888  
  2889  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2890  	event    string              // Event name to use for unpacking event data
  2891  
  2892  	logs chan types.Log        // Log channel receiving the found contract events
  2893  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2894  	done bool                  // Whether the subscription completed delivering logs
  2895  	fail error                 // Occurred error to stop iteration
  2896  }
  2897  
  2898  // Next advances the iterator to the subsequent event, returning whether there
  2899  // are any more events found. In case of a retrieval or parsing error, false is
  2900  // returned and Error() can be queried for the exact failure.
  2901  func (it *IPoolSyncIterator) Next() bool {
  2902  	// If the iterator failed, stop iterating
  2903  	if it.fail != nil {
  2904  		return false
  2905  	}
  2906  	// If the iterator completed, deliver directly whatever's available
  2907  	if it.done {
  2908  		select {
  2909  		case log := <-it.logs:
  2910  			it.Event = new(IPoolSync)
  2911  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2912  				it.fail = err
  2913  				return false
  2914  			}
  2915  			it.Event.Raw = log
  2916  			return true
  2917  
  2918  		default:
  2919  			return false
  2920  		}
  2921  	}
  2922  	// Iterator still in progress, wait for either a data or an error event
  2923  	select {
  2924  	case log := <-it.logs:
  2925  		it.Event = new(IPoolSync)
  2926  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2927  			it.fail = err
  2928  			return false
  2929  		}
  2930  		it.Event.Raw = log
  2931  		return true
  2932  
  2933  	case err := <-it.sub.Err():
  2934  		it.done = true
  2935  		it.fail = err
  2936  		return it.Next()
  2937  	}
  2938  }
  2939  
  2940  // Error returns any retrieval or parsing error occurred during filtering.
  2941  func (it *IPoolSyncIterator) Error() error {
  2942  	return it.fail
  2943  }
  2944  
  2945  // Close terminates the iteration process, releasing any pending underlying
  2946  // resources.
  2947  func (it *IPoolSyncIterator) Close() error {
  2948  	it.sub.Unsubscribe()
  2949  	return nil
  2950  }
  2951  
  2952  // IPoolSync represents a Sync event raised by the IPool contract.
  2953  type IPoolSync struct {
  2954  	Reserve0 *big.Int
  2955  	Reserve1 *big.Int
  2956  	Raw      types.Log // Blockchain specific contextual infos
  2957  }
  2958  
  2959  // FilterSync is a free log retrieval operation binding the contract event 0xcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a.
  2960  //
  2961  // Solidity: event Sync(uint256 reserve0, uint256 reserve1)
  2962  func (_IPool *IPoolFilterer) FilterSync(opts *bind.FilterOpts) (*IPoolSyncIterator, error) {
  2963  
  2964  	logs, sub, err := _IPool.contract.FilterLogs(opts, "Sync")
  2965  	if err != nil {
  2966  		return nil, err
  2967  	}
  2968  	return &IPoolSyncIterator{contract: _IPool.contract, event: "Sync", logs: logs, sub: sub}, nil
  2969  }
  2970  
  2971  // WatchSync is a free log subscription operation binding the contract event 0xcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a.
  2972  //
  2973  // Solidity: event Sync(uint256 reserve0, uint256 reserve1)
  2974  func (_IPool *IPoolFilterer) WatchSync(opts *bind.WatchOpts, sink chan<- *IPoolSync) (event.Subscription, error) {
  2975  
  2976  	logs, sub, err := _IPool.contract.WatchLogs(opts, "Sync")
  2977  	if err != nil {
  2978  		return nil, err
  2979  	}
  2980  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2981  		defer sub.Unsubscribe()
  2982  		for {
  2983  			select {
  2984  			case log := <-logs:
  2985  				// New log arrived, parse the event and forward to the user
  2986  				event := new(IPoolSync)
  2987  				if err := _IPool.contract.UnpackLog(event, "Sync", log); err != nil {
  2988  					return err
  2989  				}
  2990  				event.Raw = log
  2991  
  2992  				select {
  2993  				case sink <- event:
  2994  				case err := <-sub.Err():
  2995  					return err
  2996  				case <-quit:
  2997  					return nil
  2998  				}
  2999  			case err := <-sub.Err():
  3000  				return err
  3001  			case <-quit:
  3002  				return nil
  3003  			}
  3004  		}
  3005  	}), nil
  3006  }
  3007  
  3008  // ParseSync is a log parse operation binding the contract event 0xcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a.
  3009  //
  3010  // Solidity: event Sync(uint256 reserve0, uint256 reserve1)
  3011  func (_IPool *IPoolFilterer) ParseSync(log types.Log) (*IPoolSync, error) {
  3012  	event := new(IPoolSync)
  3013  	if err := _IPool.contract.UnpackLog(event, "Sync", log); err != nil {
  3014  		return nil, err
  3015  	}
  3016  	event.Raw = log
  3017  	return event, nil
  3018  }
  3019  
  3020  // IPoolFactoryMetaData contains all meta data concerning the IPoolFactory contract.
  3021  var IPoolFactoryMetaData = &bind.MetaData{
  3022  	ABI: "[{\"inputs\":[],\"name\":\"FeeInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeeTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotFeeManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotPauser\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotSinkConverter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVoter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SameAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroFee\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"stable\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"SetCustomFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"feeManager\",\"type\":\"address\"}],\"name\":\"SetFeeManager\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"SetPauseState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pauser\",\"type\":\"address\"}],\"name\":\"SetPauser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"}],\"name\":\"SetVoter\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"allPoolsLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"stable\",\"type\":\"bool\"}],\"name\":\"createPair\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"stable\",\"type\":\"bool\"}],\"name\":\"createPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"name\":\"createPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_stable\",\"type\":\"bool\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"stable\",\"type\":\"bool\"}],\"name\":\"getPair\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"stable\",\"type\":\"bool\"}],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPair\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setCustomFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_stable\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_feeManager\",\"type\":\"address\"}],\"name\":\"setFeeManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_state\",\"type\":\"bool\"}],\"name\":\"setPauseState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pauser\",\"type\":\"address\"}],\"name\":\"setPauser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sinkConvert\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_velo\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_veloV2\",\"type\":\"address\"}],\"name\":\"setSinkConverter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"setVoter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sinkConverter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"velo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"veloV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"voter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
  3023  	Sigs: map[string]string{
  3024  		"efde4e64": "allPoolsLength()",
  3025  		"82dfdce4": "createPair(address,address,bool)",
  3026  		"36bf95a0": "createPool(address,address,bool)",
  3027  		"a1671295": "createPool(address,address,uint24)",
  3028  		"cc56b2c5": "getFee(address,bool)",
  3029  		"6801cc30": "getPair(address,address,bool)",
  3030  		"79bc57d5": "getPool(address,address,bool)",
  3031  		"1698ee82": "getPool(address,address,uint24)",
  3032  		"5c60da1b": "implementation()",
  3033  		"e5e31b13": "isPair(address)",
  3034  		"b187bd26": "isPaused()",
  3035  		"5b16ebb7": "isPool(address)",
  3036  		"d49466a8": "setCustomFee(address,uint256)",
  3037  		"e1f76b44": "setFee(bool,uint256)",
  3038  		"472d35b9": "setFeeManager(address)",
  3039  		"cdb88ad1": "setPauseState(bool)",
  3040  		"2d88af4a": "setPauser(address)",
  3041  		"37068e7b": "setSinkConverter(address,address,address)",
  3042  		"4bc2a657": "setVoter(address)",
  3043  		"8e39ee16": "sinkConverter()",
  3044  		"8c7c53ce": "velo()",
  3045  		"c6751c09": "veloV2()",
  3046  		"46c96aac": "voter()",
  3047  	},
  3048  }
  3049  
  3050  // IPoolFactoryABI is the input ABI used to generate the binding from.
  3051  // Deprecated: Use IPoolFactoryMetaData.ABI instead.
  3052  var IPoolFactoryABI = IPoolFactoryMetaData.ABI
  3053  
  3054  // Deprecated: Use IPoolFactoryMetaData.Sigs instead.
  3055  // IPoolFactoryFuncSigs maps the 4-byte function signature to its string representation.
  3056  var IPoolFactoryFuncSigs = IPoolFactoryMetaData.Sigs
  3057  
  3058  // IPoolFactory is an auto generated Go binding around an Ethereum contract.
  3059  type IPoolFactory struct {
  3060  	IPoolFactoryCaller     // Read-only binding to the contract
  3061  	IPoolFactoryTransactor // Write-only binding to the contract
  3062  	IPoolFactoryFilterer   // Log filterer for contract events
  3063  }
  3064  
  3065  // IPoolFactoryCaller is an auto generated read-only Go binding around an Ethereum contract.
  3066  type IPoolFactoryCaller struct {
  3067  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  3068  }
  3069  
  3070  // IPoolFactoryTransactor is an auto generated write-only Go binding around an Ethereum contract.
  3071  type IPoolFactoryTransactor struct {
  3072  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  3073  }
  3074  
  3075  // IPoolFactoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  3076  type IPoolFactoryFilterer struct {
  3077  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  3078  }
  3079  
  3080  // IPoolFactorySession is an auto generated Go binding around an Ethereum contract,
  3081  // with pre-set call and transact options.
  3082  type IPoolFactorySession struct {
  3083  	Contract     *IPoolFactory     // Generic contract binding to set the session for
  3084  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  3085  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  3086  }
  3087  
  3088  // IPoolFactoryCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  3089  // with pre-set call options.
  3090  type IPoolFactoryCallerSession struct {
  3091  	Contract *IPoolFactoryCaller // Generic contract caller binding to set the session for
  3092  	CallOpts bind.CallOpts       // Call options to use throughout this session
  3093  }
  3094  
  3095  // IPoolFactoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  3096  // with pre-set transact options.
  3097  type IPoolFactoryTransactorSession struct {
  3098  	Contract     *IPoolFactoryTransactor // Generic contract transactor binding to set the session for
  3099  	TransactOpts bind.TransactOpts       // Transaction auth options to use throughout this session
  3100  }
  3101  
  3102  // IPoolFactoryRaw is an auto generated low-level Go binding around an Ethereum contract.
  3103  type IPoolFactoryRaw struct {
  3104  	Contract *IPoolFactory // Generic contract binding to access the raw methods on
  3105  }
  3106  
  3107  // IPoolFactoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  3108  type IPoolFactoryCallerRaw struct {
  3109  	Contract *IPoolFactoryCaller // Generic read-only contract binding to access the raw methods on
  3110  }
  3111  
  3112  // IPoolFactoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  3113  type IPoolFactoryTransactorRaw struct {
  3114  	Contract *IPoolFactoryTransactor // Generic write-only contract binding to access the raw methods on
  3115  }
  3116  
  3117  // NewIPoolFactory creates a new instance of IPoolFactory, bound to a specific deployed contract.
  3118  func NewIPoolFactory(address common.Address, backend bind.ContractBackend) (*IPoolFactory, error) {
  3119  	contract, err := bindIPoolFactory(address, backend, backend, backend)
  3120  	if err != nil {
  3121  		return nil, err
  3122  	}
  3123  	return &IPoolFactory{IPoolFactoryCaller: IPoolFactoryCaller{contract: contract}, IPoolFactoryTransactor: IPoolFactoryTransactor{contract: contract}, IPoolFactoryFilterer: IPoolFactoryFilterer{contract: contract}}, nil
  3124  }
  3125  
  3126  // NewIPoolFactoryCaller creates a new read-only instance of IPoolFactory, bound to a specific deployed contract.
  3127  func NewIPoolFactoryCaller(address common.Address, caller bind.ContractCaller) (*IPoolFactoryCaller, error) {
  3128  	contract, err := bindIPoolFactory(address, caller, nil, nil)
  3129  	if err != nil {
  3130  		return nil, err
  3131  	}
  3132  	return &IPoolFactoryCaller{contract: contract}, nil
  3133  }
  3134  
  3135  // NewIPoolFactoryTransactor creates a new write-only instance of IPoolFactory, bound to a specific deployed contract.
  3136  func NewIPoolFactoryTransactor(address common.Address, transactor bind.ContractTransactor) (*IPoolFactoryTransactor, error) {
  3137  	contract, err := bindIPoolFactory(address, nil, transactor, nil)
  3138  	if err != nil {
  3139  		return nil, err
  3140  	}
  3141  	return &IPoolFactoryTransactor{contract: contract}, nil
  3142  }
  3143  
  3144  // NewIPoolFactoryFilterer creates a new log filterer instance of IPoolFactory, bound to a specific deployed contract.
  3145  func NewIPoolFactoryFilterer(address common.Address, filterer bind.ContractFilterer) (*IPoolFactoryFilterer, error) {
  3146  	contract, err := bindIPoolFactory(address, nil, nil, filterer)
  3147  	if err != nil {
  3148  		return nil, err
  3149  	}
  3150  	return &IPoolFactoryFilterer{contract: contract}, nil
  3151  }
  3152  
  3153  // bindIPoolFactory binds a generic wrapper to an already deployed contract.
  3154  func bindIPoolFactory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  3155  	parsed, err := abi.JSON(strings.NewReader(IPoolFactoryABI))
  3156  	if err != nil {
  3157  		return nil, err
  3158  	}
  3159  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  3160  }
  3161  
  3162  // Call invokes the (constant) contract method with params as input values and
  3163  // sets the output to result. The result type might be a single field for simple
  3164  // returns, a slice of interfaces for anonymous returns and a struct for named
  3165  // returns.
  3166  func (_IPoolFactory *IPoolFactoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  3167  	return _IPoolFactory.Contract.IPoolFactoryCaller.contract.Call(opts, result, method, params...)
  3168  }
  3169  
  3170  // Transfer initiates a plain transaction to move funds to the contract, calling
  3171  // its default method if one is available.
  3172  func (_IPoolFactory *IPoolFactoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  3173  	return _IPoolFactory.Contract.IPoolFactoryTransactor.contract.Transfer(opts)
  3174  }
  3175  
  3176  // Transact invokes the (paid) contract method with params as input values.
  3177  func (_IPoolFactory *IPoolFactoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  3178  	return _IPoolFactory.Contract.IPoolFactoryTransactor.contract.Transact(opts, method, params...)
  3179  }
  3180  
  3181  // Call invokes the (constant) contract method with params as input values and
  3182  // sets the output to result. The result type might be a single field for simple
  3183  // returns, a slice of interfaces for anonymous returns and a struct for named
  3184  // returns.
  3185  func (_IPoolFactory *IPoolFactoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  3186  	return _IPoolFactory.Contract.contract.Call(opts, result, method, params...)
  3187  }
  3188  
  3189  // Transfer initiates a plain transaction to move funds to the contract, calling
  3190  // its default method if one is available.
  3191  func (_IPoolFactory *IPoolFactoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  3192  	return _IPoolFactory.Contract.contract.Transfer(opts)
  3193  }
  3194  
  3195  // Transact invokes the (paid) contract method with params as input values.
  3196  func (_IPoolFactory *IPoolFactoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  3197  	return _IPoolFactory.Contract.contract.Transact(opts, method, params...)
  3198  }
  3199  
  3200  // AllPoolsLength is a free data retrieval call binding the contract method 0xefde4e64.
  3201  //
  3202  // Solidity: function allPoolsLength() view returns(uint256)
  3203  func (_IPoolFactory *IPoolFactoryCaller) AllPoolsLength(opts *bind.CallOpts) (*big.Int, error) {
  3204  	var out []interface{}
  3205  	err := _IPoolFactory.contract.Call(opts, &out, "allPoolsLength")
  3206  
  3207  	if err != nil {
  3208  		return *new(*big.Int), err
  3209  	}
  3210  
  3211  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  3212  
  3213  	return out0, err
  3214  
  3215  }
  3216  
  3217  // AllPoolsLength is a free data retrieval call binding the contract method 0xefde4e64.
  3218  //
  3219  // Solidity: function allPoolsLength() view returns(uint256)
  3220  func (_IPoolFactory *IPoolFactorySession) AllPoolsLength() (*big.Int, error) {
  3221  	return _IPoolFactory.Contract.AllPoolsLength(&_IPoolFactory.CallOpts)
  3222  }
  3223  
  3224  // AllPoolsLength is a free data retrieval call binding the contract method 0xefde4e64.
  3225  //
  3226  // Solidity: function allPoolsLength() view returns(uint256)
  3227  func (_IPoolFactory *IPoolFactoryCallerSession) AllPoolsLength() (*big.Int, error) {
  3228  	return _IPoolFactory.Contract.AllPoolsLength(&_IPoolFactory.CallOpts)
  3229  }
  3230  
  3231  // GetFee is a free data retrieval call binding the contract method 0xcc56b2c5.
  3232  //
  3233  // Solidity: function getFee(address _pool, bool _stable) view returns(uint256)
  3234  func (_IPoolFactory *IPoolFactoryCaller) GetFee(opts *bind.CallOpts, _pool common.Address, _stable bool) (*big.Int, error) {
  3235  	var out []interface{}
  3236  	err := _IPoolFactory.contract.Call(opts, &out, "getFee", _pool, _stable)
  3237  
  3238  	if err != nil {
  3239  		return *new(*big.Int), err
  3240  	}
  3241  
  3242  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  3243  
  3244  	return out0, err
  3245  
  3246  }
  3247  
  3248  // GetFee is a free data retrieval call binding the contract method 0xcc56b2c5.
  3249  //
  3250  // Solidity: function getFee(address _pool, bool _stable) view returns(uint256)
  3251  func (_IPoolFactory *IPoolFactorySession) GetFee(_pool common.Address, _stable bool) (*big.Int, error) {
  3252  	return _IPoolFactory.Contract.GetFee(&_IPoolFactory.CallOpts, _pool, _stable)
  3253  }
  3254  
  3255  // GetFee is a free data retrieval call binding the contract method 0xcc56b2c5.
  3256  //
  3257  // Solidity: function getFee(address _pool, bool _stable) view returns(uint256)
  3258  func (_IPoolFactory *IPoolFactoryCallerSession) GetFee(_pool common.Address, _stable bool) (*big.Int, error) {
  3259  	return _IPoolFactory.Contract.GetFee(&_IPoolFactory.CallOpts, _pool, _stable)
  3260  }
  3261  
  3262  // GetPair is a free data retrieval call binding the contract method 0x6801cc30.
  3263  //
  3264  // Solidity: function getPair(address tokenA, address tokenB, bool stable) view returns(address)
  3265  func (_IPoolFactory *IPoolFactoryCaller) GetPair(opts *bind.CallOpts, tokenA common.Address, tokenB common.Address, stable bool) (common.Address, error) {
  3266  	var out []interface{}
  3267  	err := _IPoolFactory.contract.Call(opts, &out, "getPair", tokenA, tokenB, stable)
  3268  
  3269  	if err != nil {
  3270  		return *new(common.Address), err
  3271  	}
  3272  
  3273  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  3274  
  3275  	return out0, err
  3276  
  3277  }
  3278  
  3279  // GetPair is a free data retrieval call binding the contract method 0x6801cc30.
  3280  //
  3281  // Solidity: function getPair(address tokenA, address tokenB, bool stable) view returns(address)
  3282  func (_IPoolFactory *IPoolFactorySession) GetPair(tokenA common.Address, tokenB common.Address, stable bool) (common.Address, error) {
  3283  	return _IPoolFactory.Contract.GetPair(&_IPoolFactory.CallOpts, tokenA, tokenB, stable)
  3284  }
  3285  
  3286  // GetPair is a free data retrieval call binding the contract method 0x6801cc30.
  3287  //
  3288  // Solidity: function getPair(address tokenA, address tokenB, bool stable) view returns(address)
  3289  func (_IPoolFactory *IPoolFactoryCallerSession) GetPair(tokenA common.Address, tokenB common.Address, stable bool) (common.Address, error) {
  3290  	return _IPoolFactory.Contract.GetPair(&_IPoolFactory.CallOpts, tokenA, tokenB, stable)
  3291  }
  3292  
  3293  // GetPool is a free data retrieval call binding the contract method 0x1698ee82.
  3294  //
  3295  // Solidity: function getPool(address tokenA, address tokenB, uint24 fee) view returns(address)
  3296  func (_IPoolFactory *IPoolFactoryCaller) GetPool(opts *bind.CallOpts, tokenA common.Address, tokenB common.Address, fee *big.Int) (common.Address, error) {
  3297  	var out []interface{}
  3298  	err := _IPoolFactory.contract.Call(opts, &out, "getPool", tokenA, tokenB, fee)
  3299  
  3300  	if err != nil {
  3301  		return *new(common.Address), err
  3302  	}
  3303  
  3304  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  3305  
  3306  	return out0, err
  3307  
  3308  }
  3309  
  3310  // GetPool is a free data retrieval call binding the contract method 0x1698ee82.
  3311  //
  3312  // Solidity: function getPool(address tokenA, address tokenB, uint24 fee) view returns(address)
  3313  func (_IPoolFactory *IPoolFactorySession) GetPool(tokenA common.Address, tokenB common.Address, fee *big.Int) (common.Address, error) {
  3314  	return _IPoolFactory.Contract.GetPool(&_IPoolFactory.CallOpts, tokenA, tokenB, fee)
  3315  }
  3316  
  3317  // GetPool is a free data retrieval call binding the contract method 0x1698ee82.
  3318  //
  3319  // Solidity: function getPool(address tokenA, address tokenB, uint24 fee) view returns(address)
  3320  func (_IPoolFactory *IPoolFactoryCallerSession) GetPool(tokenA common.Address, tokenB common.Address, fee *big.Int) (common.Address, error) {
  3321  	return _IPoolFactory.Contract.GetPool(&_IPoolFactory.CallOpts, tokenA, tokenB, fee)
  3322  }
  3323  
  3324  // GetPool0 is a free data retrieval call binding the contract method 0x79bc57d5.
  3325  //
  3326  // Solidity: function getPool(address tokenA, address tokenB, bool stable) view returns(address)
  3327  func (_IPoolFactory *IPoolFactoryCaller) GetPool0(opts *bind.CallOpts, tokenA common.Address, tokenB common.Address, stable bool) (common.Address, error) {
  3328  	var out []interface{}
  3329  	err := _IPoolFactory.contract.Call(opts, &out, "getPool0", tokenA, tokenB, stable)
  3330  
  3331  	if err != nil {
  3332  		return *new(common.Address), err
  3333  	}
  3334  
  3335  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  3336  
  3337  	return out0, err
  3338  
  3339  }
  3340  
  3341  // GetPool0 is a free data retrieval call binding the contract method 0x79bc57d5.
  3342  //
  3343  // Solidity: function getPool(address tokenA, address tokenB, bool stable) view returns(address)
  3344  func (_IPoolFactory *IPoolFactorySession) GetPool0(tokenA common.Address, tokenB common.Address, stable bool) (common.Address, error) {
  3345  	return _IPoolFactory.Contract.GetPool0(&_IPoolFactory.CallOpts, tokenA, tokenB, stable)
  3346  }
  3347  
  3348  // GetPool0 is a free data retrieval call binding the contract method 0x79bc57d5.
  3349  //
  3350  // Solidity: function getPool(address tokenA, address tokenB, bool stable) view returns(address)
  3351  func (_IPoolFactory *IPoolFactoryCallerSession) GetPool0(tokenA common.Address, tokenB common.Address, stable bool) (common.Address, error) {
  3352  	return _IPoolFactory.Contract.GetPool0(&_IPoolFactory.CallOpts, tokenA, tokenB, stable)
  3353  }
  3354  
  3355  // Implementation is a free data retrieval call binding the contract method 0x5c60da1b.
  3356  //
  3357  // Solidity: function implementation() view returns(address)
  3358  func (_IPoolFactory *IPoolFactoryCaller) Implementation(opts *bind.CallOpts) (common.Address, error) {
  3359  	var out []interface{}
  3360  	err := _IPoolFactory.contract.Call(opts, &out, "implementation")
  3361  
  3362  	if err != nil {
  3363  		return *new(common.Address), err
  3364  	}
  3365  
  3366  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  3367  
  3368  	return out0, err
  3369  
  3370  }
  3371  
  3372  // Implementation is a free data retrieval call binding the contract method 0x5c60da1b.
  3373  //
  3374  // Solidity: function implementation() view returns(address)
  3375  func (_IPoolFactory *IPoolFactorySession) Implementation() (common.Address, error) {
  3376  	return _IPoolFactory.Contract.Implementation(&_IPoolFactory.CallOpts)
  3377  }
  3378  
  3379  // Implementation is a free data retrieval call binding the contract method 0x5c60da1b.
  3380  //
  3381  // Solidity: function implementation() view returns(address)
  3382  func (_IPoolFactory *IPoolFactoryCallerSession) Implementation() (common.Address, error) {
  3383  	return _IPoolFactory.Contract.Implementation(&_IPoolFactory.CallOpts)
  3384  }
  3385  
  3386  // IsPair is a free data retrieval call binding the contract method 0xe5e31b13.
  3387  //
  3388  // Solidity: function isPair(address pool) view returns(bool)
  3389  func (_IPoolFactory *IPoolFactoryCaller) IsPair(opts *bind.CallOpts, pool common.Address) (bool, error) {
  3390  	var out []interface{}
  3391  	err := _IPoolFactory.contract.Call(opts, &out, "isPair", pool)
  3392  
  3393  	if err != nil {
  3394  		return *new(bool), err
  3395  	}
  3396  
  3397  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  3398  
  3399  	return out0, err
  3400  
  3401  }
  3402  
  3403  // IsPair is a free data retrieval call binding the contract method 0xe5e31b13.
  3404  //
  3405  // Solidity: function isPair(address pool) view returns(bool)
  3406  func (_IPoolFactory *IPoolFactorySession) IsPair(pool common.Address) (bool, error) {
  3407  	return _IPoolFactory.Contract.IsPair(&_IPoolFactory.CallOpts, pool)
  3408  }
  3409  
  3410  // IsPair is a free data retrieval call binding the contract method 0xe5e31b13.
  3411  //
  3412  // Solidity: function isPair(address pool) view returns(bool)
  3413  func (_IPoolFactory *IPoolFactoryCallerSession) IsPair(pool common.Address) (bool, error) {
  3414  	return _IPoolFactory.Contract.IsPair(&_IPoolFactory.CallOpts, pool)
  3415  }
  3416  
  3417  // IsPaused is a free data retrieval call binding the contract method 0xb187bd26.
  3418  //
  3419  // Solidity: function isPaused() view returns(bool)
  3420  func (_IPoolFactory *IPoolFactoryCaller) IsPaused(opts *bind.CallOpts) (bool, error) {
  3421  	var out []interface{}
  3422  	err := _IPoolFactory.contract.Call(opts, &out, "isPaused")
  3423  
  3424  	if err != nil {
  3425  		return *new(bool), err
  3426  	}
  3427  
  3428  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  3429  
  3430  	return out0, err
  3431  
  3432  }
  3433  
  3434  // IsPaused is a free data retrieval call binding the contract method 0xb187bd26.
  3435  //
  3436  // Solidity: function isPaused() view returns(bool)
  3437  func (_IPoolFactory *IPoolFactorySession) IsPaused() (bool, error) {
  3438  	return _IPoolFactory.Contract.IsPaused(&_IPoolFactory.CallOpts)
  3439  }
  3440  
  3441  // IsPaused is a free data retrieval call binding the contract method 0xb187bd26.
  3442  //
  3443  // Solidity: function isPaused() view returns(bool)
  3444  func (_IPoolFactory *IPoolFactoryCallerSession) IsPaused() (bool, error) {
  3445  	return _IPoolFactory.Contract.IsPaused(&_IPoolFactory.CallOpts)
  3446  }
  3447  
  3448  // IsPool is a free data retrieval call binding the contract method 0x5b16ebb7.
  3449  //
  3450  // Solidity: function isPool(address pool) view returns(bool)
  3451  func (_IPoolFactory *IPoolFactoryCaller) IsPool(opts *bind.CallOpts, pool common.Address) (bool, error) {
  3452  	var out []interface{}
  3453  	err := _IPoolFactory.contract.Call(opts, &out, "isPool", pool)
  3454  
  3455  	if err != nil {
  3456  		return *new(bool), err
  3457  	}
  3458  
  3459  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  3460  
  3461  	return out0, err
  3462  
  3463  }
  3464  
  3465  // IsPool is a free data retrieval call binding the contract method 0x5b16ebb7.
  3466  //
  3467  // Solidity: function isPool(address pool) view returns(bool)
  3468  func (_IPoolFactory *IPoolFactorySession) IsPool(pool common.Address) (bool, error) {
  3469  	return _IPoolFactory.Contract.IsPool(&_IPoolFactory.CallOpts, pool)
  3470  }
  3471  
  3472  // IsPool is a free data retrieval call binding the contract method 0x5b16ebb7.
  3473  //
  3474  // Solidity: function isPool(address pool) view returns(bool)
  3475  func (_IPoolFactory *IPoolFactoryCallerSession) IsPool(pool common.Address) (bool, error) {
  3476  	return _IPoolFactory.Contract.IsPool(&_IPoolFactory.CallOpts, pool)
  3477  }
  3478  
  3479  // SinkConverter is a free data retrieval call binding the contract method 0x8e39ee16.
  3480  //
  3481  // Solidity: function sinkConverter() view returns(address)
  3482  func (_IPoolFactory *IPoolFactoryCaller) SinkConverter(opts *bind.CallOpts) (common.Address, error) {
  3483  	var out []interface{}
  3484  	err := _IPoolFactory.contract.Call(opts, &out, "sinkConverter")
  3485  
  3486  	if err != nil {
  3487  		return *new(common.Address), err
  3488  	}
  3489  
  3490  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  3491  
  3492  	return out0, err
  3493  
  3494  }
  3495  
  3496  // SinkConverter is a free data retrieval call binding the contract method 0x8e39ee16.
  3497  //
  3498  // Solidity: function sinkConverter() view returns(address)
  3499  func (_IPoolFactory *IPoolFactorySession) SinkConverter() (common.Address, error) {
  3500  	return _IPoolFactory.Contract.SinkConverter(&_IPoolFactory.CallOpts)
  3501  }
  3502  
  3503  // SinkConverter is a free data retrieval call binding the contract method 0x8e39ee16.
  3504  //
  3505  // Solidity: function sinkConverter() view returns(address)
  3506  func (_IPoolFactory *IPoolFactoryCallerSession) SinkConverter() (common.Address, error) {
  3507  	return _IPoolFactory.Contract.SinkConverter(&_IPoolFactory.CallOpts)
  3508  }
  3509  
  3510  // Velo is a free data retrieval call binding the contract method 0x8c7c53ce.
  3511  //
  3512  // Solidity: function velo() view returns(address)
  3513  func (_IPoolFactory *IPoolFactoryCaller) Velo(opts *bind.CallOpts) (common.Address, error) {
  3514  	var out []interface{}
  3515  	err := _IPoolFactory.contract.Call(opts, &out, "velo")
  3516  
  3517  	if err != nil {
  3518  		return *new(common.Address), err
  3519  	}
  3520  
  3521  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  3522  
  3523  	return out0, err
  3524  
  3525  }
  3526  
  3527  // Velo is a free data retrieval call binding the contract method 0x8c7c53ce.
  3528  //
  3529  // Solidity: function velo() view returns(address)
  3530  func (_IPoolFactory *IPoolFactorySession) Velo() (common.Address, error) {
  3531  	return _IPoolFactory.Contract.Velo(&_IPoolFactory.CallOpts)
  3532  }
  3533  
  3534  // Velo is a free data retrieval call binding the contract method 0x8c7c53ce.
  3535  //
  3536  // Solidity: function velo() view returns(address)
  3537  func (_IPoolFactory *IPoolFactoryCallerSession) Velo() (common.Address, error) {
  3538  	return _IPoolFactory.Contract.Velo(&_IPoolFactory.CallOpts)
  3539  }
  3540  
  3541  // VeloV2 is a free data retrieval call binding the contract method 0xc6751c09.
  3542  //
  3543  // Solidity: function veloV2() view returns(address)
  3544  func (_IPoolFactory *IPoolFactoryCaller) VeloV2(opts *bind.CallOpts) (common.Address, error) {
  3545  	var out []interface{}
  3546  	err := _IPoolFactory.contract.Call(opts, &out, "veloV2")
  3547  
  3548  	if err != nil {
  3549  		return *new(common.Address), err
  3550  	}
  3551  
  3552  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  3553  
  3554  	return out0, err
  3555  
  3556  }
  3557  
  3558  // VeloV2 is a free data retrieval call binding the contract method 0xc6751c09.
  3559  //
  3560  // Solidity: function veloV2() view returns(address)
  3561  func (_IPoolFactory *IPoolFactorySession) VeloV2() (common.Address, error) {
  3562  	return _IPoolFactory.Contract.VeloV2(&_IPoolFactory.CallOpts)
  3563  }
  3564  
  3565  // VeloV2 is a free data retrieval call binding the contract method 0xc6751c09.
  3566  //
  3567  // Solidity: function veloV2() view returns(address)
  3568  func (_IPoolFactory *IPoolFactoryCallerSession) VeloV2() (common.Address, error) {
  3569  	return _IPoolFactory.Contract.VeloV2(&_IPoolFactory.CallOpts)
  3570  }
  3571  
  3572  // Voter is a free data retrieval call binding the contract method 0x46c96aac.
  3573  //
  3574  // Solidity: function voter() view returns(address)
  3575  func (_IPoolFactory *IPoolFactoryCaller) Voter(opts *bind.CallOpts) (common.Address, error) {
  3576  	var out []interface{}
  3577  	err := _IPoolFactory.contract.Call(opts, &out, "voter")
  3578  
  3579  	if err != nil {
  3580  		return *new(common.Address), err
  3581  	}
  3582  
  3583  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  3584  
  3585  	return out0, err
  3586  
  3587  }
  3588  
  3589  // Voter is a free data retrieval call binding the contract method 0x46c96aac.
  3590  //
  3591  // Solidity: function voter() view returns(address)
  3592  func (_IPoolFactory *IPoolFactorySession) Voter() (common.Address, error) {
  3593  	return _IPoolFactory.Contract.Voter(&_IPoolFactory.CallOpts)
  3594  }
  3595  
  3596  // Voter is a free data retrieval call binding the contract method 0x46c96aac.
  3597  //
  3598  // Solidity: function voter() view returns(address)
  3599  func (_IPoolFactory *IPoolFactoryCallerSession) Voter() (common.Address, error) {
  3600  	return _IPoolFactory.Contract.Voter(&_IPoolFactory.CallOpts)
  3601  }
  3602  
  3603  // CreatePair is a paid mutator transaction binding the contract method 0x82dfdce4.
  3604  //
  3605  // Solidity: function createPair(address tokenA, address tokenB, bool stable) returns(address pool)
  3606  func (_IPoolFactory *IPoolFactoryTransactor) CreatePair(opts *bind.TransactOpts, tokenA common.Address, tokenB common.Address, stable bool) (*types.Transaction, error) {
  3607  	return _IPoolFactory.contract.Transact(opts, "createPair", tokenA, tokenB, stable)
  3608  }
  3609  
  3610  // CreatePair is a paid mutator transaction binding the contract method 0x82dfdce4.
  3611  //
  3612  // Solidity: function createPair(address tokenA, address tokenB, bool stable) returns(address pool)
  3613  func (_IPoolFactory *IPoolFactorySession) CreatePair(tokenA common.Address, tokenB common.Address, stable bool) (*types.Transaction, error) {
  3614  	return _IPoolFactory.Contract.CreatePair(&_IPoolFactory.TransactOpts, tokenA, tokenB, stable)
  3615  }
  3616  
  3617  // CreatePair is a paid mutator transaction binding the contract method 0x82dfdce4.
  3618  //
  3619  // Solidity: function createPair(address tokenA, address tokenB, bool stable) returns(address pool)
  3620  func (_IPoolFactory *IPoolFactoryTransactorSession) CreatePair(tokenA common.Address, tokenB common.Address, stable bool) (*types.Transaction, error) {
  3621  	return _IPoolFactory.Contract.CreatePair(&_IPoolFactory.TransactOpts, tokenA, tokenB, stable)
  3622  }
  3623  
  3624  // CreatePool is a paid mutator transaction binding the contract method 0x36bf95a0.
  3625  //
  3626  // Solidity: function createPool(address tokenA, address tokenB, bool stable) returns(address pool)
  3627  func (_IPoolFactory *IPoolFactoryTransactor) CreatePool(opts *bind.TransactOpts, tokenA common.Address, tokenB common.Address, stable bool) (*types.Transaction, error) {
  3628  	return _IPoolFactory.contract.Transact(opts, "createPool", tokenA, tokenB, stable)
  3629  }
  3630  
  3631  // CreatePool is a paid mutator transaction binding the contract method 0x36bf95a0.
  3632  //
  3633  // Solidity: function createPool(address tokenA, address tokenB, bool stable) returns(address pool)
  3634  func (_IPoolFactory *IPoolFactorySession) CreatePool(tokenA common.Address, tokenB common.Address, stable bool) (*types.Transaction, error) {
  3635  	return _IPoolFactory.Contract.CreatePool(&_IPoolFactory.TransactOpts, tokenA, tokenB, stable)
  3636  }
  3637  
  3638  // CreatePool is a paid mutator transaction binding the contract method 0x36bf95a0.
  3639  //
  3640  // Solidity: function createPool(address tokenA, address tokenB, bool stable) returns(address pool)
  3641  func (_IPoolFactory *IPoolFactoryTransactorSession) CreatePool(tokenA common.Address, tokenB common.Address, stable bool) (*types.Transaction, error) {
  3642  	return _IPoolFactory.Contract.CreatePool(&_IPoolFactory.TransactOpts, tokenA, tokenB, stable)
  3643  }
  3644  
  3645  // CreatePool0 is a paid mutator transaction binding the contract method 0xa1671295.
  3646  //
  3647  // Solidity: function createPool(address tokenA, address tokenB, uint24 fee) returns(address pool)
  3648  func (_IPoolFactory *IPoolFactoryTransactor) CreatePool0(opts *bind.TransactOpts, tokenA common.Address, tokenB common.Address, fee *big.Int) (*types.Transaction, error) {
  3649  	return _IPoolFactory.contract.Transact(opts, "createPool0", tokenA, tokenB, fee)
  3650  }
  3651  
  3652  // CreatePool0 is a paid mutator transaction binding the contract method 0xa1671295.
  3653  //
  3654  // Solidity: function createPool(address tokenA, address tokenB, uint24 fee) returns(address pool)
  3655  func (_IPoolFactory *IPoolFactorySession) CreatePool0(tokenA common.Address, tokenB common.Address, fee *big.Int) (*types.Transaction, error) {
  3656  	return _IPoolFactory.Contract.CreatePool0(&_IPoolFactory.TransactOpts, tokenA, tokenB, fee)
  3657  }
  3658  
  3659  // CreatePool0 is a paid mutator transaction binding the contract method 0xa1671295.
  3660  //
  3661  // Solidity: function createPool(address tokenA, address tokenB, uint24 fee) returns(address pool)
  3662  func (_IPoolFactory *IPoolFactoryTransactorSession) CreatePool0(tokenA common.Address, tokenB common.Address, fee *big.Int) (*types.Transaction, error) {
  3663  	return _IPoolFactory.Contract.CreatePool0(&_IPoolFactory.TransactOpts, tokenA, tokenB, fee)
  3664  }
  3665  
  3666  // SetCustomFee is a paid mutator transaction binding the contract method 0xd49466a8.
  3667  //
  3668  // Solidity: function setCustomFee(address _pool, uint256 _fee) returns()
  3669  func (_IPoolFactory *IPoolFactoryTransactor) SetCustomFee(opts *bind.TransactOpts, _pool common.Address, _fee *big.Int) (*types.Transaction, error) {
  3670  	return _IPoolFactory.contract.Transact(opts, "setCustomFee", _pool, _fee)
  3671  }
  3672  
  3673  // SetCustomFee is a paid mutator transaction binding the contract method 0xd49466a8.
  3674  //
  3675  // Solidity: function setCustomFee(address _pool, uint256 _fee) returns()
  3676  func (_IPoolFactory *IPoolFactorySession) SetCustomFee(_pool common.Address, _fee *big.Int) (*types.Transaction, error) {
  3677  	return _IPoolFactory.Contract.SetCustomFee(&_IPoolFactory.TransactOpts, _pool, _fee)
  3678  }
  3679  
  3680  // SetCustomFee is a paid mutator transaction binding the contract method 0xd49466a8.
  3681  //
  3682  // Solidity: function setCustomFee(address _pool, uint256 _fee) returns()
  3683  func (_IPoolFactory *IPoolFactoryTransactorSession) SetCustomFee(_pool common.Address, _fee *big.Int) (*types.Transaction, error) {
  3684  	return _IPoolFactory.Contract.SetCustomFee(&_IPoolFactory.TransactOpts, _pool, _fee)
  3685  }
  3686  
  3687  // SetFee is a paid mutator transaction binding the contract method 0xe1f76b44.
  3688  //
  3689  // Solidity: function setFee(bool _stable, uint256 _fee) returns()
  3690  func (_IPoolFactory *IPoolFactoryTransactor) SetFee(opts *bind.TransactOpts, _stable bool, _fee *big.Int) (*types.Transaction, error) {
  3691  	return _IPoolFactory.contract.Transact(opts, "setFee", _stable, _fee)
  3692  }
  3693  
  3694  // SetFee is a paid mutator transaction binding the contract method 0xe1f76b44.
  3695  //
  3696  // Solidity: function setFee(bool _stable, uint256 _fee) returns()
  3697  func (_IPoolFactory *IPoolFactorySession) SetFee(_stable bool, _fee *big.Int) (*types.Transaction, error) {
  3698  	return _IPoolFactory.Contract.SetFee(&_IPoolFactory.TransactOpts, _stable, _fee)
  3699  }
  3700  
  3701  // SetFee is a paid mutator transaction binding the contract method 0xe1f76b44.
  3702  //
  3703  // Solidity: function setFee(bool _stable, uint256 _fee) returns()
  3704  func (_IPoolFactory *IPoolFactoryTransactorSession) SetFee(_stable bool, _fee *big.Int) (*types.Transaction, error) {
  3705  	return _IPoolFactory.Contract.SetFee(&_IPoolFactory.TransactOpts, _stable, _fee)
  3706  }
  3707  
  3708  // SetFeeManager is a paid mutator transaction binding the contract method 0x472d35b9.
  3709  //
  3710  // Solidity: function setFeeManager(address _feeManager) returns()
  3711  func (_IPoolFactory *IPoolFactoryTransactor) SetFeeManager(opts *bind.TransactOpts, _feeManager common.Address) (*types.Transaction, error) {
  3712  	return _IPoolFactory.contract.Transact(opts, "setFeeManager", _feeManager)
  3713  }
  3714  
  3715  // SetFeeManager is a paid mutator transaction binding the contract method 0x472d35b9.
  3716  //
  3717  // Solidity: function setFeeManager(address _feeManager) returns()
  3718  func (_IPoolFactory *IPoolFactorySession) SetFeeManager(_feeManager common.Address) (*types.Transaction, error) {
  3719  	return _IPoolFactory.Contract.SetFeeManager(&_IPoolFactory.TransactOpts, _feeManager)
  3720  }
  3721  
  3722  // SetFeeManager is a paid mutator transaction binding the contract method 0x472d35b9.
  3723  //
  3724  // Solidity: function setFeeManager(address _feeManager) returns()
  3725  func (_IPoolFactory *IPoolFactoryTransactorSession) SetFeeManager(_feeManager common.Address) (*types.Transaction, error) {
  3726  	return _IPoolFactory.Contract.SetFeeManager(&_IPoolFactory.TransactOpts, _feeManager)
  3727  }
  3728  
  3729  // SetPauseState is a paid mutator transaction binding the contract method 0xcdb88ad1.
  3730  //
  3731  // Solidity: function setPauseState(bool _state) returns()
  3732  func (_IPoolFactory *IPoolFactoryTransactor) SetPauseState(opts *bind.TransactOpts, _state bool) (*types.Transaction, error) {
  3733  	return _IPoolFactory.contract.Transact(opts, "setPauseState", _state)
  3734  }
  3735  
  3736  // SetPauseState is a paid mutator transaction binding the contract method 0xcdb88ad1.
  3737  //
  3738  // Solidity: function setPauseState(bool _state) returns()
  3739  func (_IPoolFactory *IPoolFactorySession) SetPauseState(_state bool) (*types.Transaction, error) {
  3740  	return _IPoolFactory.Contract.SetPauseState(&_IPoolFactory.TransactOpts, _state)
  3741  }
  3742  
  3743  // SetPauseState is a paid mutator transaction binding the contract method 0xcdb88ad1.
  3744  //
  3745  // Solidity: function setPauseState(bool _state) returns()
  3746  func (_IPoolFactory *IPoolFactoryTransactorSession) SetPauseState(_state bool) (*types.Transaction, error) {
  3747  	return _IPoolFactory.Contract.SetPauseState(&_IPoolFactory.TransactOpts, _state)
  3748  }
  3749  
  3750  // SetPauser is a paid mutator transaction binding the contract method 0x2d88af4a.
  3751  //
  3752  // Solidity: function setPauser(address _pauser) returns()
  3753  func (_IPoolFactory *IPoolFactoryTransactor) SetPauser(opts *bind.TransactOpts, _pauser common.Address) (*types.Transaction, error) {
  3754  	return _IPoolFactory.contract.Transact(opts, "setPauser", _pauser)
  3755  }
  3756  
  3757  // SetPauser is a paid mutator transaction binding the contract method 0x2d88af4a.
  3758  //
  3759  // Solidity: function setPauser(address _pauser) returns()
  3760  func (_IPoolFactory *IPoolFactorySession) SetPauser(_pauser common.Address) (*types.Transaction, error) {
  3761  	return _IPoolFactory.Contract.SetPauser(&_IPoolFactory.TransactOpts, _pauser)
  3762  }
  3763  
  3764  // SetPauser is a paid mutator transaction binding the contract method 0x2d88af4a.
  3765  //
  3766  // Solidity: function setPauser(address _pauser) returns()
  3767  func (_IPoolFactory *IPoolFactoryTransactorSession) SetPauser(_pauser common.Address) (*types.Transaction, error) {
  3768  	return _IPoolFactory.Contract.SetPauser(&_IPoolFactory.TransactOpts, _pauser)
  3769  }
  3770  
  3771  // SetSinkConverter is a paid mutator transaction binding the contract method 0x37068e7b.
  3772  //
  3773  // Solidity: function setSinkConverter(address _sinkConvert, address _velo, address _veloV2) returns()
  3774  func (_IPoolFactory *IPoolFactoryTransactor) SetSinkConverter(opts *bind.TransactOpts, _sinkConvert common.Address, _velo common.Address, _veloV2 common.Address) (*types.Transaction, error) {
  3775  	return _IPoolFactory.contract.Transact(opts, "setSinkConverter", _sinkConvert, _velo, _veloV2)
  3776  }
  3777  
  3778  // SetSinkConverter is a paid mutator transaction binding the contract method 0x37068e7b.
  3779  //
  3780  // Solidity: function setSinkConverter(address _sinkConvert, address _velo, address _veloV2) returns()
  3781  func (_IPoolFactory *IPoolFactorySession) SetSinkConverter(_sinkConvert common.Address, _velo common.Address, _veloV2 common.Address) (*types.Transaction, error) {
  3782  	return _IPoolFactory.Contract.SetSinkConverter(&_IPoolFactory.TransactOpts, _sinkConvert, _velo, _veloV2)
  3783  }
  3784  
  3785  // SetSinkConverter is a paid mutator transaction binding the contract method 0x37068e7b.
  3786  //
  3787  // Solidity: function setSinkConverter(address _sinkConvert, address _velo, address _veloV2) returns()
  3788  func (_IPoolFactory *IPoolFactoryTransactorSession) SetSinkConverter(_sinkConvert common.Address, _velo common.Address, _veloV2 common.Address) (*types.Transaction, error) {
  3789  	return _IPoolFactory.Contract.SetSinkConverter(&_IPoolFactory.TransactOpts, _sinkConvert, _velo, _veloV2)
  3790  }
  3791  
  3792  // SetVoter is a paid mutator transaction binding the contract method 0x4bc2a657.
  3793  //
  3794  // Solidity: function setVoter(address _voter) returns()
  3795  func (_IPoolFactory *IPoolFactoryTransactor) SetVoter(opts *bind.TransactOpts, _voter common.Address) (*types.Transaction, error) {
  3796  	return _IPoolFactory.contract.Transact(opts, "setVoter", _voter)
  3797  }
  3798  
  3799  // SetVoter is a paid mutator transaction binding the contract method 0x4bc2a657.
  3800  //
  3801  // Solidity: function setVoter(address _voter) returns()
  3802  func (_IPoolFactory *IPoolFactorySession) SetVoter(_voter common.Address) (*types.Transaction, error) {
  3803  	return _IPoolFactory.Contract.SetVoter(&_IPoolFactory.TransactOpts, _voter)
  3804  }
  3805  
  3806  // SetVoter is a paid mutator transaction binding the contract method 0x4bc2a657.
  3807  //
  3808  // Solidity: function setVoter(address _voter) returns()
  3809  func (_IPoolFactory *IPoolFactoryTransactorSession) SetVoter(_voter common.Address) (*types.Transaction, error) {
  3810  	return _IPoolFactory.Contract.SetVoter(&_IPoolFactory.TransactOpts, _voter)
  3811  }
  3812  
  3813  // IPoolFactoryPoolCreatedIterator is returned from FilterPoolCreated and is used to iterate over the raw logs and unpacked data for PoolCreated events raised by the IPoolFactory contract.
  3814  type IPoolFactoryPoolCreatedIterator struct {
  3815  	Event *IPoolFactoryPoolCreated // Event containing the contract specifics and raw log
  3816  
  3817  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3818  	event    string              // Event name to use for unpacking event data
  3819  
  3820  	logs chan types.Log        // Log channel receiving the found contract events
  3821  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3822  	done bool                  // Whether the subscription completed delivering logs
  3823  	fail error                 // Occurred error to stop iteration
  3824  }
  3825  
  3826  // Next advances the iterator to the subsequent event, returning whether there
  3827  // are any more events found. In case of a retrieval or parsing error, false is
  3828  // returned and Error() can be queried for the exact failure.
  3829  func (it *IPoolFactoryPoolCreatedIterator) Next() bool {
  3830  	// If the iterator failed, stop iterating
  3831  	if it.fail != nil {
  3832  		return false
  3833  	}
  3834  	// If the iterator completed, deliver directly whatever's available
  3835  	if it.done {
  3836  		select {
  3837  		case log := <-it.logs:
  3838  			it.Event = new(IPoolFactoryPoolCreated)
  3839  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3840  				it.fail = err
  3841  				return false
  3842  			}
  3843  			it.Event.Raw = log
  3844  			return true
  3845  
  3846  		default:
  3847  			return false
  3848  		}
  3849  	}
  3850  	// Iterator still in progress, wait for either a data or an error event
  3851  	select {
  3852  	case log := <-it.logs:
  3853  		it.Event = new(IPoolFactoryPoolCreated)
  3854  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3855  			it.fail = err
  3856  			return false
  3857  		}
  3858  		it.Event.Raw = log
  3859  		return true
  3860  
  3861  	case err := <-it.sub.Err():
  3862  		it.done = true
  3863  		it.fail = err
  3864  		return it.Next()
  3865  	}
  3866  }
  3867  
  3868  // Error returns any retrieval or parsing error occurred during filtering.
  3869  func (it *IPoolFactoryPoolCreatedIterator) Error() error {
  3870  	return it.fail
  3871  }
  3872  
  3873  // Close terminates the iteration process, releasing any pending underlying
  3874  // resources.
  3875  func (it *IPoolFactoryPoolCreatedIterator) Close() error {
  3876  	it.sub.Unsubscribe()
  3877  	return nil
  3878  }
  3879  
  3880  // IPoolFactoryPoolCreated represents a PoolCreated event raised by the IPoolFactory contract.
  3881  type IPoolFactoryPoolCreated struct {
  3882  	Token0 common.Address
  3883  	Token1 common.Address
  3884  	Stable bool
  3885  	Pool   common.Address
  3886  	Arg4   *big.Int
  3887  	Raw    types.Log // Blockchain specific contextual infos
  3888  }
  3889  
  3890  // FilterPoolCreated is a free log retrieval operation binding the contract event 0x2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e.
  3891  //
  3892  // Solidity: event PoolCreated(address indexed token0, address indexed token1, bool indexed stable, address pool, uint256 arg4)
  3893  func (_IPoolFactory *IPoolFactoryFilterer) FilterPoolCreated(opts *bind.FilterOpts, token0 []common.Address, token1 []common.Address, stable []bool) (*IPoolFactoryPoolCreatedIterator, error) {
  3894  
  3895  	var token0Rule []interface{}
  3896  	for _, token0Item := range token0 {
  3897  		token0Rule = append(token0Rule, token0Item)
  3898  	}
  3899  	var token1Rule []interface{}
  3900  	for _, token1Item := range token1 {
  3901  		token1Rule = append(token1Rule, token1Item)
  3902  	}
  3903  	var stableRule []interface{}
  3904  	for _, stableItem := range stable {
  3905  		stableRule = append(stableRule, stableItem)
  3906  	}
  3907  
  3908  	logs, sub, err := _IPoolFactory.contract.FilterLogs(opts, "PoolCreated", token0Rule, token1Rule, stableRule)
  3909  	if err != nil {
  3910  		return nil, err
  3911  	}
  3912  	return &IPoolFactoryPoolCreatedIterator{contract: _IPoolFactory.contract, event: "PoolCreated", logs: logs, sub: sub}, nil
  3913  }
  3914  
  3915  // WatchPoolCreated is a free log subscription operation binding the contract event 0x2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e.
  3916  //
  3917  // Solidity: event PoolCreated(address indexed token0, address indexed token1, bool indexed stable, address pool, uint256 arg4)
  3918  func (_IPoolFactory *IPoolFactoryFilterer) WatchPoolCreated(opts *bind.WatchOpts, sink chan<- *IPoolFactoryPoolCreated, token0 []common.Address, token1 []common.Address, stable []bool) (event.Subscription, error) {
  3919  
  3920  	var token0Rule []interface{}
  3921  	for _, token0Item := range token0 {
  3922  		token0Rule = append(token0Rule, token0Item)
  3923  	}
  3924  	var token1Rule []interface{}
  3925  	for _, token1Item := range token1 {
  3926  		token1Rule = append(token1Rule, token1Item)
  3927  	}
  3928  	var stableRule []interface{}
  3929  	for _, stableItem := range stable {
  3930  		stableRule = append(stableRule, stableItem)
  3931  	}
  3932  
  3933  	logs, sub, err := _IPoolFactory.contract.WatchLogs(opts, "PoolCreated", token0Rule, token1Rule, stableRule)
  3934  	if err != nil {
  3935  		return nil, err
  3936  	}
  3937  	return event.NewSubscription(func(quit <-chan struct{}) error {
  3938  		defer sub.Unsubscribe()
  3939  		for {
  3940  			select {
  3941  			case log := <-logs:
  3942  				// New log arrived, parse the event and forward to the user
  3943  				event := new(IPoolFactoryPoolCreated)
  3944  				if err := _IPoolFactory.contract.UnpackLog(event, "PoolCreated", log); err != nil {
  3945  					return err
  3946  				}
  3947  				event.Raw = log
  3948  
  3949  				select {
  3950  				case sink <- event:
  3951  				case err := <-sub.Err():
  3952  					return err
  3953  				case <-quit:
  3954  					return nil
  3955  				}
  3956  			case err := <-sub.Err():
  3957  				return err
  3958  			case <-quit:
  3959  				return nil
  3960  			}
  3961  		}
  3962  	}), nil
  3963  }
  3964  
  3965  // ParsePoolCreated is a log parse operation binding the contract event 0x2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e.
  3966  //
  3967  // Solidity: event PoolCreated(address indexed token0, address indexed token1, bool indexed stable, address pool, uint256 arg4)
  3968  func (_IPoolFactory *IPoolFactoryFilterer) ParsePoolCreated(log types.Log) (*IPoolFactoryPoolCreated, error) {
  3969  	event := new(IPoolFactoryPoolCreated)
  3970  	if err := _IPoolFactory.contract.UnpackLog(event, "PoolCreated", log); err != nil {
  3971  		return nil, err
  3972  	}
  3973  	event.Raw = log
  3974  	return event, nil
  3975  }
  3976  
  3977  // IPoolFactorySetCustomFeeIterator is returned from FilterSetCustomFee and is used to iterate over the raw logs and unpacked data for SetCustomFee events raised by the IPoolFactory contract.
  3978  type IPoolFactorySetCustomFeeIterator struct {
  3979  	Event *IPoolFactorySetCustomFee // Event containing the contract specifics and raw log
  3980  
  3981  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3982  	event    string              // Event name to use for unpacking event data
  3983  
  3984  	logs chan types.Log        // Log channel receiving the found contract events
  3985  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3986  	done bool                  // Whether the subscription completed delivering logs
  3987  	fail error                 // Occurred error to stop iteration
  3988  }
  3989  
  3990  // Next advances the iterator to the subsequent event, returning whether there
  3991  // are any more events found. In case of a retrieval or parsing error, false is
  3992  // returned and Error() can be queried for the exact failure.
  3993  func (it *IPoolFactorySetCustomFeeIterator) Next() bool {
  3994  	// If the iterator failed, stop iterating
  3995  	if it.fail != nil {
  3996  		return false
  3997  	}
  3998  	// If the iterator completed, deliver directly whatever's available
  3999  	if it.done {
  4000  		select {
  4001  		case log := <-it.logs:
  4002  			it.Event = new(IPoolFactorySetCustomFee)
  4003  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4004  				it.fail = err
  4005  				return false
  4006  			}
  4007  			it.Event.Raw = log
  4008  			return true
  4009  
  4010  		default:
  4011  			return false
  4012  		}
  4013  	}
  4014  	// Iterator still in progress, wait for either a data or an error event
  4015  	select {
  4016  	case log := <-it.logs:
  4017  		it.Event = new(IPoolFactorySetCustomFee)
  4018  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4019  			it.fail = err
  4020  			return false
  4021  		}
  4022  		it.Event.Raw = log
  4023  		return true
  4024  
  4025  	case err := <-it.sub.Err():
  4026  		it.done = true
  4027  		it.fail = err
  4028  		return it.Next()
  4029  	}
  4030  }
  4031  
  4032  // Error returns any retrieval or parsing error occurred during filtering.
  4033  func (it *IPoolFactorySetCustomFeeIterator) Error() error {
  4034  	return it.fail
  4035  }
  4036  
  4037  // Close terminates the iteration process, releasing any pending underlying
  4038  // resources.
  4039  func (it *IPoolFactorySetCustomFeeIterator) Close() error {
  4040  	it.sub.Unsubscribe()
  4041  	return nil
  4042  }
  4043  
  4044  // IPoolFactorySetCustomFee represents a SetCustomFee event raised by the IPoolFactory contract.
  4045  type IPoolFactorySetCustomFee struct {
  4046  	Pool common.Address
  4047  	Fee  *big.Int
  4048  	Raw  types.Log // Blockchain specific contextual infos
  4049  }
  4050  
  4051  // FilterSetCustomFee is a free log retrieval operation binding the contract event 0xae468ce586f9a87660fdffc1448cee942042c16ae2f02046b134b5224f31936b.
  4052  //
  4053  // Solidity: event SetCustomFee(address indexed pool, uint256 fee)
  4054  func (_IPoolFactory *IPoolFactoryFilterer) FilterSetCustomFee(opts *bind.FilterOpts, pool []common.Address) (*IPoolFactorySetCustomFeeIterator, error) {
  4055  
  4056  	var poolRule []interface{}
  4057  	for _, poolItem := range pool {
  4058  		poolRule = append(poolRule, poolItem)
  4059  	}
  4060  
  4061  	logs, sub, err := _IPoolFactory.contract.FilterLogs(opts, "SetCustomFee", poolRule)
  4062  	if err != nil {
  4063  		return nil, err
  4064  	}
  4065  	return &IPoolFactorySetCustomFeeIterator{contract: _IPoolFactory.contract, event: "SetCustomFee", logs: logs, sub: sub}, nil
  4066  }
  4067  
  4068  // WatchSetCustomFee is a free log subscription operation binding the contract event 0xae468ce586f9a87660fdffc1448cee942042c16ae2f02046b134b5224f31936b.
  4069  //
  4070  // Solidity: event SetCustomFee(address indexed pool, uint256 fee)
  4071  func (_IPoolFactory *IPoolFactoryFilterer) WatchSetCustomFee(opts *bind.WatchOpts, sink chan<- *IPoolFactorySetCustomFee, pool []common.Address) (event.Subscription, error) {
  4072  
  4073  	var poolRule []interface{}
  4074  	for _, poolItem := range pool {
  4075  		poolRule = append(poolRule, poolItem)
  4076  	}
  4077  
  4078  	logs, sub, err := _IPoolFactory.contract.WatchLogs(opts, "SetCustomFee", poolRule)
  4079  	if err != nil {
  4080  		return nil, err
  4081  	}
  4082  	return event.NewSubscription(func(quit <-chan struct{}) error {
  4083  		defer sub.Unsubscribe()
  4084  		for {
  4085  			select {
  4086  			case log := <-logs:
  4087  				// New log arrived, parse the event and forward to the user
  4088  				event := new(IPoolFactorySetCustomFee)
  4089  				if err := _IPoolFactory.contract.UnpackLog(event, "SetCustomFee", log); err != nil {
  4090  					return err
  4091  				}
  4092  				event.Raw = log
  4093  
  4094  				select {
  4095  				case sink <- event:
  4096  				case err := <-sub.Err():
  4097  					return err
  4098  				case <-quit:
  4099  					return nil
  4100  				}
  4101  			case err := <-sub.Err():
  4102  				return err
  4103  			case <-quit:
  4104  				return nil
  4105  			}
  4106  		}
  4107  	}), nil
  4108  }
  4109  
  4110  // ParseSetCustomFee is a log parse operation binding the contract event 0xae468ce586f9a87660fdffc1448cee942042c16ae2f02046b134b5224f31936b.
  4111  //
  4112  // Solidity: event SetCustomFee(address indexed pool, uint256 fee)
  4113  func (_IPoolFactory *IPoolFactoryFilterer) ParseSetCustomFee(log types.Log) (*IPoolFactorySetCustomFee, error) {
  4114  	event := new(IPoolFactorySetCustomFee)
  4115  	if err := _IPoolFactory.contract.UnpackLog(event, "SetCustomFee", log); err != nil {
  4116  		return nil, err
  4117  	}
  4118  	event.Raw = log
  4119  	return event, nil
  4120  }
  4121  
  4122  // IPoolFactorySetFeeManagerIterator is returned from FilterSetFeeManager and is used to iterate over the raw logs and unpacked data for SetFeeManager events raised by the IPoolFactory contract.
  4123  type IPoolFactorySetFeeManagerIterator struct {
  4124  	Event *IPoolFactorySetFeeManager // Event containing the contract specifics and raw log
  4125  
  4126  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  4127  	event    string              // Event name to use for unpacking event data
  4128  
  4129  	logs chan types.Log        // Log channel receiving the found contract events
  4130  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  4131  	done bool                  // Whether the subscription completed delivering logs
  4132  	fail error                 // Occurred error to stop iteration
  4133  }
  4134  
  4135  // Next advances the iterator to the subsequent event, returning whether there
  4136  // are any more events found. In case of a retrieval or parsing error, false is
  4137  // returned and Error() can be queried for the exact failure.
  4138  func (it *IPoolFactorySetFeeManagerIterator) Next() bool {
  4139  	// If the iterator failed, stop iterating
  4140  	if it.fail != nil {
  4141  		return false
  4142  	}
  4143  	// If the iterator completed, deliver directly whatever's available
  4144  	if it.done {
  4145  		select {
  4146  		case log := <-it.logs:
  4147  			it.Event = new(IPoolFactorySetFeeManager)
  4148  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4149  				it.fail = err
  4150  				return false
  4151  			}
  4152  			it.Event.Raw = log
  4153  			return true
  4154  
  4155  		default:
  4156  			return false
  4157  		}
  4158  	}
  4159  	// Iterator still in progress, wait for either a data or an error event
  4160  	select {
  4161  	case log := <-it.logs:
  4162  		it.Event = new(IPoolFactorySetFeeManager)
  4163  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4164  			it.fail = err
  4165  			return false
  4166  		}
  4167  		it.Event.Raw = log
  4168  		return true
  4169  
  4170  	case err := <-it.sub.Err():
  4171  		it.done = true
  4172  		it.fail = err
  4173  		return it.Next()
  4174  	}
  4175  }
  4176  
  4177  // Error returns any retrieval or parsing error occurred during filtering.
  4178  func (it *IPoolFactorySetFeeManagerIterator) Error() error {
  4179  	return it.fail
  4180  }
  4181  
  4182  // Close terminates the iteration process, releasing any pending underlying
  4183  // resources.
  4184  func (it *IPoolFactorySetFeeManagerIterator) Close() error {
  4185  	it.sub.Unsubscribe()
  4186  	return nil
  4187  }
  4188  
  4189  // IPoolFactorySetFeeManager represents a SetFeeManager event raised by the IPoolFactory contract.
  4190  type IPoolFactorySetFeeManager struct {
  4191  	FeeManager common.Address
  4192  	Raw        types.Log // Blockchain specific contextual infos
  4193  }
  4194  
  4195  // FilterSetFeeManager is a free log retrieval operation binding the contract event 0x5d0517e3a4eabea892d9750138cd21d4a6cf3b935b43d0598df7055f463819b2.
  4196  //
  4197  // Solidity: event SetFeeManager(address feeManager)
  4198  func (_IPoolFactory *IPoolFactoryFilterer) FilterSetFeeManager(opts *bind.FilterOpts) (*IPoolFactorySetFeeManagerIterator, error) {
  4199  
  4200  	logs, sub, err := _IPoolFactory.contract.FilterLogs(opts, "SetFeeManager")
  4201  	if err != nil {
  4202  		return nil, err
  4203  	}
  4204  	return &IPoolFactorySetFeeManagerIterator{contract: _IPoolFactory.contract, event: "SetFeeManager", logs: logs, sub: sub}, nil
  4205  }
  4206  
  4207  // WatchSetFeeManager is a free log subscription operation binding the contract event 0x5d0517e3a4eabea892d9750138cd21d4a6cf3b935b43d0598df7055f463819b2.
  4208  //
  4209  // Solidity: event SetFeeManager(address feeManager)
  4210  func (_IPoolFactory *IPoolFactoryFilterer) WatchSetFeeManager(opts *bind.WatchOpts, sink chan<- *IPoolFactorySetFeeManager) (event.Subscription, error) {
  4211  
  4212  	logs, sub, err := _IPoolFactory.contract.WatchLogs(opts, "SetFeeManager")
  4213  	if err != nil {
  4214  		return nil, err
  4215  	}
  4216  	return event.NewSubscription(func(quit <-chan struct{}) error {
  4217  		defer sub.Unsubscribe()
  4218  		for {
  4219  			select {
  4220  			case log := <-logs:
  4221  				// New log arrived, parse the event and forward to the user
  4222  				event := new(IPoolFactorySetFeeManager)
  4223  				if err := _IPoolFactory.contract.UnpackLog(event, "SetFeeManager", log); err != nil {
  4224  					return err
  4225  				}
  4226  				event.Raw = log
  4227  
  4228  				select {
  4229  				case sink <- event:
  4230  				case err := <-sub.Err():
  4231  					return err
  4232  				case <-quit:
  4233  					return nil
  4234  				}
  4235  			case err := <-sub.Err():
  4236  				return err
  4237  			case <-quit:
  4238  				return nil
  4239  			}
  4240  		}
  4241  	}), nil
  4242  }
  4243  
  4244  // ParseSetFeeManager is a log parse operation binding the contract event 0x5d0517e3a4eabea892d9750138cd21d4a6cf3b935b43d0598df7055f463819b2.
  4245  //
  4246  // Solidity: event SetFeeManager(address feeManager)
  4247  func (_IPoolFactory *IPoolFactoryFilterer) ParseSetFeeManager(log types.Log) (*IPoolFactorySetFeeManager, error) {
  4248  	event := new(IPoolFactorySetFeeManager)
  4249  	if err := _IPoolFactory.contract.UnpackLog(event, "SetFeeManager", log); err != nil {
  4250  		return nil, err
  4251  	}
  4252  	event.Raw = log
  4253  	return event, nil
  4254  }
  4255  
  4256  // IPoolFactorySetPauseStateIterator is returned from FilterSetPauseState and is used to iterate over the raw logs and unpacked data for SetPauseState events raised by the IPoolFactory contract.
  4257  type IPoolFactorySetPauseStateIterator struct {
  4258  	Event *IPoolFactorySetPauseState // Event containing the contract specifics and raw log
  4259  
  4260  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  4261  	event    string              // Event name to use for unpacking event data
  4262  
  4263  	logs chan types.Log        // Log channel receiving the found contract events
  4264  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  4265  	done bool                  // Whether the subscription completed delivering logs
  4266  	fail error                 // Occurred error to stop iteration
  4267  }
  4268  
  4269  // Next advances the iterator to the subsequent event, returning whether there
  4270  // are any more events found. In case of a retrieval or parsing error, false is
  4271  // returned and Error() can be queried for the exact failure.
  4272  func (it *IPoolFactorySetPauseStateIterator) Next() bool {
  4273  	// If the iterator failed, stop iterating
  4274  	if it.fail != nil {
  4275  		return false
  4276  	}
  4277  	// If the iterator completed, deliver directly whatever's available
  4278  	if it.done {
  4279  		select {
  4280  		case log := <-it.logs:
  4281  			it.Event = new(IPoolFactorySetPauseState)
  4282  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4283  				it.fail = err
  4284  				return false
  4285  			}
  4286  			it.Event.Raw = log
  4287  			return true
  4288  
  4289  		default:
  4290  			return false
  4291  		}
  4292  	}
  4293  	// Iterator still in progress, wait for either a data or an error event
  4294  	select {
  4295  	case log := <-it.logs:
  4296  		it.Event = new(IPoolFactorySetPauseState)
  4297  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4298  			it.fail = err
  4299  			return false
  4300  		}
  4301  		it.Event.Raw = log
  4302  		return true
  4303  
  4304  	case err := <-it.sub.Err():
  4305  		it.done = true
  4306  		it.fail = err
  4307  		return it.Next()
  4308  	}
  4309  }
  4310  
  4311  // Error returns any retrieval or parsing error occurred during filtering.
  4312  func (it *IPoolFactorySetPauseStateIterator) Error() error {
  4313  	return it.fail
  4314  }
  4315  
  4316  // Close terminates the iteration process, releasing any pending underlying
  4317  // resources.
  4318  func (it *IPoolFactorySetPauseStateIterator) Close() error {
  4319  	it.sub.Unsubscribe()
  4320  	return nil
  4321  }
  4322  
  4323  // IPoolFactorySetPauseState represents a SetPauseState event raised by the IPoolFactory contract.
  4324  type IPoolFactorySetPauseState struct {
  4325  	State bool
  4326  	Raw   types.Log // Blockchain specific contextual infos
  4327  }
  4328  
  4329  // FilterSetPauseState is a free log retrieval operation binding the contract event 0x0d76538efc408318a051137c2720a9e82902acdbd46b802d488b74ca3a09a116.
  4330  //
  4331  // Solidity: event SetPauseState(bool state)
  4332  func (_IPoolFactory *IPoolFactoryFilterer) FilterSetPauseState(opts *bind.FilterOpts) (*IPoolFactorySetPauseStateIterator, error) {
  4333  
  4334  	logs, sub, err := _IPoolFactory.contract.FilterLogs(opts, "SetPauseState")
  4335  	if err != nil {
  4336  		return nil, err
  4337  	}
  4338  	return &IPoolFactorySetPauseStateIterator{contract: _IPoolFactory.contract, event: "SetPauseState", logs: logs, sub: sub}, nil
  4339  }
  4340  
  4341  // WatchSetPauseState is a free log subscription operation binding the contract event 0x0d76538efc408318a051137c2720a9e82902acdbd46b802d488b74ca3a09a116.
  4342  //
  4343  // Solidity: event SetPauseState(bool state)
  4344  func (_IPoolFactory *IPoolFactoryFilterer) WatchSetPauseState(opts *bind.WatchOpts, sink chan<- *IPoolFactorySetPauseState) (event.Subscription, error) {
  4345  
  4346  	logs, sub, err := _IPoolFactory.contract.WatchLogs(opts, "SetPauseState")
  4347  	if err != nil {
  4348  		return nil, err
  4349  	}
  4350  	return event.NewSubscription(func(quit <-chan struct{}) error {
  4351  		defer sub.Unsubscribe()
  4352  		for {
  4353  			select {
  4354  			case log := <-logs:
  4355  				// New log arrived, parse the event and forward to the user
  4356  				event := new(IPoolFactorySetPauseState)
  4357  				if err := _IPoolFactory.contract.UnpackLog(event, "SetPauseState", log); err != nil {
  4358  					return err
  4359  				}
  4360  				event.Raw = log
  4361  
  4362  				select {
  4363  				case sink <- event:
  4364  				case err := <-sub.Err():
  4365  					return err
  4366  				case <-quit:
  4367  					return nil
  4368  				}
  4369  			case err := <-sub.Err():
  4370  				return err
  4371  			case <-quit:
  4372  				return nil
  4373  			}
  4374  		}
  4375  	}), nil
  4376  }
  4377  
  4378  // ParseSetPauseState is a log parse operation binding the contract event 0x0d76538efc408318a051137c2720a9e82902acdbd46b802d488b74ca3a09a116.
  4379  //
  4380  // Solidity: event SetPauseState(bool state)
  4381  func (_IPoolFactory *IPoolFactoryFilterer) ParseSetPauseState(log types.Log) (*IPoolFactorySetPauseState, error) {
  4382  	event := new(IPoolFactorySetPauseState)
  4383  	if err := _IPoolFactory.contract.UnpackLog(event, "SetPauseState", log); err != nil {
  4384  		return nil, err
  4385  	}
  4386  	event.Raw = log
  4387  	return event, nil
  4388  }
  4389  
  4390  // IPoolFactorySetPauserIterator is returned from FilterSetPauser and is used to iterate over the raw logs and unpacked data for SetPauser events raised by the IPoolFactory contract.
  4391  type IPoolFactorySetPauserIterator struct {
  4392  	Event *IPoolFactorySetPauser // Event containing the contract specifics and raw log
  4393  
  4394  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  4395  	event    string              // Event name to use for unpacking event data
  4396  
  4397  	logs chan types.Log        // Log channel receiving the found contract events
  4398  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  4399  	done bool                  // Whether the subscription completed delivering logs
  4400  	fail error                 // Occurred error to stop iteration
  4401  }
  4402  
  4403  // Next advances the iterator to the subsequent event, returning whether there
  4404  // are any more events found. In case of a retrieval or parsing error, false is
  4405  // returned and Error() can be queried for the exact failure.
  4406  func (it *IPoolFactorySetPauserIterator) Next() bool {
  4407  	// If the iterator failed, stop iterating
  4408  	if it.fail != nil {
  4409  		return false
  4410  	}
  4411  	// If the iterator completed, deliver directly whatever's available
  4412  	if it.done {
  4413  		select {
  4414  		case log := <-it.logs:
  4415  			it.Event = new(IPoolFactorySetPauser)
  4416  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4417  				it.fail = err
  4418  				return false
  4419  			}
  4420  			it.Event.Raw = log
  4421  			return true
  4422  
  4423  		default:
  4424  			return false
  4425  		}
  4426  	}
  4427  	// Iterator still in progress, wait for either a data or an error event
  4428  	select {
  4429  	case log := <-it.logs:
  4430  		it.Event = new(IPoolFactorySetPauser)
  4431  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4432  			it.fail = err
  4433  			return false
  4434  		}
  4435  		it.Event.Raw = log
  4436  		return true
  4437  
  4438  	case err := <-it.sub.Err():
  4439  		it.done = true
  4440  		it.fail = err
  4441  		return it.Next()
  4442  	}
  4443  }
  4444  
  4445  // Error returns any retrieval or parsing error occurred during filtering.
  4446  func (it *IPoolFactorySetPauserIterator) Error() error {
  4447  	return it.fail
  4448  }
  4449  
  4450  // Close terminates the iteration process, releasing any pending underlying
  4451  // resources.
  4452  func (it *IPoolFactorySetPauserIterator) Close() error {
  4453  	it.sub.Unsubscribe()
  4454  	return nil
  4455  }
  4456  
  4457  // IPoolFactorySetPauser represents a SetPauser event raised by the IPoolFactory contract.
  4458  type IPoolFactorySetPauser struct {
  4459  	Pauser common.Address
  4460  	Raw    types.Log // Blockchain specific contextual infos
  4461  }
  4462  
  4463  // FilterSetPauser is a free log retrieval operation binding the contract event 0xe02efb9e8f0fc21546730ab32d594f62d586e1bbb15bb5045edd0b1878a77b35.
  4464  //
  4465  // Solidity: event SetPauser(address pauser)
  4466  func (_IPoolFactory *IPoolFactoryFilterer) FilterSetPauser(opts *bind.FilterOpts) (*IPoolFactorySetPauserIterator, error) {
  4467  
  4468  	logs, sub, err := _IPoolFactory.contract.FilterLogs(opts, "SetPauser")
  4469  	if err != nil {
  4470  		return nil, err
  4471  	}
  4472  	return &IPoolFactorySetPauserIterator{contract: _IPoolFactory.contract, event: "SetPauser", logs: logs, sub: sub}, nil
  4473  }
  4474  
  4475  // WatchSetPauser is a free log subscription operation binding the contract event 0xe02efb9e8f0fc21546730ab32d594f62d586e1bbb15bb5045edd0b1878a77b35.
  4476  //
  4477  // Solidity: event SetPauser(address pauser)
  4478  func (_IPoolFactory *IPoolFactoryFilterer) WatchSetPauser(opts *bind.WatchOpts, sink chan<- *IPoolFactorySetPauser) (event.Subscription, error) {
  4479  
  4480  	logs, sub, err := _IPoolFactory.contract.WatchLogs(opts, "SetPauser")
  4481  	if err != nil {
  4482  		return nil, err
  4483  	}
  4484  	return event.NewSubscription(func(quit <-chan struct{}) error {
  4485  		defer sub.Unsubscribe()
  4486  		for {
  4487  			select {
  4488  			case log := <-logs:
  4489  				// New log arrived, parse the event and forward to the user
  4490  				event := new(IPoolFactorySetPauser)
  4491  				if err := _IPoolFactory.contract.UnpackLog(event, "SetPauser", log); err != nil {
  4492  					return err
  4493  				}
  4494  				event.Raw = log
  4495  
  4496  				select {
  4497  				case sink <- event:
  4498  				case err := <-sub.Err():
  4499  					return err
  4500  				case <-quit:
  4501  					return nil
  4502  				}
  4503  			case err := <-sub.Err():
  4504  				return err
  4505  			case <-quit:
  4506  				return nil
  4507  			}
  4508  		}
  4509  	}), nil
  4510  }
  4511  
  4512  // ParseSetPauser is a log parse operation binding the contract event 0xe02efb9e8f0fc21546730ab32d594f62d586e1bbb15bb5045edd0b1878a77b35.
  4513  //
  4514  // Solidity: event SetPauser(address pauser)
  4515  func (_IPoolFactory *IPoolFactoryFilterer) ParseSetPauser(log types.Log) (*IPoolFactorySetPauser, error) {
  4516  	event := new(IPoolFactorySetPauser)
  4517  	if err := _IPoolFactory.contract.UnpackLog(event, "SetPauser", log); err != nil {
  4518  		return nil, err
  4519  	}
  4520  	event.Raw = log
  4521  	return event, nil
  4522  }
  4523  
  4524  // IPoolFactorySetVoterIterator is returned from FilterSetVoter and is used to iterate over the raw logs and unpacked data for SetVoter events raised by the IPoolFactory contract.
  4525  type IPoolFactorySetVoterIterator struct {
  4526  	Event *IPoolFactorySetVoter // Event containing the contract specifics and raw log
  4527  
  4528  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  4529  	event    string              // Event name to use for unpacking event data
  4530  
  4531  	logs chan types.Log        // Log channel receiving the found contract events
  4532  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  4533  	done bool                  // Whether the subscription completed delivering logs
  4534  	fail error                 // Occurred error to stop iteration
  4535  }
  4536  
  4537  // Next advances the iterator to the subsequent event, returning whether there
  4538  // are any more events found. In case of a retrieval or parsing error, false is
  4539  // returned and Error() can be queried for the exact failure.
  4540  func (it *IPoolFactorySetVoterIterator) Next() bool {
  4541  	// If the iterator failed, stop iterating
  4542  	if it.fail != nil {
  4543  		return false
  4544  	}
  4545  	// If the iterator completed, deliver directly whatever's available
  4546  	if it.done {
  4547  		select {
  4548  		case log := <-it.logs:
  4549  			it.Event = new(IPoolFactorySetVoter)
  4550  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4551  				it.fail = err
  4552  				return false
  4553  			}
  4554  			it.Event.Raw = log
  4555  			return true
  4556  
  4557  		default:
  4558  			return false
  4559  		}
  4560  	}
  4561  	// Iterator still in progress, wait for either a data or an error event
  4562  	select {
  4563  	case log := <-it.logs:
  4564  		it.Event = new(IPoolFactorySetVoter)
  4565  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4566  			it.fail = err
  4567  			return false
  4568  		}
  4569  		it.Event.Raw = log
  4570  		return true
  4571  
  4572  	case err := <-it.sub.Err():
  4573  		it.done = true
  4574  		it.fail = err
  4575  		return it.Next()
  4576  	}
  4577  }
  4578  
  4579  // Error returns any retrieval or parsing error occurred during filtering.
  4580  func (it *IPoolFactorySetVoterIterator) Error() error {
  4581  	return it.fail
  4582  }
  4583  
  4584  // Close terminates the iteration process, releasing any pending underlying
  4585  // resources.
  4586  func (it *IPoolFactorySetVoterIterator) Close() error {
  4587  	it.sub.Unsubscribe()
  4588  	return nil
  4589  }
  4590  
  4591  // IPoolFactorySetVoter represents a SetVoter event raised by the IPoolFactory contract.
  4592  type IPoolFactorySetVoter struct {
  4593  	Voter common.Address
  4594  	Raw   types.Log // Blockchain specific contextual infos
  4595  }
  4596  
  4597  // FilterSetVoter is a free log retrieval operation binding the contract event 0xc6ff127433b785c51da9ae4088ee184c909b1a55b9afd82ae6c64224d3bc15d2.
  4598  //
  4599  // Solidity: event SetVoter(address voter)
  4600  func (_IPoolFactory *IPoolFactoryFilterer) FilterSetVoter(opts *bind.FilterOpts) (*IPoolFactorySetVoterIterator, error) {
  4601  
  4602  	logs, sub, err := _IPoolFactory.contract.FilterLogs(opts, "SetVoter")
  4603  	if err != nil {
  4604  		return nil, err
  4605  	}
  4606  	return &IPoolFactorySetVoterIterator{contract: _IPoolFactory.contract, event: "SetVoter", logs: logs, sub: sub}, nil
  4607  }
  4608  
  4609  // WatchSetVoter is a free log subscription operation binding the contract event 0xc6ff127433b785c51da9ae4088ee184c909b1a55b9afd82ae6c64224d3bc15d2.
  4610  //
  4611  // Solidity: event SetVoter(address voter)
  4612  func (_IPoolFactory *IPoolFactoryFilterer) WatchSetVoter(opts *bind.WatchOpts, sink chan<- *IPoolFactorySetVoter) (event.Subscription, error) {
  4613  
  4614  	logs, sub, err := _IPoolFactory.contract.WatchLogs(opts, "SetVoter")
  4615  	if err != nil {
  4616  		return nil, err
  4617  	}
  4618  	return event.NewSubscription(func(quit <-chan struct{}) error {
  4619  		defer sub.Unsubscribe()
  4620  		for {
  4621  			select {
  4622  			case log := <-logs:
  4623  				// New log arrived, parse the event and forward to the user
  4624  				event := new(IPoolFactorySetVoter)
  4625  				if err := _IPoolFactory.contract.UnpackLog(event, "SetVoter", log); err != nil {
  4626  					return err
  4627  				}
  4628  				event.Raw = log
  4629  
  4630  				select {
  4631  				case sink <- event:
  4632  				case err := <-sub.Err():
  4633  					return err
  4634  				case <-quit:
  4635  					return nil
  4636  				}
  4637  			case err := <-sub.Err():
  4638  				return err
  4639  			case <-quit:
  4640  				return nil
  4641  			}
  4642  		}
  4643  	}), nil
  4644  }
  4645  
  4646  // ParseSetVoter is a log parse operation binding the contract event 0xc6ff127433b785c51da9ae4088ee184c909b1a55b9afd82ae6c64224d3bc15d2.
  4647  //
  4648  // Solidity: event SetVoter(address voter)
  4649  func (_IPoolFactory *IPoolFactoryFilterer) ParseSetVoter(log types.Log) (*IPoolFactorySetVoter, error) {
  4650  	event := new(IPoolFactorySetVoter)
  4651  	if err := _IPoolFactory.contract.UnpackLog(event, "SetVoter", log); err != nil {
  4652  		return nil, err
  4653  	}
  4654  	event.Raw = log
  4655  	return event, nil
  4656  }
  4657  
  4658  // PoolFactoryMetaData contains all meta data concerning the PoolFactory contract.
  4659  var PoolFactoryMetaData = &bind.MetaData{
  4660  	ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"FeeInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeeTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotFeeManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotPauser\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotSinkConverter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVoter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SameAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroFee\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"stable\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"SetCustomFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"feeManager\",\"type\":\"address\"}],\"name\":\"SetFeeManager\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"SetPauseState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"pauser\",\"type\":\"address\"}],\"name\":\"SetPauser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"}],\"name\":\"SetVoter\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ZERO_FEE_INDICATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allPools\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allPoolsLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"stable\",\"type\":\"bool\"}],\"name\":\"createPair\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"stable\",\"type\":\"bool\"}],\"name\":\"createPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"name\":\"createPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"customFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_stable\",\"type\":\"bool\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"stable\",\"type\":\"bool\"}],\"name\":\"getPair\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"stable\",\"type\":\"bool\"}],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPair\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauser\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"setCustomFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_stable\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"setFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_feeManager\",\"type\":\"address\"}],\"name\":\"setFeeManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_state\",\"type\":\"bool\"}],\"name\":\"setPauseState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_pauser\",\"type\":\"address\"}],\"name\":\"setPauser\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sinkConverter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_velo\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_veloV2\",\"type\":\"address\"}],\"name\":\"setSinkConverter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_voter\",\"type\":\"address\"}],\"name\":\"setVoter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sinkConverter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stableFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"velo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"veloV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"volatileFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"voter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
  4661  	Sigs: map[string]string{
  4662  		"bc063e1a": "MAX_FEE()",
  4663  		"38c55d46": "ZERO_FEE_INDICATOR()",
  4664  		"41d1de97": "allPools(uint256)",
  4665  		"efde4e64": "allPoolsLength()",
  4666  		"82dfdce4": "createPair(address,address,bool)",
  4667  		"36bf95a0": "createPool(address,address,bool)",
  4668  		"a1671295": "createPool(address,address,uint24)",
  4669  		"4d419abc": "customFee(address)",
  4670  		"d0fb0203": "feeManager()",
  4671  		"cc56b2c5": "getFee(address,bool)",
  4672  		"6801cc30": "getPair(address,address,bool)",
  4673  		"79bc57d5": "getPool(address,address,bool)",
  4674  		"1698ee82": "getPool(address,address,uint24)",
  4675  		"5c60da1b": "implementation()",
  4676  		"e5e31b13": "isPair(address)",
  4677  		"b187bd26": "isPaused()",
  4678  		"5b16ebb7": "isPool(address)",
  4679  		"9fd0506d": "pauser()",
  4680  		"d49466a8": "setCustomFee(address,uint256)",
  4681  		"e1f76b44": "setFee(bool,uint256)",
  4682  		"472d35b9": "setFeeManager(address)",
  4683  		"cdb88ad1": "setPauseState(bool)",
  4684  		"2d88af4a": "setPauser(address)",
  4685  		"37068e7b": "setSinkConverter(address,address,address)",
  4686  		"4bc2a657": "setVoter(address)",
  4687  		"8e39ee16": "sinkConverter()",
  4688  		"40bbd775": "stableFee()",
  4689  		"8c7c53ce": "velo()",
  4690  		"c6751c09": "veloV2()",
  4691  		"5084ed03": "volatileFee()",
  4692  		"46c96aac": "voter()",
  4693  	},
  4694  	Bin: "0x60a060405234801561000f575f80fd5b506040516111c23803806111c283398101604081905261002e91610094565b6001600160a01b031660805260048054336001600160a01b031991821681179092555f8054600380548416851790556007805490931684179092556001600160a81b031990911661010090920260ff19169190911790556005600155601e6002556100c1565b5f602082840312156100a4575f80fd5b81516001600160a01b03811681146100ba575f80fd5b9392505050565b6080516110e26100e05f395f818161031f01526106db01526110e25ff3fe608060405234801561000f575f80fd5b50600436106101dc575f3560e01c806379bc57d511610109578063c6751c091161009e578063d49466a81161006e578063d49466a814610447578063e1f76b441461045a578063e5e31b13146102df578063efde4e641461046d575f80fd5b8063c6751c09146103fb578063cc56b2c51461040e578063cdb88ad114610421578063d0fb020314610434575f80fd5b80639fd0506d116100d95780639fd0506d146103bd578063a1671295146103d4578063b187bd26146103e7578063bc063e1a146103f3575f80fd5b806379bc57d51461034157806382dfdce4146103845780638c7c53ce146103975780638e39ee16146103aa575f80fd5b806346c96aac1161017f5780635084ed031161014f5780635084ed03146102d65780635b16ebb7146102df5780635c60da1b1461031a5780636801cc3014610341575f80fd5b806346c96aac1461027e578063472d35b9146102915780634bc2a657146102a45780634d419abc146102b7575f80fd5b806337068e7b116101ba57806337068e7b1461023857806338c55d461461024b57806340bbd7751461026257806341d1de971461026b575f80fd5b80631698ee82146101e05780632d88af4a1461021057806336bf95a014610225575b5f80fd5b6101f36101ee366004610ef3565b610475565b6040516001600160a01b0390911681526020015b60405180910390f35b61022361021e366004610f3e565b610503565b005b6101f3610233366004610f6d565b6105b5565b610223610246366004610fad565b61086a565b6102546101a481565b604051908152602001610207565b61025460015481565b6101f3610279366004610fe4565b610a81565b6004546101f3906001600160a01b031681565b61022361029f366004610f3e565b610aa9565b6102236102b2366004610f3e565b610b49565b6102546102c5366004610f3e565b600b6020525f908152604090205481565b61025460025481565b61030a6102ed366004610f3e565b6001600160a01b03165f908152600a602052604090205460ff1690565b6040519015158152602001610207565b6101f37f000000000000000000000000000000000000000000000000000000000000000081565b6101f361034f366004610f6d565b6001600160a01b039283165f908152600860209081526040808320948616835293815283822092151582529190915220541690565b6101f3610392366004610f6d565b610bc2565b6005546101f3906001600160a01b031681565b6007546101f3906001600160a01b031681565b5f546101f39061010090046001600160a01b031681565b6101f36103e2366004610ef3565b610bce565b5f5461030a9060ff1681565b610254606481565b6006546101f3906001600160a01b031681565b61025461041c366004610ffb565b610c13565b61022361042f36600461102c565b610c62565b6003546101f3906001600160a01b031681565b610223610455366004611045565b610cd1565b61022361046836600461106d565b610dbb565b600954610254565b5f60018262ffffff16116104f9578162ffffff166001146104c4576001600160a01b038085165f90815260086020908152604080832087851684528252808320838052909152902054166104fb565b6001600160a01b038085165f9081526008602090815260408083208785168452825280832060018452909152902054166104fb565b5f5b949350505050565b5f5461010090046001600160a01b031633146105325760405163492f678160e01b815260040160405180910390fd5b6001600160a01b0381166105595760405163d92e233d60e01b815260040160405180910390fd5b5f8054610100600160a81b0319166101006001600160a01b038416908102919091179091556040519081527fe02efb9e8f0fc21546730ab32d594f62d586e1bbb15bb5045edd0b1878a77b35906020015b60405180910390a150565b5f826001600160a01b0316846001600160a01b0316036105e85760405163367558c360e01b815260040160405180910390fd5b5f80846001600160a01b0316866001600160a01b03161061060a57848661060d565b85855b90925090506001600160a01b0382166106395760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038281165f908152600860209081526040808320858516845282528083208815158452909152902054161561068857604051630188c99160e11b815260040160405180910390fd5b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015284151560f81b60488201525f906049016040516020818303038152906040528051906020012090506107007f000000000000000000000000000000000000000000000000000000000000000082610e3a565b604051631c9776b560e31b81526001600160a01b038581166004830152848116602483015287151560448301529195509085169063e4bbb5a8906064015f604051808303815f87803b158015610754575f80fd5b505af1158015610766573d5f803e3d5ffd5b505050506001600160a01b038381165f8181526008602081815260408084208887168086529083528185208c15158087529084528286208054988d166001600160a01b0319998a16811790915582875294845282862087875284528286208187528452828620805489168617905560098054600181810183557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af9091018054909a168717909955858752600a855295839020805460ff191690981790975593548151938452918301919091529192917f2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e910160405180910390a45050509392505050565b6007546001600160a01b03163314610895576040516315517aa960e31b815260040160405180910390fd5b600780546001600160a01b038086166001600160a01b031992831617909255600580548584169083168117909155600680549385169390921683179091555f918291106108e35782846108e6565b83835b600780546001600160a01b038481165f818152600860208181526040808420898716808652908352818520600180875281855283872080546001600160a01b03199081169b8b169b909b1790558a54838852958552838720888852855283872081885280865284882080548c16978b16979097179096558a5487805291855283872080548b16928a1692909217909155895494845282862080548a169589169590951790945588546009805480870182557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af018054909a1691891691909117909855885487168552600a835293819020805460ff1916841790559654955487519690951686528501939093529597509395509392917f2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e910160405180910390a4600754600954604080516001600160a01b03938416815260208101929092525f9284811692908616917f2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e910160405180910390a45050505050565b60098181548110610a90575f80fd5b5f918252602090912001546001600160a01b0316905081565b6003546001600160a01b03163314610ad45760405163f5d267eb60e01b815260040160405180910390fd5b6001600160a01b038116610afb5760405163d92e233d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f5d0517e3a4eabea892d9750138cd21d4a6cf3b935b43d0598df7055f463819b2906020016105aa565b6004546001600160a01b03163314610b745760405163c18384c160e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc6ff127433b785c51da9ae4088ee184c909b1a55b9afd82ae6c64224d3bc15d2906020016105aa565b5f6104fb8484846105b5565b5f60018262ffffff161115610bf6576040516352dadcf960e01b815260040160405180910390fd5b600162ffffff831614610c0a8585836105b5565b95945050505050565b6001600160a01b0382165f908152600b60205260408120546101a48114610c5657805f03610c505782610c4857600254610c58565b600154610c58565b80610c58565b5f5b9150505b92915050565b5f5461010090046001600160a01b03163314610c915760405163492f678160e01b815260040160405180910390fd5b5f805460ff19168215159081179091556040519081527f0d76538efc408318a051137c2720a9e82902acdbd46b802d488b74ca3a09a116906020016105aa565b6003546001600160a01b03163314610cfc5760405163f5d267eb60e01b815260040160405180910390fd5b606481118015610d0e57506101a48114155b15610d2c5760405163cd4e616760e01b815260040160405180910390fd5b6001600160a01b0382165f908152600a602052604090205460ff16610d635760405162820f3560e61b815260040160405180910390fd5b6001600160a01b0382165f818152600b602052604090819020839055517fae468ce586f9a87660fdffc1448cee942042c16ae2f02046b134b5224f31936b90610daf9084815260200190565b60405180910390a25050565b6003546001600160a01b03163314610de65760405163f5d267eb60e01b815260040160405180910390fd5b6064811115610e085760405163cd4e616760e01b815260040160405180910390fd5b805f03610e285760405163af13986d60e01b815260040160405180910390fd5b8115610e345760015550565b60025550565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760095ff590506001600160a01b038116610c5c5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640160405180910390fd5b80356001600160a01b0381168114610eee575f80fd5b919050565b5f805f60608486031215610f05575f80fd5b610f0e84610ed8565b9250610f1c60208501610ed8565b9150604084013562ffffff81168114610f33575f80fd5b809150509250925092565b5f60208284031215610f4e575f80fd5b610f5782610ed8565b9392505050565b80358015158114610eee575f80fd5b5f805f60608486031215610f7f575f80fd5b610f8884610ed8565b9250610f9660208501610ed8565b9150610fa460408501610f5e565b90509250925092565b5f805f60608486031215610fbf575f80fd5b610fc884610ed8565b9250610fd660208501610ed8565b9150610fa460408501610ed8565b5f60208284031215610ff4575f80fd5b5035919050565b5f806040838503121561100c575f80fd5b61101583610ed8565b915061102360208401610f5e565b90509250929050565b5f6020828403121561103c575f80fd5b610f5782610f5e565b5f8060408385031215611056575f80fd5b61105f83610ed8565b946020939093013593505050565b5f806040838503121561107e575f80fd5b61105f83610f5e56fea2646970667358221220d487009a6c788088fbd15e7079bc3e2ce6b2d55e06a8b2faed6b368083a389f864736f6c637827302e382e32322d646576656c6f702e323032332e382e342b636f6d6d69742e35313137313235370058",
  4695  }
  4696  
  4697  // PoolFactoryABI is the input ABI used to generate the binding from.
  4698  // Deprecated: Use PoolFactoryMetaData.ABI instead.
  4699  var PoolFactoryABI = PoolFactoryMetaData.ABI
  4700  
  4701  // Deprecated: Use PoolFactoryMetaData.Sigs instead.
  4702  // PoolFactoryFuncSigs maps the 4-byte function signature to its string representation.
  4703  var PoolFactoryFuncSigs = PoolFactoryMetaData.Sigs
  4704  
  4705  // PoolFactoryBin is the compiled bytecode used for deploying new contracts.
  4706  // Deprecated: Use PoolFactoryMetaData.Bin instead.
  4707  var PoolFactoryBin = PoolFactoryMetaData.Bin
  4708  
  4709  // DeployPoolFactory deploys a new Ethereum contract, binding an instance of PoolFactory to it.
  4710  func DeployPoolFactory(auth *bind.TransactOpts, backend bind.ContractBackend, _implementation common.Address) (common.Address, *types.Transaction, *PoolFactory, error) {
  4711  	parsed, err := PoolFactoryMetaData.GetAbi()
  4712  	if err != nil {
  4713  		return common.Address{}, nil, nil, err
  4714  	}
  4715  	if parsed == nil {
  4716  		return common.Address{}, nil, nil, errors.New("GetABI returned nil")
  4717  	}
  4718  
  4719  	address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(PoolFactoryBin), backend, _implementation)
  4720  	if err != nil {
  4721  		return common.Address{}, nil, nil, err
  4722  	}
  4723  	return address, tx, &PoolFactory{PoolFactoryCaller: PoolFactoryCaller{contract: contract}, PoolFactoryTransactor: PoolFactoryTransactor{contract: contract}, PoolFactoryFilterer: PoolFactoryFilterer{contract: contract}}, nil
  4724  }
  4725  
  4726  // PoolFactory is an auto generated Go binding around an Ethereum contract.
  4727  type PoolFactory struct {
  4728  	PoolFactoryCaller     // Read-only binding to the contract
  4729  	PoolFactoryTransactor // Write-only binding to the contract
  4730  	PoolFactoryFilterer   // Log filterer for contract events
  4731  }
  4732  
  4733  // PoolFactoryCaller is an auto generated read-only Go binding around an Ethereum contract.
  4734  type PoolFactoryCaller struct {
  4735  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4736  }
  4737  
  4738  // PoolFactoryTransactor is an auto generated write-only Go binding around an Ethereum contract.
  4739  type PoolFactoryTransactor struct {
  4740  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4741  }
  4742  
  4743  // PoolFactoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  4744  type PoolFactoryFilterer struct {
  4745  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4746  }
  4747  
  4748  // PoolFactorySession is an auto generated Go binding around an Ethereum contract,
  4749  // with pre-set call and transact options.
  4750  type PoolFactorySession struct {
  4751  	Contract     *PoolFactory      // Generic contract binding to set the session for
  4752  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  4753  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  4754  }
  4755  
  4756  // PoolFactoryCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  4757  // with pre-set call options.
  4758  type PoolFactoryCallerSession struct {
  4759  	Contract *PoolFactoryCaller // Generic contract caller binding to set the session for
  4760  	CallOpts bind.CallOpts      // Call options to use throughout this session
  4761  }
  4762  
  4763  // PoolFactoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  4764  // with pre-set transact options.
  4765  type PoolFactoryTransactorSession struct {
  4766  	Contract     *PoolFactoryTransactor // Generic contract transactor binding to set the session for
  4767  	TransactOpts bind.TransactOpts      // Transaction auth options to use throughout this session
  4768  }
  4769  
  4770  // PoolFactoryRaw is an auto generated low-level Go binding around an Ethereum contract.
  4771  type PoolFactoryRaw struct {
  4772  	Contract *PoolFactory // Generic contract binding to access the raw methods on
  4773  }
  4774  
  4775  // PoolFactoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  4776  type PoolFactoryCallerRaw struct {
  4777  	Contract *PoolFactoryCaller // Generic read-only contract binding to access the raw methods on
  4778  }
  4779  
  4780  // PoolFactoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  4781  type PoolFactoryTransactorRaw struct {
  4782  	Contract *PoolFactoryTransactor // Generic write-only contract binding to access the raw methods on
  4783  }
  4784  
  4785  // NewPoolFactory creates a new instance of PoolFactory, bound to a specific deployed contract.
  4786  func NewPoolFactory(address common.Address, backend bind.ContractBackend) (*PoolFactory, error) {
  4787  	contract, err := bindPoolFactory(address, backend, backend, backend)
  4788  	if err != nil {
  4789  		return nil, err
  4790  	}
  4791  	return &PoolFactory{PoolFactoryCaller: PoolFactoryCaller{contract: contract}, PoolFactoryTransactor: PoolFactoryTransactor{contract: contract}, PoolFactoryFilterer: PoolFactoryFilterer{contract: contract}}, nil
  4792  }
  4793  
  4794  // NewPoolFactoryCaller creates a new read-only instance of PoolFactory, bound to a specific deployed contract.
  4795  func NewPoolFactoryCaller(address common.Address, caller bind.ContractCaller) (*PoolFactoryCaller, error) {
  4796  	contract, err := bindPoolFactory(address, caller, nil, nil)
  4797  	if err != nil {
  4798  		return nil, err
  4799  	}
  4800  	return &PoolFactoryCaller{contract: contract}, nil
  4801  }
  4802  
  4803  // NewPoolFactoryTransactor creates a new write-only instance of PoolFactory, bound to a specific deployed contract.
  4804  func NewPoolFactoryTransactor(address common.Address, transactor bind.ContractTransactor) (*PoolFactoryTransactor, error) {
  4805  	contract, err := bindPoolFactory(address, nil, transactor, nil)
  4806  	if err != nil {
  4807  		return nil, err
  4808  	}
  4809  	return &PoolFactoryTransactor{contract: contract}, nil
  4810  }
  4811  
  4812  // NewPoolFactoryFilterer creates a new log filterer instance of PoolFactory, bound to a specific deployed contract.
  4813  func NewPoolFactoryFilterer(address common.Address, filterer bind.ContractFilterer) (*PoolFactoryFilterer, error) {
  4814  	contract, err := bindPoolFactory(address, nil, nil, filterer)
  4815  	if err != nil {
  4816  		return nil, err
  4817  	}
  4818  	return &PoolFactoryFilterer{contract: contract}, nil
  4819  }
  4820  
  4821  // bindPoolFactory binds a generic wrapper to an already deployed contract.
  4822  func bindPoolFactory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  4823  	parsed, err := abi.JSON(strings.NewReader(PoolFactoryABI))
  4824  	if err != nil {
  4825  		return nil, err
  4826  	}
  4827  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  4828  }
  4829  
  4830  // Call invokes the (constant) contract method with params as input values and
  4831  // sets the output to result. The result type might be a single field for simple
  4832  // returns, a slice of interfaces for anonymous returns and a struct for named
  4833  // returns.
  4834  func (_PoolFactory *PoolFactoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  4835  	return _PoolFactory.Contract.PoolFactoryCaller.contract.Call(opts, result, method, params...)
  4836  }
  4837  
  4838  // Transfer initiates a plain transaction to move funds to the contract, calling
  4839  // its default method if one is available.
  4840  func (_PoolFactory *PoolFactoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  4841  	return _PoolFactory.Contract.PoolFactoryTransactor.contract.Transfer(opts)
  4842  }
  4843  
  4844  // Transact invokes the (paid) contract method with params as input values.
  4845  func (_PoolFactory *PoolFactoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  4846  	return _PoolFactory.Contract.PoolFactoryTransactor.contract.Transact(opts, method, params...)
  4847  }
  4848  
  4849  // Call invokes the (constant) contract method with params as input values and
  4850  // sets the output to result. The result type might be a single field for simple
  4851  // returns, a slice of interfaces for anonymous returns and a struct for named
  4852  // returns.
  4853  func (_PoolFactory *PoolFactoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  4854  	return _PoolFactory.Contract.contract.Call(opts, result, method, params...)
  4855  }
  4856  
  4857  // Transfer initiates a plain transaction to move funds to the contract, calling
  4858  // its default method if one is available.
  4859  func (_PoolFactory *PoolFactoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  4860  	return _PoolFactory.Contract.contract.Transfer(opts)
  4861  }
  4862  
  4863  // Transact invokes the (paid) contract method with params as input values.
  4864  func (_PoolFactory *PoolFactoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  4865  	return _PoolFactory.Contract.contract.Transact(opts, method, params...)
  4866  }
  4867  
  4868  // MAXFEE is a free data retrieval call binding the contract method 0xbc063e1a.
  4869  //
  4870  // Solidity: function MAX_FEE() view returns(uint256)
  4871  func (_PoolFactory *PoolFactoryCaller) MAXFEE(opts *bind.CallOpts) (*big.Int, error) {
  4872  	var out []interface{}
  4873  	err := _PoolFactory.contract.Call(opts, &out, "MAX_FEE")
  4874  
  4875  	if err != nil {
  4876  		return *new(*big.Int), err
  4877  	}
  4878  
  4879  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  4880  
  4881  	return out0, err
  4882  
  4883  }
  4884  
  4885  // MAXFEE is a free data retrieval call binding the contract method 0xbc063e1a.
  4886  //
  4887  // Solidity: function MAX_FEE() view returns(uint256)
  4888  func (_PoolFactory *PoolFactorySession) MAXFEE() (*big.Int, error) {
  4889  	return _PoolFactory.Contract.MAXFEE(&_PoolFactory.CallOpts)
  4890  }
  4891  
  4892  // MAXFEE is a free data retrieval call binding the contract method 0xbc063e1a.
  4893  //
  4894  // Solidity: function MAX_FEE() view returns(uint256)
  4895  func (_PoolFactory *PoolFactoryCallerSession) MAXFEE() (*big.Int, error) {
  4896  	return _PoolFactory.Contract.MAXFEE(&_PoolFactory.CallOpts)
  4897  }
  4898  
  4899  // ZEROFEEINDICATOR is a free data retrieval call binding the contract method 0x38c55d46.
  4900  //
  4901  // Solidity: function ZERO_FEE_INDICATOR() view returns(uint256)
  4902  func (_PoolFactory *PoolFactoryCaller) ZEROFEEINDICATOR(opts *bind.CallOpts) (*big.Int, error) {
  4903  	var out []interface{}
  4904  	err := _PoolFactory.contract.Call(opts, &out, "ZERO_FEE_INDICATOR")
  4905  
  4906  	if err != nil {
  4907  		return *new(*big.Int), err
  4908  	}
  4909  
  4910  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  4911  
  4912  	return out0, err
  4913  
  4914  }
  4915  
  4916  // ZEROFEEINDICATOR is a free data retrieval call binding the contract method 0x38c55d46.
  4917  //
  4918  // Solidity: function ZERO_FEE_INDICATOR() view returns(uint256)
  4919  func (_PoolFactory *PoolFactorySession) ZEROFEEINDICATOR() (*big.Int, error) {
  4920  	return _PoolFactory.Contract.ZEROFEEINDICATOR(&_PoolFactory.CallOpts)
  4921  }
  4922  
  4923  // ZEROFEEINDICATOR is a free data retrieval call binding the contract method 0x38c55d46.
  4924  //
  4925  // Solidity: function ZERO_FEE_INDICATOR() view returns(uint256)
  4926  func (_PoolFactory *PoolFactoryCallerSession) ZEROFEEINDICATOR() (*big.Int, error) {
  4927  	return _PoolFactory.Contract.ZEROFEEINDICATOR(&_PoolFactory.CallOpts)
  4928  }
  4929  
  4930  // AllPools is a free data retrieval call binding the contract method 0x41d1de97.
  4931  //
  4932  // Solidity: function allPools(uint256 ) view returns(address)
  4933  func (_PoolFactory *PoolFactoryCaller) AllPools(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) {
  4934  	var out []interface{}
  4935  	err := _PoolFactory.contract.Call(opts, &out, "allPools", arg0)
  4936  
  4937  	if err != nil {
  4938  		return *new(common.Address), err
  4939  	}
  4940  
  4941  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  4942  
  4943  	return out0, err
  4944  
  4945  }
  4946  
  4947  // AllPools is a free data retrieval call binding the contract method 0x41d1de97.
  4948  //
  4949  // Solidity: function allPools(uint256 ) view returns(address)
  4950  func (_PoolFactory *PoolFactorySession) AllPools(arg0 *big.Int) (common.Address, error) {
  4951  	return _PoolFactory.Contract.AllPools(&_PoolFactory.CallOpts, arg0)
  4952  }
  4953  
  4954  // AllPools is a free data retrieval call binding the contract method 0x41d1de97.
  4955  //
  4956  // Solidity: function allPools(uint256 ) view returns(address)
  4957  func (_PoolFactory *PoolFactoryCallerSession) AllPools(arg0 *big.Int) (common.Address, error) {
  4958  	return _PoolFactory.Contract.AllPools(&_PoolFactory.CallOpts, arg0)
  4959  }
  4960  
  4961  // AllPoolsLength is a free data retrieval call binding the contract method 0xefde4e64.
  4962  //
  4963  // Solidity: function allPoolsLength() view returns(uint256)
  4964  func (_PoolFactory *PoolFactoryCaller) AllPoolsLength(opts *bind.CallOpts) (*big.Int, error) {
  4965  	var out []interface{}
  4966  	err := _PoolFactory.contract.Call(opts, &out, "allPoolsLength")
  4967  
  4968  	if err != nil {
  4969  		return *new(*big.Int), err
  4970  	}
  4971  
  4972  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  4973  
  4974  	return out0, err
  4975  
  4976  }
  4977  
  4978  // AllPoolsLength is a free data retrieval call binding the contract method 0xefde4e64.
  4979  //
  4980  // Solidity: function allPoolsLength() view returns(uint256)
  4981  func (_PoolFactory *PoolFactorySession) AllPoolsLength() (*big.Int, error) {
  4982  	return _PoolFactory.Contract.AllPoolsLength(&_PoolFactory.CallOpts)
  4983  }
  4984  
  4985  // AllPoolsLength is a free data retrieval call binding the contract method 0xefde4e64.
  4986  //
  4987  // Solidity: function allPoolsLength() view returns(uint256)
  4988  func (_PoolFactory *PoolFactoryCallerSession) AllPoolsLength() (*big.Int, error) {
  4989  	return _PoolFactory.Contract.AllPoolsLength(&_PoolFactory.CallOpts)
  4990  }
  4991  
  4992  // CustomFee is a free data retrieval call binding the contract method 0x4d419abc.
  4993  //
  4994  // Solidity: function customFee(address ) view returns(uint256)
  4995  func (_PoolFactory *PoolFactoryCaller) CustomFee(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) {
  4996  	var out []interface{}
  4997  	err := _PoolFactory.contract.Call(opts, &out, "customFee", arg0)
  4998  
  4999  	if err != nil {
  5000  		return *new(*big.Int), err
  5001  	}
  5002  
  5003  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  5004  
  5005  	return out0, err
  5006  
  5007  }
  5008  
  5009  // CustomFee is a free data retrieval call binding the contract method 0x4d419abc.
  5010  //
  5011  // Solidity: function customFee(address ) view returns(uint256)
  5012  func (_PoolFactory *PoolFactorySession) CustomFee(arg0 common.Address) (*big.Int, error) {
  5013  	return _PoolFactory.Contract.CustomFee(&_PoolFactory.CallOpts, arg0)
  5014  }
  5015  
  5016  // CustomFee is a free data retrieval call binding the contract method 0x4d419abc.
  5017  //
  5018  // Solidity: function customFee(address ) view returns(uint256)
  5019  func (_PoolFactory *PoolFactoryCallerSession) CustomFee(arg0 common.Address) (*big.Int, error) {
  5020  	return _PoolFactory.Contract.CustomFee(&_PoolFactory.CallOpts, arg0)
  5021  }
  5022  
  5023  // FeeManager is a free data retrieval call binding the contract method 0xd0fb0203.
  5024  //
  5025  // Solidity: function feeManager() view returns(address)
  5026  func (_PoolFactory *PoolFactoryCaller) FeeManager(opts *bind.CallOpts) (common.Address, error) {
  5027  	var out []interface{}
  5028  	err := _PoolFactory.contract.Call(opts, &out, "feeManager")
  5029  
  5030  	if err != nil {
  5031  		return *new(common.Address), err
  5032  	}
  5033  
  5034  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5035  
  5036  	return out0, err
  5037  
  5038  }
  5039  
  5040  // FeeManager is a free data retrieval call binding the contract method 0xd0fb0203.
  5041  //
  5042  // Solidity: function feeManager() view returns(address)
  5043  func (_PoolFactory *PoolFactorySession) FeeManager() (common.Address, error) {
  5044  	return _PoolFactory.Contract.FeeManager(&_PoolFactory.CallOpts)
  5045  }
  5046  
  5047  // FeeManager is a free data retrieval call binding the contract method 0xd0fb0203.
  5048  //
  5049  // Solidity: function feeManager() view returns(address)
  5050  func (_PoolFactory *PoolFactoryCallerSession) FeeManager() (common.Address, error) {
  5051  	return _PoolFactory.Contract.FeeManager(&_PoolFactory.CallOpts)
  5052  }
  5053  
  5054  // GetFee is a free data retrieval call binding the contract method 0xcc56b2c5.
  5055  //
  5056  // Solidity: function getFee(address pool, bool _stable) view returns(uint256)
  5057  func (_PoolFactory *PoolFactoryCaller) GetFee(opts *bind.CallOpts, pool common.Address, _stable bool) (*big.Int, error) {
  5058  	var out []interface{}
  5059  	err := _PoolFactory.contract.Call(opts, &out, "getFee", pool, _stable)
  5060  
  5061  	if err != nil {
  5062  		return *new(*big.Int), err
  5063  	}
  5064  
  5065  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  5066  
  5067  	return out0, err
  5068  
  5069  }
  5070  
  5071  // GetFee is a free data retrieval call binding the contract method 0xcc56b2c5.
  5072  //
  5073  // Solidity: function getFee(address pool, bool _stable) view returns(uint256)
  5074  func (_PoolFactory *PoolFactorySession) GetFee(pool common.Address, _stable bool) (*big.Int, error) {
  5075  	return _PoolFactory.Contract.GetFee(&_PoolFactory.CallOpts, pool, _stable)
  5076  }
  5077  
  5078  // GetFee is a free data retrieval call binding the contract method 0xcc56b2c5.
  5079  //
  5080  // Solidity: function getFee(address pool, bool _stable) view returns(uint256)
  5081  func (_PoolFactory *PoolFactoryCallerSession) GetFee(pool common.Address, _stable bool) (*big.Int, error) {
  5082  	return _PoolFactory.Contract.GetFee(&_PoolFactory.CallOpts, pool, _stable)
  5083  }
  5084  
  5085  // GetPair is a free data retrieval call binding the contract method 0x6801cc30.
  5086  //
  5087  // Solidity: function getPair(address tokenA, address tokenB, bool stable) view returns(address)
  5088  func (_PoolFactory *PoolFactoryCaller) GetPair(opts *bind.CallOpts, tokenA common.Address, tokenB common.Address, stable bool) (common.Address, error) {
  5089  	var out []interface{}
  5090  	err := _PoolFactory.contract.Call(opts, &out, "getPair", tokenA, tokenB, stable)
  5091  
  5092  	if err != nil {
  5093  		return *new(common.Address), err
  5094  	}
  5095  
  5096  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5097  
  5098  	return out0, err
  5099  
  5100  }
  5101  
  5102  // GetPair is a free data retrieval call binding the contract method 0x6801cc30.
  5103  //
  5104  // Solidity: function getPair(address tokenA, address tokenB, bool stable) view returns(address)
  5105  func (_PoolFactory *PoolFactorySession) GetPair(tokenA common.Address, tokenB common.Address, stable bool) (common.Address, error) {
  5106  	return _PoolFactory.Contract.GetPair(&_PoolFactory.CallOpts, tokenA, tokenB, stable)
  5107  }
  5108  
  5109  // GetPair is a free data retrieval call binding the contract method 0x6801cc30.
  5110  //
  5111  // Solidity: function getPair(address tokenA, address tokenB, bool stable) view returns(address)
  5112  func (_PoolFactory *PoolFactoryCallerSession) GetPair(tokenA common.Address, tokenB common.Address, stable bool) (common.Address, error) {
  5113  	return _PoolFactory.Contract.GetPair(&_PoolFactory.CallOpts, tokenA, tokenB, stable)
  5114  }
  5115  
  5116  // GetPool is a free data retrieval call binding the contract method 0x1698ee82.
  5117  //
  5118  // Solidity: function getPool(address tokenA, address tokenB, uint24 fee) view returns(address)
  5119  func (_PoolFactory *PoolFactoryCaller) GetPool(opts *bind.CallOpts, tokenA common.Address, tokenB common.Address, fee *big.Int) (common.Address, error) {
  5120  	var out []interface{}
  5121  	err := _PoolFactory.contract.Call(opts, &out, "getPool", tokenA, tokenB, fee)
  5122  
  5123  	if err != nil {
  5124  		return *new(common.Address), err
  5125  	}
  5126  
  5127  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5128  
  5129  	return out0, err
  5130  
  5131  }
  5132  
  5133  // GetPool is a free data retrieval call binding the contract method 0x1698ee82.
  5134  //
  5135  // Solidity: function getPool(address tokenA, address tokenB, uint24 fee) view returns(address)
  5136  func (_PoolFactory *PoolFactorySession) GetPool(tokenA common.Address, tokenB common.Address, fee *big.Int) (common.Address, error) {
  5137  	return _PoolFactory.Contract.GetPool(&_PoolFactory.CallOpts, tokenA, tokenB, fee)
  5138  }
  5139  
  5140  // GetPool is a free data retrieval call binding the contract method 0x1698ee82.
  5141  //
  5142  // Solidity: function getPool(address tokenA, address tokenB, uint24 fee) view returns(address)
  5143  func (_PoolFactory *PoolFactoryCallerSession) GetPool(tokenA common.Address, tokenB common.Address, fee *big.Int) (common.Address, error) {
  5144  	return _PoolFactory.Contract.GetPool(&_PoolFactory.CallOpts, tokenA, tokenB, fee)
  5145  }
  5146  
  5147  // GetPool0 is a free data retrieval call binding the contract method 0x79bc57d5.
  5148  //
  5149  // Solidity: function getPool(address tokenA, address tokenB, bool stable) view returns(address)
  5150  func (_PoolFactory *PoolFactoryCaller) GetPool0(opts *bind.CallOpts, tokenA common.Address, tokenB common.Address, stable bool) (common.Address, error) {
  5151  	var out []interface{}
  5152  	err := _PoolFactory.contract.Call(opts, &out, "getPool0", tokenA, tokenB, stable)
  5153  
  5154  	if err != nil {
  5155  		return *new(common.Address), err
  5156  	}
  5157  
  5158  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5159  
  5160  	return out0, err
  5161  
  5162  }
  5163  
  5164  // GetPool0 is a free data retrieval call binding the contract method 0x79bc57d5.
  5165  //
  5166  // Solidity: function getPool(address tokenA, address tokenB, bool stable) view returns(address)
  5167  func (_PoolFactory *PoolFactorySession) GetPool0(tokenA common.Address, tokenB common.Address, stable bool) (common.Address, error) {
  5168  	return _PoolFactory.Contract.GetPool0(&_PoolFactory.CallOpts, tokenA, tokenB, stable)
  5169  }
  5170  
  5171  // GetPool0 is a free data retrieval call binding the contract method 0x79bc57d5.
  5172  //
  5173  // Solidity: function getPool(address tokenA, address tokenB, bool stable) view returns(address)
  5174  func (_PoolFactory *PoolFactoryCallerSession) GetPool0(tokenA common.Address, tokenB common.Address, stable bool) (common.Address, error) {
  5175  	return _PoolFactory.Contract.GetPool0(&_PoolFactory.CallOpts, tokenA, tokenB, stable)
  5176  }
  5177  
  5178  // Implementation is a free data retrieval call binding the contract method 0x5c60da1b.
  5179  //
  5180  // Solidity: function implementation() view returns(address)
  5181  func (_PoolFactory *PoolFactoryCaller) Implementation(opts *bind.CallOpts) (common.Address, error) {
  5182  	var out []interface{}
  5183  	err := _PoolFactory.contract.Call(opts, &out, "implementation")
  5184  
  5185  	if err != nil {
  5186  		return *new(common.Address), err
  5187  	}
  5188  
  5189  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5190  
  5191  	return out0, err
  5192  
  5193  }
  5194  
  5195  // Implementation is a free data retrieval call binding the contract method 0x5c60da1b.
  5196  //
  5197  // Solidity: function implementation() view returns(address)
  5198  func (_PoolFactory *PoolFactorySession) Implementation() (common.Address, error) {
  5199  	return _PoolFactory.Contract.Implementation(&_PoolFactory.CallOpts)
  5200  }
  5201  
  5202  // Implementation is a free data retrieval call binding the contract method 0x5c60da1b.
  5203  //
  5204  // Solidity: function implementation() view returns(address)
  5205  func (_PoolFactory *PoolFactoryCallerSession) Implementation() (common.Address, error) {
  5206  	return _PoolFactory.Contract.Implementation(&_PoolFactory.CallOpts)
  5207  }
  5208  
  5209  // IsPair is a free data retrieval call binding the contract method 0xe5e31b13.
  5210  //
  5211  // Solidity: function isPair(address pool) view returns(bool)
  5212  func (_PoolFactory *PoolFactoryCaller) IsPair(opts *bind.CallOpts, pool common.Address) (bool, error) {
  5213  	var out []interface{}
  5214  	err := _PoolFactory.contract.Call(opts, &out, "isPair", pool)
  5215  
  5216  	if err != nil {
  5217  		return *new(bool), err
  5218  	}
  5219  
  5220  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  5221  
  5222  	return out0, err
  5223  
  5224  }
  5225  
  5226  // IsPair is a free data retrieval call binding the contract method 0xe5e31b13.
  5227  //
  5228  // Solidity: function isPair(address pool) view returns(bool)
  5229  func (_PoolFactory *PoolFactorySession) IsPair(pool common.Address) (bool, error) {
  5230  	return _PoolFactory.Contract.IsPair(&_PoolFactory.CallOpts, pool)
  5231  }
  5232  
  5233  // IsPair is a free data retrieval call binding the contract method 0xe5e31b13.
  5234  //
  5235  // Solidity: function isPair(address pool) view returns(bool)
  5236  func (_PoolFactory *PoolFactoryCallerSession) IsPair(pool common.Address) (bool, error) {
  5237  	return _PoolFactory.Contract.IsPair(&_PoolFactory.CallOpts, pool)
  5238  }
  5239  
  5240  // IsPaused is a free data retrieval call binding the contract method 0xb187bd26.
  5241  //
  5242  // Solidity: function isPaused() view returns(bool)
  5243  func (_PoolFactory *PoolFactoryCaller) IsPaused(opts *bind.CallOpts) (bool, error) {
  5244  	var out []interface{}
  5245  	err := _PoolFactory.contract.Call(opts, &out, "isPaused")
  5246  
  5247  	if err != nil {
  5248  		return *new(bool), err
  5249  	}
  5250  
  5251  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  5252  
  5253  	return out0, err
  5254  
  5255  }
  5256  
  5257  // IsPaused is a free data retrieval call binding the contract method 0xb187bd26.
  5258  //
  5259  // Solidity: function isPaused() view returns(bool)
  5260  func (_PoolFactory *PoolFactorySession) IsPaused() (bool, error) {
  5261  	return _PoolFactory.Contract.IsPaused(&_PoolFactory.CallOpts)
  5262  }
  5263  
  5264  // IsPaused is a free data retrieval call binding the contract method 0xb187bd26.
  5265  //
  5266  // Solidity: function isPaused() view returns(bool)
  5267  func (_PoolFactory *PoolFactoryCallerSession) IsPaused() (bool, error) {
  5268  	return _PoolFactory.Contract.IsPaused(&_PoolFactory.CallOpts)
  5269  }
  5270  
  5271  // IsPool is a free data retrieval call binding the contract method 0x5b16ebb7.
  5272  //
  5273  // Solidity: function isPool(address pool) view returns(bool)
  5274  func (_PoolFactory *PoolFactoryCaller) IsPool(opts *bind.CallOpts, pool common.Address) (bool, error) {
  5275  	var out []interface{}
  5276  	err := _PoolFactory.contract.Call(opts, &out, "isPool", pool)
  5277  
  5278  	if err != nil {
  5279  		return *new(bool), err
  5280  	}
  5281  
  5282  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  5283  
  5284  	return out0, err
  5285  
  5286  }
  5287  
  5288  // IsPool is a free data retrieval call binding the contract method 0x5b16ebb7.
  5289  //
  5290  // Solidity: function isPool(address pool) view returns(bool)
  5291  func (_PoolFactory *PoolFactorySession) IsPool(pool common.Address) (bool, error) {
  5292  	return _PoolFactory.Contract.IsPool(&_PoolFactory.CallOpts, pool)
  5293  }
  5294  
  5295  // IsPool is a free data retrieval call binding the contract method 0x5b16ebb7.
  5296  //
  5297  // Solidity: function isPool(address pool) view returns(bool)
  5298  func (_PoolFactory *PoolFactoryCallerSession) IsPool(pool common.Address) (bool, error) {
  5299  	return _PoolFactory.Contract.IsPool(&_PoolFactory.CallOpts, pool)
  5300  }
  5301  
  5302  // Pauser is a free data retrieval call binding the contract method 0x9fd0506d.
  5303  //
  5304  // Solidity: function pauser() view returns(address)
  5305  func (_PoolFactory *PoolFactoryCaller) Pauser(opts *bind.CallOpts) (common.Address, error) {
  5306  	var out []interface{}
  5307  	err := _PoolFactory.contract.Call(opts, &out, "pauser")
  5308  
  5309  	if err != nil {
  5310  		return *new(common.Address), err
  5311  	}
  5312  
  5313  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5314  
  5315  	return out0, err
  5316  
  5317  }
  5318  
  5319  // Pauser is a free data retrieval call binding the contract method 0x9fd0506d.
  5320  //
  5321  // Solidity: function pauser() view returns(address)
  5322  func (_PoolFactory *PoolFactorySession) Pauser() (common.Address, error) {
  5323  	return _PoolFactory.Contract.Pauser(&_PoolFactory.CallOpts)
  5324  }
  5325  
  5326  // Pauser is a free data retrieval call binding the contract method 0x9fd0506d.
  5327  //
  5328  // Solidity: function pauser() view returns(address)
  5329  func (_PoolFactory *PoolFactoryCallerSession) Pauser() (common.Address, error) {
  5330  	return _PoolFactory.Contract.Pauser(&_PoolFactory.CallOpts)
  5331  }
  5332  
  5333  // SinkConverter is a free data retrieval call binding the contract method 0x8e39ee16.
  5334  //
  5335  // Solidity: function sinkConverter() view returns(address)
  5336  func (_PoolFactory *PoolFactoryCaller) SinkConverter(opts *bind.CallOpts) (common.Address, error) {
  5337  	var out []interface{}
  5338  	err := _PoolFactory.contract.Call(opts, &out, "sinkConverter")
  5339  
  5340  	if err != nil {
  5341  		return *new(common.Address), err
  5342  	}
  5343  
  5344  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5345  
  5346  	return out0, err
  5347  
  5348  }
  5349  
  5350  // SinkConverter is a free data retrieval call binding the contract method 0x8e39ee16.
  5351  //
  5352  // Solidity: function sinkConverter() view returns(address)
  5353  func (_PoolFactory *PoolFactorySession) SinkConverter() (common.Address, error) {
  5354  	return _PoolFactory.Contract.SinkConverter(&_PoolFactory.CallOpts)
  5355  }
  5356  
  5357  // SinkConverter is a free data retrieval call binding the contract method 0x8e39ee16.
  5358  //
  5359  // Solidity: function sinkConverter() view returns(address)
  5360  func (_PoolFactory *PoolFactoryCallerSession) SinkConverter() (common.Address, error) {
  5361  	return _PoolFactory.Contract.SinkConverter(&_PoolFactory.CallOpts)
  5362  }
  5363  
  5364  // StableFee is a free data retrieval call binding the contract method 0x40bbd775.
  5365  //
  5366  // Solidity: function stableFee() view returns(uint256)
  5367  func (_PoolFactory *PoolFactoryCaller) StableFee(opts *bind.CallOpts) (*big.Int, error) {
  5368  	var out []interface{}
  5369  	err := _PoolFactory.contract.Call(opts, &out, "stableFee")
  5370  
  5371  	if err != nil {
  5372  		return *new(*big.Int), err
  5373  	}
  5374  
  5375  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  5376  
  5377  	return out0, err
  5378  
  5379  }
  5380  
  5381  // StableFee is a free data retrieval call binding the contract method 0x40bbd775.
  5382  //
  5383  // Solidity: function stableFee() view returns(uint256)
  5384  func (_PoolFactory *PoolFactorySession) StableFee() (*big.Int, error) {
  5385  	return _PoolFactory.Contract.StableFee(&_PoolFactory.CallOpts)
  5386  }
  5387  
  5388  // StableFee is a free data retrieval call binding the contract method 0x40bbd775.
  5389  //
  5390  // Solidity: function stableFee() view returns(uint256)
  5391  func (_PoolFactory *PoolFactoryCallerSession) StableFee() (*big.Int, error) {
  5392  	return _PoolFactory.Contract.StableFee(&_PoolFactory.CallOpts)
  5393  }
  5394  
  5395  // Velo is a free data retrieval call binding the contract method 0x8c7c53ce.
  5396  //
  5397  // Solidity: function velo() view returns(address)
  5398  func (_PoolFactory *PoolFactoryCaller) Velo(opts *bind.CallOpts) (common.Address, error) {
  5399  	var out []interface{}
  5400  	err := _PoolFactory.contract.Call(opts, &out, "velo")
  5401  
  5402  	if err != nil {
  5403  		return *new(common.Address), err
  5404  	}
  5405  
  5406  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5407  
  5408  	return out0, err
  5409  
  5410  }
  5411  
  5412  // Velo is a free data retrieval call binding the contract method 0x8c7c53ce.
  5413  //
  5414  // Solidity: function velo() view returns(address)
  5415  func (_PoolFactory *PoolFactorySession) Velo() (common.Address, error) {
  5416  	return _PoolFactory.Contract.Velo(&_PoolFactory.CallOpts)
  5417  }
  5418  
  5419  // Velo is a free data retrieval call binding the contract method 0x8c7c53ce.
  5420  //
  5421  // Solidity: function velo() view returns(address)
  5422  func (_PoolFactory *PoolFactoryCallerSession) Velo() (common.Address, error) {
  5423  	return _PoolFactory.Contract.Velo(&_PoolFactory.CallOpts)
  5424  }
  5425  
  5426  // VeloV2 is a free data retrieval call binding the contract method 0xc6751c09.
  5427  //
  5428  // Solidity: function veloV2() view returns(address)
  5429  func (_PoolFactory *PoolFactoryCaller) VeloV2(opts *bind.CallOpts) (common.Address, error) {
  5430  	var out []interface{}
  5431  	err := _PoolFactory.contract.Call(opts, &out, "veloV2")
  5432  
  5433  	if err != nil {
  5434  		return *new(common.Address), err
  5435  	}
  5436  
  5437  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5438  
  5439  	return out0, err
  5440  
  5441  }
  5442  
  5443  // VeloV2 is a free data retrieval call binding the contract method 0xc6751c09.
  5444  //
  5445  // Solidity: function veloV2() view returns(address)
  5446  func (_PoolFactory *PoolFactorySession) VeloV2() (common.Address, error) {
  5447  	return _PoolFactory.Contract.VeloV2(&_PoolFactory.CallOpts)
  5448  }
  5449  
  5450  // VeloV2 is a free data retrieval call binding the contract method 0xc6751c09.
  5451  //
  5452  // Solidity: function veloV2() view returns(address)
  5453  func (_PoolFactory *PoolFactoryCallerSession) VeloV2() (common.Address, error) {
  5454  	return _PoolFactory.Contract.VeloV2(&_PoolFactory.CallOpts)
  5455  }
  5456  
  5457  // VolatileFee is a free data retrieval call binding the contract method 0x5084ed03.
  5458  //
  5459  // Solidity: function volatileFee() view returns(uint256)
  5460  func (_PoolFactory *PoolFactoryCaller) VolatileFee(opts *bind.CallOpts) (*big.Int, error) {
  5461  	var out []interface{}
  5462  	err := _PoolFactory.contract.Call(opts, &out, "volatileFee")
  5463  
  5464  	if err != nil {
  5465  		return *new(*big.Int), err
  5466  	}
  5467  
  5468  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  5469  
  5470  	return out0, err
  5471  
  5472  }
  5473  
  5474  // VolatileFee is a free data retrieval call binding the contract method 0x5084ed03.
  5475  //
  5476  // Solidity: function volatileFee() view returns(uint256)
  5477  func (_PoolFactory *PoolFactorySession) VolatileFee() (*big.Int, error) {
  5478  	return _PoolFactory.Contract.VolatileFee(&_PoolFactory.CallOpts)
  5479  }
  5480  
  5481  // VolatileFee is a free data retrieval call binding the contract method 0x5084ed03.
  5482  //
  5483  // Solidity: function volatileFee() view returns(uint256)
  5484  func (_PoolFactory *PoolFactoryCallerSession) VolatileFee() (*big.Int, error) {
  5485  	return _PoolFactory.Contract.VolatileFee(&_PoolFactory.CallOpts)
  5486  }
  5487  
  5488  // Voter is a free data retrieval call binding the contract method 0x46c96aac.
  5489  //
  5490  // Solidity: function voter() view returns(address)
  5491  func (_PoolFactory *PoolFactoryCaller) Voter(opts *bind.CallOpts) (common.Address, error) {
  5492  	var out []interface{}
  5493  	err := _PoolFactory.contract.Call(opts, &out, "voter")
  5494  
  5495  	if err != nil {
  5496  		return *new(common.Address), err
  5497  	}
  5498  
  5499  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5500  
  5501  	return out0, err
  5502  
  5503  }
  5504  
  5505  // Voter is a free data retrieval call binding the contract method 0x46c96aac.
  5506  //
  5507  // Solidity: function voter() view returns(address)
  5508  func (_PoolFactory *PoolFactorySession) Voter() (common.Address, error) {
  5509  	return _PoolFactory.Contract.Voter(&_PoolFactory.CallOpts)
  5510  }
  5511  
  5512  // Voter is a free data retrieval call binding the contract method 0x46c96aac.
  5513  //
  5514  // Solidity: function voter() view returns(address)
  5515  func (_PoolFactory *PoolFactoryCallerSession) Voter() (common.Address, error) {
  5516  	return _PoolFactory.Contract.Voter(&_PoolFactory.CallOpts)
  5517  }
  5518  
  5519  // CreatePair is a paid mutator transaction binding the contract method 0x82dfdce4.
  5520  //
  5521  // Solidity: function createPair(address tokenA, address tokenB, bool stable) returns(address pool)
  5522  func (_PoolFactory *PoolFactoryTransactor) CreatePair(opts *bind.TransactOpts, tokenA common.Address, tokenB common.Address, stable bool) (*types.Transaction, error) {
  5523  	return _PoolFactory.contract.Transact(opts, "createPair", tokenA, tokenB, stable)
  5524  }
  5525  
  5526  // CreatePair is a paid mutator transaction binding the contract method 0x82dfdce4.
  5527  //
  5528  // Solidity: function createPair(address tokenA, address tokenB, bool stable) returns(address pool)
  5529  func (_PoolFactory *PoolFactorySession) CreatePair(tokenA common.Address, tokenB common.Address, stable bool) (*types.Transaction, error) {
  5530  	return _PoolFactory.Contract.CreatePair(&_PoolFactory.TransactOpts, tokenA, tokenB, stable)
  5531  }
  5532  
  5533  // CreatePair is a paid mutator transaction binding the contract method 0x82dfdce4.
  5534  //
  5535  // Solidity: function createPair(address tokenA, address tokenB, bool stable) returns(address pool)
  5536  func (_PoolFactory *PoolFactoryTransactorSession) CreatePair(tokenA common.Address, tokenB common.Address, stable bool) (*types.Transaction, error) {
  5537  	return _PoolFactory.Contract.CreatePair(&_PoolFactory.TransactOpts, tokenA, tokenB, stable)
  5538  }
  5539  
  5540  // CreatePool is a paid mutator transaction binding the contract method 0x36bf95a0.
  5541  //
  5542  // Solidity: function createPool(address tokenA, address tokenB, bool stable) returns(address pool)
  5543  func (_PoolFactory *PoolFactoryTransactor) CreatePool(opts *bind.TransactOpts, tokenA common.Address, tokenB common.Address, stable bool) (*types.Transaction, error) {
  5544  	return _PoolFactory.contract.Transact(opts, "createPool", tokenA, tokenB, stable)
  5545  }
  5546  
  5547  // CreatePool is a paid mutator transaction binding the contract method 0x36bf95a0.
  5548  //
  5549  // Solidity: function createPool(address tokenA, address tokenB, bool stable) returns(address pool)
  5550  func (_PoolFactory *PoolFactorySession) CreatePool(tokenA common.Address, tokenB common.Address, stable bool) (*types.Transaction, error) {
  5551  	return _PoolFactory.Contract.CreatePool(&_PoolFactory.TransactOpts, tokenA, tokenB, stable)
  5552  }
  5553  
  5554  // CreatePool is a paid mutator transaction binding the contract method 0x36bf95a0.
  5555  //
  5556  // Solidity: function createPool(address tokenA, address tokenB, bool stable) returns(address pool)
  5557  func (_PoolFactory *PoolFactoryTransactorSession) CreatePool(tokenA common.Address, tokenB common.Address, stable bool) (*types.Transaction, error) {
  5558  	return _PoolFactory.Contract.CreatePool(&_PoolFactory.TransactOpts, tokenA, tokenB, stable)
  5559  }
  5560  
  5561  // CreatePool0 is a paid mutator transaction binding the contract method 0xa1671295.
  5562  //
  5563  // Solidity: function createPool(address tokenA, address tokenB, uint24 fee) returns(address pool)
  5564  func (_PoolFactory *PoolFactoryTransactor) CreatePool0(opts *bind.TransactOpts, tokenA common.Address, tokenB common.Address, fee *big.Int) (*types.Transaction, error) {
  5565  	return _PoolFactory.contract.Transact(opts, "createPool0", tokenA, tokenB, fee)
  5566  }
  5567  
  5568  // CreatePool0 is a paid mutator transaction binding the contract method 0xa1671295.
  5569  //
  5570  // Solidity: function createPool(address tokenA, address tokenB, uint24 fee) returns(address pool)
  5571  func (_PoolFactory *PoolFactorySession) CreatePool0(tokenA common.Address, tokenB common.Address, fee *big.Int) (*types.Transaction, error) {
  5572  	return _PoolFactory.Contract.CreatePool0(&_PoolFactory.TransactOpts, tokenA, tokenB, fee)
  5573  }
  5574  
  5575  // CreatePool0 is a paid mutator transaction binding the contract method 0xa1671295.
  5576  //
  5577  // Solidity: function createPool(address tokenA, address tokenB, uint24 fee) returns(address pool)
  5578  func (_PoolFactory *PoolFactoryTransactorSession) CreatePool0(tokenA common.Address, tokenB common.Address, fee *big.Int) (*types.Transaction, error) {
  5579  	return _PoolFactory.Contract.CreatePool0(&_PoolFactory.TransactOpts, tokenA, tokenB, fee)
  5580  }
  5581  
  5582  // SetCustomFee is a paid mutator transaction binding the contract method 0xd49466a8.
  5583  //
  5584  // Solidity: function setCustomFee(address pool, uint256 fee) returns()
  5585  func (_PoolFactory *PoolFactoryTransactor) SetCustomFee(opts *bind.TransactOpts, pool common.Address, fee *big.Int) (*types.Transaction, error) {
  5586  	return _PoolFactory.contract.Transact(opts, "setCustomFee", pool, fee)
  5587  }
  5588  
  5589  // SetCustomFee is a paid mutator transaction binding the contract method 0xd49466a8.
  5590  //
  5591  // Solidity: function setCustomFee(address pool, uint256 fee) returns()
  5592  func (_PoolFactory *PoolFactorySession) SetCustomFee(pool common.Address, fee *big.Int) (*types.Transaction, error) {
  5593  	return _PoolFactory.Contract.SetCustomFee(&_PoolFactory.TransactOpts, pool, fee)
  5594  }
  5595  
  5596  // SetCustomFee is a paid mutator transaction binding the contract method 0xd49466a8.
  5597  //
  5598  // Solidity: function setCustomFee(address pool, uint256 fee) returns()
  5599  func (_PoolFactory *PoolFactoryTransactorSession) SetCustomFee(pool common.Address, fee *big.Int) (*types.Transaction, error) {
  5600  	return _PoolFactory.Contract.SetCustomFee(&_PoolFactory.TransactOpts, pool, fee)
  5601  }
  5602  
  5603  // SetFee is a paid mutator transaction binding the contract method 0xe1f76b44.
  5604  //
  5605  // Solidity: function setFee(bool _stable, uint256 _fee) returns()
  5606  func (_PoolFactory *PoolFactoryTransactor) SetFee(opts *bind.TransactOpts, _stable bool, _fee *big.Int) (*types.Transaction, error) {
  5607  	return _PoolFactory.contract.Transact(opts, "setFee", _stable, _fee)
  5608  }
  5609  
  5610  // SetFee is a paid mutator transaction binding the contract method 0xe1f76b44.
  5611  //
  5612  // Solidity: function setFee(bool _stable, uint256 _fee) returns()
  5613  func (_PoolFactory *PoolFactorySession) SetFee(_stable bool, _fee *big.Int) (*types.Transaction, error) {
  5614  	return _PoolFactory.Contract.SetFee(&_PoolFactory.TransactOpts, _stable, _fee)
  5615  }
  5616  
  5617  // SetFee is a paid mutator transaction binding the contract method 0xe1f76b44.
  5618  //
  5619  // Solidity: function setFee(bool _stable, uint256 _fee) returns()
  5620  func (_PoolFactory *PoolFactoryTransactorSession) SetFee(_stable bool, _fee *big.Int) (*types.Transaction, error) {
  5621  	return _PoolFactory.Contract.SetFee(&_PoolFactory.TransactOpts, _stable, _fee)
  5622  }
  5623  
  5624  // SetFeeManager is a paid mutator transaction binding the contract method 0x472d35b9.
  5625  //
  5626  // Solidity: function setFeeManager(address _feeManager) returns()
  5627  func (_PoolFactory *PoolFactoryTransactor) SetFeeManager(opts *bind.TransactOpts, _feeManager common.Address) (*types.Transaction, error) {
  5628  	return _PoolFactory.contract.Transact(opts, "setFeeManager", _feeManager)
  5629  }
  5630  
  5631  // SetFeeManager is a paid mutator transaction binding the contract method 0x472d35b9.
  5632  //
  5633  // Solidity: function setFeeManager(address _feeManager) returns()
  5634  func (_PoolFactory *PoolFactorySession) SetFeeManager(_feeManager common.Address) (*types.Transaction, error) {
  5635  	return _PoolFactory.Contract.SetFeeManager(&_PoolFactory.TransactOpts, _feeManager)
  5636  }
  5637  
  5638  // SetFeeManager is a paid mutator transaction binding the contract method 0x472d35b9.
  5639  //
  5640  // Solidity: function setFeeManager(address _feeManager) returns()
  5641  func (_PoolFactory *PoolFactoryTransactorSession) SetFeeManager(_feeManager common.Address) (*types.Transaction, error) {
  5642  	return _PoolFactory.Contract.SetFeeManager(&_PoolFactory.TransactOpts, _feeManager)
  5643  }
  5644  
  5645  // SetPauseState is a paid mutator transaction binding the contract method 0xcdb88ad1.
  5646  //
  5647  // Solidity: function setPauseState(bool _state) returns()
  5648  func (_PoolFactory *PoolFactoryTransactor) SetPauseState(opts *bind.TransactOpts, _state bool) (*types.Transaction, error) {
  5649  	return _PoolFactory.contract.Transact(opts, "setPauseState", _state)
  5650  }
  5651  
  5652  // SetPauseState is a paid mutator transaction binding the contract method 0xcdb88ad1.
  5653  //
  5654  // Solidity: function setPauseState(bool _state) returns()
  5655  func (_PoolFactory *PoolFactorySession) SetPauseState(_state bool) (*types.Transaction, error) {
  5656  	return _PoolFactory.Contract.SetPauseState(&_PoolFactory.TransactOpts, _state)
  5657  }
  5658  
  5659  // SetPauseState is a paid mutator transaction binding the contract method 0xcdb88ad1.
  5660  //
  5661  // Solidity: function setPauseState(bool _state) returns()
  5662  func (_PoolFactory *PoolFactoryTransactorSession) SetPauseState(_state bool) (*types.Transaction, error) {
  5663  	return _PoolFactory.Contract.SetPauseState(&_PoolFactory.TransactOpts, _state)
  5664  }
  5665  
  5666  // SetPauser is a paid mutator transaction binding the contract method 0x2d88af4a.
  5667  //
  5668  // Solidity: function setPauser(address _pauser) returns()
  5669  func (_PoolFactory *PoolFactoryTransactor) SetPauser(opts *bind.TransactOpts, _pauser common.Address) (*types.Transaction, error) {
  5670  	return _PoolFactory.contract.Transact(opts, "setPauser", _pauser)
  5671  }
  5672  
  5673  // SetPauser is a paid mutator transaction binding the contract method 0x2d88af4a.
  5674  //
  5675  // Solidity: function setPauser(address _pauser) returns()
  5676  func (_PoolFactory *PoolFactorySession) SetPauser(_pauser common.Address) (*types.Transaction, error) {
  5677  	return _PoolFactory.Contract.SetPauser(&_PoolFactory.TransactOpts, _pauser)
  5678  }
  5679  
  5680  // SetPauser is a paid mutator transaction binding the contract method 0x2d88af4a.
  5681  //
  5682  // Solidity: function setPauser(address _pauser) returns()
  5683  func (_PoolFactory *PoolFactoryTransactorSession) SetPauser(_pauser common.Address) (*types.Transaction, error) {
  5684  	return _PoolFactory.Contract.SetPauser(&_PoolFactory.TransactOpts, _pauser)
  5685  }
  5686  
  5687  // SetSinkConverter is a paid mutator transaction binding the contract method 0x37068e7b.
  5688  //
  5689  // Solidity: function setSinkConverter(address _sinkConverter, address _velo, address _veloV2) returns()
  5690  func (_PoolFactory *PoolFactoryTransactor) SetSinkConverter(opts *bind.TransactOpts, _sinkConverter common.Address, _velo common.Address, _veloV2 common.Address) (*types.Transaction, error) {
  5691  	return _PoolFactory.contract.Transact(opts, "setSinkConverter", _sinkConverter, _velo, _veloV2)
  5692  }
  5693  
  5694  // SetSinkConverter is a paid mutator transaction binding the contract method 0x37068e7b.
  5695  //
  5696  // Solidity: function setSinkConverter(address _sinkConverter, address _velo, address _veloV2) returns()
  5697  func (_PoolFactory *PoolFactorySession) SetSinkConverter(_sinkConverter common.Address, _velo common.Address, _veloV2 common.Address) (*types.Transaction, error) {
  5698  	return _PoolFactory.Contract.SetSinkConverter(&_PoolFactory.TransactOpts, _sinkConverter, _velo, _veloV2)
  5699  }
  5700  
  5701  // SetSinkConverter is a paid mutator transaction binding the contract method 0x37068e7b.
  5702  //
  5703  // Solidity: function setSinkConverter(address _sinkConverter, address _velo, address _veloV2) returns()
  5704  func (_PoolFactory *PoolFactoryTransactorSession) SetSinkConverter(_sinkConverter common.Address, _velo common.Address, _veloV2 common.Address) (*types.Transaction, error) {
  5705  	return _PoolFactory.Contract.SetSinkConverter(&_PoolFactory.TransactOpts, _sinkConverter, _velo, _veloV2)
  5706  }
  5707  
  5708  // SetVoter is a paid mutator transaction binding the contract method 0x4bc2a657.
  5709  //
  5710  // Solidity: function setVoter(address _voter) returns()
  5711  func (_PoolFactory *PoolFactoryTransactor) SetVoter(opts *bind.TransactOpts, _voter common.Address) (*types.Transaction, error) {
  5712  	return _PoolFactory.contract.Transact(opts, "setVoter", _voter)
  5713  }
  5714  
  5715  // SetVoter is a paid mutator transaction binding the contract method 0x4bc2a657.
  5716  //
  5717  // Solidity: function setVoter(address _voter) returns()
  5718  func (_PoolFactory *PoolFactorySession) SetVoter(_voter common.Address) (*types.Transaction, error) {
  5719  	return _PoolFactory.Contract.SetVoter(&_PoolFactory.TransactOpts, _voter)
  5720  }
  5721  
  5722  // SetVoter is a paid mutator transaction binding the contract method 0x4bc2a657.
  5723  //
  5724  // Solidity: function setVoter(address _voter) returns()
  5725  func (_PoolFactory *PoolFactoryTransactorSession) SetVoter(_voter common.Address) (*types.Transaction, error) {
  5726  	return _PoolFactory.Contract.SetVoter(&_PoolFactory.TransactOpts, _voter)
  5727  }
  5728  
  5729  // PoolFactoryPoolCreatedIterator is returned from FilterPoolCreated and is used to iterate over the raw logs and unpacked data for PoolCreated events raised by the PoolFactory contract.
  5730  type PoolFactoryPoolCreatedIterator struct {
  5731  	Event *PoolFactoryPoolCreated // Event containing the contract specifics and raw log
  5732  
  5733  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  5734  	event    string              // Event name to use for unpacking event data
  5735  
  5736  	logs chan types.Log        // Log channel receiving the found contract events
  5737  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  5738  	done bool                  // Whether the subscription completed delivering logs
  5739  	fail error                 // Occurred error to stop iteration
  5740  }
  5741  
  5742  // Next advances the iterator to the subsequent event, returning whether there
  5743  // are any more events found. In case of a retrieval or parsing error, false is
  5744  // returned and Error() can be queried for the exact failure.
  5745  func (it *PoolFactoryPoolCreatedIterator) Next() bool {
  5746  	// If the iterator failed, stop iterating
  5747  	if it.fail != nil {
  5748  		return false
  5749  	}
  5750  	// If the iterator completed, deliver directly whatever's available
  5751  	if it.done {
  5752  		select {
  5753  		case log := <-it.logs:
  5754  			it.Event = new(PoolFactoryPoolCreated)
  5755  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5756  				it.fail = err
  5757  				return false
  5758  			}
  5759  			it.Event.Raw = log
  5760  			return true
  5761  
  5762  		default:
  5763  			return false
  5764  		}
  5765  	}
  5766  	// Iterator still in progress, wait for either a data or an error event
  5767  	select {
  5768  	case log := <-it.logs:
  5769  		it.Event = new(PoolFactoryPoolCreated)
  5770  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5771  			it.fail = err
  5772  			return false
  5773  		}
  5774  		it.Event.Raw = log
  5775  		return true
  5776  
  5777  	case err := <-it.sub.Err():
  5778  		it.done = true
  5779  		it.fail = err
  5780  		return it.Next()
  5781  	}
  5782  }
  5783  
  5784  // Error returns any retrieval or parsing error occurred during filtering.
  5785  func (it *PoolFactoryPoolCreatedIterator) Error() error {
  5786  	return it.fail
  5787  }
  5788  
  5789  // Close terminates the iteration process, releasing any pending underlying
  5790  // resources.
  5791  func (it *PoolFactoryPoolCreatedIterator) Close() error {
  5792  	it.sub.Unsubscribe()
  5793  	return nil
  5794  }
  5795  
  5796  // PoolFactoryPoolCreated represents a PoolCreated event raised by the PoolFactory contract.
  5797  type PoolFactoryPoolCreated struct {
  5798  	Token0 common.Address
  5799  	Token1 common.Address
  5800  	Stable bool
  5801  	Pool   common.Address
  5802  	Arg4   *big.Int
  5803  	Raw    types.Log // Blockchain specific contextual infos
  5804  }
  5805  
  5806  // FilterPoolCreated is a free log retrieval operation binding the contract event 0x2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e.
  5807  //
  5808  // Solidity: event PoolCreated(address indexed token0, address indexed token1, bool indexed stable, address pool, uint256 arg4)
  5809  func (_PoolFactory *PoolFactoryFilterer) FilterPoolCreated(opts *bind.FilterOpts, token0 []common.Address, token1 []common.Address, stable []bool) (*PoolFactoryPoolCreatedIterator, error) {
  5810  
  5811  	var token0Rule []interface{}
  5812  	for _, token0Item := range token0 {
  5813  		token0Rule = append(token0Rule, token0Item)
  5814  	}
  5815  	var token1Rule []interface{}
  5816  	for _, token1Item := range token1 {
  5817  		token1Rule = append(token1Rule, token1Item)
  5818  	}
  5819  	var stableRule []interface{}
  5820  	for _, stableItem := range stable {
  5821  		stableRule = append(stableRule, stableItem)
  5822  	}
  5823  
  5824  	logs, sub, err := _PoolFactory.contract.FilterLogs(opts, "PoolCreated", token0Rule, token1Rule, stableRule)
  5825  	if err != nil {
  5826  		return nil, err
  5827  	}
  5828  	return &PoolFactoryPoolCreatedIterator{contract: _PoolFactory.contract, event: "PoolCreated", logs: logs, sub: sub}, nil
  5829  }
  5830  
  5831  // WatchPoolCreated is a free log subscription operation binding the contract event 0x2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e.
  5832  //
  5833  // Solidity: event PoolCreated(address indexed token0, address indexed token1, bool indexed stable, address pool, uint256 arg4)
  5834  func (_PoolFactory *PoolFactoryFilterer) WatchPoolCreated(opts *bind.WatchOpts, sink chan<- *PoolFactoryPoolCreated, token0 []common.Address, token1 []common.Address, stable []bool) (event.Subscription, error) {
  5835  
  5836  	var token0Rule []interface{}
  5837  	for _, token0Item := range token0 {
  5838  		token0Rule = append(token0Rule, token0Item)
  5839  	}
  5840  	var token1Rule []interface{}
  5841  	for _, token1Item := range token1 {
  5842  		token1Rule = append(token1Rule, token1Item)
  5843  	}
  5844  	var stableRule []interface{}
  5845  	for _, stableItem := range stable {
  5846  		stableRule = append(stableRule, stableItem)
  5847  	}
  5848  
  5849  	logs, sub, err := _PoolFactory.contract.WatchLogs(opts, "PoolCreated", token0Rule, token1Rule, stableRule)
  5850  	if err != nil {
  5851  		return nil, err
  5852  	}
  5853  	return event.NewSubscription(func(quit <-chan struct{}) error {
  5854  		defer sub.Unsubscribe()
  5855  		for {
  5856  			select {
  5857  			case log := <-logs:
  5858  				// New log arrived, parse the event and forward to the user
  5859  				event := new(PoolFactoryPoolCreated)
  5860  				if err := _PoolFactory.contract.UnpackLog(event, "PoolCreated", log); err != nil {
  5861  					return err
  5862  				}
  5863  				event.Raw = log
  5864  
  5865  				select {
  5866  				case sink <- event:
  5867  				case err := <-sub.Err():
  5868  					return err
  5869  				case <-quit:
  5870  					return nil
  5871  				}
  5872  			case err := <-sub.Err():
  5873  				return err
  5874  			case <-quit:
  5875  				return nil
  5876  			}
  5877  		}
  5878  	}), nil
  5879  }
  5880  
  5881  // ParsePoolCreated is a log parse operation binding the contract event 0x2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e.
  5882  //
  5883  // Solidity: event PoolCreated(address indexed token0, address indexed token1, bool indexed stable, address pool, uint256 arg4)
  5884  func (_PoolFactory *PoolFactoryFilterer) ParsePoolCreated(log types.Log) (*PoolFactoryPoolCreated, error) {
  5885  	event := new(PoolFactoryPoolCreated)
  5886  	if err := _PoolFactory.contract.UnpackLog(event, "PoolCreated", log); err != nil {
  5887  		return nil, err
  5888  	}
  5889  	event.Raw = log
  5890  	return event, nil
  5891  }
  5892  
  5893  // PoolFactorySetCustomFeeIterator is returned from FilterSetCustomFee and is used to iterate over the raw logs and unpacked data for SetCustomFee events raised by the PoolFactory contract.
  5894  type PoolFactorySetCustomFeeIterator struct {
  5895  	Event *PoolFactorySetCustomFee // Event containing the contract specifics and raw log
  5896  
  5897  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  5898  	event    string              // Event name to use for unpacking event data
  5899  
  5900  	logs chan types.Log        // Log channel receiving the found contract events
  5901  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  5902  	done bool                  // Whether the subscription completed delivering logs
  5903  	fail error                 // Occurred error to stop iteration
  5904  }
  5905  
  5906  // Next advances the iterator to the subsequent event, returning whether there
  5907  // are any more events found. In case of a retrieval or parsing error, false is
  5908  // returned and Error() can be queried for the exact failure.
  5909  func (it *PoolFactorySetCustomFeeIterator) Next() bool {
  5910  	// If the iterator failed, stop iterating
  5911  	if it.fail != nil {
  5912  		return false
  5913  	}
  5914  	// If the iterator completed, deliver directly whatever's available
  5915  	if it.done {
  5916  		select {
  5917  		case log := <-it.logs:
  5918  			it.Event = new(PoolFactorySetCustomFee)
  5919  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5920  				it.fail = err
  5921  				return false
  5922  			}
  5923  			it.Event.Raw = log
  5924  			return true
  5925  
  5926  		default:
  5927  			return false
  5928  		}
  5929  	}
  5930  	// Iterator still in progress, wait for either a data or an error event
  5931  	select {
  5932  	case log := <-it.logs:
  5933  		it.Event = new(PoolFactorySetCustomFee)
  5934  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5935  			it.fail = err
  5936  			return false
  5937  		}
  5938  		it.Event.Raw = log
  5939  		return true
  5940  
  5941  	case err := <-it.sub.Err():
  5942  		it.done = true
  5943  		it.fail = err
  5944  		return it.Next()
  5945  	}
  5946  }
  5947  
  5948  // Error returns any retrieval or parsing error occurred during filtering.
  5949  func (it *PoolFactorySetCustomFeeIterator) Error() error {
  5950  	return it.fail
  5951  }
  5952  
  5953  // Close terminates the iteration process, releasing any pending underlying
  5954  // resources.
  5955  func (it *PoolFactorySetCustomFeeIterator) Close() error {
  5956  	it.sub.Unsubscribe()
  5957  	return nil
  5958  }
  5959  
  5960  // PoolFactorySetCustomFee represents a SetCustomFee event raised by the PoolFactory contract.
  5961  type PoolFactorySetCustomFee struct {
  5962  	Pool common.Address
  5963  	Fee  *big.Int
  5964  	Raw  types.Log // Blockchain specific contextual infos
  5965  }
  5966  
  5967  // FilterSetCustomFee is a free log retrieval operation binding the contract event 0xae468ce586f9a87660fdffc1448cee942042c16ae2f02046b134b5224f31936b.
  5968  //
  5969  // Solidity: event SetCustomFee(address indexed pool, uint256 fee)
  5970  func (_PoolFactory *PoolFactoryFilterer) FilterSetCustomFee(opts *bind.FilterOpts, pool []common.Address) (*PoolFactorySetCustomFeeIterator, error) {
  5971  
  5972  	var poolRule []interface{}
  5973  	for _, poolItem := range pool {
  5974  		poolRule = append(poolRule, poolItem)
  5975  	}
  5976  
  5977  	logs, sub, err := _PoolFactory.contract.FilterLogs(opts, "SetCustomFee", poolRule)
  5978  	if err != nil {
  5979  		return nil, err
  5980  	}
  5981  	return &PoolFactorySetCustomFeeIterator{contract: _PoolFactory.contract, event: "SetCustomFee", logs: logs, sub: sub}, nil
  5982  }
  5983  
  5984  // WatchSetCustomFee is a free log subscription operation binding the contract event 0xae468ce586f9a87660fdffc1448cee942042c16ae2f02046b134b5224f31936b.
  5985  //
  5986  // Solidity: event SetCustomFee(address indexed pool, uint256 fee)
  5987  func (_PoolFactory *PoolFactoryFilterer) WatchSetCustomFee(opts *bind.WatchOpts, sink chan<- *PoolFactorySetCustomFee, pool []common.Address) (event.Subscription, error) {
  5988  
  5989  	var poolRule []interface{}
  5990  	for _, poolItem := range pool {
  5991  		poolRule = append(poolRule, poolItem)
  5992  	}
  5993  
  5994  	logs, sub, err := _PoolFactory.contract.WatchLogs(opts, "SetCustomFee", poolRule)
  5995  	if err != nil {
  5996  		return nil, err
  5997  	}
  5998  	return event.NewSubscription(func(quit <-chan struct{}) error {
  5999  		defer sub.Unsubscribe()
  6000  		for {
  6001  			select {
  6002  			case log := <-logs:
  6003  				// New log arrived, parse the event and forward to the user
  6004  				event := new(PoolFactorySetCustomFee)
  6005  				if err := _PoolFactory.contract.UnpackLog(event, "SetCustomFee", log); err != nil {
  6006  					return err
  6007  				}
  6008  				event.Raw = log
  6009  
  6010  				select {
  6011  				case sink <- event:
  6012  				case err := <-sub.Err():
  6013  					return err
  6014  				case <-quit:
  6015  					return nil
  6016  				}
  6017  			case err := <-sub.Err():
  6018  				return err
  6019  			case <-quit:
  6020  				return nil
  6021  			}
  6022  		}
  6023  	}), nil
  6024  }
  6025  
  6026  // ParseSetCustomFee is a log parse operation binding the contract event 0xae468ce586f9a87660fdffc1448cee942042c16ae2f02046b134b5224f31936b.
  6027  //
  6028  // Solidity: event SetCustomFee(address indexed pool, uint256 fee)
  6029  func (_PoolFactory *PoolFactoryFilterer) ParseSetCustomFee(log types.Log) (*PoolFactorySetCustomFee, error) {
  6030  	event := new(PoolFactorySetCustomFee)
  6031  	if err := _PoolFactory.contract.UnpackLog(event, "SetCustomFee", log); err != nil {
  6032  		return nil, err
  6033  	}
  6034  	event.Raw = log
  6035  	return event, nil
  6036  }
  6037  
  6038  // PoolFactorySetFeeManagerIterator is returned from FilterSetFeeManager and is used to iterate over the raw logs and unpacked data for SetFeeManager events raised by the PoolFactory contract.
  6039  type PoolFactorySetFeeManagerIterator struct {
  6040  	Event *PoolFactorySetFeeManager // Event containing the contract specifics and raw log
  6041  
  6042  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  6043  	event    string              // Event name to use for unpacking event data
  6044  
  6045  	logs chan types.Log        // Log channel receiving the found contract events
  6046  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  6047  	done bool                  // Whether the subscription completed delivering logs
  6048  	fail error                 // Occurred error to stop iteration
  6049  }
  6050  
  6051  // Next advances the iterator to the subsequent event, returning whether there
  6052  // are any more events found. In case of a retrieval or parsing error, false is
  6053  // returned and Error() can be queried for the exact failure.
  6054  func (it *PoolFactorySetFeeManagerIterator) Next() bool {
  6055  	// If the iterator failed, stop iterating
  6056  	if it.fail != nil {
  6057  		return false
  6058  	}
  6059  	// If the iterator completed, deliver directly whatever's available
  6060  	if it.done {
  6061  		select {
  6062  		case log := <-it.logs:
  6063  			it.Event = new(PoolFactorySetFeeManager)
  6064  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6065  				it.fail = err
  6066  				return false
  6067  			}
  6068  			it.Event.Raw = log
  6069  			return true
  6070  
  6071  		default:
  6072  			return false
  6073  		}
  6074  	}
  6075  	// Iterator still in progress, wait for either a data or an error event
  6076  	select {
  6077  	case log := <-it.logs:
  6078  		it.Event = new(PoolFactorySetFeeManager)
  6079  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6080  			it.fail = err
  6081  			return false
  6082  		}
  6083  		it.Event.Raw = log
  6084  		return true
  6085  
  6086  	case err := <-it.sub.Err():
  6087  		it.done = true
  6088  		it.fail = err
  6089  		return it.Next()
  6090  	}
  6091  }
  6092  
  6093  // Error returns any retrieval or parsing error occurred during filtering.
  6094  func (it *PoolFactorySetFeeManagerIterator) Error() error {
  6095  	return it.fail
  6096  }
  6097  
  6098  // Close terminates the iteration process, releasing any pending underlying
  6099  // resources.
  6100  func (it *PoolFactorySetFeeManagerIterator) Close() error {
  6101  	it.sub.Unsubscribe()
  6102  	return nil
  6103  }
  6104  
  6105  // PoolFactorySetFeeManager represents a SetFeeManager event raised by the PoolFactory contract.
  6106  type PoolFactorySetFeeManager struct {
  6107  	FeeManager common.Address
  6108  	Raw        types.Log // Blockchain specific contextual infos
  6109  }
  6110  
  6111  // FilterSetFeeManager is a free log retrieval operation binding the contract event 0x5d0517e3a4eabea892d9750138cd21d4a6cf3b935b43d0598df7055f463819b2.
  6112  //
  6113  // Solidity: event SetFeeManager(address feeManager)
  6114  func (_PoolFactory *PoolFactoryFilterer) FilterSetFeeManager(opts *bind.FilterOpts) (*PoolFactorySetFeeManagerIterator, error) {
  6115  
  6116  	logs, sub, err := _PoolFactory.contract.FilterLogs(opts, "SetFeeManager")
  6117  	if err != nil {
  6118  		return nil, err
  6119  	}
  6120  	return &PoolFactorySetFeeManagerIterator{contract: _PoolFactory.contract, event: "SetFeeManager", logs: logs, sub: sub}, nil
  6121  }
  6122  
  6123  // WatchSetFeeManager is a free log subscription operation binding the contract event 0x5d0517e3a4eabea892d9750138cd21d4a6cf3b935b43d0598df7055f463819b2.
  6124  //
  6125  // Solidity: event SetFeeManager(address feeManager)
  6126  func (_PoolFactory *PoolFactoryFilterer) WatchSetFeeManager(opts *bind.WatchOpts, sink chan<- *PoolFactorySetFeeManager) (event.Subscription, error) {
  6127  
  6128  	logs, sub, err := _PoolFactory.contract.WatchLogs(opts, "SetFeeManager")
  6129  	if err != nil {
  6130  		return nil, err
  6131  	}
  6132  	return event.NewSubscription(func(quit <-chan struct{}) error {
  6133  		defer sub.Unsubscribe()
  6134  		for {
  6135  			select {
  6136  			case log := <-logs:
  6137  				// New log arrived, parse the event and forward to the user
  6138  				event := new(PoolFactorySetFeeManager)
  6139  				if err := _PoolFactory.contract.UnpackLog(event, "SetFeeManager", log); err != nil {
  6140  					return err
  6141  				}
  6142  				event.Raw = log
  6143  
  6144  				select {
  6145  				case sink <- event:
  6146  				case err := <-sub.Err():
  6147  					return err
  6148  				case <-quit:
  6149  					return nil
  6150  				}
  6151  			case err := <-sub.Err():
  6152  				return err
  6153  			case <-quit:
  6154  				return nil
  6155  			}
  6156  		}
  6157  	}), nil
  6158  }
  6159  
  6160  // ParseSetFeeManager is a log parse operation binding the contract event 0x5d0517e3a4eabea892d9750138cd21d4a6cf3b935b43d0598df7055f463819b2.
  6161  //
  6162  // Solidity: event SetFeeManager(address feeManager)
  6163  func (_PoolFactory *PoolFactoryFilterer) ParseSetFeeManager(log types.Log) (*PoolFactorySetFeeManager, error) {
  6164  	event := new(PoolFactorySetFeeManager)
  6165  	if err := _PoolFactory.contract.UnpackLog(event, "SetFeeManager", log); err != nil {
  6166  		return nil, err
  6167  	}
  6168  	event.Raw = log
  6169  	return event, nil
  6170  }
  6171  
  6172  // PoolFactorySetPauseStateIterator is returned from FilterSetPauseState and is used to iterate over the raw logs and unpacked data for SetPauseState events raised by the PoolFactory contract.
  6173  type PoolFactorySetPauseStateIterator struct {
  6174  	Event *PoolFactorySetPauseState // Event containing the contract specifics and raw log
  6175  
  6176  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  6177  	event    string              // Event name to use for unpacking event data
  6178  
  6179  	logs chan types.Log        // Log channel receiving the found contract events
  6180  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  6181  	done bool                  // Whether the subscription completed delivering logs
  6182  	fail error                 // Occurred error to stop iteration
  6183  }
  6184  
  6185  // Next advances the iterator to the subsequent event, returning whether there
  6186  // are any more events found. In case of a retrieval or parsing error, false is
  6187  // returned and Error() can be queried for the exact failure.
  6188  func (it *PoolFactorySetPauseStateIterator) Next() bool {
  6189  	// If the iterator failed, stop iterating
  6190  	if it.fail != nil {
  6191  		return false
  6192  	}
  6193  	// If the iterator completed, deliver directly whatever's available
  6194  	if it.done {
  6195  		select {
  6196  		case log := <-it.logs:
  6197  			it.Event = new(PoolFactorySetPauseState)
  6198  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6199  				it.fail = err
  6200  				return false
  6201  			}
  6202  			it.Event.Raw = log
  6203  			return true
  6204  
  6205  		default:
  6206  			return false
  6207  		}
  6208  	}
  6209  	// Iterator still in progress, wait for either a data or an error event
  6210  	select {
  6211  	case log := <-it.logs:
  6212  		it.Event = new(PoolFactorySetPauseState)
  6213  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6214  			it.fail = err
  6215  			return false
  6216  		}
  6217  		it.Event.Raw = log
  6218  		return true
  6219  
  6220  	case err := <-it.sub.Err():
  6221  		it.done = true
  6222  		it.fail = err
  6223  		return it.Next()
  6224  	}
  6225  }
  6226  
  6227  // Error returns any retrieval or parsing error occurred during filtering.
  6228  func (it *PoolFactorySetPauseStateIterator) Error() error {
  6229  	return it.fail
  6230  }
  6231  
  6232  // Close terminates the iteration process, releasing any pending underlying
  6233  // resources.
  6234  func (it *PoolFactorySetPauseStateIterator) Close() error {
  6235  	it.sub.Unsubscribe()
  6236  	return nil
  6237  }
  6238  
  6239  // PoolFactorySetPauseState represents a SetPauseState event raised by the PoolFactory contract.
  6240  type PoolFactorySetPauseState struct {
  6241  	State bool
  6242  	Raw   types.Log // Blockchain specific contextual infos
  6243  }
  6244  
  6245  // FilterSetPauseState is a free log retrieval operation binding the contract event 0x0d76538efc408318a051137c2720a9e82902acdbd46b802d488b74ca3a09a116.
  6246  //
  6247  // Solidity: event SetPauseState(bool state)
  6248  func (_PoolFactory *PoolFactoryFilterer) FilterSetPauseState(opts *bind.FilterOpts) (*PoolFactorySetPauseStateIterator, error) {
  6249  
  6250  	logs, sub, err := _PoolFactory.contract.FilterLogs(opts, "SetPauseState")
  6251  	if err != nil {
  6252  		return nil, err
  6253  	}
  6254  	return &PoolFactorySetPauseStateIterator{contract: _PoolFactory.contract, event: "SetPauseState", logs: logs, sub: sub}, nil
  6255  }
  6256  
  6257  // WatchSetPauseState is a free log subscription operation binding the contract event 0x0d76538efc408318a051137c2720a9e82902acdbd46b802d488b74ca3a09a116.
  6258  //
  6259  // Solidity: event SetPauseState(bool state)
  6260  func (_PoolFactory *PoolFactoryFilterer) WatchSetPauseState(opts *bind.WatchOpts, sink chan<- *PoolFactorySetPauseState) (event.Subscription, error) {
  6261  
  6262  	logs, sub, err := _PoolFactory.contract.WatchLogs(opts, "SetPauseState")
  6263  	if err != nil {
  6264  		return nil, err
  6265  	}
  6266  	return event.NewSubscription(func(quit <-chan struct{}) error {
  6267  		defer sub.Unsubscribe()
  6268  		for {
  6269  			select {
  6270  			case log := <-logs:
  6271  				// New log arrived, parse the event and forward to the user
  6272  				event := new(PoolFactorySetPauseState)
  6273  				if err := _PoolFactory.contract.UnpackLog(event, "SetPauseState", log); err != nil {
  6274  					return err
  6275  				}
  6276  				event.Raw = log
  6277  
  6278  				select {
  6279  				case sink <- event:
  6280  				case err := <-sub.Err():
  6281  					return err
  6282  				case <-quit:
  6283  					return nil
  6284  				}
  6285  			case err := <-sub.Err():
  6286  				return err
  6287  			case <-quit:
  6288  				return nil
  6289  			}
  6290  		}
  6291  	}), nil
  6292  }
  6293  
  6294  // ParseSetPauseState is a log parse operation binding the contract event 0x0d76538efc408318a051137c2720a9e82902acdbd46b802d488b74ca3a09a116.
  6295  //
  6296  // Solidity: event SetPauseState(bool state)
  6297  func (_PoolFactory *PoolFactoryFilterer) ParseSetPauseState(log types.Log) (*PoolFactorySetPauseState, error) {
  6298  	event := new(PoolFactorySetPauseState)
  6299  	if err := _PoolFactory.contract.UnpackLog(event, "SetPauseState", log); err != nil {
  6300  		return nil, err
  6301  	}
  6302  	event.Raw = log
  6303  	return event, nil
  6304  }
  6305  
  6306  // PoolFactorySetPauserIterator is returned from FilterSetPauser and is used to iterate over the raw logs and unpacked data for SetPauser events raised by the PoolFactory contract.
  6307  type PoolFactorySetPauserIterator struct {
  6308  	Event *PoolFactorySetPauser // Event containing the contract specifics and raw log
  6309  
  6310  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  6311  	event    string              // Event name to use for unpacking event data
  6312  
  6313  	logs chan types.Log        // Log channel receiving the found contract events
  6314  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  6315  	done bool                  // Whether the subscription completed delivering logs
  6316  	fail error                 // Occurred error to stop iteration
  6317  }
  6318  
  6319  // Next advances the iterator to the subsequent event, returning whether there
  6320  // are any more events found. In case of a retrieval or parsing error, false is
  6321  // returned and Error() can be queried for the exact failure.
  6322  func (it *PoolFactorySetPauserIterator) Next() bool {
  6323  	// If the iterator failed, stop iterating
  6324  	if it.fail != nil {
  6325  		return false
  6326  	}
  6327  	// If the iterator completed, deliver directly whatever's available
  6328  	if it.done {
  6329  		select {
  6330  		case log := <-it.logs:
  6331  			it.Event = new(PoolFactorySetPauser)
  6332  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6333  				it.fail = err
  6334  				return false
  6335  			}
  6336  			it.Event.Raw = log
  6337  			return true
  6338  
  6339  		default:
  6340  			return false
  6341  		}
  6342  	}
  6343  	// Iterator still in progress, wait for either a data or an error event
  6344  	select {
  6345  	case log := <-it.logs:
  6346  		it.Event = new(PoolFactorySetPauser)
  6347  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6348  			it.fail = err
  6349  			return false
  6350  		}
  6351  		it.Event.Raw = log
  6352  		return true
  6353  
  6354  	case err := <-it.sub.Err():
  6355  		it.done = true
  6356  		it.fail = err
  6357  		return it.Next()
  6358  	}
  6359  }
  6360  
  6361  // Error returns any retrieval or parsing error occurred during filtering.
  6362  func (it *PoolFactorySetPauserIterator) Error() error {
  6363  	return it.fail
  6364  }
  6365  
  6366  // Close terminates the iteration process, releasing any pending underlying
  6367  // resources.
  6368  func (it *PoolFactorySetPauserIterator) Close() error {
  6369  	it.sub.Unsubscribe()
  6370  	return nil
  6371  }
  6372  
  6373  // PoolFactorySetPauser represents a SetPauser event raised by the PoolFactory contract.
  6374  type PoolFactorySetPauser struct {
  6375  	Pauser common.Address
  6376  	Raw    types.Log // Blockchain specific contextual infos
  6377  }
  6378  
  6379  // FilterSetPauser is a free log retrieval operation binding the contract event 0xe02efb9e8f0fc21546730ab32d594f62d586e1bbb15bb5045edd0b1878a77b35.
  6380  //
  6381  // Solidity: event SetPauser(address pauser)
  6382  func (_PoolFactory *PoolFactoryFilterer) FilterSetPauser(opts *bind.FilterOpts) (*PoolFactorySetPauserIterator, error) {
  6383  
  6384  	logs, sub, err := _PoolFactory.contract.FilterLogs(opts, "SetPauser")
  6385  	if err != nil {
  6386  		return nil, err
  6387  	}
  6388  	return &PoolFactorySetPauserIterator{contract: _PoolFactory.contract, event: "SetPauser", logs: logs, sub: sub}, nil
  6389  }
  6390  
  6391  // WatchSetPauser is a free log subscription operation binding the contract event 0xe02efb9e8f0fc21546730ab32d594f62d586e1bbb15bb5045edd0b1878a77b35.
  6392  //
  6393  // Solidity: event SetPauser(address pauser)
  6394  func (_PoolFactory *PoolFactoryFilterer) WatchSetPauser(opts *bind.WatchOpts, sink chan<- *PoolFactorySetPauser) (event.Subscription, error) {
  6395  
  6396  	logs, sub, err := _PoolFactory.contract.WatchLogs(opts, "SetPauser")
  6397  	if err != nil {
  6398  		return nil, err
  6399  	}
  6400  	return event.NewSubscription(func(quit <-chan struct{}) error {
  6401  		defer sub.Unsubscribe()
  6402  		for {
  6403  			select {
  6404  			case log := <-logs:
  6405  				// New log arrived, parse the event and forward to the user
  6406  				event := new(PoolFactorySetPauser)
  6407  				if err := _PoolFactory.contract.UnpackLog(event, "SetPauser", log); err != nil {
  6408  					return err
  6409  				}
  6410  				event.Raw = log
  6411  
  6412  				select {
  6413  				case sink <- event:
  6414  				case err := <-sub.Err():
  6415  					return err
  6416  				case <-quit:
  6417  					return nil
  6418  				}
  6419  			case err := <-sub.Err():
  6420  				return err
  6421  			case <-quit:
  6422  				return nil
  6423  			}
  6424  		}
  6425  	}), nil
  6426  }
  6427  
  6428  // ParseSetPauser is a log parse operation binding the contract event 0xe02efb9e8f0fc21546730ab32d594f62d586e1bbb15bb5045edd0b1878a77b35.
  6429  //
  6430  // Solidity: event SetPauser(address pauser)
  6431  func (_PoolFactory *PoolFactoryFilterer) ParseSetPauser(log types.Log) (*PoolFactorySetPauser, error) {
  6432  	event := new(PoolFactorySetPauser)
  6433  	if err := _PoolFactory.contract.UnpackLog(event, "SetPauser", log); err != nil {
  6434  		return nil, err
  6435  	}
  6436  	event.Raw = log
  6437  	return event, nil
  6438  }
  6439  
  6440  // PoolFactorySetVoterIterator is returned from FilterSetVoter and is used to iterate over the raw logs and unpacked data for SetVoter events raised by the PoolFactory contract.
  6441  type PoolFactorySetVoterIterator struct {
  6442  	Event *PoolFactorySetVoter // Event containing the contract specifics and raw log
  6443  
  6444  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  6445  	event    string              // Event name to use for unpacking event data
  6446  
  6447  	logs chan types.Log        // Log channel receiving the found contract events
  6448  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  6449  	done bool                  // Whether the subscription completed delivering logs
  6450  	fail error                 // Occurred error to stop iteration
  6451  }
  6452  
  6453  // Next advances the iterator to the subsequent event, returning whether there
  6454  // are any more events found. In case of a retrieval or parsing error, false is
  6455  // returned and Error() can be queried for the exact failure.
  6456  func (it *PoolFactorySetVoterIterator) Next() bool {
  6457  	// If the iterator failed, stop iterating
  6458  	if it.fail != nil {
  6459  		return false
  6460  	}
  6461  	// If the iterator completed, deliver directly whatever's available
  6462  	if it.done {
  6463  		select {
  6464  		case log := <-it.logs:
  6465  			it.Event = new(PoolFactorySetVoter)
  6466  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6467  				it.fail = err
  6468  				return false
  6469  			}
  6470  			it.Event.Raw = log
  6471  			return true
  6472  
  6473  		default:
  6474  			return false
  6475  		}
  6476  	}
  6477  	// Iterator still in progress, wait for either a data or an error event
  6478  	select {
  6479  	case log := <-it.logs:
  6480  		it.Event = new(PoolFactorySetVoter)
  6481  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6482  			it.fail = err
  6483  			return false
  6484  		}
  6485  		it.Event.Raw = log
  6486  		return true
  6487  
  6488  	case err := <-it.sub.Err():
  6489  		it.done = true
  6490  		it.fail = err
  6491  		return it.Next()
  6492  	}
  6493  }
  6494  
  6495  // Error returns any retrieval or parsing error occurred during filtering.
  6496  func (it *PoolFactorySetVoterIterator) Error() error {
  6497  	return it.fail
  6498  }
  6499  
  6500  // Close terminates the iteration process, releasing any pending underlying
  6501  // resources.
  6502  func (it *PoolFactorySetVoterIterator) Close() error {
  6503  	it.sub.Unsubscribe()
  6504  	return nil
  6505  }
  6506  
  6507  // PoolFactorySetVoter represents a SetVoter event raised by the PoolFactory contract.
  6508  type PoolFactorySetVoter struct {
  6509  	Voter common.Address
  6510  	Raw   types.Log // Blockchain specific contextual infos
  6511  }
  6512  
  6513  // FilterSetVoter is a free log retrieval operation binding the contract event 0xc6ff127433b785c51da9ae4088ee184c909b1a55b9afd82ae6c64224d3bc15d2.
  6514  //
  6515  // Solidity: event SetVoter(address voter)
  6516  func (_PoolFactory *PoolFactoryFilterer) FilterSetVoter(opts *bind.FilterOpts) (*PoolFactorySetVoterIterator, error) {
  6517  
  6518  	logs, sub, err := _PoolFactory.contract.FilterLogs(opts, "SetVoter")
  6519  	if err != nil {
  6520  		return nil, err
  6521  	}
  6522  	return &PoolFactorySetVoterIterator{contract: _PoolFactory.contract, event: "SetVoter", logs: logs, sub: sub}, nil
  6523  }
  6524  
  6525  // WatchSetVoter is a free log subscription operation binding the contract event 0xc6ff127433b785c51da9ae4088ee184c909b1a55b9afd82ae6c64224d3bc15d2.
  6526  //
  6527  // Solidity: event SetVoter(address voter)
  6528  func (_PoolFactory *PoolFactoryFilterer) WatchSetVoter(opts *bind.WatchOpts, sink chan<- *PoolFactorySetVoter) (event.Subscription, error) {
  6529  
  6530  	logs, sub, err := _PoolFactory.contract.WatchLogs(opts, "SetVoter")
  6531  	if err != nil {
  6532  		return nil, err
  6533  	}
  6534  	return event.NewSubscription(func(quit <-chan struct{}) error {
  6535  		defer sub.Unsubscribe()
  6536  		for {
  6537  			select {
  6538  			case log := <-logs:
  6539  				// New log arrived, parse the event and forward to the user
  6540  				event := new(PoolFactorySetVoter)
  6541  				if err := _PoolFactory.contract.UnpackLog(event, "SetVoter", log); err != nil {
  6542  					return err
  6543  				}
  6544  				event.Raw = log
  6545  
  6546  				select {
  6547  				case sink <- event:
  6548  				case err := <-sub.Err():
  6549  					return err
  6550  				case <-quit:
  6551  					return nil
  6552  				}
  6553  			case err := <-sub.Err():
  6554  				return err
  6555  			case <-quit:
  6556  				return nil
  6557  			}
  6558  		}
  6559  	}), nil
  6560  }
  6561  
  6562  // ParseSetVoter is a log parse operation binding the contract event 0xc6ff127433b785c51da9ae4088ee184c909b1a55b9afd82ae6c64224d3bc15d2.
  6563  //
  6564  // Solidity: event SetVoter(address voter)
  6565  func (_PoolFactory *PoolFactoryFilterer) ParseSetVoter(log types.Log) (*PoolFactorySetVoter, error) {
  6566  	event := new(PoolFactorySetVoter)
  6567  	if err := _PoolFactory.contract.UnpackLog(event, "SetVoter", log); err != nil {
  6568  		return nil, err
  6569  	}
  6570  	event.Raw = log
  6571  	return event, nil
  6572  }