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

package abi

import (
	"errors"
	"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 (
	_ = errors.New
	_ = big.NewInt
	_ = strings.NewReader
	_ = ethereum.NotFound
	_ = bind.Bind
	_ = common.Big1
	_ = types.BloomLookup
	_ = event.NewSubscription
	_ = abi.ConvertType
)

// PrecompileConfig is an auto generated low-level Go binding around an user-defined struct.
type PrecompileConfig struct {
	PrecompileAddress common.Address
	NumCalls          *big.Int
}

// SimulatorConfig is an auto generated low-level Go binding around an user-defined struct.
type SimulatorConfig struct {
	LoadAccounts   *big.Int
	UpdateAccounts *big.Int
	CreateAccounts *big.Int
	LoadStorage    *big.Int
	UpdateStorage  *big.Int
	DeleteStorage  *big.Int
	CreateStorage  *big.Int
	Precompiles    []PrecompileConfig
}

// SimulatorMetaData contains all meta data concerning the Simulator contract.
var SimulatorMetaData = &bind.MetaData{
	ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"offset\",\"type\":\"uint160\",\"internalType\":\"uint160\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"hashLongString\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"initialize_address_chunk\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize_storage_chunk\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"num_accounts_needed\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structSimulatorConfig\",\"components\":[{\"name\":\"load_accounts\",\"type\":\"uint160\",\"internalType\":\"uint160\"},{\"name\":\"update_accounts\",\"type\":\"uint160\",\"internalType\":\"uint160\"},{\"name\":\"create_accounts\",\"type\":\"uint160\",\"internalType\":\"uint160\"},{\"name\":\"load_storage\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"update_storage\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delete_storage\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"create_storage\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"precompiles\",\"type\":\"tuple[]\",\"internalType\":\"structPrecompileConfig[]\",\"components\":[{\"name\":\"precompile_address\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"num_calls\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint160\",\"internalType\":\"uint160\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"num_address_initialized\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint160\",\"internalType\":\"uint160\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"num_storage_deleted\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"num_storage_initialized\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"num_storage_slots_needed\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structSimulatorConfig\",\"components\":[{\"name\":\"load_accounts\",\"type\":\"uint160\",\"internalType\":\"uint160\"},{\"name\":\"update_accounts\",\"type\":\"uint160\",\"internalType\":\"uint160\"},{\"name\":\"create_accounts\",\"type\":\"uint160\",\"internalType\":\"uint160\"},{\"name\":\"load_storage\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"update_storage\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delete_storage\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"create_storage\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"precompiles\",\"type\":\"tuple[]\",\"internalType\":\"structPrecompileConfig[]\",\"components\":[{\"name\":\"precompile_address\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"num_calls\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"run\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structSimulatorConfig\",\"components\":[{\"name\":\"load_accounts\",\"type\":\"uint160\",\"internalType\":\"uint160\"},{\"name\":\"update_accounts\",\"type\":\"uint160\",\"internalType\":\"uint160\"},{\"name\":\"create_accounts\",\"type\":\"uint160\",\"internalType\":\"uint160\"},{\"name\":\"load_storage\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"update_storage\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delete_storage\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"create_storage\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"precompiles\",\"type\":\"tuple[]\",\"internalType\":\"structPrecompileConfig[]\",\"components\":[{\"name\":\"precompile_address\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"num_calls\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]",
	Bin: "0x60806040527002000000000000000000000000000000006001556202000060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507002000000000000000000000000000000006003557002000000000000000000000000000000006004556202000060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040516154fc3803806154fc83398181016040528101906100ea9190610219565b8060055f8282829054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661011a9190610271565b92506101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060025f8282829054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101889190610271565b92506101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506102b8565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b6101f8816101d0565b8114610202575f80fd5b50565b5f81519050610213816101ef565b92915050565b5f6020828403121561022e5761022d6101cc565b5b5f61023b84828501610205565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61027b826101d0565b9150610286836101d0565b9250828201905073ffffffffffffffffffffffffffffffffffffffff8111156102b2576102b1610244565b5b92915050565b615237806102c55f395ff3fe608060405234801561000f575f80fd5b5060043610610091575f3560e01c8063768c39af11610064578063768c39af146100e35780637b58286614610113578063cb805ac114610131578063e2b5a25c14610161578063ee2bb32b1461017f57610091565b80633594dea61461009557806339aa1ab91461009f578063458240e8146100bd5780634e83a9d5146100d9575b5f80fd5b61009d61019d565b005b6100a76102e6565b6040516100b491906136a3565b60405180910390f35b6100d760048036038101906100d291906136f0565b6102ec565b005b6100e16109e7565b005b6100fd60048036038101906100f891906136f0565b610a4c565b60405161010a91906136a3565b60405180910390f35b61011b610a75565b60405161012891906137a7565b60405180910390f35b61014b600480360381019061014691906136f0565b610a9f565b60405161015891906137f5565b60405180910390f35b610169610b02565b60405161017691906137f5565b60405180910390f35b610187610b27565b60405161019491906136a3565b60405180910390f35b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f606460025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166101f1919061383b565b90505f808390505b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161015610271578073ffffffffffffffffffffffffffffffffffffffff166108fc600190811502906040515f60405180830381858888f19350505050915080806001019150506101f9565b50606460025f8282829054906101000a900473ffffffffffffffffffffffffffffffffffffffff166102a3919061383b565b92506101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60035481565b600154816080013582606001356004546103069190613882565b6103109190613882565b1115610351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161034890613925565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681602001602081019061039c919061396d565b825f0160208101906103ae919061396d565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166103da919061383b565b6103e4919061383b565b73ffffffffffffffffffffffffffffffffffffffff16111561043b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043290613a08565b60405180910390fd5b5f8060045490505b82606001356004546104559190613882565b81101561046f578054820191508080600101915050610443565b50816060013560045f8282546104859190613882565b925050819055505f60045490505b82608001356004546104a59190613882565b8110156104bc578081558080600101915050610493565b50816080013560045f8282546104d29190613882565b925050819055505f60015490505b8260c001356001546104f29190613882565b8110156105095780815580806001019150506104e0565b508160c0013560015f82825461051f9190613882565b925050819055505f60035490505b8260a0013560035461053f9190613882565b811015610556575f8155808060010191505061052d565b508160a0013560035f82825461056c9190613882565b925050819055505f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b8260400160208101906105ac919061396d565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166105d8919061383b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16101561064e578073ffffffffffffffffffffffffffffffffffffffff166108fc600190811502906040515f60405180830381858888f19350505050508080600101915050610599565b50816040016020810190610662919061396d565b60025f8282829054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610691919061383b565b92506101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b825f016020810190610707919061396d565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610733919061383b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1610156107735780806001019150506106f5565b50815f016020810190610786919061396d565b60055f8282829054906101000a900473ffffffffffffffffffffffffffffffffffffffff166107b5919061383b565b92506101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b82602001602081019061082c919061396d565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610858919061383b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1610156108ce578073ffffffffffffffffffffffffffffffffffffffff166108fc600190811502906040515f60405180830381858888f19350505050508080600101915050610819565b508160200160208101906108e2919061396d565b60055f8282829054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610911919061383b565b92506101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f5b828060e001906109619190613a32565b90508110156109e2576109d5838060e0019061097d9190613a32565b8381811061098e5761098d613a94565b5b9050604002015f0160208101906109a59190613afc565b848060e001906109b59190613a32565b848181106109c6576109c5613a94565b5b90506040020160200135610b2d565b8080600101915050610951565b505050565b5f60015490505f60646001546109fd9190613882565b90505f8290505b81811015610a2e57805f808381526020019081526020015f20819055508080600101915050610a04565b50606460015f828254610a419190613882565b925050819055505050565b5f81608001358260600135600454610a649190613882565b610a6e9190613882565b9050919050565b60605f604051602001610a8790613fb9565b60405160208183030381529060405290508091505090565b5f816020016020810190610ab3919061396d565b825f016020810190610ac5919061396d565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610af1919061383b565b610afb919061383b565b9050919050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b6f57610b6a81610fe7565b610fe3565b600273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bb357610bae8160016110aa565b610fe2565b600373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bf757610bf28160016111b7565b610fe1565b600473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c3b57610c3681600161128c565b610fe0565b600573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c7f57610c7a8160016113c7565b610fdf565b600673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cc157610cbc816115d8565b610fde565b600773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d0357610cfe81611736565b610fdd565b600873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d4557610d408161188c565b610fdc565b600973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d8757610d8281611bb2565b610fdb565b61010073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dca57610dc581611f61565b610fda565b600b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e0c57610e07816120f0565b610fd9565b600c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e4e57610e49816123be565b610fd8565b600d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e9057610e8b816125cb565b610fd7565b600e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ed257610ecd81612a59565b610fd6565b600f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f1457610f0f81612f12565b610fd5565b601073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f5657610f51816132aa565b610fd4565b601173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f9857610f938161341e565b610fd3565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca906140fe565b60405180910390fd5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5050565b5f601c90505f7f9242685bf161793cc25603c231bc2f568eb630ea16aa137d2664ac80388256085f1b90505f7f4f8ae3bd7535248d0bd448298cc2e2071e56992d0774dc340c368ae950852ada5f1b90505f5b848110156110a3575f815f1b90506001818686866040515f815260200160405260405161106a949392919061414f565b6020604051602081039080840390855afa15801561108a573d5f803e3d5ffd5b505050602060405103515050808060010191505061103a565b5050505050565b5f5b828110156111b25781156111365760026110c4610a75565b826040516020016110d69291906141e2565b6040516020818303038152906040526040516110f2919061424d565b602060405180830381855afa15801561110d573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190611130919061428d565b506111a5565b60028160405160200161114991906142b8565b604051602081830303815290604052604051611165919061424d565b602060405180830381855afa158015611180573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906111a3919061428d565b505b80806001019150506110ac565b505050565b5f5b828110156112875781156112275760036111d1610a75565b826040516020016111e39291906141e2565b6040516020818303038152906040526040516111ff919061424d565b602060405180830381855afa15801561121a573d5f803e3d5ffd5b505050604051515061127a565b60038160405160200161123a91906142b8565b604051602081830303815290604052604051611256919061424d565b602060405180830381855afa158015611271573d5f803e3d5ffd5b50505060405151505b80806001019150506111b9565b505050565b5f5b828110156113c257811561132f57600473ffffffffffffffffffffffffffffffffffffffff166112bc610a75565b826040516020016112ce9291906142d2565b6040516020818303038152906040526040516112ea919061424d565b5f60405180830381855afa9150503d805f8114611322576040519150601f19603f3d011682016040523d82523d5f602084013e611327565b606091505b5050506113b5565b600473ffffffffffffffffffffffffffffffffffffffff168160405160200161135891906136a3565b604051602081830303815290604052604051611374919061424d565b5f60405180830381855afa9150503d805f81146113ac576040519150601f19603f3d011682016040523d82523d5f602084013e6113b1565b606091505b5050505b808060010191505061128e565b505050565b5f6040518060400160405280600181526020017f380000000000000000000000000000000000000000000000000000000000000081525090505f6040518060400160405280600181526020017f390000000000000000000000000000000000000000000000000000000000000081525090505f5b848110156115d157831561150d575f611452610a75565b826040516020016114649291906141e2565b6040516020818303038152906040529050600573ffffffffffffffffffffffffffffffffffffffff168451845183518787866040516020016114ab96959493929190614300565b6040516020818303038152906040526040516114c7919061424d565b5f60405180830381855afa9150503d805f81146114ff576040519150601f19603f3d011682016040523d82523d5f602084013e611504565b606091505b505050506115c4565b5f8160405160200161151f91906142b8565b6040516020818303038152906040529050600573ffffffffffffffffffffffffffffffffffffffff1684518451835187878660405160200161156696959493929190614300565b604051602081830303815290604052604051611582919061424d565b5f60405180830381855afa9150503d805f81146115ba576040519150601f19603f3d011682016040523d82523d5f602084013e6115bf565b606091505b505050505b808060010191505061143b565b5050505050565b5f7f030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd390505f7f15ed738c0e0a7c92e7845f96b2ae9c0a68a6a449e3538fc7ff3ebf7a5a18a2c490505f600190505f600290505f5b8581101561172e575f80600673ffffffffffffffffffffffffffffffffffffffff16878787876040516020016116659493929190614363565b604051602081830303815290604052604051611681919061424d565b5f60405180830381855afa9150503d805f81146116b9576040519150601f19603f3d011682016040523d82523d5f602084013e6116be565b606091505b509150915081611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa906143f0565b60405180910390fd5b808060200190518101906117179190614438565b80955081965050505050808060010191505061162c565b505050505050565b5f7f030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd390505f7f15ed738c0e0a7c92e7845f96b2ae9c0a68a6a449e3538fc7ff3ebf7a5a18a2c490505f600290505f5b84811015611885575f80600773ffffffffffffffffffffffffffffffffffffffff168686866040516020016117bc93929190614476565b6040516020818303038152906040526040516117d8919061424d565b5f60405180830381855afa9150503d805f8114611810576040519150601f19603f3d011682016040523d82523d5f602084013e611815565b606091505b50915091508161185a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611851906144f5565b60405180910390fd5b8080602001905181019061186e9190614438565b809650819750505050508080600101915050611785565b5050505050565b5f6040518060c001604052807f2cf44499d5d27bb186308b7af7af02ac5bc9eeb6a3d147c186b21fb1b76e18da81526020017f2c0f001f52110ccfe69108924926e45f0b0c868df0e7bde1fe16d3242dc715f681526020017f1fb19bb476f6b9e44e2a32234da8212f61cd63919354bc06aef31e3cfaff3ebc81526020017f22606845ff186793914e03e21df544c34ffe2f2f3504de8a79d9159eca2d98d981526020017f2bd368e28381e8eccb5fa81fc26cf3f048eea9abfdd85d7ed3ab3698d63e4f9081526020017f2fe02e47887507adf0ff1743cbac6ba291e66f59be6bd763950bb16041a0a85e81525090505f5b82811015611bad575f80600873ffffffffffffffffffffffffffffffffffffffff16846040516020016119b191906145b8565b6040516020818303038152906040526040516119cd919061424d565b5f60405180830381855afa9150503d805f8114611a05576040519150601f19603f3d011682016040523d82523d5f602084013e611a0a565b606091505b509150915081611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a469061461b565b60405180910390fd5b600673ffffffffffffffffffffffffffffffffffffffff16845f60068110611a7a57611a79613a94565b5b602002015185600160068110611a9357611a92613a94565b5b602002015160016002604051602001611aaf94939291906146b4565b604051602081830303815290604052604051611acb919061424d565b5f60405180830381855afa9150503d805f8114611b03576040519150601f19603f3d011682016040523d82523d5f602084013e611b08565b606091505b50809250819350505081611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b48906143f0565b60405180910390fd5b80806020019051810190611b659190614438565b855f60068110611b7857611b77613a94565b5b6020020186600160068110611b9057611b8f613a94565b5b60200201828152508281525050505050808060010191505061197e565b505050565b611bba613602565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa55f1b815f60028110611bf057611bef613a94565b5b6020020181815250507fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b5f1b81600160028110611c3057611c2f613a94565b5b602002018181525050611c41613624565b7f61626300000000000000000000000000000000000000000000000000000000005f1b815f60048110611c7757611c76613a94565b5b6020020181815250505f801b81600160048110611c9757611c96613a94565b5b6020020181815250505f801b81600260048110611cb757611cb6613a94565b5b6020020181815250505f801b81600360048110611cd757611cd6613a94565b5b602002018181525050611ce8613646565b67030000000000000060c01b815f60028110611d0757611d06613a94565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff1916815250505f60c01b81600160028110611d6057611d5f613a94565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff1916815250505f600190505f5b85811015611f59575f8190505f600973ffffffffffffffffffffffffffffffffffffffff1682885f60028110611de157611de0613a94565b5b602002015189600160028110611dfa57611df9613a94565b5b6020020151895f60048110611e1257611e11613a94565b5b60200201518a600160048110611e2b57611e2a613a94565b5b60200201518b600260048110611e4457611e43613a94565b5b60200201518c600360048110611e5d57611e5c613a94565b5b60200201518c5f60028110611e7557611e74613a94565b5b60200201518d600160028110611e8e57611e8d613a94565b5b60200201518d604051602001611ead9a999897969594939291906147f5565b604051602081830303815290604052604051611ec9919061424d565b5f60405180830381855afa9150503d805f8114611f01576040519150601f19603f3d011682016040523d82523d5f602084013e611f06565b606091505b5050905080611f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f41906148f2565b60405180910390fd5b50508080600101915050611da8565b505050505050565b5f7f31a80482dadf89de6302b1988c82c29544c9c07bb910596158f6062517eb089a5f1b90505f7f2f54c9a0f348752950094d3228d3b940258c75fe2a413cb70baa21dc2e352fc55f1b90505f7fe22466e928fdccef0de49e3503d2657d00494a00e764fd437bdafa05f5922b1f5f1b90505f7fbbb77c6817ccf50748419477e843d5bac67e6a70e97dde5a57e0c983b777e1ad5f1b90505f5b858110156120e8575f815f1b90505f61010073ffffffffffffffffffffffffffffffffffffffff168286868a8a60405160200161203c959493929190614910565b604051602081830303815290604052604051612058919061424d565b5f60405180830381855afa9150503d805f8114612090576040519150601f19603f3d011682016040523d82523d5f602084013e612095565b606091505b50509050806120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d0906149ab565b60405180910390fd5b50508080600101915050611ffb565b505050505050565b6120f8613624565b6f17f1d3a73197d7942695638c4fa9ac0f5f1b815f6004811061211e5761211d613a94565b5b6020020181815250507fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb5f1b8160016004811061215e5761215d613a94565b5b6020020181815250506f08b3f481e3aaa0f1a09e30ed741d8ae45f1b8160026004811061218e5761218d613a94565b5b6020020181815250507ffcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e15f1b816003600481106121ce576121cd613a94565b5b6020020181815250506121df613624565b6f112b98340eee2777cc3c14163dea3ec95f1b815f6004811061220557612204613a94565b5b6020020181815250507f7977ac3dc5c70da32e6e87578f44912e902ccef9efe28d4a78b8999dfbca94265f1b8160016004811061224557612244613a94565b5b6020020181815250506f186b28d92356c4dfec4b5201ad099dbd5f1b8160026004811061227557612274613a94565b5b6020020181815250507fede3781f8998ddf929b4cd7756192185ca7b8f4ef7088f813270ac3d48868a215f1b816003600481106122b5576122b4613a94565b5b6020020181815250505f5b838110156123b8575f80600b73ffffffffffffffffffffffffffffffffffffffff1685856040516020016122f5929190614a6e565b604051602081830303815290604052604051612311919061424d565b5f60405180830381855afa9150503d805f8114612349576040519150601f19603f3d011682016040523d82523d5f602084013e61234e565b606091505b509150915081612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a90614ae0565b60405180910390fd5b808060200190518101906123a79190614c2c565b9350505080806001019150506122c0565b50505050565b6123c6613624565b6f17f1d3a73197d7942695638c4fa9ac0f5f1b815f600481106123ec576123eb613a94565b5b6020020181815250507fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb5f1b8160016004811061242c5761242b613a94565b5b6020020181815250506f08b3f481e3aaa0f1a09e30ed741d8ae45f1b8160026004811061245c5761245b613a94565b5b6020020181815250507ffcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e15f1b8160036004811061249c5761249b613a94565b5b6020020181815250505f7fe22466e928fdccef0de49e3503d2657d00494a00e764fd437bdafa05f5922b1f5f1b90505f5b838110156125c5575f80600c73ffffffffffffffffffffffffffffffffffffffff168585604051602001612502929190614c57565b60405160208183030381529060405260405161251e919061424d565b5f60405180830381855afa9150503d805f8114612556576040519150601f19603f3d011682016040523d82523d5f602084013e61255b565b606091505b5091509150816125a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259790614ae0565b60405180910390fd5b808060200190518101906125b49190614c2c565b9450505080806001019150506124cd565b50505050565b6125d3613668565b6f103121a2ceaae586d240843a398967325f1b815f600881106125f9576125f8613a94565b5b6020020181815250507f5f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f275f1b8160016008811061263957612638613a94565b5b6020020181815250506f086b990f3da2aeac0a36143b7d7c82445f1b8160026008811061266957612668613a94565b5b6020020181815250507f28215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b685f1b816003600881106126a9576126a8613a94565b5b6020020181815250506f0f9e7ba9a86a8f7624aa2b42dcc8772e5f1b816004600881106126d9576126d8613a94565b5b6020020181815250507f1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e5f1b8160056008811061271957612718613a94565b5b6020020181815250506f0d22c3652d0dc6f0fc9316e14268477c5f1b8160066008811061274957612748613a94565b5b6020020181815250507f2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784515f1b8160076008811061278957612788613a94565b5b60200201818152505061279a613668565b6f024aa2b2f08f0a91260805272dc510515f1b815f600881106127c0576127bf613a94565b5b6020020181815250507fc6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb85f1b81600160088110612800576127ff613a94565b5b6020020181815250506f13e02b6052719f607dacd3a088274f655f1b816002600881106128305761282f613a94565b5b6020020181815250507f596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e5f1b816003600881106128705761286f613a94565b5b6020020181815250506f0ce5d527727d6e118cc9cdc6da2e351a5f1b816004600881106128a05761289f613a94565b5b6020020181815250507fadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b828015f1b816005600881106128e0576128df613a94565b5b6020020181815250506f0606c4a02ea734cc32acd2b02bc28b995f1b816006600881106129105761290f613a94565b5b6020020181815250507fcb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be5f1b816007600881106129505761294f613a94565b5b6020020181815250505f5b83811015612a53575f80600d73ffffffffffffffffffffffffffffffffffffffff168585604051602001612990929190614cfd565b6040516020818303038152906040526040516129ac919061424d565b5f60405180830381855afa9150503d805f81146129e4576040519150601f19603f3d011682016040523d82523d5f602084013e6129e9565b606091505b509150915081612a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2590614d70565b60405180910390fd5b80806020019051810190612a429190614e3c565b93505050808060010191505061295b565b50505050565b612a61613668565b6f103121a2ceaae586d240843a398967325f1b815f60088110612a8757612a86613a94565b5b6020020181815250507f5f8eb5a93e8fea99b62b9f88d8556c80dd726a4b30e84a36eeabaf3592937f275f1b81600160088110612ac757612ac6613a94565b5b6020020181815250506f086b990f3da2aeac0a36143b7d7c82445f1b81600260088110612af757612af6613a94565b5b6020020181815250507f28215140db1bb859338764cb58458f081d92664f9053b50b3fbd2e4723121b685f1b81600360088110612b3757612b36613a94565b5b6020020181815250506f0f9e7ba9a86a8f7624aa2b42dcc8772e5f1b81600460088110612b6757612b66613a94565b5b6020020181815250507f1af4ae115685e60abc2c9b90242167acef3d0be4050bf935eed7c3b6fc7ba77e5f1b81600560088110612ba757612ba6613a94565b5b6020020181815250506f0d22c3652d0dc6f0fc9316e14268477c5f1b81600660088110612bd757612bd6613a94565b5b6020020181815250507f2049ef772e852108d269d9c38dba1d4802e8dae479818184c08f9a569d8784515f1b81600760088110612c1757612c16613a94565b5b602002018181525050612c28613668565b6f024aa2b2f08f0a91260805272dc510515f1b815f60088110612c4e57612c4d613a94565b5b6020020181815250507fc6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb85f1b81600160088110612c8e57612c8d613a94565b5b6020020181815250506f13e02b6052719f607dacd3a088274f655f1b81600260088110612cbe57612cbd613a94565b5b6020020181815250507f596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e5f1b81600360088110612cfe57612cfd613a94565b5b6020020181815250506f0ce5d527727d6e118cc9cdc6da2e351a5f1b81600460088110612d2e57612d2d613a94565b5b6020020181815250507fadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b828015f1b81600560088110612d6e57612d6d613a94565b5b6020020181815250506f0606c4a02ea734cc32acd2b02bc28b995f1b81600660088110612d9e57612d9d613a94565b5b6020020181815250507fcb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be5f1b81600760088110612dde57612ddd613a94565b5b6020020181815250505f7fe22466e928fdccef0de49e3503d2657d00494a00e764fd437bdafa05f5922b1f5f1b90505f5b84811015612f0b575f80600e73ffffffffffffffffffffffffffffffffffffffff1686858787604051602001612e489493929190614e68565b604051602081830303815290604052604051612e64919061424d565b5f60405180830381855afa9150503d805f8114612e9c576040519150601f19603f3d011682016040523d82523d5f602084013e612ea1565b606091505b509150915081612ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edd90614ef9565b60405180910390fd5b80806020019051810190612efa9190614e3c565b955050508080600101915050612e0f565b5050505050565b612f1a613624565b6f17f1d3a73197d7942695638c4fa9ac0f5f1b815f60048110612f4057612f3f613a94565b5b6020020181815250507fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb5f1b81600160048110612f8057612f7f613a94565b5b6020020181815250506f08b3f481e3aaa0f1a09e30ed741d8ae45f1b81600260048110612fb057612faf613a94565b5b6020020181815250507ffcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e15f1b81600360048110612ff057612fef613a94565b5b602002018181525050613001613668565b6f024aa2b2f08f0a91260805272dc510515f1b815f6008811061302757613026613a94565b5b6020020181815250507fc6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb85f1b8160016008811061306757613066613a94565b5b6020020181815250506f13e02b6052719f607dacd3a088274f655f1b8160026008811061309757613096613a94565b5b6020020181815250507f596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e5f1b816003600881106130d7576130d6613a94565b5b6020020181815250506f0ce5d527727d6e118cc9cdc6da2e351a5f1b8160046008811061310757613106613a94565b5b6020020181815250507fadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b828015f1b8160056008811061314757613146613a94565b5b6020020181815250506f0606c4a02ea734cc32acd2b02bc28b995f1b8160066008811061317757613176613a94565b5b6020020181815250507fcb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be5f1b816007600881106131b7576131b6613a94565b5b6020020181815250505f5b838110156132a4575f80600f73ffffffffffffffffffffffffffffffffffffffff1685856040516020016131f7929190614f17565b604051602081830303815290604052604051613213919061424d565b5f60405180830381855afa9150503d805f811461324b576040519150601f19603f3d011682016040523d82523d5f602084013e613250565b606091505b509150915081613295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328c90614f89565b60405180910390fd5b505080806001019150506131c2565b50505050565b6132b2613602565b6f04090815ad598a06897dd89bcda860f25f1b815f600281106132d8576132d7613a94565b5b6020020181815250507f5837d54e897298ce31e6947378134d3761dc59a572154963e8c954919ecfa82d5f1b8160016002811061331857613317613a94565b5b6020020181815250505f5b82811015613419575f80601073ffffffffffffffffffffffffffffffffffffffff16846040516020016133569190615026565b604051602081830303815290604052604051613372919061424d565b5f60405180830381855afa9150503d805f81146133aa576040519150601f19603f3d011682016040523d82523d5f602084013e6133af565b606091505b5091509150816133f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133eb90615089565b60405180910390fd5b808060200190518101906134089190615155565b935050508080600101915050613323565b505050565b613426613624565b6f18c16fe362b7dbdfa102e42bdfd3e2f45f1b815f6004811061344c5761344b613a94565b5b6020020181815250507fe6191d479437a59db4eb716986bf08ee1f42634db66bde97d6c16bbfd342b3b85f1b8160016004811061348c5761348b613a94565b5b6020020181815250506f0e37812ce1b146d998d5f92bdd5ada2a5f1b816002600481106134bc576134bb613a94565b5b6020020181815250507f31bfd63dfe18311aa91637b5f279dd045763166aa1615e46a50d8d8f475f184e5f1b816003600481106134fc576134fb613a94565b5b6020020181815250505f5b828110156135fd575f80601173ffffffffffffffffffffffffffffffffffffffff168460405160200161353a9190615180565b604051602081830303815290604052604051613556919061424d565b5f60405180830381855afa9150503d805f811461358e576040519150601f19603f3d011682016040523d82523d5f602084013e613593565b606091505b5091509150816135d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cf906151e3565b60405180910390fd5b808060200190518101906135ec9190614c2c565b935050508080600101915050613507565b505050565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b604051806101000160405280600890602082028036833780820191505090505090565b5f819050919050565b61369d8161368b565b82525050565b5f6020820190506136b65f830184613694565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f61010082840312156136e7576136e66136cd565b5b81905092915050565b5f60208284031215613705576137046136c5565b5b5f82013567ffffffffffffffff811115613722576137216136c9565b5b61372e848285016136d1565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61377982613737565b6137838185613741565b9350613793818560208601613751565b61379c8161375f565b840191505092915050565b5f6020820190508181035f8301526137bf818461376f565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b6137ef816137c7565b82525050565b5f6020820190506138085f8301846137e6565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613845826137c7565b9150613850836137c7565b9250828201905073ffffffffffffffffffffffffffffffffffffffff81111561387c5761387b61380e565b5b92915050565b5f61388c8261368b565b91506138978361368b565b92508282019050808211156138af576138ae61380e565b5b92915050565b7f4e6f7420656e6f7567682073746f7261676520736c6f747320746f206c6f61645f8201527f2f75706461746500000000000000000000000000000000000000000000000000602082015250565b5f61390f602783613741565b915061391a826138b5565b604082019050919050565b5f6020820190508181035f83015261393c81613903565b9050919050565b61394c816137c7565b8114613956575f80fd5b50565b5f8135905061396781613943565b92915050565b5f60208284031215613982576139816136c5565b5b5f61398f84828501613959565b91505092915050565b7f4e6f7420656e6f756768206163636f756e747320746f206c6f61642f757064615f8201527f7465000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139f2602283613741565b91506139fd82613998565b604082019050919050565b5f6020820190508181035f830152613a1f816139e6565b9050919050565b5f80fd5b5f80fd5b5f80fd5b5f8083356001602003843603038112613a4e57613a4d613a26565b5b80840192508235915067ffffffffffffffff821115613a7057613a6f613a2a565b5b602083019250604082023603831315613a8c57613a8b613a2e565b5b509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613acb826137c7565b9050919050565b613adb81613ac1565b8114613ae5575f80fd5b50565b5f81359050613af681613ad2565b92915050565b5f60208284031215613b1157613b106136c5565b5b5f613b1e84828501613ae8565b91505092915050565b5f81905092915050565b7f546869732069732061206c6f6e6720696e70757420737472696e6720666f72205f8201527f707265636f6d70696c6520000000000000000000000000000000000000000000602082015250565b5f613b8b602b83613b27565b9150613b9682613b31565b602b82019050919050565b7f616e64206974206973206265696e67207265706561746564206d756c7469706c5f8201527f652074696d657320746f20696e637265617365207468652073697a652e200000602082015250565b5f613bfb603e83613b27565b9150613c0682613ba1565b603e82019050919050565b7f4c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e735f8201527f656374657475722061646970697363696e6720656c69742e2000000000000000602082015250565b5f613c6b603983613b27565b9150613c7682613c11565b603982019050919050565b7f566976616d7573206c75637475732075726e61207365642075726e6120756c745f8201527f7269636965732061632074656d706f72206475692073616769747469732e2000602082015250565b5f613cdb603f83613b27565b9150613ce682613c81565b603f82019050919050565b7f496e20636f6e64696d656e74756d20666163696c6973697320706f7274612e205f8201527f536564206e6563206469616d206575206469616d206d6174746973207669766560208201527f7272612e20000000000000000000000000000000000000000000000000000000604082015250565b5f613d71604583613b27565b9150613d7c82613cf1565b604582019050919050565b7f4e756c6c61206672696e67696c6c612c206f72636920616320657569736d6f645f8201527f2073656d7065722c206d61676e61206469616d20706f72747469746f72206d6160208201527f757269732c200000000000000000000000000000000000000000000000000000604082015250565b5f613e07604683613b27565b9150613e1282613d87565b604682019050919050565b7f7175697320736f6c6c696369747564696e2073617069656e206a7573746f20695f8201527f6e206c696265726f2e20566573746962756c756d206d6f6c6c6973206d61757260208201527f697320656e696d2e200000000000000000000000000000000000000000000000604082015250565b5f613e9d604983613b27565b9150613ea882613e1d565b604982019050919050565b7f4d6f72626920657569736d6f64206d61676e61206163206c6f72656d207275745f8201527f72756d20656c656d656e74756d2e20546869732069732061206c6f6e6720696e60208201527f70757420737472696e6720666f7220707265636f6d70696c6520000000000000604082015250565b5f613f33605a83613b27565b9150613f3e82613eb3565b605a82019050919050565b7f4d6f72626920657569736d6f64206d61676e61206163206c6f72656d207275745f8201527f72756d20656c656d656e74756d2e200000000000000000000000000000000000602082015250565b5f613fa3602f83613b27565b9150613fae82613f49565b602f82019050919050565b5f613fc382613b7f565b9150613fce82613bef565b9150613fd982613c5f565b9150613fe482613ccf565b9150613fef82613d65565b9150613ffa82613dfb565b915061400582613e91565b915061401082613f27565b915061401b82613bef565b915061402682613c5f565b915061403182613ccf565b915061403c82613d65565b915061404782613dfb565b915061405282613e91565b915061405d82613f27565b915061406882613bef565b915061407382613c5f565b915061407e82613ccf565b915061408982613d65565b915061409482613dfb565b915061409f82613e91565b91506140aa82613f97565b9150819050919050565b7f496e76616c696420707265636f6d70696c6520616464726573730000000000005f82015250565b5f6140e8601a83613741565b91506140f3826140b4565b602082019050919050565b5f6020820190508181035f830152614115816140dc565b9050919050565b5f819050919050565b61412e8161411c565b82525050565b5f60ff82169050919050565b61414981614134565b82525050565b5f6080820190506141625f830187614125565b61416f6020830186614140565b61417c6040830185614125565b6141896060830184614125565b95945050505050565b5f61419c82613737565b6141a68185613b27565b93506141b6818560208601613751565b80840191505092915050565b5f819050919050565b6141dc6141d78261368b565b6141c2565b82525050565b5f6141ed8285614192565b91506141f982846141cb565b6020820191508190509392505050565b5f81519050919050565b5f81905092915050565b5f61422782614209565b6142318185614213565b9350614241818560208601613751565b80840191505092915050565b5f614258828461421d565b915081905092915050565b61426c8161411c565b8114614276575f80fd5b50565b5f8151905061428781614263565b92915050565b5f602082840312156142a2576142a16136c5565b5b5f6142af84828501614279565b91505092915050565b5f6142c382846141cb565b60208201915081905092915050565b5f6040820190508181035f8301526142ea818561376f565b90506142f96020830184613694565b9392505050565b5f61430b82896141cb565b60208201915061431b82886141cb565b60208201915061432b82876141cb565b60208201915061433b828661421d565b9150614347828561421d565b9150614353828461421d565b9150819050979650505050505050565b5f6080820190506143765f830187613694565b6143836020830186613694565b6143906040830185613694565b61439d6060830184613694565b95945050505050565b7f4543416464206661696c656400000000000000000000000000000000000000005f82015250565b5f6143da600c83613741565b91506143e5826143a6565b602082019050919050565b5f6020820190508181035f830152614407816143ce565b9050919050565b6144178161368b565b8114614421575f80fd5b50565b5f815190506144328161440e565b92915050565b5f806040838503121561444e5761444d6136c5565b5b5f61445b85828601614424565b925050602061446c85828601614424565b9150509250929050565b5f6060820190506144895f830186613694565b6144966020830185613694565b6144a36040830184613694565b949350505050565b7f45434d756c206661696c656400000000000000000000000000000000000000005f82015250565b5f6144df600c83613741565b91506144ea826144ab565b602082019050919050565b5f6020820190508181035f83015261450c816144d3565b9050919050565b5f60069050919050565b5f81905092915050565b5f819050919050565b6145398161368b565b82525050565b5f61454a8383614530565b60208301905092915050565b5f602082019050919050565b61456b81614513565b614575818461451d565b925061458082614527565b805f5b838110156145b0578151614597878261453f565b96506145a283614556565b925050600181019050614583565b505050505050565b5f60c0820190506145cb5f830184614562565b92915050565b7f454350616972696e67206661696c6564000000000000000000000000000000005f82015250565b5f614605601083613741565b9150614610826145d1565b602082019050919050565b5f6020820190508181035f830152614632816145f9565b9050919050565b5f819050919050565b5f819050919050565b5f61466561466061465b84614639565b614642565b614134565b9050919050565b6146758161464b565b82525050565b5f819050919050565b5f61469e6146996146948461467b565b614642565b614134565b9050919050565b6146ae81614684565b82525050565b5f6080820190506146c75f830187613694565b6146d46020830186613694565b6146e1604083018561466c565b6146ee60608301846146a5565b95945050505050565b5f63ffffffff82169050919050565b5f8160e01b9050919050565b5f61471c82614706565b9050919050565b61473461472f826146f7565b614712565b82525050565b5f819050919050565b61475461474f8261411c565b61473a565b82525050565b5f7fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b5f819050919050565b61479f61479a8261475a565b614785565b82525050565b5f8115159050919050565b5f8160f81b9050919050565b5f6147c6826147b0565b9050919050565b5f6147d7826147bc565b9050919050565b6147ef6147ea826147a5565b6147cd565b82525050565b5f614800828d614723565b600482019150614810828c614743565b602082019150614820828b614743565b602082019150614830828a614743565b6020820191506148408289614743565b6020820191506148508288614743565b6020820191506148608287614743565b602082019150614870828661478e565b600882019150614880828561478e565b60088201915061489082846147de565b6001820191508190509b9a5050505050505050505050565b7f426c616b653266206661696c65640000000000000000000000000000000000005f82015250565b5f6148dc600e83613741565b91506148e7826148a8565b602082019050919050565b5f6020820190508181035f830152614909816148d0565b9050919050565b5f60a0820190506149235f830188614125565b6149306020830187614125565b61493d6040830186614125565b61494a6060830185614125565b6149576080830184614125565b9695505050505050565b7f70323536566572696679206661696c65640000000000000000000000000000005f82015250565b5f614995601183613741565b91506149a082614961565b602082019050919050565b5f6020820190508181035f8301526149c281614989565b9050919050565b5f60049050919050565b5f81905092915050565b5f819050919050565b6149ef8161411c565b82525050565b5f614a0083836149e6565b60208301905092915050565b5f602082019050919050565b614a21816149c9565b614a2b81846149d3565b9250614a36826149dd565b805f5b83811015614a66578151614a4d87826149f5565b9650614a5883614a0c565b925050600181019050614a39565b505050505050565b5f61010082019050614a825f830185614a18565b614a8f6080830184614a18565b9392505050565b7f4731416464206661696c656400000000000000000000000000000000000000005f82015250565b5f614aca600c83613741565b9150614ad582614a96565b602082019050919050565b5f6020820190508181035f830152614af781614abe565b9050919050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b614b388261375f565b810181811067ffffffffffffffff82111715614b5757614b56614b02565b5b80604052505050565b5f614b696136bc565b9050614b758282614b2f565b919050565b5f67ffffffffffffffff821115614b9457614b93614b02565b5b602082029050919050565b5f80fd5b5f614bb5614bb084614b7a565b614b60565b90508060208402830185811115614bcf57614bce614b9f565b5b835b81811015614bf85780614be48882614279565b845260208401935050602081019050614bd1565b5050509392505050565b5f82601f830112614c1657614c15614afe565b5b6004614c23848285614ba3565b91505092915050565b5f60808284031215614c4157614c406136c5565b5b5f614c4e84828501614c02565b91505092915050565b5f60a082019050614c6a5f830185614a18565b614c776080830184614125565b9392505050565b5f60089050919050565b5f81905092915050565b5f819050919050565b5f602082019050919050565b614cb081614c7e565b614cba8184614c88565b9250614cc582614c92565b805f5b83811015614cf5578151614cdc87826149f5565b9650614ce783614c9b565b925050600181019050614cc8565b505050505050565b5f61020082019050614d115f830185614ca7565b614d1f610100830184614ca7565b9392505050565b7f4732416464206661696c656400000000000000000000000000000000000000005f82015250565b5f614d5a600c83613741565b9150614d6582614d26565b602082019050919050565b5f6020820190508181035f830152614d8781614d4e565b9050919050565b5f67ffffffffffffffff821115614da857614da7614b02565b5b602082029050919050565b5f614dc5614dc084614d8e565b614b60565b90508060208402830185811115614ddf57614dde614b9f565b5b835b81811015614e085780614df48882614279565b845260208401935050602081019050614de1565b5050509392505050565b5f82601f830112614e2657614e25614afe565b5b6008614e33848285614db3565b91505092915050565b5f6101008284031215614e5257614e516136c5565b5b5f614e5f84828501614e12565b91505092915050565b5f61024082019050614e7c5f830187614ca7565b614e8a610100830186614125565b614e98610120830185614ca7565b614ea6610220830184614125565b95945050505050565b7f47324d534d206661696c656400000000000000000000000000000000000000005f82015250565b5f614ee3600c83613741565b9150614eee82614eaf565b602082019050919050565b5f6020820190508181035f830152614f1081614ed7565b9050919050565b5f61018082019050614f2b5f830185614a18565b614f386080830184614ca7565b9392505050565b7f424c532050616972696e67206661696c656400000000000000000000000000005f82015250565b5f614f73601283613741565b9150614f7e82614f3f565b602082019050919050565b5f6020820190508181035f830152614fa081614f67565b9050919050565b5f60029050919050565b5f81905092915050565b5f819050919050565b5f602082019050919050565b614fd981614fa7565b614fe38184614fb1565b9250614fee82614fbb565b805f5b8381101561501e57815161500587826149f5565b965061501083614fc4565b925050600181019050614ff1565b505050505050565b5f6040820190506150395f830184614fd0565b92915050565b7f4d6170204731206661696c6564000000000000000000000000000000000000005f82015250565b5f615073600d83613741565b915061507e8261503f565b602082019050919050565b5f6020820190508181035f8301526150a081615067565b9050919050565b5f67ffffffffffffffff8211156150c1576150c0614b02565b5b602082029050919050565b5f6150de6150d9846150a7565b614b60565b905080602084028301858111156150f8576150f7614b9f565b5b835b81811015615121578061510d8882614279565b8452602084019350506020810190506150fa565b5050509392505050565b5f82601f83011261513f5761513e614afe565b5b600261514c8482856150cc565b91505092915050565b5f6040828403121561516a576151696136c5565b5b5f6151778482850161512b565b91505092915050565b5f6080820190506151935f830184614a18565b92915050565b7f4d6170204732206661696c6564000000000000000000000000000000000000005f82015250565b5f6151cd600d83613741565b91506151d882615199565b602082019050919050565b5f6020820190508181035f8301526151fa816151c1565b905091905056fea2646970667358221220daaadc09f9b6a12865bdc6aa105acdb6d823e1207652d06efbcce50978b64aec64736f6c63430008190033",
}

// SimulatorABI is the input ABI used to generate the binding from.
// Deprecated: Use SimulatorMetaData.ABI instead.
var SimulatorABI = SimulatorMetaData.ABI

// SimulatorBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use SimulatorMetaData.Bin instead.
var SimulatorBin = SimulatorMetaData.Bin

// DeploySimulator deploys a new Ethereum contract, binding an instance of Simulator to it.
func DeploySimulator(auth *bind.TransactOpts, backend bind.ContractBackend, offset *big.Int) (common.Address, *types.Transaction, *Simulator, error) {
	parsed, err := SimulatorMetaData.GetAbi()
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	if parsed == nil {
		return common.Address{}, nil, nil, errors.New("GetABI returned nil")
	}

	address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SimulatorBin), backend, offset)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &Simulator{SimulatorCaller: SimulatorCaller{contract: contract}, SimulatorTransactor: SimulatorTransactor{contract: contract}, SimulatorFilterer: SimulatorFilterer{contract: contract}}, nil
}

// Simulator is an auto generated Go binding around an Ethereum contract.
type Simulator struct {
	SimulatorCaller     // Read-only binding to the contract
	SimulatorTransactor // Write-only binding to the contract
	SimulatorFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewSimulator creates a new instance of Simulator, bound to a specific deployed contract.
func NewSimulator(address common.Address, backend bind.ContractBackend) (*Simulator, error) {
	contract, err := bindSimulator(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &Simulator{SimulatorCaller: SimulatorCaller{contract: contract}, SimulatorTransactor: SimulatorTransactor{contract: contract}, SimulatorFilterer: SimulatorFilterer{contract: contract}}, nil
}

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

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

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

// bindSimulator binds a generic wrapper to an already deployed contract.
func bindSimulator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := SimulatorMetaData.GetAbi()
	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 (_Simulator *SimulatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Simulator.Contract.SimulatorCaller.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 (_Simulator *SimulatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Simulator.Contract.SimulatorTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Simulator *SimulatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Simulator.Contract.SimulatorTransactor.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 (_Simulator *SimulatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Simulator.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 (_Simulator *SimulatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Simulator.Contract.contract.Transfer(opts)
}

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

// HashLongString is a free data retrieval call binding the contract method 0x7b582866.
//
// Solidity: function hashLongString() pure returns(string)
func (_Simulator *SimulatorCaller) HashLongString(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _Simulator.contract.Call(opts, &out, "hashLongString")

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

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

	return out0, err

}

// HashLongString is a free data retrieval call binding the contract method 0x7b582866.
//
// Solidity: function hashLongString() pure returns(string)
func (_Simulator *SimulatorSession) HashLongString() (string, error) {
	return _Simulator.Contract.HashLongString(&_Simulator.CallOpts)
}

// HashLongString is a free data retrieval call binding the contract method 0x7b582866.
//
// Solidity: function hashLongString() pure returns(string)
func (_Simulator *SimulatorCallerSession) HashLongString() (string, error) {
	return _Simulator.Contract.HashLongString(&_Simulator.CallOpts)
}

// NumAccountsNeeded is a free data retrieval call binding the contract method 0xcb805ac1.
//
// Solidity: function num_accounts_needed((uint160,uint160,uint160,uint256,uint256,uint256,uint256,(address,uint256)[]) config) view returns(uint160)
func (_Simulator *SimulatorCaller) NumAccountsNeeded(opts *bind.CallOpts, config SimulatorConfig) (*big.Int, error) {
	var out []interface{}
	err := _Simulator.contract.Call(opts, &out, "num_accounts_needed", config)

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

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

	return out0, err

}

// NumAccountsNeeded is a free data retrieval call binding the contract method 0xcb805ac1.
//
// Solidity: function num_accounts_needed((uint160,uint160,uint160,uint256,uint256,uint256,uint256,(address,uint256)[]) config) view returns(uint160)
func (_Simulator *SimulatorSession) NumAccountsNeeded(config SimulatorConfig) (*big.Int, error) {
	return _Simulator.Contract.NumAccountsNeeded(&_Simulator.CallOpts, config)
}

// NumAccountsNeeded is a free data retrieval call binding the contract method 0xcb805ac1.
//
// Solidity: function num_accounts_needed((uint160,uint160,uint160,uint256,uint256,uint256,uint256,(address,uint256)[]) config) view returns(uint160)
func (_Simulator *SimulatorCallerSession) NumAccountsNeeded(config SimulatorConfig) (*big.Int, error) {
	return _Simulator.Contract.NumAccountsNeeded(&_Simulator.CallOpts, config)
}

// NumAddressInitialized is a free data retrieval call binding the contract method 0xe2b5a25c.
//
// Solidity: function num_address_initialized() view returns(uint160)
func (_Simulator *SimulatorCaller) NumAddressInitialized(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Simulator.contract.Call(opts, &out, "num_address_initialized")

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

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

	return out0, err

}

// NumAddressInitialized is a free data retrieval call binding the contract method 0xe2b5a25c.
//
// Solidity: function num_address_initialized() view returns(uint160)
func (_Simulator *SimulatorSession) NumAddressInitialized() (*big.Int, error) {
	return _Simulator.Contract.NumAddressInitialized(&_Simulator.CallOpts)
}

// NumAddressInitialized is a free data retrieval call binding the contract method 0xe2b5a25c.
//
// Solidity: function num_address_initialized() view returns(uint160)
func (_Simulator *SimulatorCallerSession) NumAddressInitialized() (*big.Int, error) {
	return _Simulator.Contract.NumAddressInitialized(&_Simulator.CallOpts)
}

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

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

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

	return out0, err

}

// NumStorageDeleted is a free data retrieval call binding the contract method 0x39aa1ab9.
//
// Solidity: function num_storage_deleted() view returns(uint256)
func (_Simulator *SimulatorSession) NumStorageDeleted() (*big.Int, error) {
	return _Simulator.Contract.NumStorageDeleted(&_Simulator.CallOpts)
}

// NumStorageDeleted is a free data retrieval call binding the contract method 0x39aa1ab9.
//
// Solidity: function num_storage_deleted() view returns(uint256)
func (_Simulator *SimulatorCallerSession) NumStorageDeleted() (*big.Int, error) {
	return _Simulator.Contract.NumStorageDeleted(&_Simulator.CallOpts)
}

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

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

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

	return out0, err

}

// NumStorageInitialized is a free data retrieval call binding the contract method 0xee2bb32b.
//
// Solidity: function num_storage_initialized() view returns(uint256)
func (_Simulator *SimulatorSession) NumStorageInitialized() (*big.Int, error) {
	return _Simulator.Contract.NumStorageInitialized(&_Simulator.CallOpts)
}

// NumStorageInitialized is a free data retrieval call binding the contract method 0xee2bb32b.
//
// Solidity: function num_storage_initialized() view returns(uint256)
func (_Simulator *SimulatorCallerSession) NumStorageInitialized() (*big.Int, error) {
	return _Simulator.Contract.NumStorageInitialized(&_Simulator.CallOpts)
}

// NumStorageSlotsNeeded is a free data retrieval call binding the contract method 0x768c39af.
//
// Solidity: function num_storage_slots_needed((uint160,uint160,uint160,uint256,uint256,uint256,uint256,(address,uint256)[]) config) view returns(uint256)
func (_Simulator *SimulatorCaller) NumStorageSlotsNeeded(opts *bind.CallOpts, config SimulatorConfig) (*big.Int, error) {
	var out []interface{}
	err := _Simulator.contract.Call(opts, &out, "num_storage_slots_needed", config)

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

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

	return out0, err

}

// NumStorageSlotsNeeded is a free data retrieval call binding the contract method 0x768c39af.
//
// Solidity: function num_storage_slots_needed((uint160,uint160,uint160,uint256,uint256,uint256,uint256,(address,uint256)[]) config) view returns(uint256)
func (_Simulator *SimulatorSession) NumStorageSlotsNeeded(config SimulatorConfig) (*big.Int, error) {
	return _Simulator.Contract.NumStorageSlotsNeeded(&_Simulator.CallOpts, config)
}

// NumStorageSlotsNeeded is a free data retrieval call binding the contract method 0x768c39af.
//
// Solidity: function num_storage_slots_needed((uint160,uint160,uint160,uint256,uint256,uint256,uint256,(address,uint256)[]) config) view returns(uint256)
func (_Simulator *SimulatorCallerSession) NumStorageSlotsNeeded(config SimulatorConfig) (*big.Int, error) {
	return _Simulator.Contract.NumStorageSlotsNeeded(&_Simulator.CallOpts, config)
}

// InitializeAddressChunk is a paid mutator transaction binding the contract method 0x3594dea6.
//
// Solidity: function initialize_address_chunk() returns()
func (_Simulator *SimulatorTransactor) InitializeAddressChunk(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Simulator.contract.Transact(opts, "initialize_address_chunk")
}

// InitializeAddressChunk is a paid mutator transaction binding the contract method 0x3594dea6.
//
// Solidity: function initialize_address_chunk() returns()
func (_Simulator *SimulatorSession) InitializeAddressChunk() (*types.Transaction, error) {
	return _Simulator.Contract.InitializeAddressChunk(&_Simulator.TransactOpts)
}

// InitializeAddressChunk is a paid mutator transaction binding the contract method 0x3594dea6.
//
// Solidity: function initialize_address_chunk() returns()
func (_Simulator *SimulatorTransactorSession) InitializeAddressChunk() (*types.Transaction, error) {
	return _Simulator.Contract.InitializeAddressChunk(&_Simulator.TransactOpts)
}

// InitializeStorageChunk is a paid mutator transaction binding the contract method 0x4e83a9d5.
//
// Solidity: function initialize_storage_chunk() returns()
func (_Simulator *SimulatorTransactor) InitializeStorageChunk(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Simulator.contract.Transact(opts, "initialize_storage_chunk")
}

// InitializeStorageChunk is a paid mutator transaction binding the contract method 0x4e83a9d5.
//
// Solidity: function initialize_storage_chunk() returns()
func (_Simulator *SimulatorSession) InitializeStorageChunk() (*types.Transaction, error) {
	return _Simulator.Contract.InitializeStorageChunk(&_Simulator.TransactOpts)
}

// InitializeStorageChunk is a paid mutator transaction binding the contract method 0x4e83a9d5.
//
// Solidity: function initialize_storage_chunk() returns()
func (_Simulator *SimulatorTransactorSession) InitializeStorageChunk() (*types.Transaction, error) {
	return _Simulator.Contract.InitializeStorageChunk(&_Simulator.TransactOpts)
}

// Run is a paid mutator transaction binding the contract method 0x458240e8.
//
// Solidity: function run((uint160,uint160,uint160,uint256,uint256,uint256,uint256,(address,uint256)[]) config) returns()
func (_Simulator *SimulatorTransactor) Run(opts *bind.TransactOpts, config SimulatorConfig) (*types.Transaction, error) {
	return _Simulator.contract.Transact(opts, "run", config)
}

// Run is a paid mutator transaction binding the contract method 0x458240e8.
//
// Solidity: function run((uint160,uint160,uint160,uint256,uint256,uint256,uint256,(address,uint256)[]) config) returns()
func (_Simulator *SimulatorSession) Run(config SimulatorConfig) (*types.Transaction, error) {
	return _Simulator.Contract.Run(&_Simulator.TransactOpts, config)
}

// Run is a paid mutator transaction binding the contract method 0x458240e8.
//
// Solidity: function run((uint160,uint160,uint160,uint256,uint256,uint256,uint256,(address,uint256)[]) config) returns()
func (_Simulator *SimulatorTransactorSession) Run(config SimulatorConfig) (*types.Transaction, error) {
	return _Simulator.Contract.Run(&_Simulator.TransactOpts, config)
}
