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

package ERC721MinterBurnerPauser

import (
	"math/big"
	"strings"

	ethereum "github.com/ethereum/go-ethereum"
	"github.com/ethereum/go-ethereum/accounts/abi"
	"github.com/ethereum/go-ethereum/accounts/abi/bind"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/core/types"
	"github.com/ethereum/go-ethereum/event"
)

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

// ERC721MinterBurnerPauserABI is the input ABI used to generate the binding from.
const ERC721MinterBurnerPauserABI = "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINTER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"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\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_data\",\"type\":\"string\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"

// ERC721MinterBurnerPauserBin is the compiled bytecode used for deploying new contracts.
var ERC721MinterBurnerPauserBin = "0x60806040523480156200001157600080fd5b50604051620043a4380380620043a4833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620001d257600080fd5b83820191506020820185811115620001e957600080fd5b82518660018202830111640100000000821117156200020757600080fd5b8083526020830192505050908051906020019080838360005b838110156200023d57808201518184015260208101905062000220565b50505050905090810190601f1680156200026b5780820380516001836020036101000a031916815260200191505b5060405250505082826200028c6301ffc9a760e01b6200040d60201b60201c565b8160079080519060200190620002a4929190620006c8565b508060089080519060200190620002bd929190620006c8565b50620002d66380ac58cd60e01b6200040d60201b60201c565b620002ee635b5e139f60e01b6200040d60201b60201c565b6200030663780e9d6360e01b6200040d60201b60201c565b50506000600b60006101000a81548160ff021916908315150217905550620003476000801b6200033b6200051660201b60201c565b6200051e60201b60201c565b6200039d60405180807f4d494e5445525f524f4c45000000000000000000000000000000000000000000815250600b0190506040518091039020620003916200051660201b60201c565b6200051e60201b60201c565b620003f360405180807f5041555345525f524f4c45000000000000000000000000000000000000000000815250600b0190506040518091039020620003e76200051660201b60201c565b6200051e60201b60201c565b62000404816200053460201b60201c565b50505062000777565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415620004aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b6200053082826200055060201b60201c565b5050565b80600a90805190602001906200054c929190620006c8565b5050565b6200057e81600080858152602001908152602001600020600001620005f360201b62002d041790919060201c565b15620005ef57620005946200051660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600062000623836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200062b60201b60201c565b905092915050565b60006200063f8383620006a560201b60201c565b6200069a5782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506200069f565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200070b57805160ff19168380011785556200073c565b828001600101855582156200073c579182015b828111156200073b5782518255916020019190600101906200071e565b5b5090506200074b91906200074f565b5090565b6200077491905b808211156200077057600081600090555060010162000756565b5090565b90565b613c1d80620007876000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80636c0360eb1161010f578063b88d4fde116100a2578063d539139311610071578063d539139314610c64578063d547741f14610c82578063e63ab1e914610cd0578063e985e9c514610cee576101f0565b8063b88d4fde14610991578063c87b56dd14610a96578063ca15c87314610b3d578063d3fc986414610b7f576101f0565b806391d14854116100de57806391d148541461083a57806395d89b41146108a0578063a217fddf14610923578063a22cb46514610941576101f0565b80636c0360eb146106dd57806370a08231146107605780638456cb59146107b85780639010d07c146107c2576101f0565b80632f745c591161018757806342966c681161015657806342966c68146105dd5780634f6ccce71461060b5780635c975abb1461064d5780636352211e1461066f576101f0565b80632f745c59146104b557806336568abe146105175780633f4ba83a1461056557806342842e0e1461056f576101f0565b806318160ddd116101c357806318160ddd1461039957806323b872dd146103b7578063248a9ca3146104255780632f2ff15d14610467576101f0565b806301ffc9a7146101f557806306fdde031461025a578063081812fc146102dd578063095ea7b31461034b575b600080fd5b6102406004803603602081101561020b57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610d6a565b604051808215151515815260200191505060405180910390f35b610262610dd2565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102a2578082015181840152602081019050610287565b50505050905090810190601f1680156102cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610309600480360360208110156102f357600080fd5b8101908080359060200190929190505050610e74565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103976004803603604081101561036157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f0f565b005b6103a1611053565b6040518082815260200191505060405180910390f35b610423600480360360608110156103cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611064565b005b6104516004803603602081101561043b57600080fd5b81019080803590602001909291905050506110da565b6040518082815260200191505060405180910390f35b6104b36004803603604081101561047d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110f9565b005b610501600480360360408110156104cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611182565b6040518082815260200191505060405180910390f35b6105636004803603604081101561052d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111dd565b005b61056d611276565b005b6105db6004803603606081101561058557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061131b565b005b610609600480360360208110156105f357600080fd5b810190808035906020019092919050505061133b565b005b6106376004803603602081101561062157600080fd5b81019080803590602001909291905050506113ad565b6040518082815260200191505060405180910390f35b6106556113d0565b604051808215151515815260200191505060405180910390f35b61069b6004803603602081101561068557600080fd5b81019080803590602001909291905050506113e7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106e561141e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561072557808201518184015260208101905061070a565b50505050905090810190601f1680156107525780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107a26004803603602081101561077657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114c0565b6040518082815260200191505060405180910390f35b6107c0611595565b005b6107f8600480360360408110156107d857600080fd5b81019080803590602001909291908035906020019092919050505061163a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108866004803603604081101561085057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061166b565b604051808215151515815260200191505060405180910390f35b6108a861169c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108e85780820151818401526020810190506108cd565b50505050905090810190601f1680156109155780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61092b61173e565b6040518082815260200191505060405180910390f35b61098f6004803603604081101561095757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611745565b005b610a94600480360360808110156109a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610a0e57600080fd5b820183602082011115610a2057600080fd5b80359060200191846001830284011164010000000083111715610a4257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506118fd565b005b610ac260048036036020811015610aac57600080fd5b8101908080359060200190929190505050611975565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b02578082015181840152602081019050610ae7565b50505050905090810190601f168015610b2f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b6960048036036020811015610b5357600080fd5b8101908080359060200190929190505050611c5e565b6040518082815260200191505060405180910390f35b610c6260048036036060811015610b9557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610bdc57600080fd5b820183602082011115610bee57600080fd5b80359060200191846001830284011164010000000083111715610c1057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611c84565b005b610c6c611d38565b6040518082815260200191505060405180910390f35b610cce60048036036040811015610c9857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d71565b005b610cd8611dfa565b6040518082815260200191505060405180910390f35b610d5060048036036040811015610d0457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e33565b604051808215151515815260200191505060405180910390f35b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e6a5780601f10610e3f57610100808354040283529160200191610e6a565b820191906000526020600020905b815481529060010190602001808311610e4d57829003601f168201915b5050505050905090565b6000610e7f82611ec7565b610ed4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613a50602c913960400191505060405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f1a826113e7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613b006021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610fc0611ee4565b73ffffffffffffffffffffffffffffffffffffffff161480610fef5750610fee81610fe9611ee4565b611e33565b5b611044576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806139a36038913960400191505060405180910390fd5b61104e8383611eec565b505050565b600061105f6003611fa5565b905090565b61107561106f611ee4565b82611fba565b6110ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180613b216031913960400191505060405180910390fd5b6110d58383836120ae565b505050565b6000806000838152602001908152602001600020600201549050919050565b61111f6000808481526020019081526020016000206002015461111a611ee4565b61166b565b611174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613850602f913960400191505060405180910390fd5b61117e82826122f1565b5050565b60006111d582600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061238490919063ffffffff16565b905092915050565b6111e5611ee4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613b82602f913960400191505060405180910390fd5b611272828261239e565b5050565b6112bc60405180807f5041555345525f524f4c45000000000000000000000000000000000000000000815250600b01905060405180910390206112b7611ee4565b61166b565b611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180613939603a913960400191505060405180910390fd5b611319612431565b565b611336838383604051806020016040528060008152506118fd565b505050565b61134c611346611ee4565b82611fba565b6113a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180613b526030913960400191505060405180910390fd5b6113aa8161253a565b50565b6000806113c483600361267490919063ffffffff16565b50905080915050919050565b6000600b60009054906101000a900460ff16905090565b600061141782604051806060016040528060298152602001613a056029913960036126a39092919063ffffffff16565b9050919050565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114b65780601f1061148b576101008083540402835291602001916114b6565b820191906000526020600020905b81548152906001019060200180831161149957829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806139db602a913960400191505060405180910390fd5b61158e600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206126c2565b9050919050565b6115db60405180807f5041555345525f524f4c45000000000000000000000000000000000000000000815250600b01905060405180910390206115d6611ee4565b61166b565b611630576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806139016038913960400191505060405180910390fd5b6116386126d7565b565b6000611663826000808681526020019081526020016000206000016127e190919063ffffffff16565b905092915050565b6000611694826000808681526020019081526020016000206000016127fb90919063ffffffff16565b905092915050565b606060088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117345780601f1061170957610100808354040283529160200191611734565b820191906000526020600020905b81548152906001019060200180831161171757829003601f168201915b5050505050905090565b6000801b81565b61174d611ee4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b80600660006117fb611ee4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118a8611ee4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b61190e611908611ee4565b83611fba565b611963576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180613b216031913960400191505060405180910390fd5b61196f8484848461282b565b50505050565b606061198082611ec7565b6119d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613ad1602f913960400191505060405180910390fd5b6060600960008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a7e5780601f10611a5357610100808354040283529160200191611a7e565b820191906000526020600020905b815481529060010190602001808311611a6157829003601f168201915b505050505090506000600a8054600181600116156101000203166002900490501415611aad5780915050611c59565b600081511115611b8657600a816040516020018083805460018160011615610100020316600290048015611b185780601f10611af6576101008083540402835291820191611b18565b820191906000526020600020905b815481529060010190602001808311611b04575b505082805190602001908083835b60208310611b495780518252602082019150602081019050602083039250611b26565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050611c59565b600a611b918461289d565b6040516020018083805460018160011615610100020316600290048015611bef5780601f10611bcd576101008083540402835291820191611bef565b820191906000526020600020905b815481529060010190602001808311611bdb575b505082805190602001908083835b60208310611c205780518252602082019150602081019050602083039250611bfd565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150505b919050565b6000611c7d6000808481526020019081526020016000206000016129cd565b9050919050565b611cca60405180807f4d494e5445525f524f4c45000000000000000000000000000000000000000000815250600b0190506040518091039020611cc5611ee4565b61166b565b611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180613bb16037913960400191505060405180910390fd5b611d2983836129e2565b611d338282612bd6565b505050565b60405180807f4d494e5445525f524f4c45000000000000000000000000000000000000000000815250600b019050604051809103902081565b611d9760008084815260200190815260200160002060020154611d92611ee4565b61166b565b611dec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806139736030913960400191505060405180910390fd5b611df6828261239e565b5050565b60405180807f5041555345525f524f4c45000000000000000000000000000000000000000000815250600b019050604051809103902081565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000611edd826003612c6090919063ffffffff16565b9050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f5f836113e7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611fb382600001612c7a565b9050919050565b6000611fc582611ec7565b61201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806138d5602c913960400191505060405180910390fd5b6000612025836113e7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061209457508373ffffffffffffffffffffffffffffffffffffffff1661207c84610e74565b73ffffffffffffffffffffffffffffffffffffffff16145b806120a557506120a48185611e33565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120ce826113e7565b73ffffffffffffffffffffffffffffffffffffffff161461213a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613aa86029913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806138b16024913960400191505060405180910390fd5b6121cb838383612c8b565b6121d6600082611eec565b61222781600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c9b90919063ffffffff16565b5061227981600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612cb590919063ffffffff16565b5061229081836003612ccf9092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61231881600080858152602001908152602001600020600001612d0490919063ffffffff16565b1561238057612325611ee4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006123938360000183612d34565b60001c905092915050565b6123c581600080858152602001908152602001600020600001612db790919063ffffffff16565b1561242d576123d2611ee4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600b60009054906101000a900460ff166124b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6124f7611ee4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000612545826113e7565b905061255381600084612c8b565b61255e600083611eec565b600060096000848152602001908152602001600020805460018160011615610100020316600290049050146125ad576009600083815260200190815260200160002060006125ac9190613715565b5b6125fe82600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612c9b90919063ffffffff16565b50612613826003612de790919063ffffffff16565b5081600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000806000806126878660000186612e01565b915091508160001c8160001c8090509350935050509250929050565b60006126b6846000018460001b84612e9a565b60001c90509392505050565b60006126d082600001612f90565b9050919050565b600b60009054906101000a900460ff161561275a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861279e611ee4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006127f08360000183612d34565b60001c905092915050565b6000612823836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612fa1565b905092915050565b6128368484846120ae565b61284284848484612fc4565b612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061387f6032913960400191505060405180910390fd5b50505050565b606060008214156128e5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129c8565b600082905060005b6000821461290f578080600101915050600a828161290757fe5b0491506128ed565b6060816040519080825280601f01601f1916602001820160405280156129445781602001600182028036833780820191505090505b50905060006001830390508593505b600084146129c057600a848161296557fe5b0660300160f81b8282806001900393508151811061297f57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84816129b857fe5b049350612953565b819450505050505b919050565b60006129db82600001612f90565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b612a8e81611ec7565b15612b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b612b0d60008383612c8b565b612b5e81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612cb590919063ffffffff16565b50612b7581836003612ccf9092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612bdf82611ec7565b612c34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613a7c602c913960400191505060405180910390fd5b80600960008481526020019081526020016000209080519060200190612c5b92919061375d565b505050565b6000612c72836000018360001b6132e7565b905092915050565b600081600001805490509050919050565b612c9683838361330a565b505050565b6000612cad836000018360001b613378565b905092915050565b6000612cc7836000018360001b613460565b905092915050565b6000612cfb846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b6134d0565b90509392505050565b6000612d2c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613460565b905092915050565b600081836000018054905011612d95576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806138036022913960400191505060405180910390fd5b826000018281548110612da457fe5b9060005260206000200154905092915050565b6000612ddf836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613378565b905092915050565b6000612df9836000018360001b6135ac565b905092915050565b60008082846000018054905011612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613a2e6022913960400191505060405180910390fd5b6000846000018481548110612e7457fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008084600101600085815260200190815260200160002054905060008114158390612f61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f26578082015181840152602081019050612f0b565b50505050905090810190601f168015612f535780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50846000016001820381548110612f7457fe5b9060005260206000209060020201600101549150509392505050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b6000612fe58473ffffffffffffffffffffffffffffffffffffffff166136c5565b612ff257600190506132df565b600060608573ffffffffffffffffffffffffffffffffffffffff1663150b7a0260e01b61301d611ee4565b898888604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156130cd5780820151818401526020810190506130b2565b50505050905090810190601f1680156130fa5780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310613192578051825260208201915060208101905060208303925061316f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146131f4576040519150601f19603f3d011682016040523d82523d6000602084013e6131f9565b606091505b509150915081613267576000815111156132165780518082602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061387f6032913960400191505060405180910390fd5b600081806020019051602081101561327e57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161493505050505b949350505050565b600080836001016000848152602001908152602001600020541415905092915050565b613315838383613710565b61331d6113d0565b15613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613825602b913960400191505060405180910390fd5b505050565b6000808360010160008481526020019081526020016000205490506000811461345457600060018203905060006001866000018054905003905060008660000182815481106133c357fe5b90600052602060002001549050808760000184815481106133e057fe5b906000526020600020018190555060018301876001016000838152602001908152602001600020819055508660000180548061341857fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061345a565b60009150505b92915050565b600061346c8383612fa1565b6134c55782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506134ca565b600090505b92915050565b6000808460010160008581526020019081526020016000205490506000811415613577578460000160405180604001604052808681526020018581525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010155505084600001805490508560010160008681526020019081526020016000208190555060019150506135a5565b8285600001600183038154811061358a57fe5b90600052602060002090600202016001018190555060009150505b9392505050565b600080836001016000848152602001908152602001600020549050600081146136b957600060018203905060006001866000018054905003905060008660000182815481106135f757fe5b906000526020600020906002020190508087600001848154811061361757fe5b906000526020600020906002020160008201548160000155600182015481600101559050506001830187600101600083600001548152602001908152602001600020819055508660000180548061366a57fe5b60019003818190600052602060002090600202016000808201600090556001820160009055505090558660010160008781526020019081526020016000206000905560019450505050506136bf565b60009150505b92915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561370757506000801b8214155b92505050919050565b505050565b50805460018160011615610100020316600290046000825580601f1061373b575061375a565b601f01602090049060005260206000209081019061375991906137dd565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061379e57805160ff19168380011785556137cc565b828001600101855582156137cc579182015b828111156137cb5782518255916020019190600101906137b0565b5b5090506137d991906137dd565b5090565b6137ff91905b808211156137fb5760008160009055506001016137e3565b5090565b9056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732315061757361626c653a20746f6b656e207472616e73666572207768696c6520706175736564416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e744552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d696e7465724275726e65725061757365723a206d75737420686176652070617573657220726f6c6520746f2070617573654552433732314d696e7465724275726e65725061757365723a206d75737420686176652070617573657220726f6c6520746f20756e7061757365416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b654552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c664552433732314d696e7465724275726e65725061757365723a206d7573742068617665206d696e74657220726f6c6520746f206d696e74a264697066735822122078406248552ccd48b005d01a9b4d03b4aa158dab73aca61a7432b3fea609fc5364736f6c63430006040033"

// DeployERC721MinterBurnerPauser deploys a new Ethereum contract, binding an instance of ERC721MinterBurnerPauser to it.
func DeployERC721MinterBurnerPauser(auth *bind.TransactOpts, backend bind.ContractBackend, name string, symbol string, baseURI string) (common.Address, *types.Transaction, *ERC721MinterBurnerPauser, error) {
	parsed, err := abi.JSON(strings.NewReader(ERC721MinterBurnerPauserABI))
	if err != nil {
		return common.Address{}, nil, nil, err
	}

	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(ERC721MinterBurnerPauserBin), backend, name, symbol, baseURI)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &ERC721MinterBurnerPauser{ERC721MinterBurnerPauserCaller: ERC721MinterBurnerPauserCaller{contract: contract}, ERC721MinterBurnerPauserTransactor: ERC721MinterBurnerPauserTransactor{contract: contract}, ERC721MinterBurnerPauserFilterer: ERC721MinterBurnerPauserFilterer{contract: contract}}, nil
}

// ERC721MinterBurnerPauser is an auto generated Go binding around an Ethereum contract.
type ERC721MinterBurnerPauser struct {
	ERC721MinterBurnerPauserCaller     // Read-only binding to the contract
	ERC721MinterBurnerPauserTransactor // Write-only binding to the contract
	ERC721MinterBurnerPauserFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewERC721MinterBurnerPauser creates a new instance of ERC721MinterBurnerPauser, bound to a specific deployed contract.
func NewERC721MinterBurnerPauser(address common.Address, backend bind.ContractBackend) (*ERC721MinterBurnerPauser, error) {
	contract, err := bindERC721MinterBurnerPauser(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &ERC721MinterBurnerPauser{ERC721MinterBurnerPauserCaller: ERC721MinterBurnerPauserCaller{contract: contract}, ERC721MinterBurnerPauserTransactor: ERC721MinterBurnerPauserTransactor{contract: contract}, ERC721MinterBurnerPauserFilterer: ERC721MinterBurnerPauserFilterer{contract: contract}}, nil
}

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

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

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

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

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

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

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

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

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

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

// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf.
//
// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE")

	if err != nil {
		return *new([32]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)

	return out0, err

}

// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf.
//
// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) DEFAULTADMINROLE() ([32]byte, error) {
	return _ERC721MinterBurnerPauser.Contract.DEFAULTADMINROLE(&_ERC721MinterBurnerPauser.CallOpts)
}

// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf.
//
// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) DEFAULTADMINROLE() ([32]byte, error) {
	return _ERC721MinterBurnerPauser.Contract.DEFAULTADMINROLE(&_ERC721MinterBurnerPauser.CallOpts)
}

// MINTERROLE is a free data retrieval call binding the contract method 0xd5391393.
//
// Solidity: function MINTER_ROLE() view returns(bytes32)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) MINTERROLE(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "MINTER_ROLE")

	if err != nil {
		return *new([32]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)

	return out0, err

}

// MINTERROLE is a free data retrieval call binding the contract method 0xd5391393.
//
// Solidity: function MINTER_ROLE() view returns(bytes32)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) MINTERROLE() ([32]byte, error) {
	return _ERC721MinterBurnerPauser.Contract.MINTERROLE(&_ERC721MinterBurnerPauser.CallOpts)
}

// MINTERROLE is a free data retrieval call binding the contract method 0xd5391393.
//
// Solidity: function MINTER_ROLE() view returns(bytes32)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) MINTERROLE() ([32]byte, error) {
	return _ERC721MinterBurnerPauser.Contract.MINTERROLE(&_ERC721MinterBurnerPauser.CallOpts)
}

// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9.
//
// Solidity: function PAUSER_ROLE() view returns(bytes32)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) PAUSERROLE(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "PAUSER_ROLE")

	if err != nil {
		return *new([32]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)

	return out0, err

}

// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9.
//
// Solidity: function PAUSER_ROLE() view returns(bytes32)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) PAUSERROLE() ([32]byte, error) {
	return _ERC721MinterBurnerPauser.Contract.PAUSERROLE(&_ERC721MinterBurnerPauser.CallOpts)
}

// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9.
//
// Solidity: function PAUSER_ROLE() view returns(bytes32)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) PAUSERROLE() ([32]byte, error) {
	return _ERC721MinterBurnerPauser.Contract.PAUSERROLE(&_ERC721MinterBurnerPauser.CallOpts)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address owner) view returns(uint256)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "balanceOf", owner)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address owner) view returns(uint256)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) BalanceOf(owner common.Address) (*big.Int, error) {
	return _ERC721MinterBurnerPauser.Contract.BalanceOf(&_ERC721MinterBurnerPauser.CallOpts, owner)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address owner) view returns(uint256)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
	return _ERC721MinterBurnerPauser.Contract.BalanceOf(&_ERC721MinterBurnerPauser.CallOpts, owner)
}

// BaseURI is a free data retrieval call binding the contract method 0x6c0360eb.
//
// Solidity: function baseURI() view returns(string)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) BaseURI(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "baseURI")

	if err != nil {
		return *new(string), err
	}

	out0 := *abi.ConvertType(out[0], new(string)).(*string)

	return out0, err

}

// BaseURI is a free data retrieval call binding the contract method 0x6c0360eb.
//
// Solidity: function baseURI() view returns(string)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) BaseURI() (string, error) {
	return _ERC721MinterBurnerPauser.Contract.BaseURI(&_ERC721MinterBurnerPauser.CallOpts)
}

// BaseURI is a free data retrieval call binding the contract method 0x6c0360eb.
//
// Solidity: function baseURI() view returns(string)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) BaseURI() (string, error) {
	return _ERC721MinterBurnerPauser.Contract.BaseURI(&_ERC721MinterBurnerPauser.CallOpts)
}

// GetApproved is a free data retrieval call binding the contract method 0x081812fc.
//
// Solidity: function getApproved(uint256 tokenId) view returns(address)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "getApproved", tokenId)

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetApproved is a free data retrieval call binding the contract method 0x081812fc.
//
// Solidity: function getApproved(uint256 tokenId) view returns(address)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) GetApproved(tokenId *big.Int) (common.Address, error) {
	return _ERC721MinterBurnerPauser.Contract.GetApproved(&_ERC721MinterBurnerPauser.CallOpts, tokenId)
}

// GetApproved is a free data retrieval call binding the contract method 0x081812fc.
//
// Solidity: function getApproved(uint256 tokenId) view returns(address)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
	return _ERC721MinterBurnerPauser.Contract.GetApproved(&_ERC721MinterBurnerPauser.CallOpts, tokenId)
}

// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3.
//
// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "getRoleAdmin", role)

	if err != nil {
		return *new([32]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)

	return out0, err

}

// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3.
//
// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) GetRoleAdmin(role [32]byte) ([32]byte, error) {
	return _ERC721MinterBurnerPauser.Contract.GetRoleAdmin(&_ERC721MinterBurnerPauser.CallOpts, role)
}

// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3.
//
// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) {
	return _ERC721MinterBurnerPauser.Contract.GetRoleAdmin(&_ERC721MinterBurnerPauser.CallOpts, role)
}

// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c.
//
// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) GetRoleMember(opts *bind.CallOpts, role [32]byte, index *big.Int) (common.Address, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "getRoleMember", role, index)

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c.
//
// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) GetRoleMember(role [32]byte, index *big.Int) (common.Address, error) {
	return _ERC721MinterBurnerPauser.Contract.GetRoleMember(&_ERC721MinterBurnerPauser.CallOpts, role, index)
}

// GetRoleMember is a free data retrieval call binding the contract method 0x9010d07c.
//
// Solidity: function getRoleMember(bytes32 role, uint256 index) view returns(address)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) GetRoleMember(role [32]byte, index *big.Int) (common.Address, error) {
	return _ERC721MinterBurnerPauser.Contract.GetRoleMember(&_ERC721MinterBurnerPauser.CallOpts, role, index)
}

// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873.
//
// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) GetRoleMemberCount(opts *bind.CallOpts, role [32]byte) (*big.Int, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "getRoleMemberCount", role)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873.
//
// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) GetRoleMemberCount(role [32]byte) (*big.Int, error) {
	return _ERC721MinterBurnerPauser.Contract.GetRoleMemberCount(&_ERC721MinterBurnerPauser.CallOpts, role)
}

// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873.
//
// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) GetRoleMemberCount(role [32]byte) (*big.Int, error) {
	return _ERC721MinterBurnerPauser.Contract.GetRoleMemberCount(&_ERC721MinterBurnerPauser.CallOpts, role)
}

// HasRole is a free data retrieval call binding the contract method 0x91d14854.
//
// Solidity: function hasRole(bytes32 role, address account) view returns(bool)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "hasRole", role, account)

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// HasRole is a free data retrieval call binding the contract method 0x91d14854.
//
// Solidity: function hasRole(bytes32 role, address account) view returns(bool)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) HasRole(role [32]byte, account common.Address) (bool, error) {
	return _ERC721MinterBurnerPauser.Contract.HasRole(&_ERC721MinterBurnerPauser.CallOpts, role, account)
}

// HasRole is a free data retrieval call binding the contract method 0x91d14854.
//
// Solidity: function hasRole(bytes32 role, address account) view returns(bool)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) {
	return _ERC721MinterBurnerPauser.Contract.HasRole(&_ERC721MinterBurnerPauser.CallOpts, role, account)
}

// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
//
// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "isApprovedForAll", owner, operator)

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
//
// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
	return _ERC721MinterBurnerPauser.Contract.IsApprovedForAll(&_ERC721MinterBurnerPauser.CallOpts, owner, operator)
}

// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
//
// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
	return _ERC721MinterBurnerPauser.Contract.IsApprovedForAll(&_ERC721MinterBurnerPauser.CallOpts, owner, operator)
}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) Name(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "name")

	if err != nil {
		return *new(string), err
	}

	out0 := *abi.ConvertType(out[0], new(string)).(*string)

	return out0, err

}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) Name() (string, error) {
	return _ERC721MinterBurnerPauser.Contract.Name(&_ERC721MinterBurnerPauser.CallOpts)
}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) Name() (string, error) {
	return _ERC721MinterBurnerPauser.Contract.Name(&_ERC721MinterBurnerPauser.CallOpts)
}

// OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
//
// Solidity: function ownerOf(uint256 tokenId) view returns(address)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "ownerOf", tokenId)

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
//
// Solidity: function ownerOf(uint256 tokenId) view returns(address)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
	return _ERC721MinterBurnerPauser.Contract.OwnerOf(&_ERC721MinterBurnerPauser.CallOpts, tokenId)
}

// OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
//
// Solidity: function ownerOf(uint256 tokenId) view returns(address)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
	return _ERC721MinterBurnerPauser.Contract.OwnerOf(&_ERC721MinterBurnerPauser.CallOpts, tokenId)
}

// Paused is a free data retrieval call binding the contract method 0x5c975abb.
//
// Solidity: function paused() view returns(bool)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) Paused(opts *bind.CallOpts) (bool, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "paused")

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// Paused is a free data retrieval call binding the contract method 0x5c975abb.
//
// Solidity: function paused() view returns(bool)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) Paused() (bool, error) {
	return _ERC721MinterBurnerPauser.Contract.Paused(&_ERC721MinterBurnerPauser.CallOpts)
}

// Paused is a free data retrieval call binding the contract method 0x5c975abb.
//
// Solidity: function paused() view returns(bool)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) Paused() (bool, error) {
	return _ERC721MinterBurnerPauser.Contract.Paused(&_ERC721MinterBurnerPauser.CallOpts)
}

// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
//
// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "supportsInterface", interfaceId)

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
//
// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
	return _ERC721MinterBurnerPauser.Contract.SupportsInterface(&_ERC721MinterBurnerPauser.CallOpts, interfaceId)
}

// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
//
// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
	return _ERC721MinterBurnerPauser.Contract.SupportsInterface(&_ERC721MinterBurnerPauser.CallOpts, interfaceId)
}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) Symbol(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "symbol")

	if err != nil {
		return *new(string), err
	}

	out0 := *abi.ConvertType(out[0], new(string)).(*string)

	return out0, err

}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) Symbol() (string, error) {
	return _ERC721MinterBurnerPauser.Contract.Symbol(&_ERC721MinterBurnerPauser.CallOpts)
}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) Symbol() (string, error) {
	return _ERC721MinterBurnerPauser.Contract.Symbol(&_ERC721MinterBurnerPauser.CallOpts)
}

// TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
//
// Solidity: function tokenByIndex(uint256 index) view returns(uint256)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) TokenByIndex(opts *bind.CallOpts, index *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "tokenByIndex", index)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
//
// Solidity: function tokenByIndex(uint256 index) view returns(uint256)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) TokenByIndex(index *big.Int) (*big.Int, error) {
	return _ERC721MinterBurnerPauser.Contract.TokenByIndex(&_ERC721MinterBurnerPauser.CallOpts, index)
}

// TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
//
// Solidity: function tokenByIndex(uint256 index) view returns(uint256)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) TokenByIndex(index *big.Int) (*big.Int, error) {
	return _ERC721MinterBurnerPauser.Contract.TokenByIndex(&_ERC721MinterBurnerPauser.CallOpts, index)
}

// TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
//
// Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) TokenOfOwnerByIndex(opts *bind.CallOpts, owner common.Address, index *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "tokenOfOwnerByIndex", owner, index)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
//
// Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
	return _ERC721MinterBurnerPauser.Contract.TokenOfOwnerByIndex(&_ERC721MinterBurnerPauser.CallOpts, owner, index)
}

// TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
//
// Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
	return _ERC721MinterBurnerPauser.Contract.TokenOfOwnerByIndex(&_ERC721MinterBurnerPauser.CallOpts, owner, index)
}

// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
//
// Solidity: function tokenURI(uint256 tokenId) view returns(string)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "tokenURI", tokenId)

	if err != nil {
		return *new(string), err
	}

	out0 := *abi.ConvertType(out[0], new(string)).(*string)

	return out0, err

}

// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
//
// Solidity: function tokenURI(uint256 tokenId) view returns(string)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) TokenURI(tokenId *big.Int) (string, error) {
	return _ERC721MinterBurnerPauser.Contract.TokenURI(&_ERC721MinterBurnerPauser.CallOpts, tokenId)
}

// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
//
// Solidity: function tokenURI(uint256 tokenId) view returns(string)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) TokenURI(tokenId *big.Int) (string, error) {
	return _ERC721MinterBurnerPauser.Contract.TokenURI(&_ERC721MinterBurnerPauser.CallOpts, tokenId)
}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _ERC721MinterBurnerPauser.contract.Call(opts, &out, "totalSupply")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) TotalSupply() (*big.Int, error) {
	return _ERC721MinterBurnerPauser.Contract.TotalSupply(&_ERC721MinterBurnerPauser.CallOpts)
}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserCallerSession) TotalSupply() (*big.Int, error) {
	return _ERC721MinterBurnerPauser.Contract.TotalSupply(&_ERC721MinterBurnerPauser.CallOpts)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address to, uint256 tokenId) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.contract.Transact(opts, "approve", to, tokenId)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address to, uint256 tokenId) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.Approve(&_ERC721MinterBurnerPauser.TransactOpts, to, tokenId)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address to, uint256 tokenId) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.Approve(&_ERC721MinterBurnerPauser.TransactOpts, to, tokenId)
}

// Burn is a paid mutator transaction binding the contract method 0x42966c68.
//
// Solidity: function burn(uint256 tokenId) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactor) Burn(opts *bind.TransactOpts, tokenId *big.Int) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.contract.Transact(opts, "burn", tokenId)
}

// Burn is a paid mutator transaction binding the contract method 0x42966c68.
//
// Solidity: function burn(uint256 tokenId) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) Burn(tokenId *big.Int) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.Burn(&_ERC721MinterBurnerPauser.TransactOpts, tokenId)
}

// Burn is a paid mutator transaction binding the contract method 0x42966c68.
//
// Solidity: function burn(uint256 tokenId) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactorSession) Burn(tokenId *big.Int) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.Burn(&_ERC721MinterBurnerPauser.TransactOpts, tokenId)
}

// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d.
//
// Solidity: function grantRole(bytes32 role, address account) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.contract.Transact(opts, "grantRole", role, account)
}

// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d.
//
// Solidity: function grantRole(bytes32 role, address account) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.GrantRole(&_ERC721MinterBurnerPauser.TransactOpts, role, account)
}

// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d.
//
// Solidity: function grantRole(bytes32 role, address account) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.GrantRole(&_ERC721MinterBurnerPauser.TransactOpts, role, account)
}

// Mint is a paid mutator transaction binding the contract method 0xd3fc9864.
//
// Solidity: function mint(address to, uint256 tokenId, string _data) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactor) Mint(opts *bind.TransactOpts, to common.Address, tokenId *big.Int, _data string) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.contract.Transact(opts, "mint", to, tokenId, _data)
}

// Mint is a paid mutator transaction binding the contract method 0xd3fc9864.
//
// Solidity: function mint(address to, uint256 tokenId, string _data) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) Mint(to common.Address, tokenId *big.Int, _data string) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.Mint(&_ERC721MinterBurnerPauser.TransactOpts, to, tokenId, _data)
}

// Mint is a paid mutator transaction binding the contract method 0xd3fc9864.
//
// Solidity: function mint(address to, uint256 tokenId, string _data) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactorSession) Mint(to common.Address, tokenId *big.Int, _data string) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.Mint(&_ERC721MinterBurnerPauser.TransactOpts, to, tokenId, _data)
}

// Pause is a paid mutator transaction binding the contract method 0x8456cb59.
//
// Solidity: function pause() returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactor) Pause(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.contract.Transact(opts, "pause")
}

// Pause is a paid mutator transaction binding the contract method 0x8456cb59.
//
// Solidity: function pause() returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) Pause() (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.Pause(&_ERC721MinterBurnerPauser.TransactOpts)
}

// Pause is a paid mutator transaction binding the contract method 0x8456cb59.
//
// Solidity: function pause() returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactorSession) Pause() (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.Pause(&_ERC721MinterBurnerPauser.TransactOpts)
}

// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe.
//
// Solidity: function renounceRole(bytes32 role, address account) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.contract.Transact(opts, "renounceRole", role, account)
}

// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe.
//
// Solidity: function renounceRole(bytes32 role, address account) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.RenounceRole(&_ERC721MinterBurnerPauser.TransactOpts, role, account)
}

// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe.
//
// Solidity: function renounceRole(bytes32 role, address account) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.RenounceRole(&_ERC721MinterBurnerPauser.TransactOpts, role, account)
}

// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f.
//
// Solidity: function revokeRole(bytes32 role, address account) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.contract.Transact(opts, "revokeRole", role, account)
}

// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f.
//
// Solidity: function revokeRole(bytes32 role, address account) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.RevokeRole(&_ERC721MinterBurnerPauser.TransactOpts, role, account)
}

// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f.
//
// Solidity: function revokeRole(bytes32 role, address account) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.RevokeRole(&_ERC721MinterBurnerPauser.TransactOpts, role, account)
}

// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
}

// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.SafeTransferFrom(&_ERC721MinterBurnerPauser.TransactOpts, from, to, tokenId)
}

// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.SafeTransferFrom(&_ERC721MinterBurnerPauser.TransactOpts, from, to, tokenId)
}

// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, _data)
}

// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.SafeTransferFrom0(&_ERC721MinterBurnerPauser.TransactOpts, from, to, tokenId, _data)
}

// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.SafeTransferFrom0(&_ERC721MinterBurnerPauser.TransactOpts, from, to, tokenId, _data)
}

// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
//
// Solidity: function setApprovalForAll(address operator, bool approved) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, approved bool) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.contract.Transact(opts, "setApprovalForAll", operator, approved)
}

// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
//
// Solidity: function setApprovalForAll(address operator, bool approved) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.SetApprovalForAll(&_ERC721MinterBurnerPauser.TransactOpts, operator, approved)
}

// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
//
// Solidity: function setApprovalForAll(address operator, bool approved) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactorSession) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.SetApprovalForAll(&_ERC721MinterBurnerPauser.TransactOpts, operator, approved)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.contract.Transact(opts, "transferFrom", from, to, tokenId)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.TransferFrom(&_ERC721MinterBurnerPauser.TransactOpts, from, to, tokenId)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.TransferFrom(&_ERC721MinterBurnerPauser.TransactOpts, from, to, tokenId)
}

// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a.
//
// Solidity: function unpause() returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactor) Unpause(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.contract.Transact(opts, "unpause")
}

// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a.
//
// Solidity: function unpause() returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserSession) Unpause() (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.Unpause(&_ERC721MinterBurnerPauser.TransactOpts)
}

// Unpause is a paid mutator transaction binding the contract method 0x3f4ba83a.
//
// Solidity: function unpause() returns()
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserTransactorSession) Unpause() (*types.Transaction, error) {
	return _ERC721MinterBurnerPauser.Contract.Unpause(&_ERC721MinterBurnerPauser.TransactOpts)
}

// ERC721MinterBurnerPauserApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ERC721MinterBurnerPauser contract.
type ERC721MinterBurnerPauserApprovalIterator struct {
	Event *ERC721MinterBurnerPauserApproval // Event containing the contract specifics and raw log

	contract *bind.BoundContract // Generic contract to use for unpacking event data
	event    string              // Event name to use for unpacking event data

	logs chan types.Log        // Log channel receiving the found contract events
	sub  ethereum.Subscription // Subscription for errors, completion and termination
	done bool                  // Whether the subscription completed delivering logs
	fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *ERC721MinterBurnerPauserApprovalIterator) Next() bool {
	// If the iterator failed, stop iterating
	if it.fail != nil {
		return false
	}
	// If the iterator completed, deliver directly whatever's available
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(ERC721MinterBurnerPauserApproval)
			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
				it.fail = err
				return false
			}
			it.Event.Raw = log
			return true

		default:
			return false
		}
	}
	// Iterator still in progress, wait for either a data or an error event
	select {
	case log := <-it.logs:
		it.Event = new(ERC721MinterBurnerPauserApproval)
		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
			it.fail = err
			return false
		}
		it.Event.Raw = log
		return true

	case err := <-it.sub.Err():
		it.done = true
		it.fail = err
		return it.Next()
	}
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *ERC721MinterBurnerPauserApprovalIterator) Error() error {
	return it.fail
}

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

// ERC721MinterBurnerPauserApproval represents a Approval event raised by the ERC721MinterBurnerPauser contract.
type ERC721MinterBurnerPauserApproval struct {
	Owner    common.Address
	Approved common.Address
	TokenId  *big.Int
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*ERC721MinterBurnerPauserApprovalIterator, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var approvedRule []interface{}
	for _, approvedItem := range approved {
		approvedRule = append(approvedRule, approvedItem)
	}
	var tokenIdRule []interface{}
	for _, tokenIdItem := range tokenId {
		tokenIdRule = append(tokenIdRule, tokenIdItem)
	}

	logs, sub, err := _ERC721MinterBurnerPauser.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
	if err != nil {
		return nil, err
	}
	return &ERC721MinterBurnerPauserApprovalIterator{contract: _ERC721MinterBurnerPauser.contract, event: "Approval", logs: logs, sub: sub}, nil
}

// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ERC721MinterBurnerPauserApproval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var approvedRule []interface{}
	for _, approvedItem := range approved {
		approvedRule = append(approvedRule, approvedItem)
	}
	var tokenIdRule []interface{}
	for _, tokenIdItem := range tokenId {
		tokenIdRule = append(tokenIdRule, tokenIdItem)
	}

	logs, sub, err := _ERC721MinterBurnerPauser.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				// New log arrived, parse the event and forward to the user
				event := new(ERC721MinterBurnerPauserApproval)
				if err := _ERC721MinterBurnerPauser.contract.UnpackLog(event, "Approval", log); err != nil {
					return err
				}
				event.Raw = log

				select {
				case sink <- event:
				case err := <-sub.Err():
					return err
				case <-quit:
					return nil
				}
			case err := <-sub.Err():
				return err
			case <-quit:
				return nil
			}
		}
	}), nil
}

// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) ParseApproval(log types.Log) (*ERC721MinterBurnerPauserApproval, error) {
	event := new(ERC721MinterBurnerPauserApproval)
	if err := _ERC721MinterBurnerPauser.contract.UnpackLog(event, "Approval", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ERC721MinterBurnerPauserApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the ERC721MinterBurnerPauser contract.
type ERC721MinterBurnerPauserApprovalForAllIterator struct {
	Event *ERC721MinterBurnerPauserApprovalForAll // Event containing the contract specifics and raw log

	contract *bind.BoundContract // Generic contract to use for unpacking event data
	event    string              // Event name to use for unpacking event data

	logs chan types.Log        // Log channel receiving the found contract events
	sub  ethereum.Subscription // Subscription for errors, completion and termination
	done bool                  // Whether the subscription completed delivering logs
	fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *ERC721MinterBurnerPauserApprovalForAllIterator) Next() bool {
	// If the iterator failed, stop iterating
	if it.fail != nil {
		return false
	}
	// If the iterator completed, deliver directly whatever's available
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(ERC721MinterBurnerPauserApprovalForAll)
			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
				it.fail = err
				return false
			}
			it.Event.Raw = log
			return true

		default:
			return false
		}
	}
	// Iterator still in progress, wait for either a data or an error event
	select {
	case log := <-it.logs:
		it.Event = new(ERC721MinterBurnerPauserApprovalForAll)
		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
			it.fail = err
			return false
		}
		it.Event.Raw = log
		return true

	case err := <-it.sub.Err():
		it.done = true
		it.fail = err
		return it.Next()
	}
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *ERC721MinterBurnerPauserApprovalForAllIterator) Error() error {
	return it.fail
}

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

// ERC721MinterBurnerPauserApprovalForAll represents a ApprovalForAll event raised by the ERC721MinterBurnerPauser contract.
type ERC721MinterBurnerPauserApprovalForAll struct {
	Owner    common.Address
	Operator common.Address
	Approved bool
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
//
// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*ERC721MinterBurnerPauserApprovalForAllIterator, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var operatorRule []interface{}
	for _, operatorItem := range operator {
		operatorRule = append(operatorRule, operatorItem)
	}

	logs, sub, err := _ERC721MinterBurnerPauser.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
	if err != nil {
		return nil, err
	}
	return &ERC721MinterBurnerPauserApprovalForAllIterator{contract: _ERC721MinterBurnerPauser.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
}

// WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
//
// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *ERC721MinterBurnerPauserApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {

	var ownerRule []interface{}
	for _, ownerItem := range owner {
		ownerRule = append(ownerRule, ownerItem)
	}
	var operatorRule []interface{}
	for _, operatorItem := range operator {
		operatorRule = append(operatorRule, operatorItem)
	}

	logs, sub, err := _ERC721MinterBurnerPauser.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				// New log arrived, parse the event and forward to the user
				event := new(ERC721MinterBurnerPauserApprovalForAll)
				if err := _ERC721MinterBurnerPauser.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
					return err
				}
				event.Raw = log

				select {
				case sink <- event:
				case err := <-sub.Err():
					return err
				case <-quit:
					return nil
				}
			case err := <-sub.Err():
				return err
			case <-quit:
				return nil
			}
		}
	}), nil
}

// ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
//
// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) ParseApprovalForAll(log types.Log) (*ERC721MinterBurnerPauserApprovalForAll, error) {
	event := new(ERC721MinterBurnerPauserApprovalForAll)
	if err := _ERC721MinterBurnerPauser.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ERC721MinterBurnerPauserPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ERC721MinterBurnerPauser contract.
type ERC721MinterBurnerPauserPausedIterator struct {
	Event *ERC721MinterBurnerPauserPaused // Event containing the contract specifics and raw log

	contract *bind.BoundContract // Generic contract to use for unpacking event data
	event    string              // Event name to use for unpacking event data

	logs chan types.Log        // Log channel receiving the found contract events
	sub  ethereum.Subscription // Subscription for errors, completion and termination
	done bool                  // Whether the subscription completed delivering logs
	fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *ERC721MinterBurnerPauserPausedIterator) Next() bool {
	// If the iterator failed, stop iterating
	if it.fail != nil {
		return false
	}
	// If the iterator completed, deliver directly whatever's available
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(ERC721MinterBurnerPauserPaused)
			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
				it.fail = err
				return false
			}
			it.Event.Raw = log
			return true

		default:
			return false
		}
	}
	// Iterator still in progress, wait for either a data or an error event
	select {
	case log := <-it.logs:
		it.Event = new(ERC721MinterBurnerPauserPaused)
		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
			it.fail = err
			return false
		}
		it.Event.Raw = log
		return true

	case err := <-it.sub.Err():
		it.done = true
		it.fail = err
		return it.Next()
	}
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *ERC721MinterBurnerPauserPausedIterator) Error() error {
	return it.fail
}

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

// ERC721MinterBurnerPauserPaused represents a Paused event raised by the ERC721MinterBurnerPauser contract.
type ERC721MinterBurnerPauserPaused struct {
	Account common.Address
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterPaused is a free log retrieval operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258.
//
// Solidity: event Paused(address account)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) FilterPaused(opts *bind.FilterOpts) (*ERC721MinterBurnerPauserPausedIterator, error) {

	logs, sub, err := _ERC721MinterBurnerPauser.contract.FilterLogs(opts, "Paused")
	if err != nil {
		return nil, err
	}
	return &ERC721MinterBurnerPauserPausedIterator{contract: _ERC721MinterBurnerPauser.contract, event: "Paused", logs: logs, sub: sub}, nil
}

// WatchPaused is a free log subscription operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258.
//
// Solidity: event Paused(address account)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ERC721MinterBurnerPauserPaused) (event.Subscription, error) {

	logs, sub, err := _ERC721MinterBurnerPauser.contract.WatchLogs(opts, "Paused")
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				// New log arrived, parse the event and forward to the user
				event := new(ERC721MinterBurnerPauserPaused)
				if err := _ERC721MinterBurnerPauser.contract.UnpackLog(event, "Paused", log); err != nil {
					return err
				}
				event.Raw = log

				select {
				case sink <- event:
				case err := <-sub.Err():
					return err
				case <-quit:
					return nil
				}
			case err := <-sub.Err():
				return err
			case <-quit:
				return nil
			}
		}
	}), nil
}

// ParsePaused is a log parse operation binding the contract event 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258.
//
// Solidity: event Paused(address account)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) ParsePaused(log types.Log) (*ERC721MinterBurnerPauserPaused, error) {
	event := new(ERC721MinterBurnerPauserPaused)
	if err := _ERC721MinterBurnerPauser.contract.UnpackLog(event, "Paused", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ERC721MinterBurnerPauserRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the ERC721MinterBurnerPauser contract.
type ERC721MinterBurnerPauserRoleGrantedIterator struct {
	Event *ERC721MinterBurnerPauserRoleGranted // Event containing the contract specifics and raw log

	contract *bind.BoundContract // Generic contract to use for unpacking event data
	event    string              // Event name to use for unpacking event data

	logs chan types.Log        // Log channel receiving the found contract events
	sub  ethereum.Subscription // Subscription for errors, completion and termination
	done bool                  // Whether the subscription completed delivering logs
	fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *ERC721MinterBurnerPauserRoleGrantedIterator) Next() bool {
	// If the iterator failed, stop iterating
	if it.fail != nil {
		return false
	}
	// If the iterator completed, deliver directly whatever's available
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(ERC721MinterBurnerPauserRoleGranted)
			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
				it.fail = err
				return false
			}
			it.Event.Raw = log
			return true

		default:
			return false
		}
	}
	// Iterator still in progress, wait for either a data or an error event
	select {
	case log := <-it.logs:
		it.Event = new(ERC721MinterBurnerPauserRoleGranted)
		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
			it.fail = err
			return false
		}
		it.Event.Raw = log
		return true

	case err := <-it.sub.Err():
		it.done = true
		it.fail = err
		return it.Next()
	}
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *ERC721MinterBurnerPauserRoleGrantedIterator) Error() error {
	return it.fail
}

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

// ERC721MinterBurnerPauserRoleGranted represents a RoleGranted event raised by the ERC721MinterBurnerPauser contract.
type ERC721MinterBurnerPauserRoleGranted struct {
	Role    [32]byte
	Account common.Address
	Sender  common.Address
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d.
//
// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ERC721MinterBurnerPauserRoleGrantedIterator, error) {

	var roleRule []interface{}
	for _, roleItem := range role {
		roleRule = append(roleRule, roleItem)
	}
	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}
	var senderRule []interface{}
	for _, senderItem := range sender {
		senderRule = append(senderRule, senderItem)
	}

	logs, sub, err := _ERC721MinterBurnerPauser.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule)
	if err != nil {
		return nil, err
	}
	return &ERC721MinterBurnerPauserRoleGrantedIterator{contract: _ERC721MinterBurnerPauser.contract, event: "RoleGranted", logs: logs, sub: sub}, nil
}

// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d.
//
// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *ERC721MinterBurnerPauserRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) {

	var roleRule []interface{}
	for _, roleItem := range role {
		roleRule = append(roleRule, roleItem)
	}
	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}
	var senderRule []interface{}
	for _, senderItem := range sender {
		senderRule = append(senderRule, senderItem)
	}

	logs, sub, err := _ERC721MinterBurnerPauser.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule)
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				// New log arrived, parse the event and forward to the user
				event := new(ERC721MinterBurnerPauserRoleGranted)
				if err := _ERC721MinterBurnerPauser.contract.UnpackLog(event, "RoleGranted", log); err != nil {
					return err
				}
				event.Raw = log

				select {
				case sink <- event:
				case err := <-sub.Err():
					return err
				case <-quit:
					return nil
				}
			case err := <-sub.Err():
				return err
			case <-quit:
				return nil
			}
		}
	}), nil
}

// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d.
//
// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) ParseRoleGranted(log types.Log) (*ERC721MinterBurnerPauserRoleGranted, error) {
	event := new(ERC721MinterBurnerPauserRoleGranted)
	if err := _ERC721MinterBurnerPauser.contract.UnpackLog(event, "RoleGranted", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ERC721MinterBurnerPauserRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the ERC721MinterBurnerPauser contract.
type ERC721MinterBurnerPauserRoleRevokedIterator struct {
	Event *ERC721MinterBurnerPauserRoleRevoked // Event containing the contract specifics and raw log

	contract *bind.BoundContract // Generic contract to use for unpacking event data
	event    string              // Event name to use for unpacking event data

	logs chan types.Log        // Log channel receiving the found contract events
	sub  ethereum.Subscription // Subscription for errors, completion and termination
	done bool                  // Whether the subscription completed delivering logs
	fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *ERC721MinterBurnerPauserRoleRevokedIterator) Next() bool {
	// If the iterator failed, stop iterating
	if it.fail != nil {
		return false
	}
	// If the iterator completed, deliver directly whatever's available
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(ERC721MinterBurnerPauserRoleRevoked)
			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
				it.fail = err
				return false
			}
			it.Event.Raw = log
			return true

		default:
			return false
		}
	}
	// Iterator still in progress, wait for either a data or an error event
	select {
	case log := <-it.logs:
		it.Event = new(ERC721MinterBurnerPauserRoleRevoked)
		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
			it.fail = err
			return false
		}
		it.Event.Raw = log
		return true

	case err := <-it.sub.Err():
		it.done = true
		it.fail = err
		return it.Next()
	}
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *ERC721MinterBurnerPauserRoleRevokedIterator) Error() error {
	return it.fail
}

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

// ERC721MinterBurnerPauserRoleRevoked represents a RoleRevoked event raised by the ERC721MinterBurnerPauser contract.
type ERC721MinterBurnerPauserRoleRevoked struct {
	Role    [32]byte
	Account common.Address
	Sender  common.Address
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b.
//
// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ERC721MinterBurnerPauserRoleRevokedIterator, error) {

	var roleRule []interface{}
	for _, roleItem := range role {
		roleRule = append(roleRule, roleItem)
	}
	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}
	var senderRule []interface{}
	for _, senderItem := range sender {
		senderRule = append(senderRule, senderItem)
	}

	logs, sub, err := _ERC721MinterBurnerPauser.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule)
	if err != nil {
		return nil, err
	}
	return &ERC721MinterBurnerPauserRoleRevokedIterator{contract: _ERC721MinterBurnerPauser.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil
}

// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b.
//
// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *ERC721MinterBurnerPauserRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) {

	var roleRule []interface{}
	for _, roleItem := range role {
		roleRule = append(roleRule, roleItem)
	}
	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}
	var senderRule []interface{}
	for _, senderItem := range sender {
		senderRule = append(senderRule, senderItem)
	}

	logs, sub, err := _ERC721MinterBurnerPauser.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule)
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				// New log arrived, parse the event and forward to the user
				event := new(ERC721MinterBurnerPauserRoleRevoked)
				if err := _ERC721MinterBurnerPauser.contract.UnpackLog(event, "RoleRevoked", log); err != nil {
					return err
				}
				event.Raw = log

				select {
				case sink <- event:
				case err := <-sub.Err():
					return err
				case <-quit:
					return nil
				}
			case err := <-sub.Err():
				return err
			case <-quit:
				return nil
			}
		}
	}), nil
}

// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b.
//
// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) ParseRoleRevoked(log types.Log) (*ERC721MinterBurnerPauserRoleRevoked, error) {
	event := new(ERC721MinterBurnerPauserRoleRevoked)
	if err := _ERC721MinterBurnerPauser.contract.UnpackLog(event, "RoleRevoked", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ERC721MinterBurnerPauserTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ERC721MinterBurnerPauser contract.
type ERC721MinterBurnerPauserTransferIterator struct {
	Event *ERC721MinterBurnerPauserTransfer // Event containing the contract specifics and raw log

	contract *bind.BoundContract // Generic contract to use for unpacking event data
	event    string              // Event name to use for unpacking event data

	logs chan types.Log        // Log channel receiving the found contract events
	sub  ethereum.Subscription // Subscription for errors, completion and termination
	done bool                  // Whether the subscription completed delivering logs
	fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *ERC721MinterBurnerPauserTransferIterator) Next() bool {
	// If the iterator failed, stop iterating
	if it.fail != nil {
		return false
	}
	// If the iterator completed, deliver directly whatever's available
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(ERC721MinterBurnerPauserTransfer)
			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
				it.fail = err
				return false
			}
			it.Event.Raw = log
			return true

		default:
			return false
		}
	}
	// Iterator still in progress, wait for either a data or an error event
	select {
	case log := <-it.logs:
		it.Event = new(ERC721MinterBurnerPauserTransfer)
		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
			it.fail = err
			return false
		}
		it.Event.Raw = log
		return true

	case err := <-it.sub.Err():
		it.done = true
		it.fail = err
		return it.Next()
	}
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *ERC721MinterBurnerPauserTransferIterator) Error() error {
	return it.fail
}

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

// ERC721MinterBurnerPauserTransfer represents a Transfer event raised by the ERC721MinterBurnerPauser contract.
type ERC721MinterBurnerPauserTransfer struct {
	From    common.Address
	To      common.Address
	TokenId *big.Int
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*ERC721MinterBurnerPauserTransferIterator, error) {

	var fromRule []interface{}
	for _, fromItem := range from {
		fromRule = append(fromRule, fromItem)
	}
	var toRule []interface{}
	for _, toItem := range to {
		toRule = append(toRule, toItem)
	}
	var tokenIdRule []interface{}
	for _, tokenIdItem := range tokenId {
		tokenIdRule = append(tokenIdRule, tokenIdItem)
	}

	logs, sub, err := _ERC721MinterBurnerPauser.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
	if err != nil {
		return nil, err
	}
	return &ERC721MinterBurnerPauserTransferIterator{contract: _ERC721MinterBurnerPauser.contract, event: "Transfer", logs: logs, sub: sub}, nil
}

// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ERC721MinterBurnerPauserTransfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {

	var fromRule []interface{}
	for _, fromItem := range from {
		fromRule = append(fromRule, fromItem)
	}
	var toRule []interface{}
	for _, toItem := range to {
		toRule = append(toRule, toItem)
	}
	var tokenIdRule []interface{}
	for _, tokenIdItem := range tokenId {
		tokenIdRule = append(tokenIdRule, tokenIdItem)
	}

	logs, sub, err := _ERC721MinterBurnerPauser.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				// New log arrived, parse the event and forward to the user
				event := new(ERC721MinterBurnerPauserTransfer)
				if err := _ERC721MinterBurnerPauser.contract.UnpackLog(event, "Transfer", log); err != nil {
					return err
				}
				event.Raw = log

				select {
				case sink <- event:
				case err := <-sub.Err():
					return err
				case <-quit:
					return nil
				}
			case err := <-sub.Err():
				return err
			case <-quit:
				return nil
			}
		}
	}), nil
}

// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) ParseTransfer(log types.Log) (*ERC721MinterBurnerPauserTransfer, error) {
	event := new(ERC721MinterBurnerPauserTransfer)
	if err := _ERC721MinterBurnerPauser.contract.UnpackLog(event, "Transfer", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ERC721MinterBurnerPauserUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ERC721MinterBurnerPauser contract.
type ERC721MinterBurnerPauserUnpausedIterator struct {
	Event *ERC721MinterBurnerPauserUnpaused // Event containing the contract specifics and raw log

	contract *bind.BoundContract // Generic contract to use for unpacking event data
	event    string              // Event name to use for unpacking event data

	logs chan types.Log        // Log channel receiving the found contract events
	sub  ethereum.Subscription // Subscription for errors, completion and termination
	done bool                  // Whether the subscription completed delivering logs
	fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *ERC721MinterBurnerPauserUnpausedIterator) Next() bool {
	// If the iterator failed, stop iterating
	if it.fail != nil {
		return false
	}
	// If the iterator completed, deliver directly whatever's available
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(ERC721MinterBurnerPauserUnpaused)
			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
				it.fail = err
				return false
			}
			it.Event.Raw = log
			return true

		default:
			return false
		}
	}
	// Iterator still in progress, wait for either a data or an error event
	select {
	case log := <-it.logs:
		it.Event = new(ERC721MinterBurnerPauserUnpaused)
		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
			it.fail = err
			return false
		}
		it.Event.Raw = log
		return true

	case err := <-it.sub.Err():
		it.done = true
		it.fail = err
		return it.Next()
	}
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *ERC721MinterBurnerPauserUnpausedIterator) Error() error {
	return it.fail
}

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

// ERC721MinterBurnerPauserUnpaused represents a Unpaused event raised by the ERC721MinterBurnerPauser contract.
type ERC721MinterBurnerPauserUnpaused struct {
	Account common.Address
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterUnpaused is a free log retrieval operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa.
//
// Solidity: event Unpaused(address account)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) FilterUnpaused(opts *bind.FilterOpts) (*ERC721MinterBurnerPauserUnpausedIterator, error) {

	logs, sub, err := _ERC721MinterBurnerPauser.contract.FilterLogs(opts, "Unpaused")
	if err != nil {
		return nil, err
	}
	return &ERC721MinterBurnerPauserUnpausedIterator{contract: _ERC721MinterBurnerPauser.contract, event: "Unpaused", logs: logs, sub: sub}, nil
}

// WatchUnpaused is a free log subscription operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa.
//
// Solidity: event Unpaused(address account)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ERC721MinterBurnerPauserUnpaused) (event.Subscription, error) {

	logs, sub, err := _ERC721MinterBurnerPauser.contract.WatchLogs(opts, "Unpaused")
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				// New log arrived, parse the event and forward to the user
				event := new(ERC721MinterBurnerPauserUnpaused)
				if err := _ERC721MinterBurnerPauser.contract.UnpackLog(event, "Unpaused", log); err != nil {
					return err
				}
				event.Raw = log

				select {
				case sink <- event:
				case err := <-sub.Err():
					return err
				case <-quit:
					return nil
				}
			case err := <-sub.Err():
				return err
			case <-quit:
				return nil
			}
		}
	}), nil
}

// ParseUnpaused is a log parse operation binding the contract event 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa.
//
// Solidity: event Unpaused(address account)
func (_ERC721MinterBurnerPauser *ERC721MinterBurnerPauserFilterer) ParseUnpaused(log types.Log) (*ERC721MinterBurnerPauserUnpaused, error) {
	event := new(ERC721MinterBurnerPauserUnpaused)
	if err := _ERC721MinterBurnerPauser.contract.UnpackLog(event, "Unpaused", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}
