gitlab.com/yannislg/go-pulse@v0.0.0-20210722055913-a3e24e95638d/accounts/abi/bind/bind_test.go (about)

     1  // Copyright 2016 The go-ethereum Authors
     2  // This file is part of the go-ethereum library.
     3  //
     4  // The go-ethereum library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The go-ethereum library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  package bind
    18  
    19  import (
    20  	"fmt"
    21  	"io/ioutil"
    22  	"os"
    23  	"os/exec"
    24  	"path/filepath"
    25  	"runtime"
    26  	"strings"
    27  	"testing"
    28  
    29  	"github.com/ethereum/go-ethereum/common"
    30  )
    31  
    32  var bindTests = []struct {
    33  	name     string
    34  	contract string
    35  	bytecode []string
    36  	abi      []string
    37  	imports  string
    38  	tester   string
    39  	fsigs    []map[string]string
    40  	libs     map[string]string
    41  	aliases  map[string]string
    42  	types    []string
    43  }{
    44  	// Test that the binding is available in combined and separate forms too
    45  	{
    46  		`Empty`,
    47  		`contract NilContract {}`,
    48  		[]string{`606060405260068060106000396000f3606060405200`},
    49  		[]string{`[]`},
    50  		`"github.com/ethereum/go-ethereum/common"`,
    51  		`
    52  			if b, err := NewEmpty(common.Address{}, nil); b == nil || err != nil {
    53  				t.Fatalf("combined binding (%v) nil or error (%v) not nil", b, nil)
    54  			}
    55  			if b, err := NewEmptyCaller(common.Address{}, nil); b == nil || err != nil {
    56  				t.Fatalf("caller binding (%v) nil or error (%v) not nil", b, nil)
    57  			}
    58  			if b, err := NewEmptyTransactor(common.Address{}, nil); b == nil || err != nil {
    59  				t.Fatalf("transactor binding (%v) nil or error (%v) not nil", b, nil)
    60  			}
    61  		`,
    62  		nil,
    63  		nil,
    64  		nil,
    65  		nil,
    66  	},
    67  	// Test that all the official sample contracts bind correctly
    68  	{
    69  		`Token`,
    70  		`https://ethereum.org/token`,
    71  		[]string{`60606040526040516107fd3803806107fd83398101604052805160805160a05160c051929391820192909101600160a060020a0333166000908152600360209081526040822086905581548551838052601f6002600019610100600186161502019093169290920482018390047f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390810193919290918801908390106100e857805160ff19168380011785555b506101189291505b8082111561017157600081556001016100b4565b50506002805460ff19168317905550505050610658806101a56000396000f35b828001600101855582156100ac579182015b828111156100ac5782518260005055916020019190600101906100fa565b50508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061017557805160ff19168380011785555b506100c89291506100b4565b5090565b82800160010185558215610165579182015b8281111561016557825182600050559160200191906001019061018756606060405236156100775760e060020a600035046306fdde03811461007f57806323b872dd146100dc578063313ce5671461010e57806370a082311461011a57806395d89b4114610132578063a9059cbb1461018e578063cae9ca51146101bd578063dc3080f21461031c578063dd62ed3e14610341575b610365610002565b61036760008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b6103d5600435602435604435600160a060020a038316600090815260036020526040812054829010156104f357610002565b6103e760025460ff1681565b6103d560043560036020526000908152604090205481565b610367600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b610365600435602435600160a060020a033316600090815260036020526040902054819010156103f157610002565b60806020604435600481810135601f8101849004909302840160405260608381526103d5948235946024803595606494939101919081908382808284375094965050505050505060006000836004600050600033600160a060020a03168152602001908152602001600020600050600087600160a060020a031681526020019081526020016000206000508190555084905080600160a060020a0316638f4ffcb1338630876040518560e060020a0281526004018085600160a060020a0316815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156102f25780820380516001836020036101000a031916815260200191505b50955050505050506000604051808303816000876161da5a03f11561000257505050509392505050565b6005602090815260043560009081526040808220909252602435815220546103d59081565b60046020818152903560009081526040808220909252602435815220546103d59081565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156103c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b6060908152602090f35b600160a060020a03821660009081526040902054808201101561041357610002565b806003600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806003600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b820191906000526020600020905b8154815290600101906020018083116104ce57829003601f168201915b505050505081565b600160a060020a03831681526040812054808301101561051257610002565b600160a060020a0380851680835260046020908152604080852033949094168086529382528085205492855260058252808520938552929052908220548301111561055c57610002565b816003600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816003600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816005600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3939250505056`},
    72  		[]string{`[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"spentAllowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"initialSupply","type":"uint256"},{"name":"tokenName","type":"string"},{"name":"decimalUnits","type":"uint8"},{"name":"tokenSymbol","type":"string"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]`},
    73  		`"github.com/ethereum/go-ethereum/common"`,
    74  		`
    75  			if b, err := NewToken(common.Address{}, nil); b == nil || err != nil {
    76  				t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
    77  			}
    78  		`,
    79  		nil,
    80  		nil,
    81  		nil,
    82  		nil,
    83  	},
    84  	{
    85  		`Crowdsale`,
    86  		`https://ethereum.org/crowdsale`,
    87  		[]string{`606060408190526007805460ff1916905560a0806105a883396101006040529051608051915160c05160e05160008054600160a060020a03199081169095178155670de0b6b3a7640000958602600155603c9093024201600355930260045560058054909216909217905561052f90819061007990396000f36060604052361561006c5760e060020a600035046301cb3b20811461008257806329dcb0cf1461014457806338af3eed1461014d5780636e66f6e91461015f5780637a3a0e84146101715780637b3e5e7b1461017a578063a035b1fe14610183578063dc0d3dff1461018c575b61020060075460009060ff161561032357610002565b61020060035460009042106103205760025460015490106103cb576002548154600160a060020a0316908290606082818181858883f150915460025460408051600160a060020a039390931683526020830191909152818101869052517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6945090819003909201919050a15b60405160008054600160a060020a039081169230909116319082818181858883f150506007805460ff1916600117905550505050565b6103a160035481565b6103ab600054600160a060020a031681565b6103ab600554600160a060020a031681565b6103a160015481565b6103a160025481565b6103a160045481565b6103be60043560068054829081101561000257506000526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f8101547ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d409190910154600160a060020a03919091169082565b005b505050815481101561000257906000526020600020906002020160005060008201518160000160006101000a815481600160a060020a030219169083021790555060208201518160010160005055905050806002600082828250540192505081905550600560009054906101000a9004600160a060020a0316600160a060020a031663a9059cbb3360046000505484046040518360e060020a0281526004018083600160a060020a03168152602001828152602001925050506000604051808303816000876161da5a03f11561000257505060408051600160a060020a03331681526020810184905260018183015290517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf692509081900360600190a15b50565b5060a0604052336060908152346080819052600680546001810180835592939282908280158290116102025760020281600202836000526020600020918201910161020291905b8082111561039d57805473ffffffffffffffffffffffffffffffffffffffff19168155600060019190910190815561036a565b5090565b6060908152602090f35b600160a060020a03166060908152602090f35b6060918252608052604090f35b5b60065481101561010e576006805482908110156100025760009182526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0190600680549254600160a060020a0316928490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460405190915082818181858883f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf660066000508281548110156100025760008290526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01548154600160a060020a039190911691908490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460408051600160a060020a0394909416845260208401919091526000838201525191829003606001919050a16001016103cc56`},
    88  		[]string{`[{"constant":false,"inputs":[],"name":"checkGoalReached","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"deadline","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokenReward","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"fundingGoal","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"amountRaised","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"funders","outputs":[{"name":"addr","type":"address"},{"name":"amount","type":"uint256"}],"type":"function"},{"inputs":[{"name":"ifSuccessfulSendTo","type":"address"},{"name":"fundingGoalInEthers","type":"uint256"},{"name":"durationInMinutes","type":"uint256"},{"name":"etherCostOfEachToken","type":"uint256"},{"name":"addressOfTokenUsedAsReward","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"backer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"isContribution","type":"bool"}],"name":"FundTransfer","type":"event"}]`},
    89  		`"github.com/ethereum/go-ethereum/common"`,
    90  		`
    91  			if b, err := NewCrowdsale(common.Address{}, nil); b == nil || err != nil {
    92  				t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
    93  			}
    94  		`,
    95  		nil,
    96  		nil,
    97  		nil,
    98  		nil,
    99  	},
   100  	{
   101  		`DAO`,
   102  		`https://ethereum.org/dao`,
   103  		[]string{`606060405260405160808061145f833960e06040529051905160a05160c05160008054600160a060020a03191633179055600184815560028490556003839055600780549182018082558280158290116100b8576003028160030283600052602060002091820191016100b891906101c8565b50506060919091015160029190910155600160a060020a0381166000146100a65760008054600160a060020a031916821790555b505050506111f18061026e6000396000f35b505060408051608081018252600080825260208281018290528351908101845281815292820192909252426060820152600780549194509250811015610002579081527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6889050815181546020848101517401000000000000000000000000000000000000000002600160a060020a03199290921690921760a060020a60ff021916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f9081018390048201949192919091019083901061023e57805160ff19168380011785555b50610072929150610226565b5050600060028201556001015b8082111561023a578054600160a860020a031916815560018181018054600080835592600290821615610100026000190190911604601f81901061020c57506101bb565b601f0160209004906000526020600020908101906101bb91905b8082111561023a5760008155600101610226565b5090565b828001600101855582156101af579182015b828111156101af57825182600050559160200191906001019061025056606060405236156100b95760e060020a6000350463013cf08b81146100bb578063237e9492146101285780633910682114610281578063400e3949146102995780635daf08ca146102a257806369bd34361461032f5780638160f0b5146103385780638da5cb5b146103415780639644fcbd14610353578063aa02a90f146103be578063b1050da5146103c7578063bcca1fd3146104b5578063d3c0715b146104dc578063eceb29451461058d578063f2fde38b1461067b575b005b61069c6004356004805482908110156100025790600052602060002090600a02016000506005810154815460018301546003840154600485015460068601546007870154600160a060020a03959095169750929560020194919360ff828116946101009093041692919089565b60408051602060248035600481810135601f81018590048502860185019096528585526107759581359591946044949293909201918190840183828082843750949650505050505050600060006004600050848154811015610002575090527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e600a8402908101547f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101904210806101e65750600481015460ff165b8061026757508060000160009054906101000a9004600160a060020a03168160010160005054846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f15090500193505050506040518091039020816007016000505414155b8061027757506001546005820154105b1561109257610002565b61077560043560066020526000908152604090205481565b61077560055481565b61078760043560078054829081101561000257506000526003026000805160206111d18339815191528101547fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a820154600160a060020a0382169260a060020a90920460ff16917fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689019084565b61077560025481565b61077560015481565b610830600054600160a060020a031681565b604080516020604435600481810135601f81018490048402850184019095528484526100b9948135946024803595939460649492939101918190840183828082843750949650505050505050600080548190600160a060020a03908116339091161461084d57610002565b61077560035481565b604080516020604435600481810135601f8101849004840285018401909552848452610775948135946024803595939460649492939101918190840183828082843750506040805160209735808a0135601f81018a90048a0283018a019093528282529698976084979196506024909101945090925082915084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806104ab5750604081205460078054909190811015610002579082526003026000805160206111d1833981519152015460a060020a900460ff16155b15610ce557610002565b6100b960043560243560443560005433600160a060020a03908116911614610b1857610002565b604080516020604435600481810135601f810184900484028501840190955284845261077594813594602480359593946064949293910191819084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806105835750604081205460078054909190811015610002579082526003026000805160206111d18339815191520181505460a060020a900460ff16155b15610f1d57610002565b604080516020606435600481810135601f81018490048402850184019095528484526107759481359460248035956044359560849492019190819084018382808284375094965050505050505060006000600460005086815481101561000257908252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01815090508484846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005054149150610cdc565b6100b960043560005433600160a060020a03908116911614610f0857610002565b604051808a600160a060020a031681526020018981526020018060200188815260200187815260200186815260200185815260200184815260200183815260200182810382528981815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561075e5780601f106107335761010080835404028352916020019161075e565b820191906000526020600020905b81548152906001019060200180831161074157829003601f168201915b50509a505050505050505050505060405180910390f35b60408051918252519081900360200190f35b60408051600160a060020a038616815260208101859052606081018390526080918101828152845460026001821615610100026000190190911604928201839052909160a08301908590801561081e5780601f106107f35761010080835404028352916020019161081e565b820191906000526020600020905b81548152906001019060200180831161080157829003601f168201915b50509550505050505060405180910390f35b60408051600160a060020a03929092168252519081900360200190f35b600160a060020a03851660009081526006602052604081205414156108a957604060002060078054918290556001820180825582801582901161095c5760030281600302836000526020600020918201910161095c9190610a4f565b600160a060020a03851660009081526006602052604090205460078054919350908390811015610002575060005250600381026000805160206111d183398151915201805474ff0000000000000000000000000000000000000000191660a060020a85021781555b60408051600160a060020a03871681526020810186905281517f27b022af4a8347100c7a041ce5ccf8e14d644ff05de696315196faae8cd50c9b929181900390910190a15050505050565b505050915081506080604051908101604052808681526020018581526020018481526020014281526020015060076000508381548110156100025790600052602060002090600302016000508151815460208481015160a060020a02600160a060020a03199290921690921774ff00000000000000000000000000000000000000001916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f90810183900482019491929190910190839010610ad357805160ff19168380011785555b50610b03929150610abb565b5050600060028201556001015b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610aa15750610a42565b601f016020900490600052602060002090810190610a4291905b80821115610acf5760008155600101610abb565b5090565b82800160010185558215610a36579182015b82811115610a36578251826000505591602001919060010190610ae5565b50506060919091015160029190910155610911565b600183905560028290556003819055604080518481526020810184905280820183905290517fa439d3fa452be5e0e1e24a8145e715f4fd8b9c08c96a42fd82a855a85e5d57de9181900360600190a1505050565b50508585846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005081905550600260005054603c024201816003016000508190555060008160040160006101000a81548160ff0219169083021790555060008160040160016101000a81548160ff02191690830217905550600081600501600050819055507f646fec02522b41e7125cfc859a64fd4f4cefd5dc3b6237ca0abe251ded1fa881828787876040518085815260200184600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610cc45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1600182016005555b50949350505050565b6004805460018101808355909190828015829011610d1c57600a0281600a028360005260206000209182019101610d1c9190610db8565b505060048054929450918491508110156100025790600052602060002090600a02016000508054600160a060020a031916871781556001818101879055855160028381018054600082815260209081902096975091959481161561010002600019011691909104601f90810182900484019391890190839010610ed857805160ff19168380011785555b50610b6c929150610abb565b50506001015b80821115610acf578054600160a060020a03191681556000600182810182905560028381018054848255909281161561010002600019011604601f819010610e9c57505b5060006003830181905560048301805461ffff191690556005830181905560068301819055600783018190556008830180548282559082526020909120610db2916002028101905b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610eba57505b5050600101610e44565b601f016020900490600052602060002090810190610dfc9190610abb565b601f016020900490600052602060002090810190610e929190610abb565b82800160010185558215610da6579182015b82811115610da6578251826000505591602001919060010190610eea565b60008054600160a060020a0319168217905550565b600480548690811015610002576000918252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01905033600160a060020a0316600090815260098201602052604090205490915060ff1660011415610f8457610002565b33600160a060020a031660009081526009820160205260409020805460ff1916600190811790915560058201805490910190558315610fcd576006810180546001019055610fda565b6006810180546000190190555b7fc34f869b7ff431b034b7b9aea9822dac189a685e0b015c7d1be3add3f89128e8858533866040518085815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561107a5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1509392505050565b6006810154600354901315611158578060000160009054906101000a9004600160a060020a0316600160a060020a03168160010160005054670de0b6b3a76400000284604051808280519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156111225780820380516001836020036101000a031916815260200191505b5091505060006040518083038185876185025a03f15050505060048101805460ff191660011761ff00191661010017905561116d565b60048101805460ff191660011761ff00191690555b60068101546005820154600483015460408051888152602081019490945283810192909252610100900460ff166060830152517fd220b7272a8b6d0d7d6bcdace67b936a8f175e6d5c1b3ee438b72256b32ab3af9181900360800190a1509291505056a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688`},
   104  		[]string{`[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"proposals","outputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"description","type":"string"},{"name":"votingDeadline","type":"uint256"},{"name":"executed","type":"bool"},{"name":"proposalPassed","type":"bool"},{"name":"numberOfVotes","type":"uint256"},{"name":"currentResult","type":"int256"},{"name":"proposalHash","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"executeProposal","outputs":[{"name":"result","type":"int256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"memberId","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"numProposals","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"members","outputs":[{"name":"member","type":"address"},{"name":"canVote","type":"bool"},{"name":"name","type":"string"},{"name":"memberSince","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"debatingPeriodInMinutes","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"minimumQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"targetMember","type":"address"},{"name":"canVote","type":"bool"},{"name":"memberName","type":"string"}],"name":"changeMembership","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"majorityMargin","outputs":[{"name":"","type":"int256"}],"type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"JobDescription","type":"string"},{"name":"transactionBytecode","type":"bytes"}],"name":"newProposal","outputs":[{"name":"proposalID","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"}],"name":"changeVotingRules","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"supportsProposal","type":"bool"},{"name":"justificationText","type":"string"}],"name":"vote","outputs":[{"name":"voteID","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"checkProposalCode","outputs":[{"name":"codeChecksOut","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"type":"function"},{"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"},{"name":"congressLeader","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"description","type":"string"}],"name":"ProposalAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"position","type":"bool"},{"indexed":false,"name":"voter","type":"address"},{"indexed":false,"name":"justification","type":"string"}],"name":"Voted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"result","type":"int256"},{"indexed":false,"name":"quorum","type":"uint256"},{"indexed":false,"name":"active","type":"bool"}],"name":"ProposalTallied","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"member","type":"address"},{"indexed":false,"name":"isMember","type":"bool"}],"name":"MembershipChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"minimumQuorum","type":"uint256"},{"indexed":false,"name":"debatingPeriodInMinutes","type":"uint256"},{"indexed":false,"name":"majorityMargin","type":"int256"}],"name":"ChangeOfRules","type":"event"}]`},
   105  		`"github.com/ethereum/go-ethereum/common"`,
   106  		`
   107  			if b, err := NewDAO(common.Address{}, nil); b == nil || err != nil {
   108  				t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
   109  			}
   110  		`,
   111  		nil,
   112  		nil,
   113  		nil,
   114  		nil,
   115  	},
   116  	// Test that named and anonymous inputs are handled correctly
   117  	{
   118  		`InputChecker`, ``, []string{``},
   119  		[]string{`
   120  			[
   121  				{"type":"function","name":"noInput","constant":true,"inputs":[],"outputs":[]},
   122  				{"type":"function","name":"namedInput","constant":true,"inputs":[{"name":"str","type":"string"}],"outputs":[]},
   123  				{"type":"function","name":"anonInput","constant":true,"inputs":[{"name":"","type":"string"}],"outputs":[]},
   124  				{"type":"function","name":"namedInputs","constant":true,"inputs":[{"name":"str1","type":"string"},{"name":"str2","type":"string"}],"outputs":[]},
   125  				{"type":"function","name":"anonInputs","constant":true,"inputs":[{"name":"","type":"string"},{"name":"","type":"string"}],"outputs":[]},
   126  				{"type":"function","name":"mixedInputs","constant":true,"inputs":[{"name":"","type":"string"},{"name":"str","type":"string"}],"outputs":[]}
   127  			]
   128  		`},
   129  		`
   130  			"fmt"
   131  
   132  			"github.com/ethereum/go-ethereum/common"
   133  		`,
   134  		`if b, err := NewInputChecker(common.Address{}, nil); b == nil || err != nil {
   135  			 t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
   136  		 } else if false { // Don't run, just compile and test types
   137  			 var err error
   138  
   139  			 err = b.NoInput(nil)
   140  			 err = b.NamedInput(nil, "")
   141  			 err = b.AnonInput(nil, "")
   142  			 err = b.NamedInputs(nil, "", "")
   143  			 err = b.AnonInputs(nil, "", "")
   144  			 err = b.MixedInputs(nil, "", "")
   145  
   146  			 fmt.Println(err)
   147  		 }`,
   148  		nil,
   149  		nil,
   150  		nil,
   151  		nil,
   152  	},
   153  	// Test that named and anonymous outputs are handled correctly
   154  	{
   155  		`OutputChecker`, ``, []string{``},
   156  		[]string{`
   157  			[
   158  				{"type":"function","name":"noOutput","constant":true,"inputs":[],"outputs":[]},
   159  				{"type":"function","name":"namedOutput","constant":true,"inputs":[],"outputs":[{"name":"str","type":"string"}]},
   160  				{"type":"function","name":"anonOutput","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"}]},
   161  				{"type":"function","name":"namedOutputs","constant":true,"inputs":[],"outputs":[{"name":"str1","type":"string"},{"name":"str2","type":"string"}]},
   162  				{"type":"function","name":"collidingOutputs","constant":true,"inputs":[],"outputs":[{"name":"str","type":"string"},{"name":"Str","type":"string"}]},
   163  				{"type":"function","name":"anonOutputs","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"},{"name":"","type":"string"}]},
   164  				{"type":"function","name":"mixedOutputs","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"},{"name":"str","type":"string"}]}
   165  			]
   166  		`},
   167  		`
   168  			"fmt"
   169  
   170  			"github.com/ethereum/go-ethereum/common"
   171  		`,
   172  		`if b, err := NewOutputChecker(common.Address{}, nil); b == nil || err != nil {
   173  			 t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
   174  		 } else if false { // Don't run, just compile and test types
   175  			 var str1, str2 string
   176  			 var err error
   177  
   178  			 err              = b.NoOutput(nil)
   179  			 str1, err        = b.NamedOutput(nil)
   180  			 str1, err        = b.AnonOutput(nil)
   181  			 res, _          := b.NamedOutputs(nil)
   182  			 str1, str2, err  = b.CollidingOutputs(nil)
   183  			 str1, str2, err  = b.AnonOutputs(nil)
   184  			 str1, str2, err  = b.MixedOutputs(nil)
   185  
   186  			 fmt.Println(str1, str2, res.Str1, res.Str2, err)
   187  		 }`,
   188  		nil,
   189  		nil,
   190  		nil,
   191  		nil,
   192  	},
   193  	// Tests that named, anonymous and indexed events are handled correctly
   194  	{
   195  		`EventChecker`, ``, []string{``},
   196  		[]string{`
   197  			[
   198  				{"type":"event","name":"empty","inputs":[]},
   199  				{"type":"event","name":"indexed","inputs":[{"name":"addr","type":"address","indexed":true},{"name":"num","type":"int256","indexed":true}]},
   200  				{"type":"event","name":"mixed","inputs":[{"name":"addr","type":"address","indexed":true},{"name":"num","type":"int256"}]},
   201  				{"type":"event","name":"anonymous","anonymous":true,"inputs":[]},
   202  				{"type":"event","name":"dynamic","inputs":[{"name":"idxStr","type":"string","indexed":true},{"name":"idxDat","type":"bytes","indexed":true},{"name":"str","type":"string"},{"name":"dat","type":"bytes"}]}
   203  			]
   204  		`},
   205  		`
   206  			"fmt"
   207  			"math/big"
   208  			"reflect"
   209  
   210  			"github.com/ethereum/go-ethereum/common"
   211  		`,
   212  		`if e, err := NewEventChecker(common.Address{}, nil); e == nil || err != nil {
   213  			 t.Fatalf("binding (%v) nil or error (%v) not nil", e, nil)
   214  		 } else if false { // Don't run, just compile and test types
   215  			 var (
   216  				 err  error
   217  			   res  bool
   218  				 str  string
   219  				 dat  []byte
   220  				 hash common.Hash
   221  			 )
   222  			 _, err = e.FilterEmpty(nil)
   223  			 _, err = e.FilterIndexed(nil, []common.Address{}, []*big.Int{})
   224  
   225  			 mit, err := e.FilterMixed(nil, []common.Address{})
   226  
   227  			 res = mit.Next()  // Make sure the iterator has a Next method
   228  			 err = mit.Error() // Make sure the iterator has an Error method
   229  			 err = mit.Close() // Make sure the iterator has a Close method
   230  
   231  			 fmt.Println(mit.Event.Raw.BlockHash) // Make sure the raw log is contained within the results
   232  			 fmt.Println(mit.Event.Num)           // Make sure the unpacked non-indexed fields are present
   233  			 fmt.Println(mit.Event.Addr)          // Make sure the reconstructed indexed fields are present
   234  
   235  			 dit, err := e.FilterDynamic(nil, []string{}, [][]byte{})
   236  
   237  			 str  = dit.Event.Str    // Make sure non-indexed strings retain their type
   238  			 dat  = dit.Event.Dat    // Make sure non-indexed bytes retain their type
   239  			 hash = dit.Event.IdxStr // Make sure indexed strings turn into hashes
   240  			 hash = dit.Event.IdxDat // Make sure indexed bytes turn into hashes
   241  
   242  			 sink := make(chan *EventCheckerMixed)
   243  			 sub, err := e.WatchMixed(nil, sink, []common.Address{})
   244  			 defer sub.Unsubscribe()
   245  
   246  			 event := <-sink
   247  			 fmt.Println(event.Raw.BlockHash) // Make sure the raw log is contained within the results
   248  			 fmt.Println(event.Num)           // Make sure the unpacked non-indexed fields are present
   249  			 fmt.Println(event.Addr)          // Make sure the reconstructed indexed fields are present
   250  
   251  			 fmt.Println(res, str, dat, hash, err)
   252  		 }
   253  		 // Run a tiny reflection test to ensure disallowed methods don't appear
   254  		 if _, ok := reflect.TypeOf(&EventChecker{}).MethodByName("FilterAnonymous"); ok {
   255  		 	t.Errorf("binding has disallowed method (FilterAnonymous)")
   256  		 }`,
   257  		nil,
   258  		nil,
   259  		nil,
   260  		nil,
   261  	},
   262  	// Test that contract interactions (deploy, transact and call) generate working code
   263  	{
   264  		`Interactor`,
   265  		`
   266  			contract Interactor {
   267  				string public deployString;
   268  				string public transactString;
   269  
   270  				function Interactor(string str) {
   271  				  deployString = str;
   272  				}
   273  
   274  				function transact(string str) {
   275  				  transactString = str;
   276  				}
   277  			}
   278  		`,
   279  		[]string{`6060604052604051610328380380610328833981016040528051018060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10608d57805160ff19168380011785555b50607c9291505b8082111560ba57838155600101606b565b50505061026a806100be6000396000f35b828001600101855582156064579182015b828111156064578251826000505591602001919060010190609e565b509056606060405260e060020a60003504630d86a0e181146100315780636874e8091461008d578063d736c513146100ea575b005b610190600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b61019060008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b60206004803580820135601f81018490049093026080908101604052606084815261002f946024939192918401918190838280828437509496505050505050508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061023157805160ff19168380011785555b506102619291505b808211156102665760008155830161017d565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b820191906000526020600020905b81548152906001019060200180831161020c57829003601f168201915b505050505081565b82800160010185558215610175579182015b82811115610175578251826000505591602001919060010190610243565b505050565b509056`},
   280  		[]string{`[{"constant":true,"inputs":[],"name":"transactString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":true,"inputs":[],"name":"deployString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"str","type":"string"}],"name":"transact","outputs":[],"type":"function"},{"inputs":[{"name":"str","type":"string"}],"type":"constructor"}]`},
   281  		`
   282  			"math/big"
   283  
   284  			"github.com/ethereum/go-ethereum/accounts/abi/bind"
   285  			"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
   286  			"github.com/ethereum/go-ethereum/core"
   287  			"github.com/ethereum/go-ethereum/crypto"
   288  		`,
   289  		`
   290  			// Generate a new random account and a funded simulator
   291  			key, _ := crypto.GenerateKey()
   292  			auth := bind.NewKeyedTransactor(key)
   293  
   294  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   295  			defer sim.Close()
   296  
   297  			// Deploy an interaction tester contract and call a transaction on it
   298  			_, _, interactor, err := DeployInteractor(auth, sim, "Deploy string")
   299  			if err != nil {
   300  				t.Fatalf("Failed to deploy interactor contract: %v", err)
   301  			}
   302  			if _, err := interactor.Transact(auth, "Transact string"); err != nil {
   303  				t.Fatalf("Failed to transact with interactor contract: %v", err)
   304  			}
   305  			// Commit all pending transactions in the simulator and check the contract state
   306  			sim.Commit()
   307  
   308  			if str, err := interactor.DeployString(nil); err != nil {
   309  				t.Fatalf("Failed to retrieve deploy string: %v", err)
   310  			} else if str != "Deploy string" {
   311  				t.Fatalf("Deploy string mismatch: have '%s', want 'Deploy string'", str)
   312  			}
   313  			if str, err := interactor.TransactString(nil); err != nil {
   314  				t.Fatalf("Failed to retrieve transact string: %v", err)
   315  			} else if str != "Transact string" {
   316  				t.Fatalf("Transact string mismatch: have '%s', want 'Transact string'", str)
   317  			}
   318  		`,
   319  		nil,
   320  		nil,
   321  		nil,
   322  		nil,
   323  	},
   324  	// Tests that plain values can be properly returned and deserialized
   325  	{
   326  		`Getter`,
   327  		`
   328  			contract Getter {
   329  				function getter() constant returns (string, int, bytes32) {
   330  					return ("Hi", 1, sha3(""));
   331  				}
   332  			}
   333  		`,
   334  		[]string{`606060405260dc8060106000396000f3606060405260e060020a6000350463993a04b78114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`},
   335  		[]string{`[{"constant":true,"inputs":[],"name":"getter","outputs":[{"name":"","type":"string"},{"name":"","type":"int256"},{"name":"","type":"bytes32"}],"type":"function"}]`},
   336  		`
   337  			"math/big"
   338  
   339  			"github.com/ethereum/go-ethereum/accounts/abi/bind"
   340  			"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
   341  			"github.com/ethereum/go-ethereum/core"
   342  			"github.com/ethereum/go-ethereum/crypto"
   343  		`,
   344  		`
   345  			// Generate a new random account and a funded simulator
   346  			key, _ := crypto.GenerateKey()
   347  			auth := bind.NewKeyedTransactor(key)
   348  
   349  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   350  			defer sim.Close()
   351  
   352  			// Deploy a tuple tester contract and execute a structured call on it
   353  			_, _, getter, err := DeployGetter(auth, sim)
   354  			if err != nil {
   355  				t.Fatalf("Failed to deploy getter contract: %v", err)
   356  			}
   357  			sim.Commit()
   358  
   359  			if str, num, _, err := getter.Getter(nil); err != nil {
   360  				t.Fatalf("Failed to call anonymous field retriever: %v", err)
   361  			} else if str != "Hi" || num.Cmp(big.NewInt(1)) != 0 {
   362  				t.Fatalf("Retrieved value mismatch: have %v/%v, want %v/%v", str, num, "Hi", 1)
   363  			}
   364  		`,
   365  		nil,
   366  		nil,
   367  		nil,
   368  		nil,
   369  	},
   370  	// Tests that tuples can be properly returned and deserialized
   371  	{
   372  		`Tupler`,
   373  		`
   374  			contract Tupler {
   375  				function tuple() constant returns (string a, int b, bytes32 c) {
   376  					return ("Hi", 1, sha3(""));
   377  				}
   378  			}
   379  		`,
   380  		[]string{`606060405260dc8060106000396000f3606060405260e060020a60003504633175aae28114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`},
   381  		[]string{`[{"constant":true,"inputs":[],"name":"tuple","outputs":[{"name":"a","type":"string"},{"name":"b","type":"int256"},{"name":"c","type":"bytes32"}],"type":"function"}]`},
   382  		`
   383  			"math/big"
   384  
   385  			"github.com/ethereum/go-ethereum/accounts/abi/bind"
   386  			"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
   387  			"github.com/ethereum/go-ethereum/core"
   388  			"github.com/ethereum/go-ethereum/crypto"
   389  		`,
   390  		`
   391  			// Generate a new random account and a funded simulator
   392  			key, _ := crypto.GenerateKey()
   393  			auth := bind.NewKeyedTransactor(key)
   394  
   395  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   396  			defer sim.Close()
   397  
   398  			// Deploy a tuple tester contract and execute a structured call on it
   399  			_, _, tupler, err := DeployTupler(auth, sim)
   400  			if err != nil {
   401  				t.Fatalf("Failed to deploy tupler contract: %v", err)
   402  			}
   403  			sim.Commit()
   404  
   405  			if res, err := tupler.Tuple(nil); err != nil {
   406  				t.Fatalf("Failed to call structure retriever: %v", err)
   407  			} else if res.A != "Hi" || res.B.Cmp(big.NewInt(1)) != 0 {
   408  				t.Fatalf("Retrieved value mismatch: have %v/%v, want %v/%v", res.A, res.B, "Hi", 1)
   409  			}
   410  		`,
   411  		nil,
   412  		nil,
   413  		nil,
   414  		nil,
   415  	},
   416  	// Tests that arrays/slices can be properly returned and deserialized.
   417  	// Only addresses are tested, remainder just compiled to keep the test small.
   418  	{
   419  		`Slicer`,
   420  		`
   421  			contract Slicer {
   422  				function echoAddresses(address[] input) constant returns (address[] output) {
   423  					return input;
   424  				}
   425  				function echoInts(int[] input) constant returns (int[] output) {
   426  					return input;
   427  				}
   428  				function echoFancyInts(uint24[23] input) constant returns (uint24[23] output) {
   429  					return input;
   430  				}
   431  				function echoBools(bool[] input) constant returns (bool[] output) {
   432  					return input;
   433  				}
   434  			}
   435  		`,
   436  		[]string{`606060405261015c806100126000396000f3606060405260e060020a6000350463be1127a3811461003c578063d88becc014610092578063e15a3db71461003c578063f637e5891461003c575b005b604080516020600480358082013583810285810185019096528085526100ee959294602494909392850192829185019084908082843750949650505050505050604080516020810190915260009052805b919050565b604080516102e0818101909252610138916004916102e491839060179083908390808284375090955050505050506102e0604051908101604052806017905b60008152602001906001900390816100d15790505081905061008d565b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600f02600301f1509050019250505060405180910390f35b60405180826102e0808381846000600461015cf15090500191505060405180910390f3`},
   437  		[]string{`[{"constant":true,"inputs":[{"name":"input","type":"address[]"}],"name":"echoAddresses","outputs":[{"name":"output","type":"address[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"uint24[23]"}],"name":"echoFancyInts","outputs":[{"name":"output","type":"uint24[23]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"int256[]"}],"name":"echoInts","outputs":[{"name":"output","type":"int256[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"bool[]"}],"name":"echoBools","outputs":[{"name":"output","type":"bool[]"}],"type":"function"}]`},
   438  		`
   439  			"math/big"
   440  			"reflect"
   441  
   442  			"github.com/ethereum/go-ethereum/accounts/abi/bind"
   443  			"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
   444  			"github.com/ethereum/go-ethereum/common"
   445  			"github.com/ethereum/go-ethereum/core"
   446  			"github.com/ethereum/go-ethereum/crypto"
   447  		`,
   448  		`
   449  			// Generate a new random account and a funded simulator
   450  			key, _ := crypto.GenerateKey()
   451  			auth := bind.NewKeyedTransactor(key)
   452  
   453  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   454  			defer sim.Close()
   455  
   456  			// Deploy a slice tester contract and execute a n array call on it
   457  			_, _, slicer, err := DeploySlicer(auth, sim)
   458  			if err != nil {
   459  					t.Fatalf("Failed to deploy slicer contract: %v", err)
   460  			}
   461  			sim.Commit()
   462  
   463  			if out, err := slicer.EchoAddresses(nil, []common.Address{auth.From, common.Address{}}); err != nil {
   464  					t.Fatalf("Failed to call slice echoer: %v", err)
   465  			} else if !reflect.DeepEqual(out, []common.Address{auth.From, common.Address{}}) {
   466  					t.Fatalf("Slice return mismatch: have %v, want %v", out, []common.Address{auth.From, common.Address{}})
   467  			}
   468  		`,
   469  		nil,
   470  		nil,
   471  		nil,
   472  		nil,
   473  	},
   474  	// Tests that anonymous default methods can be correctly invoked
   475  	{
   476  		`Defaulter`,
   477  		`
   478  			contract Defaulter {
   479  				address public caller;
   480  
   481  				function() {
   482  					caller = msg.sender;
   483  				}
   484  			}
   485  		`,
   486  		[]string{`6060604052606a8060106000396000f360606040523615601d5760e060020a6000350463fc9c8d3981146040575b605e6000805473ffffffffffffffffffffffffffffffffffffffff191633179055565b606060005473ffffffffffffffffffffffffffffffffffffffff1681565b005b6060908152602090f3`},
   487  		[]string{`[{"constant":true,"inputs":[],"name":"caller","outputs":[{"name":"","type":"address"}],"type":"function"}]`},
   488  		`
   489  			"math/big"
   490  
   491  			"github.com/ethereum/go-ethereum/accounts/abi/bind"
   492  			"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
   493  			"github.com/ethereum/go-ethereum/core"
   494  			"github.com/ethereum/go-ethereum/crypto"
   495  		`,
   496  		`
   497  			// Generate a new random account and a funded simulator
   498  			key, _ := crypto.GenerateKey()
   499  			auth := bind.NewKeyedTransactor(key)
   500  
   501  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   502  			defer sim.Close()
   503  
   504  			// Deploy a default method invoker contract and execute its default method
   505  			_, _, defaulter, err := DeployDefaulter(auth, sim)
   506  			if err != nil {
   507  				t.Fatalf("Failed to deploy defaulter contract: %v", err)
   508  			}
   509  			if _, err := (&DefaulterRaw{defaulter}).Transfer(auth); err != nil {
   510  				t.Fatalf("Failed to invoke default method: %v", err)
   511  			}
   512  			sim.Commit()
   513  
   514  			if caller, err := defaulter.Caller(nil); err != nil {
   515  				t.Fatalf("Failed to call address retriever: %v", err)
   516  			} else if (caller != auth.From) {
   517  				t.Fatalf("Address mismatch: have %v, want %v", caller, auth.From)
   518  			}
   519  		`,
   520  		nil,
   521  		nil,
   522  		nil,
   523  		nil,
   524  	},
   525  	// Tests that non-existent contracts are reported as such (though only simulator test)
   526  	{
   527  		`NonExistent`,
   528  		`
   529  			contract NonExistent {
   530  				function String() constant returns(string) {
   531  					return "I don't exist";
   532  				}
   533  			}
   534  		`,
   535  		[]string{`6060604052609f8060106000396000f3606060405260e060020a6000350463f97a60058114601a575b005b600060605260c0604052600d60809081527f4920646f6e27742065786973740000000000000000000000000000000000000060a052602060c0908152600d60e081905281906101009060a09080838184600060046012f15050815172ffffffffffffffffffffffffffffffffffffff1916909152505060405161012081900392509050f3`},
   536  		[]string{`[{"constant":true,"inputs":[],"name":"String","outputs":[{"name":"","type":"string"}],"type":"function"}]`},
   537  		`
   538  			"github.com/ethereum/go-ethereum/accounts/abi/bind"
   539  			"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
   540  			"github.com/ethereum/go-ethereum/common"
   541  			"github.com/ethereum/go-ethereum/core"
   542  		`,
   543  		`
   544  			// Create a simulator and wrap a non-deployed contract
   545  
   546  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{}, uint64(10000000000))
   547  			defer sim.Close()
   548  
   549  			nonexistent, err := NewNonExistent(common.Address{}, sim)
   550  			if err != nil {
   551  				t.Fatalf("Failed to access non-existent contract: %v", err)
   552  			}
   553  			// Ensure that contract calls fail with the appropriate error
   554  			if res, err := nonexistent.String(nil); err == nil {
   555  				t.Fatalf("Call succeeded on non-existent contract: %v", res)
   556  			} else if (err != bind.ErrNoCode) {
   557  				t.Fatalf("Error mismatch: have %v, want %v", err, bind.ErrNoCode)
   558  			}
   559  		`,
   560  		nil,
   561  		nil,
   562  		nil,
   563  		nil,
   564  	},
   565  	// Tests that gas estimation works for contracts with weird gas mechanics too.
   566  	{
   567  		`FunkyGasPattern`,
   568  		`
   569  			contract FunkyGasPattern {
   570  				string public field;
   571  
   572  				function SetField(string value) {
   573  					// This check will screw gas estimation! Good, good!
   574  					if (msg.gas < 100000) {
   575  						throw;
   576  					}
   577  					field = value;
   578  				}
   579  			}
   580  		`,
   581  		[]string{`606060405261021c806100126000396000f3606060405260e060020a600035046323fcf32a81146100265780634f28bf0e1461007b575b005b6040805160206004803580820135601f8101849004840285018401909552848452610024949193602493909291840191908190840183828082843750949650505050505050620186a05a101561014e57610002565b6100db60008054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281529291908301828280156102145780601f106101e957610100808354040283529160200191610214565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561013b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b505050565b8060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106101b557805160ff19168380011785555b506101499291505b808211156101e557600081556001016101a1565b82800160010185558215610199579182015b828111156101995782518260005055916020019190600101906101c7565b5090565b820191906000526020600020905b8154815290600101906020018083116101f757829003601f168201915b50505050508156`},
   582  		[]string{`[{"constant":false,"inputs":[{"name":"value","type":"string"}],"name":"SetField","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"field","outputs":[{"name":"","type":"string"}],"type":"function"}]`},
   583  		`
   584  			"math/big"
   585  
   586  			"github.com/ethereum/go-ethereum/accounts/abi/bind"
   587  			"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
   588  			"github.com/ethereum/go-ethereum/core"
   589  			"github.com/ethereum/go-ethereum/crypto"
   590  		`,
   591  		`
   592  			// Generate a new random account and a funded simulator
   593  			key, _ := crypto.GenerateKey()
   594  			auth := bind.NewKeyedTransactor(key)
   595  
   596  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   597  			defer sim.Close()
   598  
   599  			// Deploy a funky gas pattern contract
   600  			_, _, limiter, err := DeployFunkyGasPattern(auth, sim)
   601  			if err != nil {
   602  				t.Fatalf("Failed to deploy funky contract: %v", err)
   603  			}
   604  			sim.Commit()
   605  
   606  			// Set the field with automatic estimation and check that it succeeds
   607  			if _, err := limiter.SetField(auth, "automatic"); err != nil {
   608  				t.Fatalf("Failed to call automatically gased transaction: %v", err)
   609  			}
   610  			sim.Commit()
   611  
   612  			if field, _ := limiter.Field(nil); field != "automatic" {
   613  				t.Fatalf("Field mismatch: have %v, want %v", field, "automatic")
   614  			}
   615  		`,
   616  		nil,
   617  		nil,
   618  		nil,
   619  		nil,
   620  	},
   621  	// Test that constant functions can be called from an (optional) specified address
   622  	{
   623  		`CallFrom`,
   624  		`
   625  			contract CallFrom {
   626  				function callFrom() constant returns(address) {
   627  					return msg.sender;
   628  				}
   629  			}
   630  		`, []string{`6060604052346000575b6086806100176000396000f300606060405263ffffffff60e060020a60003504166349f8e98281146022575b6000565b34600057602c6055565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b335b905600a165627a7a72305820aef6b7685c0fa24ba6027e4870404a57df701473fe4107741805c19f5138417c0029`},
   631  		[]string{`[{"constant":true,"inputs":[],"name":"callFrom","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"}]`},
   632  		`
   633  			"math/big"
   634  
   635  			"github.com/ethereum/go-ethereum/accounts/abi/bind"
   636  			"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
   637  			"github.com/ethereum/go-ethereum/common"
   638  			"github.com/ethereum/go-ethereum/core"
   639  			"github.com/ethereum/go-ethereum/crypto"
   640  		`,
   641  		`
   642  			// Generate a new random account and a funded simulator
   643  			key, _ := crypto.GenerateKey()
   644  			auth := bind.NewKeyedTransactor(key)
   645  
   646  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   647  			defer sim.Close()
   648  
   649  			// Deploy a sender tester contract and execute a structured call on it
   650  			_, _, callfrom, err := DeployCallFrom(auth, sim)
   651  			if err != nil {
   652  				t.Fatalf("Failed to deploy sender contract: %v", err)
   653  			}
   654  			sim.Commit()
   655  
   656  			if res, err := callfrom.CallFrom(nil); err != nil {
   657  				t.Errorf("Failed to call constant function: %v", err)
   658  			} else if res != (common.Address{}) {
   659  				t.Errorf("Invalid address returned, want: %x, got: %x", (common.Address{}), res)
   660  			}
   661  
   662  			for _, addr := range []common.Address{common.Address{}, common.Address{1}, common.Address{2}} {
   663  				if res, err := callfrom.CallFrom(&bind.CallOpts{From: addr}); err != nil {
   664  					t.Fatalf("Failed to call constant function: %v", err)
   665  				} else if res != addr {
   666  					t.Fatalf("Invalid address returned, want: %x, got: %x", addr, res)
   667  				}
   668  			}
   669  		`,
   670  		nil,
   671  		nil,
   672  		nil,
   673  		nil,
   674  	},
   675  	// Tests that methods and returns with underscores inside work correctly.
   676  	{
   677  		`Underscorer`,
   678  		`
   679  		contract Underscorer {
   680  			function UnderscoredOutput() constant returns (int _int, string _string) {
   681  				return (314, "pi");
   682  			}
   683  			function LowerLowerCollision() constant returns (int _res, int res) {
   684  				return (1, 2);
   685  			}
   686  			function LowerUpperCollision() constant returns (int _res, int Res) {
   687  				return (1, 2);
   688  			}
   689  			function UpperLowerCollision() constant returns (int _Res, int res) {
   690  				return (1, 2);
   691  			}
   692  			function UpperUpperCollision() constant returns (int _Res, int Res) {
   693  				return (1, 2);
   694  			}
   695  			function PurelyUnderscoredOutput() constant returns (int _, int res) {
   696  				return (1, 2);
   697  			}
   698  			function AllPurelyUnderscoredOutput() constant returns (int _, int __) {
   699  				return (1, 2);
   700  			}
   701  			function _under_scored_func() constant returns (int _int) {
   702  				return 0;
   703  			}
   704  		}
   705  		`, []string{`6060604052341561000f57600080fd5b6103858061001e6000396000f30060606040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303a592131461009357806346546dbe146100c357806367e6633d146100ec5780639df4848514610181578063af7486ab146101b1578063b564b34d146101e1578063e02ab24d14610211578063e409ca4514610241575b600080fd5b341561009e57600080fd5b6100a6610271565b604051808381526020018281526020019250505060405180910390f35b34156100ce57600080fd5b6100d6610286565b6040518082815260200191505060405180910390f35b34156100f757600080fd5b6100ff61028e565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561014557808201518184015260208101905061012a565b50505050905090810190601f1680156101725780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b341561018c57600080fd5b6101946102dc565b604051808381526020018281526020019250505060405180910390f35b34156101bc57600080fd5b6101c46102f1565b604051808381526020018281526020019250505060405180910390f35b34156101ec57600080fd5b6101f4610306565b604051808381526020018281526020019250505060405180910390f35b341561021c57600080fd5b61022461031b565b604051808381526020018281526020019250505060405180910390f35b341561024c57600080fd5b610254610330565b604051808381526020018281526020019250505060405180910390f35b60008060016002819150809050915091509091565b600080905090565b6000610298610345565b61013a8090506040805190810160405280600281526020017f7069000000000000000000000000000000000000000000000000000000000000815250915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b6020604051908101604052806000815250905600a165627a7a72305820d1a53d9de9d1e3d55cb3dc591900b63c4f1ded79114f7b79b332684840e186a40029`},
   706  		[]string{`[{"constant":true,"inputs":[],"name":"LowerUpperCollision","outputs":[{"name":"_res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_under_scored_func","outputs":[{"name":"_int","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UnderscoredOutput","outputs":[{"name":"_int","type":"int256"},{"name":"_string","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperLowerCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AllPurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"__","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperUpperCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LowerLowerCollision","outputs":[{"name":"_res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"}]`},
   707  		`
   708  			"fmt"
   709  			"math/big"
   710  
   711  			"github.com/ethereum/go-ethereum/accounts/abi/bind"
   712  			"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
   713  			"github.com/ethereum/go-ethereum/core"
   714  			"github.com/ethereum/go-ethereum/crypto"
   715  		`,
   716  		`
   717  			// Generate a new random account and a funded simulator
   718  			key, _ := crypto.GenerateKey()
   719  			auth := bind.NewKeyedTransactor(key)
   720  
   721  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   722  			defer sim.Close()
   723  
   724  			// Deploy a underscorer tester contract and execute a structured call on it
   725  			_, _, underscorer, err := DeployUnderscorer(auth, sim)
   726  			if err != nil {
   727  				t.Fatalf("Failed to deploy underscorer contract: %v", err)
   728  			}
   729  			sim.Commit()
   730  
   731  			// Verify that underscored return values correctly parse into structs
   732  			if res, err := underscorer.UnderscoredOutput(nil); err != nil {
   733  				t.Errorf("Failed to call constant function: %v", err)
   734  			} else if res.Int.Cmp(big.NewInt(314)) != 0 || res.String != "pi" {
   735  				t.Errorf("Invalid result, want: {314, \"pi\"}, got: %+v", res)
   736  			}
   737  			// Verify that underscored and non-underscored name collisions force tuple outputs
   738  			var a, b *big.Int
   739  
   740  			a, b, _ = underscorer.LowerLowerCollision(nil)
   741  			a, b, _ = underscorer.LowerUpperCollision(nil)
   742  			a, b, _ = underscorer.UpperLowerCollision(nil)
   743  			a, b, _ = underscorer.UpperUpperCollision(nil)
   744  			a, b, _ = underscorer.PurelyUnderscoredOutput(nil)
   745  			a, b, _ = underscorer.AllPurelyUnderscoredOutput(nil)
   746  			a, _ = underscorer.UnderScoredFunc(nil)
   747  
   748  			fmt.Println(a, b, err)
   749  		`,
   750  		nil,
   751  		nil,
   752  		nil,
   753  		nil,
   754  	},
   755  	// Tests that logs can be successfully filtered and decoded.
   756  	{
   757  		`Eventer`,
   758  		`
   759  			contract Eventer {
   760  				event SimpleEvent (
   761  					address indexed Addr,
   762  					bytes32 indexed Id,
   763  					bool    indexed Flag,
   764  					uint    Value
   765  				);
   766  				function raiseSimpleEvent(address addr, bytes32 id, bool flag, uint value) {
   767  					SimpleEvent(addr, id, flag, value);
   768  				}
   769  
   770  				event NodataEvent (
   771  					uint   indexed Number,
   772  					int16  indexed Short,
   773  					uint32 indexed Long
   774  				);
   775  				function raiseNodataEvent(uint number, int16 short, uint32 long) {
   776  					NodataEvent(number, short, long);
   777  				}
   778  
   779  				event DynamicEvent (
   780  					string indexed IndexedString,
   781  					bytes  indexed IndexedBytes,
   782  					string NonIndexedString,
   783  					bytes  NonIndexedBytes
   784  				);
   785  				function raiseDynamicEvent(string str, bytes blob) {
   786  					DynamicEvent(str, blob, str, blob);
   787  				}
   788  
   789  				event FixedBytesEvent (
   790  					bytes24 indexed IndexedBytes,
   791  					bytes24 NonIndexedBytes
   792  				);
   793  				function raiseFixedBytesEvent(bytes24 blob) {
   794  					FixedBytesEvent(blob, blob);
   795  				}
   796  			}
   797  		`,
   798  		[]string{`608060405234801561001057600080fd5b5061043f806100206000396000f3006080604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663528300ff8114610066578063630c31e2146100ff5780636cc6b94014610138578063c7d116dd1461015b575b600080fd5b34801561007257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100fd94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506101829650505050505050565b005b34801561010b57600080fd5b506100fd73ffffffffffffffffffffffffffffffffffffffff60043516602435604435151560643561033c565b34801561014457600080fd5b506100fd67ffffffffffffffff1960043516610394565b34801561016757600080fd5b506100fd60043560243560010b63ffffffff604435166103d6565b806040518082805190602001908083835b602083106101b25780518252601f199092019160209182019101610193565b51815160209384036101000a6000190180199092169116179052604051919093018190038120875190955087945090928392508401908083835b6020831061020b5780518252601f1990920191602091820191016101ec565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f3281fd4f5e152dd3385df49104a3f633706e21c9e80672e88d3bcddf33101f008484604051808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561029c578181015183820152602001610284565b50505050905090810190601f1680156102c95780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156102fc5781810151838201526020016102e4565b50505050905090810190601f1680156103295780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a35050565b60408051828152905183151591859173ffffffffffffffffffffffffffffffffffffffff8816917f1f097de4289df643bd9c11011cc61367aa12983405c021056e706eb5ba1250c8919081900360200190a450505050565b6040805167ffffffffffffffff19831680825291517fcdc4c1b1aed5524ffb4198d7a5839a34712baef5fa06884fac7559f4a5854e0a9181900360200190a250565b8063ffffffff168260010b847f3ca7f3a77e5e6e15e781850bc82e32adfa378a2a609370db24b4d0fae10da2c960405160405180910390a45050505600a165627a7a72305820468b5843bf653145bd924b323c64ef035d3dd922c170644b44d61aa666ea6eee0029`},
   799  		[]string{`[{"constant":false,"inputs":[{"name":"str","type":"string"},{"name":"blob","type":"bytes"}],"name":"raiseDynamicEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"id","type":"bytes32"},{"name":"flag","type":"bool"},{"name":"value","type":"uint256"}],"name":"raiseSimpleEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"blob","type":"bytes24"}],"name":"raiseFixedBytesEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"number","type":"uint256"},{"name":"short","type":"int16"},{"name":"long","type":"uint32"}],"name":"raiseNodataEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Addr","type":"address"},{"indexed":true,"name":"Id","type":"bytes32"},{"indexed":true,"name":"Flag","type":"bool"},{"indexed":false,"name":"Value","type":"uint256"}],"name":"SimpleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Number","type":"uint256"},{"indexed":true,"name":"Short","type":"int16"},{"indexed":true,"name":"Long","type":"uint32"}],"name":"NodataEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedString","type":"string"},{"indexed":true,"name":"IndexedBytes","type":"bytes"},{"indexed":false,"name":"NonIndexedString","type":"string"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes"}],"name":"DynamicEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedBytes","type":"bytes24"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes24"}],"name":"FixedBytesEvent","type":"event"}]`},
   800  		`
   801  			"math/big"
   802  			"time"
   803  
   804  			"github.com/ethereum/go-ethereum/accounts/abi/bind"
   805  			"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
   806  			"github.com/ethereum/go-ethereum/common"
   807  			"github.com/ethereum/go-ethereum/core"
   808  			"github.com/ethereum/go-ethereum/crypto"
   809  		`,
   810  		`
   811  			// Generate a new random account and a funded simulator
   812  			key, _ := crypto.GenerateKey()
   813  			auth := bind.NewKeyedTransactor(key)
   814  
   815  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
   816  			defer sim.Close()
   817  
   818  			// Deploy an eventer contract
   819  			_, _, eventer, err := DeployEventer(auth, sim)
   820  			if err != nil {
   821  				t.Fatalf("Failed to deploy eventer contract: %v", err)
   822  			}
   823  			sim.Commit()
   824  
   825  			// Inject a few events into the contract, gradually more in each block
   826  			for i := 1; i <= 3; i++ {
   827  				for j := 1; j <= i; j++ {
   828  					if _, err := eventer.RaiseSimpleEvent(auth, common.Address{byte(j)}, [32]byte{byte(j)}, true, big.NewInt(int64(10*i+j))); err != nil {
   829  						t.Fatalf("block %d, event %d: raise failed: %v", i, j, err)
   830  					}
   831  				}
   832  				sim.Commit()
   833  			}
   834  			// Test filtering for certain events and ensure they can be found
   835  			sit, err := eventer.FilterSimpleEvent(nil, []common.Address{common.Address{1}, common.Address{3}}, [][32]byte{{byte(1)}, {byte(2)}, {byte(3)}}, []bool{true})
   836  			if err != nil {
   837  				t.Fatalf("failed to filter for simple events: %v", err)
   838  			}
   839  			defer sit.Close()
   840  
   841  			sit.Next()
   842  			if sit.Event.Value.Uint64() != 11 || !sit.Event.Flag {
   843  				t.Errorf("simple log content mismatch: have %v, want {11, true}", sit.Event)
   844  			}
   845  			sit.Next()
   846  			if sit.Event.Value.Uint64() != 21 || !sit.Event.Flag {
   847  				t.Errorf("simple log content mismatch: have %v, want {21, true}", sit.Event)
   848  			}
   849  			sit.Next()
   850  			if sit.Event.Value.Uint64() != 31 || !sit.Event.Flag {
   851  				t.Errorf("simple log content mismatch: have %v, want {31, true}", sit.Event)
   852  			}
   853  			sit.Next()
   854  			if sit.Event.Value.Uint64() != 33 || !sit.Event.Flag {
   855  				t.Errorf("simple log content mismatch: have %v, want {33, true}", sit.Event)
   856  			}
   857  
   858  			if sit.Next() {
   859  				t.Errorf("unexpected simple event found: %+v", sit.Event)
   860  			}
   861  			if err = sit.Error(); err != nil {
   862  				t.Fatalf("simple event iteration failed: %v", err)
   863  			}
   864  			// Test raising and filtering for an event with no data component
   865  			if _, err := eventer.RaiseNodataEvent(auth, big.NewInt(314), 141, 271); err != nil {
   866  				t.Fatalf("failed to raise nodata event: %v", err)
   867  			}
   868  			sim.Commit()
   869  
   870  			nit, err := eventer.FilterNodataEvent(nil, []*big.Int{big.NewInt(314)}, []int16{140, 141, 142}, []uint32{271})
   871  			if err != nil {
   872  				t.Fatalf("failed to filter for nodata events: %v", err)
   873  			}
   874  			defer nit.Close()
   875  
   876  			if !nit.Next() {
   877  				t.Fatalf("nodata log not found: %v", nit.Error())
   878  			}
   879  			if nit.Event.Number.Uint64() != 314 {
   880  				t.Errorf("nodata log content mismatch: have %v, want 314", nit.Event.Number)
   881  			}
   882  			if nit.Next() {
   883  				t.Errorf("unexpected nodata event found: %+v", nit.Event)
   884  			}
   885  			if err = nit.Error(); err != nil {
   886  				t.Fatalf("nodata event iteration failed: %v", err)
   887  			}
   888  			// Test raising and filtering for events with dynamic indexed components
   889  			if _, err := eventer.RaiseDynamicEvent(auth, "Hello", []byte("World")); err != nil {
   890  				t.Fatalf("failed to raise dynamic event: %v", err)
   891  			}
   892  			sim.Commit()
   893  
   894  			dit, err := eventer.FilterDynamicEvent(nil, []string{"Hi", "Hello", "Bye"}, [][]byte{[]byte("World")})
   895  			if err != nil {
   896  				t.Fatalf("failed to filter for dynamic events: %v", err)
   897  			}
   898  			defer dit.Close()
   899  
   900  			if !dit.Next() {
   901  				t.Fatalf("dynamic log not found: %v", dit.Error())
   902  			}
   903  			if dit.Event.NonIndexedString != "Hello" || string(dit.Event.NonIndexedBytes) != "World" ||	dit.Event.IndexedString != common.HexToHash("0x06b3dfaec148fb1bb2b066f10ec285e7c9bf402ab32aa78a5d38e34566810cd2") || dit.Event.IndexedBytes != common.HexToHash("0xf2208c967df089f60420785795c0a9ba8896b0f6f1867fa7f1f12ad6f79c1a18") {
   904  				t.Errorf("dynamic log content mismatch: have %v, want {'0x06b3dfaec148fb1bb2b066f10ec285e7c9bf402ab32aa78a5d38e34566810cd2, '0xf2208c967df089f60420785795c0a9ba8896b0f6f1867fa7f1f12ad6f79c1a18', 'Hello', 'World'}", dit.Event)
   905  			}
   906  			if dit.Next() {
   907  				t.Errorf("unexpected dynamic event found: %+v", dit.Event)
   908  			}
   909  			if err = dit.Error(); err != nil {
   910  				t.Fatalf("dynamic event iteration failed: %v", err)
   911  			}
   912  			// Test raising and filtering for events with fixed bytes components
   913  			var fblob [24]byte
   914  			copy(fblob[:], []byte("Fixed Bytes"))
   915  
   916  			if _, err := eventer.RaiseFixedBytesEvent(auth, fblob); err != nil {
   917  				t.Fatalf("failed to raise fixed bytes event: %v", err)
   918  			}
   919  			sim.Commit()
   920  
   921  			fit, err := eventer.FilterFixedBytesEvent(nil, [][24]byte{fblob})
   922  			if err != nil {
   923  				t.Fatalf("failed to filter for fixed bytes events: %v", err)
   924  			}
   925  			defer fit.Close()
   926  
   927  			if !fit.Next() {
   928  				t.Fatalf("fixed bytes log not found: %v", fit.Error())
   929  			}
   930  			if fit.Event.NonIndexedBytes != fblob || fit.Event.IndexedBytes != fblob {
   931  				t.Errorf("fixed bytes log content mismatch: have %v, want {'%x', '%x'}", fit.Event, fblob, fblob)
   932  			}
   933  			if fit.Next() {
   934  				t.Errorf("unexpected fixed bytes event found: %+v", fit.Event)
   935  			}
   936  			if err = fit.Error(); err != nil {
   937  				t.Fatalf("fixed bytes event iteration failed: %v", err)
   938  			}
   939  			// Test subscribing to an event and raising it afterwards
   940  			ch := make(chan *EventerSimpleEvent, 16)
   941  			sub, err := eventer.WatchSimpleEvent(nil, ch, nil, nil, nil)
   942  			if err != nil {
   943  				t.Fatalf("failed to subscribe to simple events: %v", err)
   944  			}
   945  			if _, err := eventer.RaiseSimpleEvent(auth, common.Address{255}, [32]byte{255}, true, big.NewInt(255)); err != nil {
   946  				t.Fatalf("failed to raise subscribed simple event: %v", err)
   947  			}
   948  			sim.Commit()
   949  
   950  			select {
   951  			case event := <-ch:
   952  				if event.Value.Uint64() != 255 {
   953  					t.Errorf("simple log content mismatch: have %v, want 255", event)
   954  				}
   955  			case <-time.After(250 * time.Millisecond):
   956  				t.Fatalf("subscribed simple event didn't arrive")
   957  			}
   958  			// Unsubscribe from the event and make sure we're not delivered more
   959  			sub.Unsubscribe()
   960  
   961  			if _, err := eventer.RaiseSimpleEvent(auth, common.Address{254}, [32]byte{254}, true, big.NewInt(254)); err != nil {
   962  				t.Fatalf("failed to raise subscribed simple event: %v", err)
   963  			}
   964  			sim.Commit()
   965  
   966  			select {
   967  			case event := <-ch:
   968  				t.Fatalf("unsubscribed simple event arrived: %v", event)
   969  			case <-time.After(250 * time.Millisecond):
   970  			}
   971  		`,
   972  		nil,
   973  		nil,
   974  		nil,
   975  		nil,
   976  	},
   977  	{
   978  		`DeeplyNestedArray`,
   979  		`
   980  			contract DeeplyNestedArray {
   981  				uint64[3][4][5] public deepUint64Array;
   982  				function storeDeepUintArray(uint64[3][4][5] arr) public {
   983  					deepUint64Array = arr;
   984  				}
   985  				function retrieveDeepArray() public view returns (uint64[3][4][5]) {
   986  					return deepUint64Array;
   987  				}
   988  			}
   989  		`,
   990  		[]string{`6060604052341561000f57600080fd5b6106438061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063344248551461005c5780638ed4573a1461011457806398ed1856146101ab575b600080fd5b341561006757600080fd5b610112600480806107800190600580602002604051908101604052809291906000905b828210156101055783826101800201600480602002604051908101604052809291906000905b828210156100f25783826060020160038060200260405190810160405280929190826003602002808284378201915050505050815260200190600101906100b0565b505050508152602001906001019061008a565b5050505091905050610208565b005b341561011f57600080fd5b61012761021d565b604051808260056000925b8184101561019b578284602002015160046000925b8184101561018d5782846020020151600360200280838360005b8381101561017c578082015181840152602081019050610161565b505050509050019260010192610147565b925050509260010192610132565b9250505091505060405180910390f35b34156101b657600080fd5b6101de6004808035906020019091908035906020019091908035906020019091905050610309565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b80600090600561021992919061035f565b5050565b6102256103b0565b6000600580602002604051908101604052809291906000905b8282101561030057838260040201600480602002604051908101604052809291906000905b828210156102ed578382016003806020026040519081016040528092919082600380156102d9576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116102945790505b505050505081526020019060010190610263565b505050508152602001906001019061023e565b50505050905090565b60008360058110151561031857fe5b600402018260048110151561032957fe5b018160038110151561033757fe5b6004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b826005600402810192821561039f579160200282015b8281111561039e5782518290600461038e9291906103df565b5091602001919060040190610375565b5b5090506103ac919061042d565b5090565b610780604051908101604052806005905b6103c9610459565b8152602001906001900390816103c15790505090565b826004810192821561041c579160200282015b8281111561041b5782518290600361040b929190610488565b50916020019190600101906103f2565b5b5090506104299190610536565b5090565b61045691905b8082111561045257600081816104499190610562565b50600401610433565b5090565b90565b610180604051908101604052806004905b6104726105a7565b81526020019060019003908161046a5790505090565b82600380016004900481019282156105255791602002820160005b838211156104ef57835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555092602001926008016020816007010492830192600103026104a3565b80156105235782816101000a81549067ffffffffffffffff02191690556008016020816007010492830192600103026104ef565b505b50905061053291906105d9565b5090565b61055f91905b8082111561055b57600081816105529190610610565b5060010161053c565b5090565b90565b50600081816105719190610610565b50600101600081816105839190610610565b50600101600081816105959190610610565b5060010160006105a59190610610565b565b6060604051908101604052806003905b600067ffffffffffffffff168152602001906001900390816105b75790505090565b61060d91905b8082111561060957600081816101000a81549067ffffffffffffffff0219169055506001016105df565b5090565b90565b50600090555600a165627a7a7230582087e5a43f6965ab6ef7a4ff056ab80ed78fd8c15cff57715a1bf34ec76a93661c0029`},
   991  		[]string{`[{"constant":false,"inputs":[{"name":"arr","type":"uint64[3][4][5]"}],"name":"storeDeepUintArray","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"retrieveDeepArray","outputs":[{"name":"","type":"uint64[3][4][5]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"deepUint64Array","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"}]`},
   992  		`
   993  			"math/big"
   994  
   995  			"github.com/ethereum/go-ethereum/accounts/abi/bind"
   996  			"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
   997  			"github.com/ethereum/go-ethereum/core"
   998  			"github.com/ethereum/go-ethereum/crypto"
   999  		`,
  1000  		`
  1001  			// Generate a new random account and a funded simulator
  1002  			key, _ := crypto.GenerateKey()
  1003  			auth := bind.NewKeyedTransactor(key)
  1004  
  1005  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
  1006  			defer sim.Close()
  1007  
  1008  			//deploy the test contract
  1009  			_, _, testContract, err := DeployDeeplyNestedArray(auth, sim)
  1010  			if err != nil {
  1011  				t.Fatalf("Failed to deploy test contract: %v", err)
  1012  			}
  1013  
  1014  			// Finish deploy.
  1015  			sim.Commit()
  1016  
  1017  			//Create coordinate-filled array, for testing purposes.
  1018  			testArr := [5][4][3]uint64{}
  1019  			for i := 0; i < 5; i++ {
  1020  				testArr[i] = [4][3]uint64{}
  1021  				for j := 0; j < 4; j++ {
  1022  					testArr[i][j] = [3]uint64{}
  1023  					for k := 0; k < 3; k++ {
  1024  						//pack the coordinates, each array value will be unique, and can be validated easily.
  1025  						testArr[i][j][k] = uint64(i) << 16 | uint64(j) << 8 | uint64(k)
  1026  					}
  1027  				}
  1028  			}
  1029  
  1030  			if _, err := testContract.StoreDeepUintArray(&bind.TransactOpts{
  1031  				From: auth.From,
  1032  				Signer: auth.Signer,
  1033  			}, testArr); err != nil {
  1034  				t.Fatalf("Failed to store nested array in test contract: %v", err)
  1035  			}
  1036  
  1037  			sim.Commit()
  1038  
  1039  			retrievedArr, err := testContract.RetrieveDeepArray(&bind.CallOpts{
  1040  				From: auth.From,
  1041  				Pending: false,
  1042  			})
  1043  			if err != nil {
  1044  				t.Fatalf("Failed to retrieve nested array from test contract: %v", err)
  1045  			}
  1046  
  1047  			//quick check to see if contents were copied
  1048  			// (See accounts/abi/unpack_test.go for more extensive testing)
  1049  			if retrievedArr[4][3][2] != testArr[4][3][2] {
  1050  				t.Fatalf("Retrieved value does not match expected value! got: %d, expected: %d. %v", retrievedArr[4][3][2], testArr[4][3][2], err)
  1051  			}
  1052  		`,
  1053  		nil,
  1054  		nil,
  1055  		nil,
  1056  		nil,
  1057  	},
  1058  	{
  1059  		`CallbackParam`,
  1060  		`
  1061  			contract FunctionPointerTest {
  1062  				function test(function(uint256) external callback) external {
  1063  					callback(1);
  1064  				}
  1065  			}
  1066  		`,
  1067  		[]string{`608060405234801561001057600080fd5b5061015e806100206000396000f3fe60806040526004361061003b576000357c010000000000000000000000000000000000000000000000000000000090048063d7a5aba214610040575b600080fd5b34801561004c57600080fd5b506100be6004803603602081101561006357600080fd5b810190808035806c0100000000000000000000000090049068010000000000000000900463ffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff169091602001919093929190939291905050506100c0565b005b818160016040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561011657600080fd5b505af115801561012a573d6000803e3d6000fd5b50505050505056fea165627a7a7230582062f87455ff84be90896dbb0c4e4ddb505c600d23089f8e80a512548440d7e2580029`},
  1068  		[]string{`[
  1069  			{
  1070  				"constant": false,
  1071  				"inputs": [
  1072  					{
  1073  						"name": "callback",
  1074  						"type": "function"
  1075  					}
  1076  				],
  1077  				"name": "test",
  1078  				"outputs": [],
  1079  				"payable": false,
  1080  				"stateMutability": "nonpayable",
  1081  				"type": "function"
  1082  			}
  1083  		]`}, `
  1084  			"strings"
  1085  		`,
  1086  		`
  1087  			if strings.Compare("test(function)", CallbackParamFuncSigs["d7a5aba2"]) != 0 {
  1088  				t.Fatalf("")
  1089  			}
  1090  		`,
  1091  		[]map[string]string{
  1092  			{
  1093  				"test(function)": "d7a5aba2",
  1094  			},
  1095  		},
  1096  		nil,
  1097  		nil,
  1098  		nil,
  1099  	}, {
  1100  		`Tuple`,
  1101  		`
  1102  		pragma solidity >=0.4.19 <0.6.0;
  1103  		pragma experimental ABIEncoderV2;
  1104  
  1105  		contract Tuple {
  1106  			struct S { uint a; uint[] b; T[] c; }
  1107  			struct T { uint x; uint y; }
  1108  			struct P { uint8 x; uint8 y; }
  1109  			struct Q { uint16 x; uint16 y; }
  1110  			event TupleEvent(S a, T[2][] b, T[][2] c, S[] d, uint[] e);
  1111  			event TupleEvent2(P[]);
  1112  
  1113  			function func1(S memory a, T[2][] memory b, T[][2] memory c, S[] memory d, uint[] memory e) public pure returns (S memory, T[2][] memory, T[][2] memory, S[] memory, uint[] memory) {
  1114  				return (a, b, c, d, e);
  1115  			}
  1116  			function func2(S memory a, T[2][] memory b, T[][2] memory c, S[] memory d, uint[] memory e) public {
  1117  				emit TupleEvent(a, b, c, d, e);
  1118  			}
  1119  			function func3(Q[] memory) public pure {} // call function, nothing to return
  1120  		}
  1121  		`,
  1122  		[]string{`60806040523480156100115760006000fd5b50610017565b6110b2806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100465760003560e01c8063443c79b41461004c578063d0062cdd14610080578063e4d9a43b1461009c57610046565b60006000fd5b610066600480360361006191908101906107b8565b6100b8565b604051610077959493929190610ccb565b60405180910390f35b61009a600480360361009591908101906107b8565b6100ef565b005b6100b660048036036100b19190810190610775565b610136565b005b6100c061013a565b60606100ca61015e565b606060608989898989945094509450945094506100e2565b9550955095509550959050565b7f18d6e66efa53739ca6d13626f35ebc700b31cced3eddb50c70bbe9c082c6cd008585858585604051610126959493929190610ccb565b60405180910390a15b5050505050565b5b50565b60405180606001604052806000815260200160608152602001606081526020015090565b60405180604001604052806002905b606081526020019060019003908161016d57905050905661106e565b600082601f830112151561019d5760006000fd5b81356101b06101ab82610d6f565b610d41565b915081818352602084019350602081019050838560808402820111156101d65760006000fd5b60005b8381101561020757816101ec888261037a565b8452602084019350608083019250505b6001810190506101d9565b5050505092915050565b600082601f83011215156102255760006000fd5b600261023861023382610d98565b610d41565b9150818360005b83811015610270578135860161025588826103f3565b8452602084019350602083019250505b60018101905061023f565b5050505092915050565b600082601f830112151561028e5760006000fd5b81356102a161029c82610dbb565b610d41565b915081818352602084019350602081019050838560408402820111156102c75760006000fd5b60005b838110156102f857816102dd888261058b565b8452602084019350604083019250505b6001810190506102ca565b5050505092915050565b600082601f83011215156103165760006000fd5b813561032961032482610de4565b610d41565b9150818183526020840193506020810190508360005b83811015610370578135860161035588826105d8565b8452602084019350602083019250505b60018101905061033f565b5050505092915050565b600082601f830112151561038e5760006000fd5b60026103a161039c82610e0d565b610d41565b915081838560408402820111156103b85760006000fd5b60005b838110156103e957816103ce88826106fe565b8452602084019350604083019250505b6001810190506103bb565b5050505092915050565b600082601f83011215156104075760006000fd5b813561041a61041582610e30565b610d41565b915081818352602084019350602081019050838560408402820111156104405760006000fd5b60005b83811015610471578161045688826106fe565b8452602084019350604083019250505b600181019050610443565b5050505092915050565b600082601f830112151561048f5760006000fd5b81356104a261049d82610e59565b610d41565b915081818352602084019350602081019050838560208402820111156104c85760006000fd5b60005b838110156104f957816104de8882610760565b8452602084019350602083019250505b6001810190506104cb565b5050505092915050565b600082601f83011215156105175760006000fd5b813561052a61052582610e82565b610d41565b915081818352602084019350602081019050838560208402820111156105505760006000fd5b60005b8381101561058157816105668882610760565b8452602084019350602083019250505b600181019050610553565b5050505092915050565b60006040828403121561059e5760006000fd5b6105a86040610d41565b905060006105b88482850161074b565b60008301525060206105cc8482850161074b565b60208301525092915050565b6000606082840312156105eb5760006000fd5b6105f56060610d41565b9050600061060584828501610760565b600083015250602082013567ffffffffffffffff8111156106265760006000fd5b6106328482850161047b565b602083015250604082013567ffffffffffffffff8111156106535760006000fd5b61065f848285016103f3565b60408301525092915050565b60006060828403121561067e5760006000fd5b6106886060610d41565b9050600061069884828501610760565b600083015250602082013567ffffffffffffffff8111156106b95760006000fd5b6106c58482850161047b565b602083015250604082013567ffffffffffffffff8111156106e65760006000fd5b6106f2848285016103f3565b60408301525092915050565b6000604082840312156107115760006000fd5b61071b6040610d41565b9050600061072b84828501610760565b600083015250602061073f84828501610760565b60208301525092915050565b60008135905061075a8161103a565b92915050565b60008135905061076f81611054565b92915050565b6000602082840312156107885760006000fd5b600082013567ffffffffffffffff8111156107a35760006000fd5b6107af8482850161027a565b91505092915050565b6000600060006000600060a086880312156107d35760006000fd5b600086013567ffffffffffffffff8111156107ee5760006000fd5b6107fa8882890161066b565b955050602086013567ffffffffffffffff8111156108185760006000fd5b61082488828901610189565b945050604086013567ffffffffffffffff8111156108425760006000fd5b61084e88828901610211565b935050606086013567ffffffffffffffff81111561086c5760006000fd5b61087888828901610302565b925050608086013567ffffffffffffffff8111156108965760006000fd5b6108a288828901610503565b9150509295509295909350565b60006108bb8383610a6a565b60808301905092915050565b60006108d38383610ac2565b905092915050565b60006108e78383610c36565b905092915050565b60006108fb8383610c8d565b60408301905092915050565b60006109138383610cbc565b60208301905092915050565b600061092a82610f0f565b6109348185610fb7565b935061093f83610eab565b8060005b8381101561097157815161095788826108af565b975061096283610f5c565b9250505b600181019050610943565b5085935050505092915050565b600061098982610f1a565b6109938185610fc8565b9350836020820285016109a585610ebb565b8060005b858110156109e257848403895281516109c285826108c7565b94506109cd83610f69565b925060208a019950505b6001810190506109a9565b50829750879550505050505092915050565b60006109ff82610f25565b610a098185610fd3565b935083602082028501610a1b85610ec5565b8060005b85811015610a585784840389528151610a3885826108db565b9450610a4383610f76565b925060208a019950505b600181019050610a1f565b50829750879550505050505092915050565b610a7381610f30565b610a7d8184610fe4565b9250610a8882610ed5565b8060005b83811015610aba578151610aa087826108ef565b9650610aab83610f83565b9250505b600181019050610a8c565b505050505050565b6000610acd82610f3b565b610ad78185610fef565b9350610ae283610edf565b8060005b83811015610b14578151610afa88826108ef565b9750610b0583610f90565b9250505b600181019050610ae6565b5085935050505092915050565b6000610b2c82610f51565b610b368185611011565b9350610b4183610eff565b8060005b83811015610b73578151610b598882610907565b9750610b6483610faa565b9250505b600181019050610b45565b5085935050505092915050565b6000610b8b82610f46565b610b958185611000565b9350610ba083610eef565b8060005b83811015610bd2578151610bb88882610907565b9750610bc383610f9d565b9250505b600181019050610ba4565b5085935050505092915050565b6000606083016000830151610bf76000860182610cbc565b5060208301518482036020860152610c0f8282610b80565b91505060408301518482036040860152610c298282610ac2565b9150508091505092915050565b6000606083016000830151610c4e6000860182610cbc565b5060208301518482036020860152610c668282610b80565b91505060408301518482036040860152610c808282610ac2565b9150508091505092915050565b604082016000820151610ca36000850182610cbc565b506020820151610cb66020850182610cbc565b50505050565b610cc581611030565b82525050565b600060a0820190508181036000830152610ce58188610bdf565b90508181036020830152610cf9818761091f565b90508181036040830152610d0d818661097e565b90508181036060830152610d2181856109f4565b90508181036080830152610d358184610b21565b90509695505050505050565b6000604051905081810181811067ffffffffffffffff82111715610d655760006000fd5b8060405250919050565b600067ffffffffffffffff821115610d875760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610db05760006000fd5b602082029050919050565b600067ffffffffffffffff821115610dd35760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610dfc5760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610e255760006000fd5b602082029050919050565b600067ffffffffffffffff821115610e485760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610e715760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610e9a5760006000fd5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061ffff82169050919050565b6000819050919050565b61104381611022565b811415156110515760006000fd5b50565b61105d81611030565b8114151561106b5760006000fd5b50565bfea365627a7a72315820d78c6ba7ee332581e6c4d9daa5fc07941841230f7ce49edf6e05b1b63853e8746c6578706572696d656e74616cf564736f6c634300050c0040`},
  1123  		[]string{`
  1124  [{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"indexed":false,"internalType":"struct Tuple.S","name":"a","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"indexed":false,"internalType":"struct Tuple.T[2][]","name":"b","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"indexed":false,"internalType":"struct Tuple.T[][2]","name":"c","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"indexed":false,"internalType":"struct Tuple.S[]","name":"d","type":"tuple[]"},{"indexed":false,"internalType":"uint256[]","name":"e","type":"uint256[]"}],"name":"TupleEvent","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint8","name":"x","type":"uint8"},{"internalType":"uint8","name":"y","type":"uint8"}],"indexed":false,"internalType":"struct Tuple.P[]","name":"","type":"tuple[]"}],"name":"TupleEvent2","type":"event"},{"constant":true,"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S","name":"a","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[2][]","name":"b","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[][2]","name":"c","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S[]","name":"d","type":"tuple[]"},{"internalType":"uint256[]","name":"e","type":"uint256[]"}],"name":"func1","outputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S","name":"","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[2][]","name":"","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[][2]","name":"","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S[]","name":"","type":"tuple[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S","name":"a","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[2][]","name":"b","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[][2]","name":"c","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S[]","name":"d","type":"tuple[]"},{"internalType":"uint256[]","name":"e","type":"uint256[]"}],"name":"func2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"components":[{"internalType":"uint16","name":"x","type":"uint16"},{"internalType":"uint16","name":"y","type":"uint16"}],"internalType":"struct Tuple.Q[]","name":"","type":"tuple[]"}],"name":"func3","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}]
  1125  		`},
  1126  		`
  1127  			"math/big"
  1128  			"reflect"
  1129  
  1130  			"github.com/ethereum/go-ethereum/accounts/abi/bind"
  1131  			"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
  1132  			"github.com/ethereum/go-ethereum/core"
  1133  			"github.com/ethereum/go-ethereum/crypto"
  1134  		`,
  1135  
  1136  		`
  1137  			key, _ := crypto.GenerateKey()
  1138  			auth := bind.NewKeyedTransactor(key)
  1139  
  1140  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
  1141  			defer sim.Close()
  1142  
  1143  			_, _, contract, err := DeployTuple(auth, sim)
  1144  			if err != nil {
  1145  				t.Fatalf("deploy contract failed %v", err)
  1146  			}
  1147  			sim.Commit()
  1148  
  1149  			check := func(a, b interface{}, errMsg string) {
  1150  				if !reflect.DeepEqual(a, b) {
  1151  					t.Fatal(errMsg)
  1152  				}
  1153  			}
  1154  
  1155  			a := TupleS{
  1156  				A: big.NewInt(1),
  1157  				B: []*big.Int{big.NewInt(2), big.NewInt(3)},
  1158  				C: []TupleT{
  1159  					{
  1160  						X: big.NewInt(4),
  1161  						Y: big.NewInt(5),
  1162  					},
  1163  					{
  1164  						X: big.NewInt(6),
  1165  						Y: big.NewInt(7),
  1166  					},
  1167  				},
  1168  			}
  1169  
  1170  			b := [][2]TupleT{
  1171  				{
  1172  					{
  1173  						X: big.NewInt(8),
  1174  						Y: big.NewInt(9),
  1175  					},
  1176  					{
  1177  						X: big.NewInt(10),
  1178  						Y: big.NewInt(11),
  1179  					},
  1180  				},
  1181  			}
  1182  
  1183  			c := [2][]TupleT{
  1184  				{
  1185  					{
  1186  						X: big.NewInt(12),
  1187  						Y: big.NewInt(13),
  1188  					},
  1189  					{
  1190  						X: big.NewInt(14),
  1191  						Y: big.NewInt(15),
  1192  					},
  1193  				},
  1194  				{
  1195  					{
  1196  						X: big.NewInt(16),
  1197  						Y: big.NewInt(17),
  1198  					},
  1199  				},
  1200  			}
  1201  
  1202  			d := []TupleS{a}
  1203  
  1204  			e := []*big.Int{big.NewInt(18), big.NewInt(19)}
  1205  			ret1, ret2, ret3, ret4, ret5, err := contract.Func1(nil, a, b, c, d, e)
  1206  			if err != nil {
  1207  				t.Fatalf("invoke contract failed, err %v", err)
  1208  			}
  1209  			check(ret1, a, "ret1 mismatch")
  1210  			check(ret2, b, "ret2 mismatch")
  1211  			check(ret3, c, "ret3 mismatch")
  1212  			check(ret4, d, "ret4 mismatch")
  1213  			check(ret5, e, "ret5 mismatch")
  1214  
  1215  			_, err = contract.Func2(auth, a, b, c, d, e)
  1216  			if err != nil {
  1217  				t.Fatalf("invoke contract failed, err %v", err)
  1218  			}
  1219  			sim.Commit()
  1220  
  1221  			iter, err := contract.FilterTupleEvent(nil)
  1222  			if err != nil {
  1223  				t.Fatalf("failed to create event filter, err %v", err)
  1224  			}
  1225  			defer iter.Close()
  1226  
  1227  			iter.Next()
  1228  			check(iter.Event.A, a, "field1 mismatch")
  1229  			check(iter.Event.B, b, "field2 mismatch")
  1230  			check(iter.Event.C, c, "field3 mismatch")
  1231  			check(iter.Event.D, d, "field4 mismatch")
  1232  			check(iter.Event.E, e, "field5 mismatch")
  1233  
  1234  			err = contract.Func3(nil, nil)
  1235  			if err != nil {
  1236  				t.Fatalf("failed to call function which has no return, err %v", err)
  1237  			}
  1238  		`,
  1239  		nil,
  1240  		nil,
  1241  		nil,
  1242  		nil,
  1243  	},
  1244  	{
  1245  		`UseLibrary`,
  1246  		`
  1247  		library Math {
  1248      		function add(uint a, uint b) public view returns(uint) {
  1249          		return a + b;
  1250      		}
  1251  		}
  1252  
  1253  		contract UseLibrary {
  1254  			function add (uint c, uint d) public view returns(uint) {
  1255          		return Math.add(c,d);
  1256      		}
  1257  		}
  1258  		`,
  1259  		[]string{
  1260  			// Bytecode for the UseLibrary contract
  1261  			`608060405234801561001057600080fd5b5061011d806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063771602f714602d575b600080fd5b604d60048036036040811015604157600080fd5b5080359060200135605f565b60408051918252519081900360200190f35b600073__$b98c933f0a6ececcd167bd4f9d3299b1a0$__63771602f784846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801560b757600080fd5b505af415801560ca573d6000803e3d6000fd5b505050506040513d602081101560df57600080fd5b5051939250505056fea265627a7a72305820eb5c38f42445604cfa43d85e3aa5ecc48b0a646456c902dd48420ae7241d06f664736f6c63430005090032`,
  1262  			// Bytecode for the Math contract
  1263  			`60a3610024600b82828239805160001a607314601757fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063771602f7146038575b600080fd5b605860048036036040811015604c57600080fd5b5080359060200135606a565b60408051918252519081900360200190f35b019056fea265627a7a723058206fc6c05f3078327f9c763edffdb5ab5f8bd212e293a1306c7d0ad05af3ad35f464736f6c63430005090032`,
  1264  		},
  1265  		[]string{
  1266  			`[{"constant":true,"inputs":[{"name":"c","type":"uint256"},{"name":"d","type":"uint256"}],"name":"add","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]`,
  1267  			`[{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"add","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]`,
  1268  		},
  1269  		`
  1270  			"math/big"
  1271  
  1272  			"github.com/ethereum/go-ethereum/accounts/abi/bind"
  1273  			"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
  1274  			"github.com/ethereum/go-ethereum/core"
  1275  			"github.com/ethereum/go-ethereum/crypto"
  1276  		`,
  1277  		`
  1278  			// Generate a new random account and a funded simulator
  1279  			key, _ := crypto.GenerateKey()
  1280  			auth := bind.NewKeyedTransactor(key)
  1281  
  1282  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
  1283  			defer sim.Close()
  1284  
  1285  			//deploy the test contract
  1286  			_, _, testContract, err := DeployUseLibrary(auth, sim)
  1287  			if err != nil {
  1288  				t.Fatalf("Failed to deploy test contract: %v", err)
  1289  			}
  1290  
  1291  			// Finish deploy.
  1292  			sim.Commit()
  1293  
  1294  			// Check that the library contract has been deployed
  1295  			// by calling the contract's add function.
  1296  			res, err := testContract.Add(&bind.CallOpts{
  1297  				From: auth.From,
  1298  				Pending: false,
  1299  			}, big.NewInt(1), big.NewInt(2))
  1300  			if err != nil {
  1301  				t.Fatalf("Failed to call linked contract: %v", err)
  1302  			}
  1303  			if res.Cmp(big.NewInt(3)) != 0 {
  1304  				t.Fatalf("Add did not return the correct result: %d != %d", res, 3)
  1305  			}
  1306  		`,
  1307  		nil,
  1308  		map[string]string{
  1309  			"b98c933f0a6ececcd167bd4f9d3299b1a0": "Math",
  1310  		},
  1311  		nil,
  1312  		[]string{"UseLibrary", "Math"},
  1313  	}, {
  1314  		"Overload",
  1315  		`
  1316  		pragma solidity ^0.5.10;
  1317  
  1318  		contract overload {
  1319  		  mapping(address => uint256) balances;
  1320  
  1321  		  event bar(uint256 i);
  1322  		  event bar(uint256 i, uint256 j);
  1323  
  1324  		  function foo(uint256 i) public {
  1325  			  emit bar(i);
  1326  		  }
  1327  		  function foo(uint256 i, uint256 j) public {
  1328  			  emit bar(i, j);
  1329  		  }
  1330  		}
  1331  		`,
  1332  		[]string{`608060405234801561001057600080fd5b50610153806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806304bc52f81461003b5780632fbebd3814610073575b600080fd5b6100716004803603604081101561005157600080fd5b8101908080359060200190929190803590602001909291905050506100a1565b005b61009f6004803603602081101561008957600080fd5b81019080803590602001909291905050506100e4565b005b7fae42e9514233792a47a1e4554624e83fe852228e1503f63cd383e8a431f4f46d8282604051808381526020018281526020019250505060405180910390a15050565b7f0423a1321222a0a8716c22b92fac42d85a45a612b696a461784d9fa537c81e5c816040518082815260200191505060405180910390a15056fea265627a7a72305820e22b049858b33291cbe67eeaece0c5f64333e439d27032ea8337d08b1de18fe864736f6c634300050a0032`},
  1333  		[]string{`[{"constant":false,"inputs":[{"name":"i","type":"uint256"},{"name":"j","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"i","type":"uint256"}],"name":"bar","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"i","type":"uint256"},{"indexed":false,"name":"j","type":"uint256"}],"name":"bar","type":"event"}]`},
  1334  		`
  1335  		"math/big"
  1336  		"time"
  1337  
  1338  		"github.com/ethereum/go-ethereum/accounts/abi/bind"
  1339  		"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
  1340  		"github.com/ethereum/go-ethereum/core"
  1341  		"github.com/ethereum/go-ethereum/crypto"
  1342  		`,
  1343  		`
  1344  		// Initialize test accounts
  1345  		key, _ := crypto.GenerateKey()
  1346  		auth := bind.NewKeyedTransactor(key)
  1347  		sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
  1348  		defer sim.Close()
  1349  
  1350  		// deploy the test contract
  1351  		_, _, contract, err := DeployOverload(auth, sim)
  1352  		if err != nil {
  1353  			t.Fatalf("Failed to deploy contract: %v", err)
  1354  		}
  1355  		// Finish deploy.
  1356  		sim.Commit()
  1357  
  1358  		resCh, stopCh := make(chan uint64), make(chan struct{})
  1359  
  1360  		go func() {
  1361  			barSink := make(chan *OverloadBar)
  1362  			sub, _ := contract.WatchBar(nil, barSink)
  1363  			defer sub.Unsubscribe()
  1364  
  1365  			bar0Sink := make(chan *OverloadBar0)
  1366  			sub0, _ := contract.WatchBar0(nil, bar0Sink)
  1367  			defer sub0.Unsubscribe()
  1368  
  1369  			for {
  1370  				select {
  1371  				case ev := <-barSink:
  1372  					resCh <- ev.I.Uint64()
  1373  				case ev := <-bar0Sink:
  1374  					resCh <- ev.I.Uint64() + ev.J.Uint64()
  1375  				case <-stopCh:
  1376  					return
  1377  				}
  1378  			}
  1379  		}()
  1380  		contract.Foo(auth, big.NewInt(1), big.NewInt(2))
  1381  		sim.Commit()
  1382  		select {
  1383  		case n := <-resCh:
  1384  			if n != 3 {
  1385  				t.Fatalf("Invalid bar0 event")
  1386  			}
  1387  		case <-time.NewTimer(3 * time.Second).C:
  1388  			t.Fatalf("Wait bar0 event timeout")
  1389  		}
  1390  
  1391  		contract.Foo0(auth, big.NewInt(1))
  1392  		sim.Commit()
  1393  		select {
  1394  		case n := <-resCh:
  1395  			if n != 1 {
  1396  				t.Fatalf("Invalid bar event")
  1397  			}
  1398  		case <-time.NewTimer(3 * time.Second).C:
  1399  			t.Fatalf("Wait bar event timeout")
  1400  		}
  1401  		close(stopCh)
  1402  		`,
  1403  		nil,
  1404  		nil,
  1405  		nil,
  1406  		nil,
  1407  	},
  1408  	{
  1409  		"IdentifierCollision",
  1410  		`
  1411  		pragma solidity >=0.4.19 <0.6.0;
  1412  
  1413  		contract IdentifierCollision {
  1414  			uint public _myVar;
  1415  
  1416  			function MyVar() public view returns (uint) {
  1417  				return _myVar;
  1418  			}
  1419  		}
  1420  		`,
  1421  		[]string{"60806040523480156100115760006000fd5b50610017565b60c3806100256000396000f3fe608060405234801560105760006000fd5b506004361060365760003560e01c806301ad4d8714603c5780634ef1f0ad146058576036565b60006000fd5b60426074565b6040518082815260200191505060405180910390f35b605e607d565b6040518082815260200191505060405180910390f35b60006000505481565b60006000600050549050608b565b9056fea265627a7a7231582067c8d84688b01c4754ba40a2a871cede94ea1f28b5981593ab2a45b46ac43af664736f6c634300050c0032"},
  1422  		[]string{`[{"constant":true,"inputs":[],"name":"MyVar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_myVar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]`},
  1423  		`
  1424  		"math/big"
  1425  
  1426  		"github.com/ethereum/go-ethereum/accounts/abi/bind"
  1427  		"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
  1428  		"github.com/ethereum/go-ethereum/crypto"
  1429  		"github.com/ethereum/go-ethereum/core"
  1430  		`,
  1431  		`
  1432  		// Initialize test accounts
  1433  		key, _ := crypto.GenerateKey()
  1434  		addr := crypto.PubkeyToAddress(key.PublicKey)
  1435  
  1436  		// Deploy registrar contract
  1437  		sim := backends.NewSimulatedBackend(core.GenesisAlloc{addr: {Balance: big.NewInt(1000000000)}}, 10000000)
  1438  		defer sim.Close()
  1439  
  1440  		transactOpts := bind.NewKeyedTransactor(key)
  1441  		_, _, _, err := DeployIdentifierCollision(transactOpts, sim)
  1442  		if err != nil {
  1443  			t.Fatalf("failed to deploy contract: %v", err)
  1444  		}
  1445  		`,
  1446  		nil,
  1447  		nil,
  1448  		map[string]string{"_myVar": "pubVar"}, // alias MyVar to PubVar
  1449  		nil,
  1450  	},
  1451  	{
  1452  		"MultiContracts",
  1453  		`
  1454  		pragma solidity ^0.5.11;
  1455  		pragma experimental ABIEncoderV2;
  1456  
  1457  		library ExternalLib {
  1458  			struct SharedStruct{
  1459  				uint256 f1;
  1460  				bytes32 f2;
  1461  			}
  1462  		}
  1463  
  1464  		contract ContractOne {
  1465  			function foo(ExternalLib.SharedStruct memory s) pure public {
  1466  				// Do stuff
  1467  			}
  1468  		}
  1469  
  1470  		contract ContractTwo {
  1471  			function bar(ExternalLib.SharedStruct memory s) pure public {
  1472  				// Do stuff
  1473  			}
  1474  		}
  1475          `,
  1476  		[]string{
  1477  			`60806040523480156100115760006000fd5b50610017565b6101b5806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100305760003560e01c80639d8a8ba81461003657610030565b60006000fd5b610050600480360361004b91908101906100d1565b610052565b005b5b5056610171565b6000813590506100698161013d565b92915050565b6000604082840312156100825760006000fd5b61008c60406100fb565b9050600061009c848285016100bc565b60008301525060206100b08482850161005a565b60208301525092915050565b6000813590506100cb81610157565b92915050565b6000604082840312156100e45760006000fd5b60006100f28482850161006f565b91505092915050565b6000604051905081810181811067ffffffffffffffff8211171561011f5760006000fd5b8060405250919050565b6000819050919050565b6000819050919050565b61014681610129565b811415156101545760006000fd5b50565b61016081610133565b8114151561016e5760006000fd5b50565bfea365627a7a72315820749274eb7f6c01010d5322af4e1668b0a154409eb7968bd6cae5524c7ed669bb6c6578706572696d656e74616cf564736f6c634300050c0040`,
  1478  			`60806040523480156100115760006000fd5b50610017565b6101b5806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100305760003560e01c8063db8ba08c1461003657610030565b60006000fd5b610050600480360361004b91908101906100d1565b610052565b005b5b5056610171565b6000813590506100698161013d565b92915050565b6000604082840312156100825760006000fd5b61008c60406100fb565b9050600061009c848285016100bc565b60008301525060206100b08482850161005a565b60208301525092915050565b6000813590506100cb81610157565b92915050565b6000604082840312156100e45760006000fd5b60006100f28482850161006f565b91505092915050565b6000604051905081810181811067ffffffffffffffff8211171561011f5760006000fd5b8060405250919050565b6000819050919050565b6000819050919050565b61014681610129565b811415156101545760006000fd5b50565b61016081610133565b8114151561016e5760006000fd5b50565bfea365627a7a723158209bc28ee7ea97c131a13330d77ec73b4493b5c59c648352da81dd288b021192596c6578706572696d656e74616cf564736f6c634300050c0040`,
  1479  			`606c6026600b82828239805160001a6073141515601857fe5b30600052607381538281f350fe73000000000000000000000000000000000000000030146080604052600436106023575b60006000fdfea365627a7a72315820518f0110144f5b3de95697d05e456a064656890d08e6f9cff47f3be710cc46a36c6578706572696d656e74616cf564736f6c634300050c0040`,
  1480  		},
  1481  		[]string{
  1482  			`[{"constant":true,"inputs":[{"components":[{"internalType":"uint256","name":"f1","type":"uint256"},{"internalType":"bytes32","name":"f2","type":"bytes32"}],"internalType":"struct ExternalLib.SharedStruct","name":"s","type":"tuple"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}]`,
  1483  			`[{"constant":true,"inputs":[{"components":[{"internalType":"uint256","name":"f1","type":"uint256"},{"internalType":"bytes32","name":"f2","type":"bytes32"}],"internalType":"struct ExternalLib.SharedStruct","name":"s","type":"tuple"}],"name":"bar","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}]`,
  1484  			`[]`,
  1485  		},
  1486  		`
  1487  		"math/big"
  1488  
  1489  		"github.com/ethereum/go-ethereum/accounts/abi/bind"
  1490  		"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
  1491  		"github.com/ethereum/go-ethereum/crypto"
  1492  		"github.com/ethereum/go-ethereum/core"
  1493          `,
  1494  		`
  1495  		key, _ := crypto.GenerateKey()
  1496  		addr := crypto.PubkeyToAddress(key.PublicKey)
  1497  
  1498  		// Deploy registrar contract
  1499  		sim := backends.NewSimulatedBackend(core.GenesisAlloc{addr: {Balance: big.NewInt(1000000000)}}, 10000000)
  1500  		defer sim.Close()
  1501  
  1502  		transactOpts := bind.NewKeyedTransactor(key)
  1503  		_, _, c1, err := DeployContractOne(transactOpts, sim)
  1504  		if err != nil {
  1505  			t.Fatal("Failed to deploy contract")
  1506  		}
  1507  		sim.Commit()
  1508  		err = c1.Foo(nil, ExternalLibSharedStruct{
  1509  			F1: big.NewInt(100),
  1510  			F2: [32]byte{0x01, 0x02, 0x03},
  1511  		})
  1512  		if err != nil {
  1513  			t.Fatal("Failed to invoke function")
  1514  		}
  1515  		_, _, c2, err := DeployContractTwo(transactOpts, sim)
  1516  		if err != nil {
  1517  			t.Fatal("Failed to deploy contract")
  1518  		}
  1519  		sim.Commit()
  1520  		err = c2.Bar(nil, ExternalLibSharedStruct{
  1521  			F1: big.NewInt(100),
  1522  			F2: [32]byte{0x01, 0x02, 0x03},
  1523  		})
  1524  		if err != nil {
  1525  			t.Fatal("Failed to invoke function")
  1526  		}
  1527          `,
  1528  		nil,
  1529  		nil,
  1530  		nil,
  1531  		[]string{"ContractOne", "ContractTwo", "ExternalLib"},
  1532  	},
  1533  	// Test the existence of the free retrieval calls
  1534  	{
  1535  		`PureAndView`,
  1536  		`pragma solidity >=0.6.0;
  1537  		contract PureAndView {
  1538  			function PureFunc() public pure returns (uint) {
  1539  				return 42;
  1540  			}
  1541  			function ViewFunc() public view returns (uint) {
  1542  				return block.number;
  1543  			}
  1544  		}
  1545  		`,
  1546  		[]string{`608060405234801561001057600080fd5b5060b68061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806376b5686a146037578063bb38c66c146053575b600080fd5b603d606f565b6040518082815260200191505060405180910390f35b60596077565b6040518082815260200191505060405180910390f35b600043905090565b6000602a90509056fea2646970667358221220d158c2ab7fdfce366a7998ec79ab84edd43b9815630bbaede2c760ea77f29f7f64736f6c63430006000033`},
  1547  		[]string{`[{"inputs": [],"name": "PureFunc","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "pure","type": "function"},{"inputs": [],"name": "ViewFunc","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"}]`},
  1548  		`
  1549  			"math/big"
  1550  
  1551  			"github.com/ethereum/go-ethereum/accounts/abi/bind"
  1552  			"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
  1553  			"github.com/ethereum/go-ethereum/core"
  1554  			"github.com/ethereum/go-ethereum/crypto"
  1555  		`,
  1556  		`
  1557  			// Generate a new random account and a funded simulator
  1558  			key, _ := crypto.GenerateKey()
  1559  			auth := bind.NewKeyedTransactor(key)
  1560  
  1561  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000)
  1562  			defer sim.Close()
  1563  
  1564  			// Deploy a tester contract and execute a structured call on it
  1565  			_, _, pav, err := DeployPureAndView(auth, sim)
  1566  			if err != nil {
  1567  				t.Fatalf("Failed to deploy PureAndView contract: %v", err)
  1568  			}
  1569  			sim.Commit()
  1570  
  1571  			// This test the existence of the free retreiver call for view and pure functions
  1572  			if num, err := pav.PureFunc(nil); err != nil {
  1573  				t.Fatalf("Failed to call anonymous field retriever: %v", err)
  1574  			} else if num.Cmp(big.NewInt(42)) != 0 {
  1575  				t.Fatalf("Retrieved value mismatch: have %v, want %v", num, 42)
  1576  			}
  1577  			if num, err := pav.ViewFunc(nil); err != nil {
  1578  				t.Fatalf("Failed to call anonymous field retriever: %v", err)
  1579  			} else if num.Cmp(big.NewInt(1)) != 0 {
  1580  				t.Fatalf("Retrieved value mismatch: have %v, want %v", num, 1)
  1581  			}
  1582  		`,
  1583  		nil,
  1584  		nil,
  1585  		nil,
  1586  		nil,
  1587  	},
  1588  	// Test fallback separation introduced in v0.6.0
  1589  	{
  1590  		`NewFallbacks`,
  1591  		`
  1592  		pragma solidity >=0.6.0 <0.7.0;
  1593  	
  1594  		contract NewFallbacks {
  1595  			event Fallback(bytes data);
  1596  			fallback() external {
  1597  				bytes memory data;
  1598  				assembly {
  1599  					calldatacopy(data, 0, calldatasize())
  1600  				}
  1601  				emit Fallback(data);
  1602  			}
  1603  	
  1604  			event Received(address addr, uint value);
  1605  			receive() external payable {
  1606  				emit Received(msg.sender, msg.value);
  1607  			}
  1608  		}
  1609  	   `,
  1610  		[]string{"60806040523480156100115760006000fd5b50610017565b61016e806100266000396000f3fe60806040526004361061000d575b36610081575b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258743334604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b005b34801561008e5760006000fd5b505b606036600082377f9043988963722edecc2099c75b0af0ff76af14ffca42ed6bce059a20a2a9f986816040518080602001828103825283818151815260200191508051906020019080838360005b838110156100fa5780820151818401525b6020810190506100de565b50505050905090810190601f1680156101275780820380516001836020036101000a031916815260200191505b509250505060405180910390a1505b00fea26469706673582212205643ca37f40c2b352dc541f42e9e6720de065de756324b7fcc9fb1d67eda4a7d64736f6c63430006040033"},
  1611  		[]string{`[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Fallback","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Received","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]`},
  1612  		`
  1613  			"bytes"
  1614  			"math/big"
  1615  	
  1616  			"github.com/ethereum/go-ethereum/accounts/abi/bind"
  1617  			"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
  1618  			"github.com/ethereum/go-ethereum/core"
  1619  			"github.com/ethereum/go-ethereum/crypto"
  1620  	   `,
  1621  		`
  1622  			key, _ := crypto.GenerateKey()
  1623  			addr := crypto.PubkeyToAddress(key.PublicKey)
  1624  	
  1625  			sim := backends.NewSimulatedBackend(core.GenesisAlloc{addr: {Balance: big.NewInt(1000000000)}}, 1000000)
  1626  			defer sim.Close()
  1627  	
  1628  			opts := bind.NewKeyedTransactor(key)
  1629  			_, _, c, err := DeployNewFallbacks(opts, sim)
  1630  			if err != nil {
  1631  				t.Fatalf("Failed to deploy contract: %v", err)
  1632  			}
  1633  			sim.Commit()
  1634  	
  1635  			// Test receive function
  1636  			opts.Value = big.NewInt(100)
  1637  			c.Receive(opts)
  1638  			sim.Commit()
  1639  	
  1640  			var gotEvent bool
  1641  			iter, _ := c.FilterReceived(nil)
  1642  			defer iter.Close()
  1643  			for iter.Next() {
  1644  				if iter.Event.Addr != addr {
  1645  					t.Fatal("Msg.sender mismatch")
  1646  				}
  1647  				if iter.Event.Value.Uint64() != 100 {
  1648  					t.Fatal("Msg.value mismatch")
  1649  				}
  1650  				gotEvent = true
  1651  				break
  1652  			}
  1653  			if !gotEvent {
  1654  				t.Fatal("Expect to receive event emitted by receive")
  1655  			}
  1656  	
  1657  			// Test fallback function
  1658  			opts.Value = nil
  1659  			calldata := []byte{0x01, 0x02, 0x03}
  1660  			c.Fallback(opts, calldata)
  1661  			sim.Commit()
  1662  	
  1663  			iter2, _ := c.FilterFallback(nil)
  1664  			defer iter2.Close()
  1665  			for iter2.Next() {
  1666  				if !bytes.Equal(iter2.Event.Data, calldata) {
  1667  					t.Fatal("calldata mismatch")
  1668  				}
  1669  				gotEvent = true
  1670  				break
  1671  			}
  1672  			if !gotEvent {
  1673  				t.Fatal("Expect to receive event emitted by fallback")
  1674  			}
  1675  	   `,
  1676  		nil,
  1677  		nil,
  1678  		nil,
  1679  		nil,
  1680  	},
  1681  }
  1682  
  1683  // Tests that packages generated by the binder can be successfully compiled and
  1684  // the requested tester run against it.
  1685  func TestGolangBindings(t *testing.T) {
  1686  	// Skip the test if no Go command can be found
  1687  	gocmd := runtime.GOROOT() + "/bin/go"
  1688  	if !common.FileExist(gocmd) {
  1689  		t.Skip("go sdk not found for testing")
  1690  	}
  1691  	// Create a temporary workspace for the test suite
  1692  	ws, err := ioutil.TempDir("", "")
  1693  	if err != nil {
  1694  		t.Fatalf("failed to create temporary workspace: %v", err)
  1695  	}
  1696  	defer os.RemoveAll(ws)
  1697  
  1698  	pkg := filepath.Join(ws, "bindtest")
  1699  	if err = os.MkdirAll(pkg, 0700); err != nil {
  1700  		t.Fatalf("failed to create package: %v", err)
  1701  	}
  1702  	// Generate the test suite for all the contracts
  1703  	for i, tt := range bindTests {
  1704  		var types []string
  1705  		if tt.types != nil {
  1706  			types = tt.types
  1707  		} else {
  1708  			types = []string{tt.name}
  1709  		}
  1710  		// Generate the binding and create a Go source file in the workspace
  1711  		bind, err := Bind(types, tt.abi, tt.bytecode, tt.fsigs, "bindtest", LangGo, tt.libs, tt.aliases)
  1712  		if err != nil {
  1713  			t.Fatalf("test %d: failed to generate binding: %v", i, err)
  1714  		}
  1715  		if err = ioutil.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+".go"), []byte(bind), 0600); err != nil {
  1716  			t.Fatalf("test %d: failed to write binding: %v", i, err)
  1717  		}
  1718  		// Generate the test file with the injected test code
  1719  		code := fmt.Sprintf(`
  1720  			package bindtest
  1721  
  1722  			import (
  1723  				"testing"
  1724  				%s
  1725  			)
  1726  
  1727  			func Test%s(t *testing.T) {
  1728  				%s
  1729  			}
  1730  		`, tt.imports, tt.name, tt.tester)
  1731  		if err := ioutil.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+"_test.go"), []byte(code), 0600); err != nil {
  1732  			t.Fatalf("test %d: failed to write tests: %v", i, err)
  1733  		}
  1734  	}
  1735  	// Convert the package to go modules and use the current source for go-ethereum
  1736  	moder := exec.Command(gocmd, "mod", "init", "bindtest")
  1737  	moder.Dir = pkg
  1738  	if out, err := moder.CombinedOutput(); err != nil {
  1739  		t.Fatalf("failed to convert binding test to modules: %v\n%s", err, out)
  1740  	}
  1741  	pwd, _ := os.Getwd()
  1742  	replacer := exec.Command(gocmd, "mod", "edit", "-replace", "github.com/ethereum/go-ethereum="+filepath.Join(pwd, "..", "..", "..")) // Repo root
  1743  	replacer.Dir = pkg
  1744  	if out, err := replacer.CombinedOutput(); err != nil {
  1745  		t.Fatalf("failed to replace binding test dependency to current source tree: %v\n%s", err, out)
  1746  	}
  1747  	// Test the entire package and report any failures
  1748  	cmd := exec.Command(gocmd, "test", "-v", "-count", "1")
  1749  	cmd.Dir = pkg
  1750  	if out, err := cmd.CombinedOutput(); err != nil {
  1751  		t.Fatalf("failed to run binding test: %v\n%s", err, out)
  1752  	}
  1753  }
  1754  
  1755  // Tests that java binding generated by the binder is exactly matched.
  1756  func TestJavaBindings(t *testing.T) {
  1757  	var cases = []struct {
  1758  		name     string
  1759  		contract string
  1760  		abi      string
  1761  		bytecode string
  1762  		expected string
  1763  	}{
  1764  		{
  1765  			"test",
  1766  			`
  1767  			pragma experimental ABIEncoderV2;
  1768  			pragma solidity ^0.5.2;
  1769  
  1770  			contract test {
  1771  				function setAddress(address a) public returns(address){}
  1772  				function setAddressList(address[] memory a_l) public returns(address[] memory){}
  1773  				function setAddressArray(address[2] memory a_a) public returns(address[2] memory){}
  1774  
  1775  				function setUint8(uint8 u8) public returns(uint8){}
  1776  				function setUint16(uint16 u16) public returns(uint16){}
  1777  				function setUint32(uint32 u32) public returns(uint32){}
  1778  				function setUint64(uint64 u64) public returns(uint64){}
  1779  				function setUint256(uint256 u256) public returns(uint256){}
  1780  				function setUint256List(uint256[] memory u256_l) public returns(uint256[] memory){}
  1781  				function setUint256Array(uint256[2] memory u256_a) public returns(uint256[2] memory){}
  1782  
  1783  				function setInt8(int8 i8) public returns(int8){}
  1784  				function setInt16(int16 i16) public returns(int16){}
  1785  				function setInt32(int32 i32) public returns(int32){}
  1786  				function setInt64(int64 i64) public returns(int64){}
  1787  				function setInt256(int256 i256) public returns(int256){}
  1788  				function setInt256List(int256[] memory i256_l) public returns(int256[] memory){}
  1789  				function setInt256Array(int256[2] memory i256_a) public returns(int256[2] memory){}
  1790  
  1791  				function setBytes1(bytes1 b1) public returns(bytes1) {}
  1792  				function setBytes32(bytes32 b32) public returns(bytes32) {}
  1793  				function setBytes(bytes memory bs) public returns(bytes memory) {}
  1794  				function setBytesList(bytes[] memory bs_l) public returns(bytes[] memory) {}
  1795  				function setBytesArray(bytes[2] memory bs_a) public returns(bytes[2] memory) {}
  1796  
  1797  				function setString(string memory s) public returns(string memory) {}
  1798  				function setStringList(string[] memory s_l) public returns(string[] memory) {}
  1799  				function setStringArray(string[2] memory s_a) public returns(string[2] memory) {}
  1800  
  1801  				function setBool(bool b) public returns(bool) {}
  1802  				function setBoolList(bool[] memory b_l) public returns(bool[] memory) {}
  1803  				function setBoolArray(bool[2] memory b_a) public returns(bool[2] memory) {}
  1804  			}`,
  1805  			`[{"constant":false,"inputs":[{"name":"u16","type":"uint16"}],"name":"setUint16","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b_a","type":"bool[2]"}],"name":"setBoolArray","outputs":[{"name":"","type":"bool[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a_a","type":"address[2]"}],"name":"setAddressArray","outputs":[{"name":"","type":"address[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bs_l","type":"bytes[]"}],"name":"setBytesList","outputs":[{"name":"","type":"bytes[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u8","type":"uint8"}],"name":"setUint8","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u32","type":"uint32"}],"name":"setUint32","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b","type":"bool"}],"name":"setBool","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i256_l","type":"int256[]"}],"name":"setInt256List","outputs":[{"name":"","type":"int256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u256_a","type":"uint256[2]"}],"name":"setUint256Array","outputs":[{"name":"","type":"uint256[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b_l","type":"bool[]"}],"name":"setBoolList","outputs":[{"name":"","type":"bool[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bs_a","type":"bytes[2]"}],"name":"setBytesArray","outputs":[{"name":"","type":"bytes[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a_l","type":"address[]"}],"name":"setAddressList","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i256_a","type":"int256[2]"}],"name":"setInt256Array","outputs":[{"name":"","type":"int256[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"s_a","type":"string[2]"}],"name":"setStringArray","outputs":[{"name":"","type":"string[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"s","type":"string"}],"name":"setString","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u64","type":"uint64"}],"name":"setUint64","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i16","type":"int16"}],"name":"setInt16","outputs":[{"name":"","type":"int16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i8","type":"int8"}],"name":"setInt8","outputs":[{"name":"","type":"int8"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u256_l","type":"uint256[]"}],"name":"setUint256List","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i256","type":"int256"}],"name":"setInt256","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i32","type":"int32"}],"name":"setInt32","outputs":[{"name":"","type":"int32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b32","type":"bytes32"}],"name":"setBytes32","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"s_l","type":"string[]"}],"name":"setStringList","outputs":[{"name":"","type":"string[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u256","type":"uint256"}],"name":"setUint256","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bs","type":"bytes"}],"name":"setBytes","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"address"}],"name":"setAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i64","type":"int64"}],"name":"setInt64","outputs":[{"name":"","type":"int64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b1","type":"bytes1"}],"name":"setBytes1","outputs":[{"name":"","type":"bytes1"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]`,
  1806  			`608060405234801561001057600080fd5b5061265a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637fcaf66611610116578063c2b12a73116100b4578063da359dc81161008e578063da359dc814610666578063e30081a014610696578063e673eb32146106c6578063fba1a1c3146106f6576101e1565b8063c2b12a73146105d6578063c577796114610606578063d2282dc514610636576101e1565b80639a19a953116100f05780639a19a95314610516578063a0709e1914610546578063a53b1c1e14610576578063b7d5df31146105a6576101e1565b80637fcaf66614610486578063822cba69146104b657806386114cea146104e6576101e1565b806322722302116101835780635119655d1161015d5780635119655d146103c65780635be6b37e146103f65780636aa482fc146104265780637173b69514610456576101e1565b806322722302146103365780632766a755146103665780634d5ee6da14610396576101e1565b806316c105e2116101bf57806316c105e2146102765780631774e646146102a65780631c9352e2146102d65780631e26fd3314610306576101e1565b80630477988a146101e6578063118a971814610216578063151f547114610246575b600080fd5b61020060048036036101fb9190810190611599565b610726565b60405161020d9190611f01565b60405180910390f35b610230600480360361022b919081019061118d565b61072d565b60405161023d9190611ca6565b60405180910390f35b610260600480360361025b9190810190611123565b61073a565b60405161026d9190611c69565b60405180910390f35b610290600480360361028b9190810190611238565b610747565b60405161029d9190611d05565b60405180910390f35b6102c060048036036102bb919081019061163d565b61074e565b6040516102cd9190611f6d565b60405180910390f35b6102f060048036036102eb91908101906115eb565b610755565b6040516102fd9190611f37565b60405180910390f35b610320600480360361031b91908101906113cf565b61075c565b60405161032d9190611de5565b60405180910390f35b610350600480360361034b91908101906112a2565b610763565b60405161035d9190611d42565b60405180910390f35b610380600480360361037b9190810190611365565b61076a565b60405161038d9190611da8565b60405180910390f35b6103b060048036036103ab91908101906111b6565b610777565b6040516103bd9190611cc1565b60405180910390f35b6103e060048036036103db91908101906111f7565b61077e565b6040516103ed9190611ce3565b60405180910390f35b610410600480360361040b919081019061114c565b61078b565b60405161041d9190611c84565b60405180910390f35b610440600480360361043b9190810190611279565b610792565b60405161044d9190611d27565b60405180910390f35b610470600480360361046b91908101906112e3565b61079f565b60405161047d9190611d64565b60405180910390f35b6104a0600480360361049b9190810190611558565b6107ac565b6040516104ad9190611edf565b60405180910390f35b6104d060048036036104cb9190810190611614565b6107b3565b6040516104dd9190611f52565b60405180910390f35b61050060048036036104fb919081019061148b565b6107ba565b60405161050d9190611e58565b60405180910390f35b610530600480360361052b919081019061152f565b6107c1565b60405161053d9190611ec4565b60405180910390f35b610560600480360361055b919081019061138e565b6107c8565b60405161056d9190611dc3565b60405180910390f35b610590600480360361058b91908101906114b4565b6107cf565b60405161059d9190611e73565b60405180910390f35b6105c060048036036105bb91908101906114dd565b6107d6565b6040516105cd9190611e8e565b60405180910390f35b6105f060048036036105eb9190810190611421565b6107dd565b6040516105fd9190611e1b565b60405180910390f35b610620600480360361061b9190810190611324565b6107e4565b60405161062d9190611d86565b60405180910390f35b610650600480360361064b91908101906115c2565b6107eb565b60405161065d9190611f1c565b60405180910390f35b610680600480360361067b919081019061144a565b6107f2565b60405161068d9190611e36565b60405180910390f35b6106b060048036036106ab91908101906110fa565b6107f9565b6040516106bd9190611c4e565b60405180910390f35b6106e060048036036106db9190810190611506565b610800565b6040516106ed9190611ea9565b60405180910390f35b610710600480360361070b91908101906113f8565b610807565b60405161071d9190611e00565b60405180910390f35b6000919050565b61073561080e565b919050565b610742610830565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b610772610852565b919050565b6060919050565b610786610874565b919050565b6060919050565b61079a61089b565b919050565b6107a76108bd565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108835790505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108cc5790505090565b60006108f082356124f2565b905092915050565b600082601f830112151561090b57600080fd5b600261091e61091982611fb5565b611f88565b9150818385602084028201111561093457600080fd5b60005b83811015610964578161094a88826108e4565b845260208401935060208301925050600181019050610937565b5050505092915050565b600082601f830112151561098157600080fd5b813561099461098f82611fd7565b611f88565b915081818352602084019350602081019050838560208402820111156109b957600080fd5b60005b838110156109e957816109cf88826108e4565b8452602084019350602083019250506001810190506109bc565b5050505092915050565b600082601f8301121515610a0657600080fd5b6002610a19610a1482611fff565b611f88565b91508183856020840282011115610a2f57600080fd5b60005b83811015610a5f5781610a458882610e9e565b845260208401935060208301925050600181019050610a32565b5050505092915050565b600082601f8301121515610a7c57600080fd5b8135610a8f610a8a82612021565b611f88565b91508181835260208401935060208101905083856020840282011115610ab457600080fd5b60005b83811015610ae45781610aca8882610e9e565b845260208401935060208301925050600181019050610ab7565b5050505092915050565b600082601f8301121515610b0157600080fd5b6002610b14610b0f82612049565b611f88565b9150818360005b83811015610b4b5781358601610b318882610eda565b845260208401935060208301925050600181019050610b1b565b5050505092915050565b600082601f8301121515610b6857600080fd5b8135610b7b610b768261206b565b611f88565b9150818183526020840193506020810190508360005b83811015610bc15781358601610ba78882610eda565b845260208401935060208301925050600181019050610b91565b5050505092915050565b600082601f8301121515610bde57600080fd5b6002610bf1610bec82612093565b611f88565b91508183856020840282011115610c0757600080fd5b60005b83811015610c375781610c1d8882610f9a565b845260208401935060208301925050600181019050610c0a565b5050505092915050565b600082601f8301121515610c5457600080fd5b8135610c67610c62826120b5565b611f88565b91508181835260208401935060208101905083856020840282011115610c8c57600080fd5b60005b83811015610cbc5781610ca28882610f9a565b845260208401935060208301925050600181019050610c8f565b5050505092915050565b600082601f8301121515610cd957600080fd5b6002610cec610ce7826120dd565b611f88565b9150818360005b83811015610d235781358601610d098882610fea565b845260208401935060208301925050600181019050610cf3565b5050505092915050565b600082601f8301121515610d4057600080fd5b8135610d53610d4e826120ff565b611f88565b9150818183526020840193506020810190508360005b83811015610d995781358601610d7f8882610fea565b845260208401935060208301925050600181019050610d69565b5050505092915050565b600082601f8301121515610db657600080fd5b6002610dc9610dc482612127565b611f88565b91508183856020840282011115610ddf57600080fd5b60005b83811015610e0f5781610df588826110aa565b845260208401935060208301925050600181019050610de2565b5050505092915050565b600082601f8301121515610e2c57600080fd5b8135610e3f610e3a82612149565b611f88565b91508181835260208401935060208101905083856020840282011115610e6457600080fd5b60005b83811015610e945781610e7a88826110aa565b845260208401935060208301925050600181019050610e67565b5050505092915050565b6000610eaa8235612504565b905092915050565b6000610ebe8235612510565b905092915050565b6000610ed2823561253c565b905092915050565b600082601f8301121515610eed57600080fd5b8135610f00610efb82612171565b611f88565b91508082526020830160208301858383011115610f1c57600080fd5b610f278382846125cd565b50505092915050565b600082601f8301121515610f4357600080fd5b8135610f56610f518261219d565b611f88565b91508082526020830160208301858383011115610f7257600080fd5b610f7d8382846125cd565b50505092915050565b6000610f928235612546565b905092915050565b6000610fa68235612553565b905092915050565b6000610fba823561255d565b905092915050565b6000610fce823561256a565b905092915050565b6000610fe28235612577565b905092915050565b600082601f8301121515610ffd57600080fd5b813561101061100b826121c9565b611f88565b9150808252602083016020830185838301111561102c57600080fd5b6110378382846125cd565b50505092915050565b600082601f830112151561105357600080fd5b8135611066611061826121f5565b611f88565b9150808252602083016020830185838301111561108257600080fd5b61108d8382846125cd565b50505092915050565b60006110a28235612584565b905092915050565b60006110b68235612592565b905092915050565b60006110ca823561259c565b905092915050565b60006110de82356125ac565b905092915050565b60006110f282356125c0565b905092915050565b60006020828403121561110c57600080fd5b600061111a848285016108e4565b91505092915050565b60006040828403121561113557600080fd5b6000611143848285016108f8565b91505092915050565b60006020828403121561115e57600080fd5b600082013567ffffffffffffffff81111561117857600080fd5b6111848482850161096e565b91505092915050565b60006040828403121561119f57600080fd5b60006111ad848285016109f3565b91505092915050565b6000602082840312156111c857600080fd5b600082013567ffffffffffffffff8111156111e257600080fd5b6111ee84828501610a69565b91505092915050565b60006020828403121561120957600080fd5b600082013567ffffffffffffffff81111561122357600080fd5b61122f84828501610aee565b91505092915050565b60006020828403121561124a57600080fd5b600082013567ffffffffffffffff81111561126457600080fd5b61127084828501610b55565b91505092915050565b60006040828403121561128b57600080fd5b600061129984828501610bcb565b91505092915050565b6000602082840312156112b457600080fd5b600082013567ffffffffffffffff8111156112ce57600080fd5b6112da84828501610c41565b91505092915050565b6000602082840312156112f557600080fd5b600082013567ffffffffffffffff81111561130f57600080fd5b61131b84828501610cc6565b91505092915050565b60006020828403121561133657600080fd5b600082013567ffffffffffffffff81111561135057600080fd5b61135c84828501610d2d565b91505092915050565b60006040828403121561137757600080fd5b600061138584828501610da3565b91505092915050565b6000602082840312156113a057600080fd5b600082013567ffffffffffffffff8111156113ba57600080fd5b6113c684828501610e19565b91505092915050565b6000602082840312156113e157600080fd5b60006113ef84828501610e9e565b91505092915050565b60006020828403121561140a57600080fd5b600061141884828501610eb2565b91505092915050565b60006020828403121561143357600080fd5b600061144184828501610ec6565b91505092915050565b60006020828403121561145c57600080fd5b600082013567ffffffffffffffff81111561147657600080fd5b61148284828501610f30565b91505092915050565b60006020828403121561149d57600080fd5b60006114ab84828501610f86565b91505092915050565b6000602082840312156114c657600080fd5b60006114d484828501610f9a565b91505092915050565b6000602082840312156114ef57600080fd5b60006114fd84828501610fae565b91505092915050565b60006020828403121561151857600080fd5b600061152684828501610fc2565b91505092915050565b60006020828403121561154157600080fd5b600061154f84828501610fd6565b91505092915050565b60006020828403121561156a57600080fd5b600082013567ffffffffffffffff81111561158457600080fd5b61159084828501611040565b91505092915050565b6000602082840312156115ab57600080fd5b60006115b984828501611096565b91505092915050565b6000602082840312156115d457600080fd5b60006115e2848285016110aa565b91505092915050565b6000602082840312156115fd57600080fd5b600061160b848285016110be565b91505092915050565b60006020828403121561162657600080fd5b6000611634848285016110d2565b91505092915050565b60006020828403121561164f57600080fd5b600061165d848285016110e6565b91505092915050565b61166f816123f7565b82525050565b61167e816122ab565b61168782612221565b60005b828110156116b95761169d858351611666565b6116a68261235b565b915060208501945060018101905061168a565b5050505050565b60006116cb826122b6565b8084526020840193506116dd8361222b565b60005b8281101561170f576116f3868351611666565b6116fc82612368565b91506020860195506001810190506116e0565b50849250505092915050565b611724816122c1565b61172d82612238565b60005b8281101561175f57611743858351611ab3565b61174c82612375565b9150602085019450600181019050611730565b5050505050565b6000611771826122cc565b80845260208401935061178383612242565b60005b828110156117b557611799868351611ab3565b6117a282612382565b9150602086019550600181019050611786565b50849250505092915050565b60006117cc826122d7565b836020820285016117dc8561224f565b60005b848110156118155783830388526117f7838351611b16565b92506118028261238f565b91506020880197506001810190506117df565b508196508694505050505092915050565b6000611831826122e2565b8084526020840193508360208202850161184a85612259565b60005b84811015611883578383038852611865838351611b16565b92506118708261239c565b915060208801975060018101905061184d565b508196508694505050505092915050565b61189d816122ed565b6118a682612266565b60005b828110156118d8576118bc858351611b5b565b6118c5826123a9565b91506020850194506001810190506118a9565b5050505050565b60006118ea826122f8565b8084526020840193506118fc83612270565b60005b8281101561192e57611912868351611b5b565b61191b826123b6565b91506020860195506001810190506118ff565b50849250505092915050565b600061194582612303565b836020820285016119558561227d565b60005b8481101561198e578383038852611970838351611bcd565b925061197b826123c3565b9150602088019750600181019050611958565b508196508694505050505092915050565b60006119aa8261230e565b808452602084019350836020820285016119c385612287565b60005b848110156119fc5783830388526119de838351611bcd565b92506119e9826123d0565b91506020880197506001810190506119c6565b508196508694505050505092915050565b611a1681612319565b611a1f82612294565b60005b82811015611a5157611a35858351611c12565b611a3e826123dd565b9150602085019450600181019050611a22565b5050505050565b6000611a6382612324565b808452602084019350611a758361229e565b60005b82811015611aa757611a8b868351611c12565b611a94826123ea565b9150602086019550600181019050611a78565b50849250505092915050565b611abc81612409565b82525050565b611acb81612415565b82525050565b611ada81612441565b82525050565b6000611aeb8261233a565b808452611aff8160208601602086016125dc565b611b088161260f565b602085010191505092915050565b6000611b218261232f565b808452611b358160208601602086016125dc565b611b3e8161260f565b602085010191505092915050565b611b558161244b565b82525050565b611b6481612458565b82525050565b611b7381612462565b82525050565b611b828161246f565b82525050565b611b918161247c565b82525050565b6000611ba282612350565b808452611bb68160208601602086016125dc565b611bbf8161260f565b602085010191505092915050565b6000611bd882612345565b808452611bec8160208601602086016125dc565b611bf58161260f565b602085010191505092915050565b611c0c81612489565b82525050565b611c1b816124b7565b82525050565b611c2a816124c1565b82525050565b611c39816124d1565b82525050565b611c48816124e5565b82525050565b6000602082019050611c636000830184611666565b92915050565b6000604082019050611c7e6000830184611675565b92915050565b60006020820190508181036000830152611c9e81846116c0565b905092915050565b6000604082019050611cbb600083018461171b565b92915050565b60006020820190508181036000830152611cdb8184611766565b905092915050565b60006020820190508181036000830152611cfd81846117c1565b905092915050565b60006020820190508181036000830152611d1f8184611826565b905092915050565b6000604082019050611d3c6000830184611894565b92915050565b60006020820190508181036000830152611d5c81846118df565b905092915050565b60006020820190508181036000830152611d7e818461193a565b905092915050565b60006020820190508181036000830152611da0818461199f565b905092915050565b6000604082019050611dbd6000830184611a0d565b92915050565b60006020820190508181036000830152611ddd8184611a58565b905092915050565b6000602082019050611dfa6000830184611ab3565b92915050565b6000602082019050611e156000830184611ac2565b92915050565b6000602082019050611e306000830184611ad1565b92915050565b60006020820190508181036000830152611e508184611ae0565b905092915050565b6000602082019050611e6d6000830184611b4c565b92915050565b6000602082019050611e886000830184611b5b565b92915050565b6000602082019050611ea36000830184611b6a565b92915050565b6000602082019050611ebe6000830184611b79565b92915050565b6000602082019050611ed96000830184611b88565b92915050565b60006020820190508181036000830152611ef98184611b97565b905092915050565b6000602082019050611f166000830184611c03565b92915050565b6000602082019050611f316000830184611c12565b92915050565b6000602082019050611f4c6000830184611c21565b92915050565b6000602082019050611f676000830184611c30565b92915050565b6000602082019050611f826000830184611c3f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611fab57600080fd5b8060405250919050565b600067ffffffffffffffff821115611fcc57600080fd5b602082029050919050565b600067ffffffffffffffff821115611fee57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561201657600080fd5b602082029050919050565b600067ffffffffffffffff82111561203857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561206057600080fd5b602082029050919050565b600067ffffffffffffffff82111561208257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120aa57600080fd5b602082029050919050565b600067ffffffffffffffff8211156120cc57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120f457600080fd5b602082029050919050565b600067ffffffffffffffff82111561211657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561213e57600080fd5b602082029050919050565b600067ffffffffffffffff82111561216057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561218857600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121b457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121e057600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561220c57600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061240282612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006124fd82612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156125fa5780820151818401526020810190506125df565b83811115612609576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a723058206fe37171cf1b10ebd291cfdca61d67e7fc3c208795e999c833c42a14d86cf00d6c6578706572696d656e74616cf50037`,
  1807  			`
  1808  // This file is an automatically generated Java binding. Do not modify as any
  1809  // change will likely be lost upon the next re-generation!
  1810  
  1811  package bindtest;
  1812  
  1813  import org.ethereum.geth.*;
  1814  import java.util.*;
  1815  
  1816  public class Test {
  1817  	// ABI is the input ABI used to generate the binding from.
  1818  	public final static String ABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"u16\",\"type\":\"uint16\"}],\"name\":\"setUint16\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b_a\",\"type\":\"bool[2]\"}],\"name\":\"setBoolArray\",\"outputs\":[{\"name\":\"\",\"type\":\"bool[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a_a\",\"type\":\"address[2]\"}],\"name\":\"setAddressArray\",\"outputs\":[{\"name\":\"\",\"type\":\"address[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bs_l\",\"type\":\"bytes[]\"}],\"name\":\"setBytesList\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u8\",\"type\":\"uint8\"}],\"name\":\"setUint8\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u32\",\"type\":\"uint32\"}],\"name\":\"setUint32\",\"outputs\":[{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b\",\"type\":\"bool\"}],\"name\":\"setBool\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i256_l\",\"type\":\"int256[]\"}],\"name\":\"setInt256List\",\"outputs\":[{\"name\":\"\",\"type\":\"int256[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u256_a\",\"type\":\"uint256[2]\"}],\"name\":\"setUint256Array\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b_l\",\"type\":\"bool[]\"}],\"name\":\"setBoolList\",\"outputs\":[{\"name\":\"\",\"type\":\"bool[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bs_a\",\"type\":\"bytes[2]\"}],\"name\":\"setBytesArray\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a_l\",\"type\":\"address[]\"}],\"name\":\"setAddressList\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i256_a\",\"type\":\"int256[2]\"}],\"name\":\"setInt256Array\",\"outputs\":[{\"name\":\"\",\"type\":\"int256[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"s_a\",\"type\":\"string[2]\"}],\"name\":\"setStringArray\",\"outputs\":[{\"name\":\"\",\"type\":\"string[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"s\",\"type\":\"string\"}],\"name\":\"setString\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u64\",\"type\":\"uint64\"}],\"name\":\"setUint64\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i16\",\"type\":\"int16\"}],\"name\":\"setInt16\",\"outputs\":[{\"name\":\"\",\"type\":\"int16\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i8\",\"type\":\"int8\"}],\"name\":\"setInt8\",\"outputs\":[{\"name\":\"\",\"type\":\"int8\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u256_l\",\"type\":\"uint256[]\"}],\"name\":\"setUint256List\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i256\",\"type\":\"int256\"}],\"name\":\"setInt256\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i32\",\"type\":\"int32\"}],\"name\":\"setInt32\",\"outputs\":[{\"name\":\"\",\"type\":\"int32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b32\",\"type\":\"bytes32\"}],\"name\":\"setBytes32\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"s_l\",\"type\":\"string[]\"}],\"name\":\"setStringList\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u256\",\"type\":\"uint256\"}],\"name\":\"setUint256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bs\",\"type\":\"bytes\"}],\"name\":\"setBytes\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i64\",\"type\":\"int64\"}],\"name\":\"setInt64\",\"outputs\":[{\"name\":\"\",\"type\":\"int64\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b1\",\"type\":\"bytes1\"}],\"name\":\"setBytes1\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes1\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]";
  1819  	
  1820  	// BYTECODE is the compiled bytecode used for deploying new contracts.
  1821  	public final static String BYTECODE = "0x608060405234801561001057600080fd5b5061265a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637fcaf66611610116578063c2b12a73116100b4578063da359dc81161008e578063da359dc814610666578063e30081a014610696578063e673eb32146106c6578063fba1a1c3146106f6576101e1565b8063c2b12a73146105d6578063c577796114610606578063d2282dc514610636576101e1565b80639a19a953116100f05780639a19a95314610516578063a0709e1914610546578063a53b1c1e14610576578063b7d5df31146105a6576101e1565b80637fcaf66614610486578063822cba69146104b657806386114cea146104e6576101e1565b806322722302116101835780635119655d1161015d5780635119655d146103c65780635be6b37e146103f65780636aa482fc146104265780637173b69514610456576101e1565b806322722302146103365780632766a755146103665780634d5ee6da14610396576101e1565b806316c105e2116101bf57806316c105e2146102765780631774e646146102a65780631c9352e2146102d65780631e26fd3314610306576101e1565b80630477988a146101e6578063118a971814610216578063151f547114610246575b600080fd5b61020060048036036101fb9190810190611599565b610726565b60405161020d9190611f01565b60405180910390f35b610230600480360361022b919081019061118d565b61072d565b60405161023d9190611ca6565b60405180910390f35b610260600480360361025b9190810190611123565b61073a565b60405161026d9190611c69565b60405180910390f35b610290600480360361028b9190810190611238565b610747565b60405161029d9190611d05565b60405180910390f35b6102c060048036036102bb919081019061163d565b61074e565b6040516102cd9190611f6d565b60405180910390f35b6102f060048036036102eb91908101906115eb565b610755565b6040516102fd9190611f37565b60405180910390f35b610320600480360361031b91908101906113cf565b61075c565b60405161032d9190611de5565b60405180910390f35b610350600480360361034b91908101906112a2565b610763565b60405161035d9190611d42565b60405180910390f35b610380600480360361037b9190810190611365565b61076a565b60405161038d9190611da8565b60405180910390f35b6103b060048036036103ab91908101906111b6565b610777565b6040516103bd9190611cc1565b60405180910390f35b6103e060048036036103db91908101906111f7565b61077e565b6040516103ed9190611ce3565b60405180910390f35b610410600480360361040b919081019061114c565b61078b565b60405161041d9190611c84565b60405180910390f35b610440600480360361043b9190810190611279565b610792565b60405161044d9190611d27565b60405180910390f35b610470600480360361046b91908101906112e3565b61079f565b60405161047d9190611d64565b60405180910390f35b6104a0600480360361049b9190810190611558565b6107ac565b6040516104ad9190611edf565b60405180910390f35b6104d060048036036104cb9190810190611614565b6107b3565b6040516104dd9190611f52565b60405180910390f35b61050060048036036104fb919081019061148b565b6107ba565b60405161050d9190611e58565b60405180910390f35b610530600480360361052b919081019061152f565b6107c1565b60405161053d9190611ec4565b60405180910390f35b610560600480360361055b919081019061138e565b6107c8565b60405161056d9190611dc3565b60405180910390f35b610590600480360361058b91908101906114b4565b6107cf565b60405161059d9190611e73565b60405180910390f35b6105c060048036036105bb91908101906114dd565b6107d6565b6040516105cd9190611e8e565b60405180910390f35b6105f060048036036105eb9190810190611421565b6107dd565b6040516105fd9190611e1b565b60405180910390f35b610620600480360361061b9190810190611324565b6107e4565b60405161062d9190611d86565b60405180910390f35b610650600480360361064b91908101906115c2565b6107eb565b60405161065d9190611f1c565b60405180910390f35b610680600480360361067b919081019061144a565b6107f2565b60405161068d9190611e36565b60405180910390f35b6106b060048036036106ab91908101906110fa565b6107f9565b6040516106bd9190611c4e565b60405180910390f35b6106e060048036036106db9190810190611506565b610800565b6040516106ed9190611ea9565b60405180910390f35b610710600480360361070b91908101906113f8565b610807565b60405161071d9190611e00565b60405180910390f35b6000919050565b61073561080e565b919050565b610742610830565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b610772610852565b919050565b6060919050565b610786610874565b919050565b6060919050565b61079a61089b565b919050565b6107a76108bd565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108835790505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108cc5790505090565b60006108f082356124f2565b905092915050565b600082601f830112151561090b57600080fd5b600261091e61091982611fb5565b611f88565b9150818385602084028201111561093457600080fd5b60005b83811015610964578161094a88826108e4565b845260208401935060208301925050600181019050610937565b5050505092915050565b600082601f830112151561098157600080fd5b813561099461098f82611fd7565b611f88565b915081818352602084019350602081019050838560208402820111156109b957600080fd5b60005b838110156109e957816109cf88826108e4565b8452602084019350602083019250506001810190506109bc565b5050505092915050565b600082601f8301121515610a0657600080fd5b6002610a19610a1482611fff565b611f88565b91508183856020840282011115610a2f57600080fd5b60005b83811015610a5f5781610a458882610e9e565b845260208401935060208301925050600181019050610a32565b5050505092915050565b600082601f8301121515610a7c57600080fd5b8135610a8f610a8a82612021565b611f88565b91508181835260208401935060208101905083856020840282011115610ab457600080fd5b60005b83811015610ae45781610aca8882610e9e565b845260208401935060208301925050600181019050610ab7565b5050505092915050565b600082601f8301121515610b0157600080fd5b6002610b14610b0f82612049565b611f88565b9150818360005b83811015610b4b5781358601610b318882610eda565b845260208401935060208301925050600181019050610b1b565b5050505092915050565b600082601f8301121515610b6857600080fd5b8135610b7b610b768261206b565b611f88565b9150818183526020840193506020810190508360005b83811015610bc15781358601610ba78882610eda565b845260208401935060208301925050600181019050610b91565b5050505092915050565b600082601f8301121515610bde57600080fd5b6002610bf1610bec82612093565b611f88565b91508183856020840282011115610c0757600080fd5b60005b83811015610c375781610c1d8882610f9a565b845260208401935060208301925050600181019050610c0a565b5050505092915050565b600082601f8301121515610c5457600080fd5b8135610c67610c62826120b5565b611f88565b91508181835260208401935060208101905083856020840282011115610c8c57600080fd5b60005b83811015610cbc5781610ca28882610f9a565b845260208401935060208301925050600181019050610c8f565b5050505092915050565b600082601f8301121515610cd957600080fd5b6002610cec610ce7826120dd565b611f88565b9150818360005b83811015610d235781358601610d098882610fea565b845260208401935060208301925050600181019050610cf3565b5050505092915050565b600082601f8301121515610d4057600080fd5b8135610d53610d4e826120ff565b611f88565b9150818183526020840193506020810190508360005b83811015610d995781358601610d7f8882610fea565b845260208401935060208301925050600181019050610d69565b5050505092915050565b600082601f8301121515610db657600080fd5b6002610dc9610dc482612127565b611f88565b91508183856020840282011115610ddf57600080fd5b60005b83811015610e0f5781610df588826110aa565b845260208401935060208301925050600181019050610de2565b5050505092915050565b600082601f8301121515610e2c57600080fd5b8135610e3f610e3a82612149565b611f88565b91508181835260208401935060208101905083856020840282011115610e6457600080fd5b60005b83811015610e945781610e7a88826110aa565b845260208401935060208301925050600181019050610e67565b5050505092915050565b6000610eaa8235612504565b905092915050565b6000610ebe8235612510565b905092915050565b6000610ed2823561253c565b905092915050565b600082601f8301121515610eed57600080fd5b8135610f00610efb82612171565b611f88565b91508082526020830160208301858383011115610f1c57600080fd5b610f278382846125cd565b50505092915050565b600082601f8301121515610f4357600080fd5b8135610f56610f518261219d565b611f88565b91508082526020830160208301858383011115610f7257600080fd5b610f7d8382846125cd565b50505092915050565b6000610f928235612546565b905092915050565b6000610fa68235612553565b905092915050565b6000610fba823561255d565b905092915050565b6000610fce823561256a565b905092915050565b6000610fe28235612577565b905092915050565b600082601f8301121515610ffd57600080fd5b813561101061100b826121c9565b611f88565b9150808252602083016020830185838301111561102c57600080fd5b6110378382846125cd565b50505092915050565b600082601f830112151561105357600080fd5b8135611066611061826121f5565b611f88565b9150808252602083016020830185838301111561108257600080fd5b61108d8382846125cd565b50505092915050565b60006110a28235612584565b905092915050565b60006110b68235612592565b905092915050565b60006110ca823561259c565b905092915050565b60006110de82356125ac565b905092915050565b60006110f282356125c0565b905092915050565b60006020828403121561110c57600080fd5b600061111a848285016108e4565b91505092915050565b60006040828403121561113557600080fd5b6000611143848285016108f8565b91505092915050565b60006020828403121561115e57600080fd5b600082013567ffffffffffffffff81111561117857600080fd5b6111848482850161096e565b91505092915050565b60006040828403121561119f57600080fd5b60006111ad848285016109f3565b91505092915050565b6000602082840312156111c857600080fd5b600082013567ffffffffffffffff8111156111e257600080fd5b6111ee84828501610a69565b91505092915050565b60006020828403121561120957600080fd5b600082013567ffffffffffffffff81111561122357600080fd5b61122f84828501610aee565b91505092915050565b60006020828403121561124a57600080fd5b600082013567ffffffffffffffff81111561126457600080fd5b61127084828501610b55565b91505092915050565b60006040828403121561128b57600080fd5b600061129984828501610bcb565b91505092915050565b6000602082840312156112b457600080fd5b600082013567ffffffffffffffff8111156112ce57600080fd5b6112da84828501610c41565b91505092915050565b6000602082840312156112f557600080fd5b600082013567ffffffffffffffff81111561130f57600080fd5b61131b84828501610cc6565b91505092915050565b60006020828403121561133657600080fd5b600082013567ffffffffffffffff81111561135057600080fd5b61135c84828501610d2d565b91505092915050565b60006040828403121561137757600080fd5b600061138584828501610da3565b91505092915050565b6000602082840312156113a057600080fd5b600082013567ffffffffffffffff8111156113ba57600080fd5b6113c684828501610e19565b91505092915050565b6000602082840312156113e157600080fd5b60006113ef84828501610e9e565b91505092915050565b60006020828403121561140a57600080fd5b600061141884828501610eb2565b91505092915050565b60006020828403121561143357600080fd5b600061144184828501610ec6565b91505092915050565b60006020828403121561145c57600080fd5b600082013567ffffffffffffffff81111561147657600080fd5b61148284828501610f30565b91505092915050565b60006020828403121561149d57600080fd5b60006114ab84828501610f86565b91505092915050565b6000602082840312156114c657600080fd5b60006114d484828501610f9a565b91505092915050565b6000602082840312156114ef57600080fd5b60006114fd84828501610fae565b91505092915050565b60006020828403121561151857600080fd5b600061152684828501610fc2565b91505092915050565b60006020828403121561154157600080fd5b600061154f84828501610fd6565b91505092915050565b60006020828403121561156a57600080fd5b600082013567ffffffffffffffff81111561158457600080fd5b61159084828501611040565b91505092915050565b6000602082840312156115ab57600080fd5b60006115b984828501611096565b91505092915050565b6000602082840312156115d457600080fd5b60006115e2848285016110aa565b91505092915050565b6000602082840312156115fd57600080fd5b600061160b848285016110be565b91505092915050565b60006020828403121561162657600080fd5b6000611634848285016110d2565b91505092915050565b60006020828403121561164f57600080fd5b600061165d848285016110e6565b91505092915050565b61166f816123f7565b82525050565b61167e816122ab565b61168782612221565b60005b828110156116b95761169d858351611666565b6116a68261235b565b915060208501945060018101905061168a565b5050505050565b60006116cb826122b6565b8084526020840193506116dd8361222b565b60005b8281101561170f576116f3868351611666565b6116fc82612368565b91506020860195506001810190506116e0565b50849250505092915050565b611724816122c1565b61172d82612238565b60005b8281101561175f57611743858351611ab3565b61174c82612375565b9150602085019450600181019050611730565b5050505050565b6000611771826122cc565b80845260208401935061178383612242565b60005b828110156117b557611799868351611ab3565b6117a282612382565b9150602086019550600181019050611786565b50849250505092915050565b60006117cc826122d7565b836020820285016117dc8561224f565b60005b848110156118155783830388526117f7838351611b16565b92506118028261238f565b91506020880197506001810190506117df565b508196508694505050505092915050565b6000611831826122e2565b8084526020840193508360208202850161184a85612259565b60005b84811015611883578383038852611865838351611b16565b92506118708261239c565b915060208801975060018101905061184d565b508196508694505050505092915050565b61189d816122ed565b6118a682612266565b60005b828110156118d8576118bc858351611b5b565b6118c5826123a9565b91506020850194506001810190506118a9565b5050505050565b60006118ea826122f8565b8084526020840193506118fc83612270565b60005b8281101561192e57611912868351611b5b565b61191b826123b6565b91506020860195506001810190506118ff565b50849250505092915050565b600061194582612303565b836020820285016119558561227d565b60005b8481101561198e578383038852611970838351611bcd565b925061197b826123c3565b9150602088019750600181019050611958565b508196508694505050505092915050565b60006119aa8261230e565b808452602084019350836020820285016119c385612287565b60005b848110156119fc5783830388526119de838351611bcd565b92506119e9826123d0565b91506020880197506001810190506119c6565b508196508694505050505092915050565b611a1681612319565b611a1f82612294565b60005b82811015611a5157611a35858351611c12565b611a3e826123dd565b9150602085019450600181019050611a22565b5050505050565b6000611a6382612324565b808452602084019350611a758361229e565b60005b82811015611aa757611a8b868351611c12565b611a94826123ea565b9150602086019550600181019050611a78565b50849250505092915050565b611abc81612409565b82525050565b611acb81612415565b82525050565b611ada81612441565b82525050565b6000611aeb8261233a565b808452611aff8160208601602086016125dc565b611b088161260f565b602085010191505092915050565b6000611b218261232f565b808452611b358160208601602086016125dc565b611b3e8161260f565b602085010191505092915050565b611b558161244b565b82525050565b611b6481612458565b82525050565b611b7381612462565b82525050565b611b828161246f565b82525050565b611b918161247c565b82525050565b6000611ba282612350565b808452611bb68160208601602086016125dc565b611bbf8161260f565b602085010191505092915050565b6000611bd882612345565b808452611bec8160208601602086016125dc565b611bf58161260f565b602085010191505092915050565b611c0c81612489565b82525050565b611c1b816124b7565b82525050565b611c2a816124c1565b82525050565b611c39816124d1565b82525050565b611c48816124e5565b82525050565b6000602082019050611c636000830184611666565b92915050565b6000604082019050611c7e6000830184611675565b92915050565b60006020820190508181036000830152611c9e81846116c0565b905092915050565b6000604082019050611cbb600083018461171b565b92915050565b60006020820190508181036000830152611cdb8184611766565b905092915050565b60006020820190508181036000830152611cfd81846117c1565b905092915050565b60006020820190508181036000830152611d1f8184611826565b905092915050565b6000604082019050611d3c6000830184611894565b92915050565b60006020820190508181036000830152611d5c81846118df565b905092915050565b60006020820190508181036000830152611d7e818461193a565b905092915050565b60006020820190508181036000830152611da0818461199f565b905092915050565b6000604082019050611dbd6000830184611a0d565b92915050565b60006020820190508181036000830152611ddd8184611a58565b905092915050565b6000602082019050611dfa6000830184611ab3565b92915050565b6000602082019050611e156000830184611ac2565b92915050565b6000602082019050611e306000830184611ad1565b92915050565b60006020820190508181036000830152611e508184611ae0565b905092915050565b6000602082019050611e6d6000830184611b4c565b92915050565b6000602082019050611e886000830184611b5b565b92915050565b6000602082019050611ea36000830184611b6a565b92915050565b6000602082019050611ebe6000830184611b79565b92915050565b6000602082019050611ed96000830184611b88565b92915050565b60006020820190508181036000830152611ef98184611b97565b905092915050565b6000602082019050611f166000830184611c03565b92915050565b6000602082019050611f316000830184611c12565b92915050565b6000602082019050611f4c6000830184611c21565b92915050565b6000602082019050611f676000830184611c30565b92915050565b6000602082019050611f826000830184611c3f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611fab57600080fd5b8060405250919050565b600067ffffffffffffffff821115611fcc57600080fd5b602082029050919050565b600067ffffffffffffffff821115611fee57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561201657600080fd5b602082029050919050565b600067ffffffffffffffff82111561203857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561206057600080fd5b602082029050919050565b600067ffffffffffffffff82111561208257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120aa57600080fd5b602082029050919050565b600067ffffffffffffffff8211156120cc57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120f457600080fd5b602082029050919050565b600067ffffffffffffffff82111561211657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561213e57600080fd5b602082029050919050565b600067ffffffffffffffff82111561216057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561218857600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121b457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121e057600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561220c57600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061240282612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006124fd82612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156125fa5780820151818401526020810190506125df565b83811115612609576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a723058206fe37171cf1b10ebd291cfdca61d67e7fc3c208795e999c833c42a14d86cf00d6c6578706572696d656e74616cf50037";
  1822  
  1823  	// deploy deploys a new Ethereum contract, binding an instance of Test to it.
  1824  	public static Test deploy(TransactOpts auth, EthereumClient client) throws Exception {
  1825  		Interfaces args = Geth.newInterfaces(0);
  1826  		String bytecode = BYTECODE;
  1827  		return new Test(Geth.deployContract(auth, ABI, Geth.decodeFromHex(bytecode), client, args));
  1828  	}
  1829  
  1830  	// Internal constructor used by contract deployment.
  1831  	private Test(BoundContract deployment) {
  1832  		this.Address  = deployment.getAddress();
  1833  		this.Deployer = deployment.getDeployer();
  1834  		this.Contract = deployment;
  1835  	}
  1836  	
  1837  	// Ethereum address where this contract is located at.
  1838  	public final Address Address;
  1839  
  1840  	// Ethereum transaction in which this contract was deployed (if known!).
  1841  	public final Transaction Deployer;
  1842  
  1843  	// Contract instance bound to a blockchain address.
  1844  	private final BoundContract Contract;
  1845  
  1846  	// Creates a new instance of Test, bound to a specific deployed contract.
  1847  	public Test(Address address, EthereumClient client) throws Exception {
  1848  		this(Geth.bindContract(address, ABI, client));
  1849  	}
  1850  
  1851  	// setAddress is a paid mutator transaction binding the contract method 0xe30081a0.
  1852  	//
  1853  	// Solidity: function setAddress(address a) returns(address)
  1854  	public Transaction setAddress(TransactOpts opts, Address a) throws Exception {
  1855  		Interfaces args = Geth.newInterfaces(1);
  1856  		Interface arg0 = Geth.newInterface();arg0.setAddress(a);args.set(0,arg0);
  1857  		
  1858  		return this.Contract.transact(opts, "setAddress"	, args);
  1859  	}
  1860  	
  1861  	// setAddressArray is a paid mutator transaction binding the contract method 0x151f5471.
  1862  	//
  1863  	// Solidity: function setAddressArray(address[2] a_a) returns(address[2])
  1864  	public Transaction setAddressArray(TransactOpts opts, Addresses a_a) throws Exception {
  1865  		Interfaces args = Geth.newInterfaces(1);
  1866  		Interface arg0 = Geth.newInterface();arg0.setAddresses(a_a);args.set(0,arg0);
  1867  		
  1868  		return this.Contract.transact(opts, "setAddressArray"	, args);
  1869  	}
  1870  	
  1871  	// setAddressList is a paid mutator transaction binding the contract method 0x5be6b37e.
  1872  	//
  1873  	// Solidity: function setAddressList(address[] a_l) returns(address[])
  1874  	public Transaction setAddressList(TransactOpts opts, Addresses a_l) throws Exception {
  1875  		Interfaces args = Geth.newInterfaces(1);
  1876  		Interface arg0 = Geth.newInterface();arg0.setAddresses(a_l);args.set(0,arg0);
  1877  		
  1878  		return this.Contract.transact(opts, "setAddressList"	, args);
  1879  	}
  1880  	
  1881  	// setBool is a paid mutator transaction binding the contract method 0x1e26fd33.
  1882  	//
  1883  	// Solidity: function setBool(bool b) returns(bool)
  1884  	public Transaction setBool(TransactOpts opts, boolean b) throws Exception {
  1885  		Interfaces args = Geth.newInterfaces(1);
  1886  		Interface arg0 = Geth.newInterface();arg0.setBool(b);args.set(0,arg0);
  1887  		
  1888  		return this.Contract.transact(opts, "setBool"	, args);
  1889  	}
  1890  	
  1891  	// setBoolArray is a paid mutator transaction binding the contract method 0x118a9718.
  1892  	//
  1893  	// Solidity: function setBoolArray(bool[2] b_a) returns(bool[2])
  1894  	public Transaction setBoolArray(TransactOpts opts, Bools b_a) throws Exception {
  1895  		Interfaces args = Geth.newInterfaces(1);
  1896  		Interface arg0 = Geth.newInterface();arg0.setBools(b_a);args.set(0,arg0);
  1897  		
  1898  		return this.Contract.transact(opts, "setBoolArray"	, args);
  1899  	}
  1900  	
  1901  	// setBoolList is a paid mutator transaction binding the contract method 0x4d5ee6da.
  1902  	//
  1903  	// Solidity: function setBoolList(bool[] b_l) returns(bool[])
  1904  	public Transaction setBoolList(TransactOpts opts, Bools b_l) throws Exception {
  1905  		Interfaces args = Geth.newInterfaces(1);
  1906  		Interface arg0 = Geth.newInterface();arg0.setBools(b_l);args.set(0,arg0);
  1907  		
  1908  		return this.Contract.transact(opts, "setBoolList"	, args);
  1909  	}
  1910  	
  1911  	// setBytes is a paid mutator transaction binding the contract method 0xda359dc8.
  1912  	//
  1913  	// Solidity: function setBytes(bytes bs) returns(bytes)
  1914  	public Transaction setBytes(TransactOpts opts, byte[] bs) throws Exception {
  1915  		Interfaces args = Geth.newInterfaces(1);
  1916  		Interface arg0 = Geth.newInterface();arg0.setBinary(bs);args.set(0,arg0);
  1917  		
  1918  		return this.Contract.transact(opts, "setBytes"	, args);
  1919  	}
  1920  	
  1921  	// setBytes1 is a paid mutator transaction binding the contract method 0xfba1a1c3.
  1922  	//
  1923  	// Solidity: function setBytes1(bytes1 b1) returns(bytes1)
  1924  	public Transaction setBytes1(TransactOpts opts, byte[] b1) throws Exception {
  1925  		Interfaces args = Geth.newInterfaces(1);
  1926  		Interface arg0 = Geth.newInterface();arg0.setBinary(b1);args.set(0,arg0);
  1927  		
  1928  		return this.Contract.transact(opts, "setBytes1"	, args);
  1929  	}
  1930  	
  1931  	// setBytes32 is a paid mutator transaction binding the contract method 0xc2b12a73.
  1932  	//
  1933  	// Solidity: function setBytes32(bytes32 b32) returns(bytes32)
  1934  	public Transaction setBytes32(TransactOpts opts, byte[] b32) throws Exception {
  1935  		Interfaces args = Geth.newInterfaces(1);
  1936  		Interface arg0 = Geth.newInterface();arg0.setBinary(b32);args.set(0,arg0);
  1937  		
  1938  		return this.Contract.transact(opts, "setBytes32"	, args);
  1939  	}
  1940  	
  1941  	// setBytesArray is a paid mutator transaction binding the contract method 0x5119655d.
  1942  	//
  1943  	// Solidity: function setBytesArray(bytes[2] bs_a) returns(bytes[2])
  1944  	public Transaction setBytesArray(TransactOpts opts, Binaries bs_a) throws Exception {
  1945  		Interfaces args = Geth.newInterfaces(1);
  1946  		Interface arg0 = Geth.newInterface();arg0.setBinaries(bs_a);args.set(0,arg0);
  1947  		
  1948  		return this.Contract.transact(opts, "setBytesArray"	, args);
  1949  	}
  1950  	
  1951  	// setBytesList is a paid mutator transaction binding the contract method 0x16c105e2.
  1952  	//
  1953  	// Solidity: function setBytesList(bytes[] bs_l) returns(bytes[])
  1954  	public Transaction setBytesList(TransactOpts opts, Binaries bs_l) throws Exception {
  1955  		Interfaces args = Geth.newInterfaces(1);
  1956  		Interface arg0 = Geth.newInterface();arg0.setBinaries(bs_l);args.set(0,arg0);
  1957  		
  1958  		return this.Contract.transact(opts, "setBytesList"	, args);
  1959  	}
  1960  	
  1961  	// setInt16 is a paid mutator transaction binding the contract method 0x86114cea.
  1962  	//
  1963  	// Solidity: function setInt16(int16 i16) returns(int16)
  1964  	public Transaction setInt16(TransactOpts opts, short i16) throws Exception {
  1965  		Interfaces args = Geth.newInterfaces(1);
  1966  		Interface arg0 = Geth.newInterface();arg0.setInt16(i16);args.set(0,arg0);
  1967  		
  1968  		return this.Contract.transact(opts, "setInt16"	, args);
  1969  	}
  1970  	
  1971  	// setInt256 is a paid mutator transaction binding the contract method 0xa53b1c1e.
  1972  	//
  1973  	// Solidity: function setInt256(int256 i256) returns(int256)
  1974  	public Transaction setInt256(TransactOpts opts, BigInt i256) throws Exception {
  1975  		Interfaces args = Geth.newInterfaces(1);
  1976  		Interface arg0 = Geth.newInterface();arg0.setBigInt(i256);args.set(0,arg0);
  1977  		
  1978  		return this.Contract.transact(opts, "setInt256"	, args);
  1979  	}
  1980  	
  1981  	// setInt256Array is a paid mutator transaction binding the contract method 0x6aa482fc.
  1982  	//
  1983  	// Solidity: function setInt256Array(int256[2] i256_a) returns(int256[2])
  1984  	public Transaction setInt256Array(TransactOpts opts, BigInts i256_a) throws Exception {
  1985  		Interfaces args = Geth.newInterfaces(1);
  1986  		Interface arg0 = Geth.newInterface();arg0.setBigInts(i256_a);args.set(0,arg0);
  1987  		
  1988  		return this.Contract.transact(opts, "setInt256Array"	, args);
  1989  	}
  1990  	
  1991  	// setInt256List is a paid mutator transaction binding the contract method 0x22722302.
  1992  	//
  1993  	// Solidity: function setInt256List(int256[] i256_l) returns(int256[])
  1994  	public Transaction setInt256List(TransactOpts opts, BigInts i256_l) throws Exception {
  1995  		Interfaces args = Geth.newInterfaces(1);
  1996  		Interface arg0 = Geth.newInterface();arg0.setBigInts(i256_l);args.set(0,arg0);
  1997  		
  1998  		return this.Contract.transact(opts, "setInt256List"	, args);
  1999  	}
  2000  	
  2001  	// setInt32 is a paid mutator transaction binding the contract method 0xb7d5df31.
  2002  	//
  2003  	// Solidity: function setInt32(int32 i32) returns(int32)
  2004  	public Transaction setInt32(TransactOpts opts, int i32) throws Exception {
  2005  		Interfaces args = Geth.newInterfaces(1);
  2006  		Interface arg0 = Geth.newInterface();arg0.setInt32(i32);args.set(0,arg0);
  2007  		
  2008  		return this.Contract.transact(opts, "setInt32"	, args);
  2009  	}
  2010  	
  2011  	// setInt64 is a paid mutator transaction binding the contract method 0xe673eb32.
  2012  	//
  2013  	// Solidity: function setInt64(int64 i64) returns(int64)
  2014  	public Transaction setInt64(TransactOpts opts, long i64) throws Exception {
  2015  		Interfaces args = Geth.newInterfaces(1);
  2016  		Interface arg0 = Geth.newInterface();arg0.setInt64(i64);args.set(0,arg0);
  2017  		
  2018  		return this.Contract.transact(opts, "setInt64"	, args);
  2019  	}
  2020  	
  2021  	// setInt8 is a paid mutator transaction binding the contract method 0x9a19a953.
  2022  	//
  2023  	// Solidity: function setInt8(int8 i8) returns(int8)
  2024  	public Transaction setInt8(TransactOpts opts, byte i8) throws Exception {
  2025  		Interfaces args = Geth.newInterfaces(1);
  2026  		Interface arg0 = Geth.newInterface();arg0.setInt8(i8);args.set(0,arg0);
  2027  		
  2028  		return this.Contract.transact(opts, "setInt8"	, args);
  2029  	}
  2030  	
  2031  	// setString is a paid mutator transaction binding the contract method 0x7fcaf666.
  2032  	//
  2033  	// Solidity: function setString(string s) returns(string)
  2034  	public Transaction setString(TransactOpts opts, String s) throws Exception {
  2035  		Interfaces args = Geth.newInterfaces(1);
  2036  		Interface arg0 = Geth.newInterface();arg0.setString(s);args.set(0,arg0);
  2037  		
  2038  		return this.Contract.transact(opts, "setString"	, args);
  2039  	}
  2040  	
  2041  	// setStringArray is a paid mutator transaction binding the contract method 0x7173b695.
  2042  	//
  2043  	// Solidity: function setStringArray(string[2] s_a) returns(string[2])
  2044  	public Transaction setStringArray(TransactOpts opts, Strings s_a) throws Exception {
  2045  		Interfaces args = Geth.newInterfaces(1);
  2046  		Interface arg0 = Geth.newInterface();arg0.setStrings(s_a);args.set(0,arg0);
  2047  		
  2048  		return this.Contract.transact(opts, "setStringArray"	, args);
  2049  	}
  2050  	
  2051  	// setStringList is a paid mutator transaction binding the contract method 0xc5777961.
  2052  	//
  2053  	// Solidity: function setStringList(string[] s_l) returns(string[])
  2054  	public Transaction setStringList(TransactOpts opts, Strings s_l) throws Exception {
  2055  		Interfaces args = Geth.newInterfaces(1);
  2056  		Interface arg0 = Geth.newInterface();arg0.setStrings(s_l);args.set(0,arg0);
  2057  		
  2058  		return this.Contract.transact(opts, "setStringList"	, args);
  2059  	}
  2060  	
  2061  	// setUint16 is a paid mutator transaction binding the contract method 0x0477988a.
  2062  	//
  2063  	// Solidity: function setUint16(uint16 u16) returns(uint16)
  2064  	public Transaction setUint16(TransactOpts opts, BigInt u16) throws Exception {
  2065  		Interfaces args = Geth.newInterfaces(1);
  2066  		Interface arg0 = Geth.newInterface();arg0.setUint16(u16);args.set(0,arg0);
  2067  		
  2068  		return this.Contract.transact(opts, "setUint16"	, args);
  2069  	}
  2070  	
  2071  	// setUint256 is a paid mutator transaction binding the contract method 0xd2282dc5.
  2072  	//
  2073  	// Solidity: function setUint256(uint256 u256) returns(uint256)
  2074  	public Transaction setUint256(TransactOpts opts, BigInt u256) throws Exception {
  2075  		Interfaces args = Geth.newInterfaces(1);
  2076  		Interface arg0 = Geth.newInterface();arg0.setBigInt(u256);args.set(0,arg0);
  2077  		
  2078  		return this.Contract.transact(opts, "setUint256"	, args);
  2079  	}
  2080  	
  2081  	// setUint256Array is a paid mutator transaction binding the contract method 0x2766a755.
  2082  	//
  2083  	// Solidity: function setUint256Array(uint256[2] u256_a) returns(uint256[2])
  2084  	public Transaction setUint256Array(TransactOpts opts, BigInts u256_a) throws Exception {
  2085  		Interfaces args = Geth.newInterfaces(1);
  2086  		Interface arg0 = Geth.newInterface();arg0.setBigInts(u256_a);args.set(0,arg0);
  2087  		
  2088  		return this.Contract.transact(opts, "setUint256Array"	, args);
  2089  	}
  2090  	
  2091  	// setUint256List is a paid mutator transaction binding the contract method 0xa0709e19.
  2092  	//
  2093  	// Solidity: function setUint256List(uint256[] u256_l) returns(uint256[])
  2094  	public Transaction setUint256List(TransactOpts opts, BigInts u256_l) throws Exception {
  2095  		Interfaces args = Geth.newInterfaces(1);
  2096  		Interface arg0 = Geth.newInterface();arg0.setBigInts(u256_l);args.set(0,arg0);
  2097  		
  2098  		return this.Contract.transact(opts, "setUint256List"	, args);
  2099  	}
  2100  	
  2101  	// setUint32 is a paid mutator transaction binding the contract method 0x1c9352e2.
  2102  	//
  2103  	// Solidity: function setUint32(uint32 u32) returns(uint32)
  2104  	public Transaction setUint32(TransactOpts opts, BigInt u32) throws Exception {
  2105  		Interfaces args = Geth.newInterfaces(1);
  2106  		Interface arg0 = Geth.newInterface();arg0.setUint32(u32);args.set(0,arg0);
  2107  		
  2108  		return this.Contract.transact(opts, "setUint32"	, args);
  2109  	}
  2110  	
  2111  	// setUint64 is a paid mutator transaction binding the contract method 0x822cba69.
  2112  	//
  2113  	// Solidity: function setUint64(uint64 u64) returns(uint64)
  2114  	public Transaction setUint64(TransactOpts opts, BigInt u64) throws Exception {
  2115  		Interfaces args = Geth.newInterfaces(1);
  2116  		Interface arg0 = Geth.newInterface();arg0.setUint64(u64);args.set(0,arg0);
  2117  		
  2118  		return this.Contract.transact(opts, "setUint64"	, args);
  2119  	}
  2120  	
  2121  	// setUint8 is a paid mutator transaction binding the contract method 0x1774e646.
  2122  	//
  2123  	// Solidity: function setUint8(uint8 u8) returns(uint8)
  2124  	public Transaction setUint8(TransactOpts opts, BigInt u8) throws Exception {
  2125  		Interfaces args = Geth.newInterfaces(1);
  2126  		Interface arg0 = Geth.newInterface();arg0.setUint8(u8);args.set(0,arg0);
  2127  		
  2128  		return this.Contract.transact(opts, "setUint8"	, args);
  2129  	}
  2130  }
  2131  `,
  2132  		},
  2133  	}
  2134  	for i, c := range cases {
  2135  		binding, err := Bind([]string{c.name}, []string{c.abi}, []string{c.bytecode}, nil, "bindtest", LangJava, nil, nil)
  2136  		if err != nil {
  2137  			t.Fatalf("test %d: failed to generate binding: %v", i, err)
  2138  		}
  2139  		// Remove empty lines
  2140  		removeEmptys := func(input string) string {
  2141  			lines := strings.Split(input, "\n")
  2142  			var index int
  2143  			for _, line := range lines {
  2144  				if strings.TrimSpace(line) != "" {
  2145  					lines[index] = line
  2146  					index += 1
  2147  				}
  2148  			}
  2149  			lines = lines[:index]
  2150  			return strings.Join(lines, "\n")
  2151  		}
  2152  		binding = removeEmptys(binding)
  2153  		expect := removeEmptys(c.expected)
  2154  		if binding != expect {
  2155  			t.Fatalf("test %d: generated binding mismatch, has %s, want %s", i, binding, c.expected)
  2156  		}
  2157  	}
  2158  }