From a1fdac8726462f97f13d870c89084f46e1c66a9e Mon Sep 17 00:00:00 2001 From: Michael de Hoog Date: Tue, 10 Dec 2024 19:33:44 -1000 Subject: [PATCH] Fix signer registration via attestation (#33) * Bump nitro-validator Add register-signer script * forge fmt * Fix parsing of pubkey address --- Makefile | 46 +- bindings/cert_manager.go | 595 +++++ bindings/deploy_chain.go | 2 +- bindings/gnosis_safe.go | 3152 ++++++++++++++++++++++++ bindings/system_config_global.go | 1295 ++++++++++ deployments/84532-certmanager.json | 2 +- deployments/84532-deploy.json | 4 +- lib/nitro-validator | 2 +- register-signer/main.go | 181 ++ script/UpgradeSystemConfigGlobal.s.sol | 47 + src/SystemConfigGlobal.sol | 9 +- test/SystemConfigGlobal.t.sol | 2 +- 12 files changed, 5314 insertions(+), 23 deletions(-) create mode 100644 bindings/cert_manager.go create mode 100644 bindings/gnosis_safe.go create mode 100644 bindings/system_config_global.go create mode 100644 register-signer/main.go create mode 100644 script/UpgradeSystemConfigGlobal.s.sol diff --git a/Makefile b/Makefile index 1f8cb82..6152388 100644 --- a/Makefile +++ b/Makefile @@ -3,19 +3,39 @@ guard-%: define abigen echo "Generating bindings for $(1)" - jq -r '.bytecode.object' out/$(1).sol/$(1).json > out/$(1).sol/$(1).bin + cp out/$(1).sol/$(1).$(3).json out/$(1).sol/$(1).json 2>/dev/null || true + jq -r '.bytecode.object' out/$(1).sol/$(1).json > out/$(1).sol/$(1).bin jq -r '.abi' out/$(1).sol/$(1).json > out/$(1).sol/$(1).abi abigen --abi out/$(1).sol/$(1).abi --bin out/$(1).sol/$(1).bin --pkg bindings --type $(1) --out bindings/$(2).go endef +define verify + deploy=$(1); \ + version=$(2); \ + addresses=$$(jq -r '.transactions[] | select(.transactionType=="CREATE" or .transactionType=="CREATE2") | .contractAddress' $$deploy); \ + for address in $$addresses; do \ + name=$$(jq -r --arg address "$$address" '.transactions[] | select((.transactionType=="CREATE" or .transactionType=="CREATE2") and .contractAddress==$$address) | .contractName' $$deploy); \ + arguments=$$(jq -r --arg address "$$address" '.transactions[] | select((.transactionType=="CREATE" or .transactionType=="CREATE2") and .contractAddress==$$address) | .arguments // [] | join(" ")' $$deploy); \ + namewithoutversion=$${name%.*.*.*}; \ + constructor=$$(jq '.abi[] | select(.type=="constructor")' out/$$namewithoutversion.sol/$$name.json | jq -r '.inputs | map(.type) | join(",")'); \ + echo; \ + echo "Verifying $$namewithoutversion @ $$address using constructor($$constructor) $$arguments"; \ + constructor_args=$$(cast abi-encode "constructor($$constructor)" $$arguments); \ + forge verify-contract --compiler-version $$version --watch --verifier-url https://api-sepolia.basescan.org/api --constructor-args $$constructor_args $$address $$namewithoutversion ; \ + done +endef + .PHONY: bindings bindings: go install github.com/ethereum/go-ethereum/cmd/abigen@v1.14.11 forge build mkdir -p bindings - @$(call abigen,"OutputOracle","output_oracle") - @$(call abigen,"Portal","portal") - @$(call abigen,"DeployChain","deploy_chain") + @$(call abigen,"OutputOracle","output_oracle","0.8.15") + @$(call abigen,"Portal","portal","0.8.15") + @$(call abigen,"DeployChain","deploy_chain","0.8.15") + @$(call abigen,"CertManager","cert_manager","0.8.15") + @$(call abigen,"SystemConfigGlobal","system_config_global","0.8.15") + @$(call abigen,"GnosisSafe","gnosis_safe","0.8.15") .PHONY: deploy-cert-manager deploy-cert-manager: guard-IMPL_SALT guard-DEPLOY_PRIVATE_KEY guard-RPC_URL @@ -27,6 +47,11 @@ deploy: guard-IMPL_SALT guard-DEPLOY_CONFIG_PATH guard-DEPLOY_PRIVATE_KEY guard- @forge script DeploySystem --sig deploy --rpc-url $(RPC_URL) \ --private-key $(DEPLOY_PRIVATE_KEY) --broadcast +.PHONY: deploy-deploy-chain +deploy-deploy-chain: guard-IMPL_SALT guard-DEPLOY_PRIVATE_KEY guard-RPC_URL + @forge script DeployDeployChain --rpc-url $(RPC_URL) \ + --private-key $(DEPLOY_PRIVATE_KEY) --broadcast + .PHONY: testnet testnet: guard-L1_URL guard-DEPLOY_PRIVATE_KEY DEPLOY_CHAIN_ADDRESS=$${DEPLOY_CHAIN_ADDRESS:-$$(jq -r ".DeployChain" deployments/84532-deploy.json)} \ @@ -34,13 +59,6 @@ testnet: guard-L1_URL guard-DEPLOY_PRIVATE_KEY .PHONY: verify verify: - deploy=broadcast/DeploySystem.s.sol/84532/run-1733867021.json; \ - addresses=$$(jq -r '.transactions[] | select(.transactionType=="CREATE" or .transactionType=="CREATE2") | .contractAddress' $$deploy); \ - for address in $$addresses; do \ - name=$$(jq -r --arg address "$$address" '.transactions[] | select((.transactionType=="CREATE" or .transactionType=="CREATE2") and .contractAddress==$$address) | .contractName' $$deploy); \ - arguments=$$(jq -r --arg address "$$address" '.transactions[] | select((.transactionType=="CREATE" or .transactionType=="CREATE2") and .contractAddress==$$address) | .arguments // [] | join(" ")' $$deploy); \ - constructor=$$(jq '.abi[] | select(.type=="constructor")' out/$$name.sol/$$name.json | jq -r '.inputs | map(.type) | join(",")'); \ - echo "Verifying $$name @ $$address using constructor($$constructor) $$arguments"; \ - constructor_args=$$(cast abi-encode "constructor($$constructor)" $$arguments); \ - forge verify-contract --watch --verifier-url https://api-sepolia.basescan.org/api --constructor-args $$constructor_args $$address $$name ; \ - done + @$(call verify,"broadcast/DeployCertManager.s.sol/84532/run-1733890597.json","0.8.24") + @$(call verify,"broadcast/DeploySystem.s.sol/84532/run-1733867021.json","0.8.15") + @$(call verify,"broadcast/DeployDeployChain.s.sol/84532/run-1733884066.json","0.8.15") diff --git a/bindings/cert_manager.go b/bindings/cert_manager.go new file mode 100644 index 0000000..6d2effe --- /dev/null +++ b/bindings/cert_manager.go @@ -0,0 +1,595 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ICertManagerVerifiedCert is an auto generated low-level Go binding around an user-defined struct. +type ICertManagerVerifiedCert struct { + Ca bool + NotAfter uint64 + MaxPathLen int64 + SubjectHash [32]byte + PubKey []byte +} + +// CertManagerMetaData contains all meta data concerning the CertManager contract. +var CertManagerMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BASIC_CONSTRAINTS_OID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"CERT_ALGO_OID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"EC_PUB_KEY_OID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"KEY_USAGE_OID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ROOT_CA_CERT_HASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ROOT_CA_CERT_MAX_PATH_LEN\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"int64\",\"internalType\":\"int64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ROOT_CA_CERT_NOT_AFTER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ROOT_CA_CERT_PUB_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ROOT_CA_CERT_SUBJECT_HASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"SECP_384_R1_OID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verified\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyCert\",\"inputs\":[{\"name\":\"cert\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"ca\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"parentCertHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structICertManager.VerifiedCert\",\"components\":[{\"name\":\"ca\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"notAfter\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxPathLen\",\"type\":\"int64\",\"internalType\":\"int64\"},{\"name\":\"subjectHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pubKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertBundle\",\"inputs\":[{\"name\":\"certificate\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"cabundle\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structICertManager.VerifiedCert\",\"components\":[{\"name\":\"ca\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"notAfter\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maxPathLen\",\"type\":\"int64\",\"internalType\":\"int64\"},{\"name\":\"subjectHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"pubKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"nonpayable\"}]", + Bin: "0x608060405234801562000010575f80fd5b50620000b37f311d96fcd5c5e0ccf72ef548e2ea7d4c0cd53ad7c4cc49e67471aed41d61f1855f1b6040518060a001604052806001151581526020016396258ff56001600160401b031681526020015f1960070b81526020017f3c3e2e5f1dd14dee5db88341ba71521e939afdb7881aa24c9f1e1c007a2fa8b65f1b8152602001604051806080016040528060608152602001620062bf606091399052620000b9565b620002dd565b8051602080830151604080850151606086015160808701519251620000e49695929391920162000110565b60408051601f198184030181529181525f848152602081905220906200010b908262000211565b505050565b85151560f81b815260c085811b6001600160c01b031916600183015284901b60098201526011810183905281515f90815b8181101562000160576020818601810151603186840101520162000141565b505f92016031019182525095945050505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200019d57607f821691505b602082108103620001bc57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200010b57805f5260205f20601f840160051c81016020851015620001e95750805b601f840160051c820191505b818110156200020a575f8155600101620001f5565b5050505050565b81516001600160401b038111156200022d576200022d62000174565b62000245816200023e845462000188565b84620001c2565b602080601f8311600181146200027b575f8415620002635750858301515b5f19600386901b1c1916600185901b178555620002d5565b5f85815260208120601f198616915b82811015620002ab578886015182559484019460019091019084016200028a565b5085821015620002c957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b615fd480620002eb5f395ff3fe608060405234801561000f575f80fd5b50600436106100da575f3560e01c80639ecc005011610088578063af9bdbc211610063578063af9bdbc214610247578063c59e43e51461026e578063dc28a38d14610281578063f69a82fe14610294575f80fd5b80639ecc0050146101d1578063ab68988d1461020b578063aeb255ea14610220575f80fd5b80635ab70904116100b85780635ab70904146101635780635b608e2a1461018a5780638fb57b62146101aa575f80fd5b8063441b31df146100de5780634519a3521461011857806358e3139e1461013f575b5f80fd5b6101057f3c3e2e5f1dd14dee5db88341ba71521e939afdb7881aa24c9f1e1c007a2fa8b681565b6040519081526020015b60405180910390f35b6101057f6351d72a43cb42fb9a2531a28608c278c89629f8f025b5f5dc705f3fe45e950a81565b61014a6396258ff581565b60405167ffffffffffffffff909116815260200161010f565b6101057fbd74344bb507daeb9ed315bc535f24a236ccab72c5cd6945fb0efe5c037e209781565b61019d6101983660046154c9565b6102bb565b60405161010f91906155c6565b6101057f311d96fcd5c5e0ccf72ef548e2ea7d4c0cd53ad7c4cc49e67471aed41d61f18581565b6101f87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b60405160079190910b815260200161010f565b61021361047a565b60405161010f9190615617565b6101057f45529d8772b07ebd6d507a1680da791f4a2192882bf89d518801579f7a5167d281565b6101057f53ce037f0dfaa43ef13b095f04e68a6b5e3f1519a01a3203a1e6440ba915b87e81565b61021361027c366004615629565b610496565b61019d61028f366004615640565b61052d565b6101057fb60fee1fd85f867dd7c8d16884a49a20287ebe4c0fb49294e9825988aa8e42b481565b6040805160a080820183525f8083526020808401829052838501829052606080850183905260808086018290528651948501875283855291840183905294830182905282850182905282019390935290915b8381101561045b575f8585838181106103285761032861569a565b905060200281019061033a91906156c7565b604051610348929190615728565b604051809103902090505f82118061037f57507f311d96fcd5c5e0ccf72ef548e2ea7d4c0cd53ad7c4cc49e67471aed41d61f18581145b6103ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f526f6f742043412063657274206e6f74206d61746368696e670000000000000060448201526064015b60405180910390fd5b6104508686848181106103ff576103ff61569a565b905060200281019061041191906156c7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508592506001915087905061057c565b92505060010161030d565b5061046f8586805190602001205f8461057c565b9150505b9392505050565b604051806080016040528060608152602001615e786060913981565b5f60208190529081526040902080546104ae90615737565b80601f01602080910402602001604051908101604052809291908181526020018280546104da90615737565b80156105255780601f106104fc57610100808354040283529160200191610525565b820191905f5260205f20905b81548152906001019060200180831161050857829003601f168201915b505050505081565b6040805160a0810182525f8082526020820181905291810182905260608082019290925260808101919091526105748485805190602001208561056f866109e2565b61057c565b949350505050565b6040805160a0810182525f8082526020820181905291810182905260608082019290925260808101919091527f311d96fcd5c5e0ccf72ef548e2ea7d4c0cd53ad7c4cc49e67471aed41d61f1858414610796575f8260800151511161063d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f706172656e74206365727420756e76657269666965640000000000000000000060448201526064016103e1565b42826020015167ffffffffffffffff1610156106b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f706172656e74206365727420657870697265640000000000000000000000000060448201526064016103e1565b815161071d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f706172656e742063657274206973206e6f74206120434100000000000000000060448201526064016103e1565b8215806107305750604082015160070b15155b610796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f6d6178506174684c656e2065786365656465640000000000000000000000000060448201526064016103e1565b5f6107a0856109e2565b90508060800151515f1461089b5742816020015167ffffffffffffffff161015610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f636572742065787069726564000000000000000000000000000000000000000060448201526064016103e1565b8051151584151514610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f63657274206973206e6f7420612043410000000000000000000000000000000060448201526064016103e1565b9050610574565b5f6108a587610b5a565b90505f6108b28883610b6b565b90505f805f805f6108c48d878d610c39565b94509450945094509450828a606001511461093b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f697373756572202f207375626a656374206d69736d617463680000000000000060448201526064016103e1565b5f8a6040015160070b13801561096757505f8460070b12806109675750896040015160070b8460070b12155b156109805760018a6040015161097d91906157b5565b93505b61098f8d878c60800151610dd2565b6040518060a001604052808c151581526020018667ffffffffffffffff1681526020018560070b81526020018381526020018281525097506109d18c89610f96565b50959b9a5050505050505050505050565b6040805160a0810182525f8082526020808301829052828401829052606080840183905260808401528482528190529182208054919291610a2290615737565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4e90615737565b8015610a995780601f10610a7057610100808354040283529160200191610a99565b820191905f5260205f20905b815481529060010190602001808311610a7c57829003601f168201915b5050505050905080515f03610ae45750506040805160a0810182525f808252602080830182905282840182905260608301829052835190810190935282526080810191909152919050565b600181015160098201516011830151603180850151855190915f91610b179190610b0f9082906157fb565b889190611007565b6040805160a08101825260ff9097161515875267ffffffffffffffff909516602087015260079390930b9385019390935260608401526080830152509392505050565b5f610b65825f6110e2565b92915050565b5f8269ffffffffffffffffffff831681518110610b8a57610b8a61569a565b01602001517f200000000000000000000000000000000000000000000000000000000000000090811614610c1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f74206120636f6e737472756374656420747970650000000000000000000060448201526064016103e1565b61047383605084901c69ffffffffffffffffffff166110e2565b6110e2565b5f808080606081610c4a8989610b6b565b90505f610c578a83610b6b565b90505f610c648b8461128f565b90505f610c718c8361128f565b90507f53ce037f0dfaa43ef13b095f04e68a6b5e3f1519a01a3203a1e6440ba915b87e610cc5605083901c69ffffffffffffffffffff1660a084901c69ffffffffffffffffffff168f919091016020012090565b14610d2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420636572742073696720616c676f000000000000000000000060448201526064016103e1565b5f610d378d856112b5565b905080600214610da3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f76657273696f6e2073686f756c6420626520330000000000000000000000000060448201526064016103e1565b610dae8d838d611481565b809a50819b50829c50839d50849e5050505050505050505050939792965093509350565b5f610ddd848461128f565b90507f53ce037f0dfaa43ef13b095f04e68a6b5e3f1519a01a3203a1e6440ba915b87e610e31605083901c69ffffffffffffffffffff1660a084901c69ffffffffffffffffffff1687919091016020012090565b14610e98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420636572742073696720616c676f000000000000000000000060448201526064016103e1565b5f610eb88569ffffffffffffffffffff8616610eb387611654565b611698565b90505f610ec5868461128f565b90505f610ed287836117bf565b90505f610edf8883611996565b90505f610eec8983610b6b565b90505f610ef98a8361128f565b90505f80610f078c856119b1565b90925090505f80610f188e866119b1565b604051608087811b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000090811660208401526030830188905284821b166050830152606082018390529294509092505f91016040516020818303038152906040529050610f858d8c83611c09565b505050505050505050505050505050565b8051602080830151604080850151606086015160808701519251610fbf9695929391920161580e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181525f8481526020819052209061100290826158c0565b505050565b825160609061101683856159dc565b111561107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016103e1565b8167ffffffffffffffff811115611097576110976153f5565b6040519080825280601f01601f1916602001820160405280156110c1576020820181803683370190505b509050602080820190858501016110d9828286611c82565b50509392505050565b5f8080846110f18560016159dc565b815181106111015761110161569a565b01602001517f8000000000000000000000000000000000000000000000000000000000000000165f03611166578461113a8560016159dc565b8151811061114a5761114a61569a565b016020015160f81c915061115f8460026159dc565b9050611243565b5f856111738660016159dc565b815181106111835761118361569a565b60209101015160f81c607f16905060018190036111c557856111a68660026159dc565b815181106111b6576111b661569a565b016020015160f81c9250611226565b8060ff166002036111f0576111e56111de8660026159dc565b8790611cf6565b61ffff169250611226565b6111fb8160206159ef565b611206906008615a08565b60ff16611221876112188860026159dc565b8460ff16611d78565b901c92505b60ff81166112358660026159dc565b61123f91906159dc565b9150505b73ffffffffffffffffffff00000000000000000000605082901b1684177dffffffffffffffffffff000000000000000000000000000000000000000060a084901b161795945050505050565b5f61047383610c3469ffffffffffffffffffff60a086901c811690605087901c166159dc565b5f8269ffffffffffffffffffff8316815181106112d4576112d461569a565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f020000000000000000000000000000000000000000000000000000000000000014611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e6f74207479706520494e54454745520000000000000000000000000000000060448201526064016103e1565b82605083901c69ffffffffffffffffffff16815181106113a6576113a661569a565b01602001517f80000000000000000000000000000000000000000000000000000000000000001615611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f7420706f736974697665000000000000000000000000000000000000000060448201526064016103e1565b69ffffffffffffffffffff60a083901c166114508160206157fb565b61145b906008615a2b565b61147785605086901c69ffffffffffffffffffff165b84611d78565b901c949350505050565b5f808080606081611492898961128f565b90506114c6605082901c69ffffffffffffffffffff1660a083901c69ffffffffffffffffffff165b8b919091016020012090565b93505f6114d38a8361128f565b90505f6114e08b8361128f565b9050611513605082901c69ffffffffffffffffffff1660a083901c69ffffffffffffffffffff168d919091016020012090565b94505f6115208c8361128f565b90505f61152d8d8361128f565b90508c69ffffffffffffffffffff82168151811061154d5761154d61569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f8100000000000000000000000000000000000000000000000000000000000000036115a7576115a48d8261128f565b90505b8c69ffffffffffffffffffff8216815181106115c5576115c561569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f82000000000000000000000000000000000000000000000000000000000000000361161f5761161c8d8261128f565b90505b6116298d85611dd4565b99506116368d828d611eef565b98506116428d836123e1565b95505050505050939792965093509350565b5f69ffffffffffffffffffff8216605083901c69ffffffffffffffffffff1660a084901c69ffffffffffffffffffff1661168e91906159dc565b610b6591906157fb565b604080516101008101825267cbbb9d5dc1059ed8815267629a292a367cd5076020820152679159015a3070dd179181019190915267152fecd8f70e59396060828101919091526767332667ffc00b316080830152678eb44a876858151160a083015267db0c2e0d64f98fa760c08301526747b5481dbefa4fa460e083015290611723858585846125d0565b80516020808301516040808501516060860151608087015160a088015184517fffffffffffffffff00000000000000000000000000000000000000000000000060c0998a1b81169882019890985295881b8716602887015292871b8616603086015290861b85166038850152851b84169183019190915290921b1660488201526050016040516020818303038152906040529150509392505050565b5f8269ffffffffffffffffffff8316815181106117de576117de61569a565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f03000000000000000000000000000000000000000000000000000000000000001461188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f7420747970652042495420535452494e470000000000000000000000000060448201526064016103e1565b82605083901c69ffffffffffffffffffff16815181106118b0576118b061569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000161561193e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f6e2d302d7061646465642042495420535452494e4700000000000000000060448201526064016103e1565b61047369ffffffffffffffffffff8316605084901c69ffffffffffffffffffff1661196a9060016159dc565b611985600169ffffffffffffffffffff60a088901c166157fb565b60a01b60509190911b919091171790565b5f61047383605084901c69ffffffffffffffffffff166110e2565b5f808369ffffffffffffffffffff8416815181106119d1576119d161569a565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f020000000000000000000000000000000000000000000000000000000000000014611a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e6f74207479706520494e54454745520000000000000000000000000000000060448201526064016103e1565b83605084901c69ffffffffffffffffffff1681518110611aa357611aa361569a565b01602001517f80000000000000000000000000000000000000000000000000000000000000001615611b31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f7420706f736974697665000000000000000000000000000000000000000060448201526064016103e1565b5f60a084901c69ffffffffffffffffffff1690505f605085901c69ffffffffffffffffffff169050858181518110611b6b57611b6b61569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000165f03611bb45780611ba281615a42565b9150508180611bb090615a79565b9250505b6080611bc287836010611d78565b901c611bcf8360306157fb565b611bda906008615a2b565b611bf988611be98560106159dc565b611bf46010886157fb565b611d78565b9195501c925050505b9250929050565b611c1c611c14612e35565b838386612f50565b611002576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c69642073696700000000000000000000000000000000000000000060448201526064016103e1565b60208110611cba5781518352611c996020846159dc565b9250611ca66020836159dc565b9150611cb36020826157fb565b9050611c82565b8015611002575f6001611cce8360206157fb565b611cda90610100615bcb565b611ce491906157fb565b83518551821691191617845250505050565b5f611d028260026159dc565b83511015611d6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016103e1565b50016020015160f01c90565b5f6020821115611d86575f80fd5b8351611d9283856159dc565b1115611d9c575f80fd5b506020919092018101519190036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01191690565b5f80611de08484610b6b565b90505f611ded858361128f565b90505f611dfa86846131e9565b9050611e0686836131e9565b935042811115611e72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6365727469666963617465206e6f742076616c6964207965740000000000000060448201526064016103e1565b428467ffffffffffffffff161015611ee6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6365727469666963617465206e6f742076616c696420616e796d6f726500000060448201526064016103e1565b50505092915050565b5f8369ffffffffffffffffffff841681518110611f0e57611f0e61569a565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167fa30000000000000000000000000000000000000000000000000000000000000014611fbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c696420657874656e73696f6e73000000000000000000000000000060448201526064016103e1565b611fc88484610b6b565b92505f611fd58585610b6b565b90505f611ff969ffffffffffffffffffff60a087901c811690605088901c166159dc565b90505f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94505b5f61202c8986610b6b565b90505f612060605083901c69ffffffffffffffffffff1660a084901c69ffffffffffffffffffff168c919091016020012090565b90507f6351d72a43cb42fb9a2531a28608c278c89629f8f025b5f5dc705f3fe45e950a8114806120af57507f45529d8772b07ebd6d507a1680da791f4a2192882bf89d518801579f7a5167d281145b1561220d575f6120bf8b8461128f565b90508a69ffffffffffffffffffff8216815181106120df576120df61569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f0100000000000000000000000000000000000000000000000000000000000000036121b35760a081901c69ffffffffffffffffffff166001146121a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420637269746963616c20626f6f6c2076616c7565000000000060448201526064016103e1565b6121b08b8261128f565b90505b6121bd8b826135e5565b90507f6351d72a43cb42fb9a2531a28608c278c89629f8f025b5f5dc705f3fe45e950a82036121fc57600194506121f58b828b6136b4565b975061220b565b6001935061220b8b828b61390f565b505b8461222f69ffffffffffffffffffff60a089901c81169060508a901c166159dc565b0361223b57505061224e565b6122458a8761128f565b95505050612021565b816122b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6261736963436f6e73747261696e7473206e6f7420666f756e6400000000000060448201526064016103e1565b8061231c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6b65795573616765206e6f7420666f756e64000000000000000000000000000060448201526064016103e1565b858061234a57508460070b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff145b6123d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f6d6178506174684c656e206d75737420626520756e646566696e656420666f7260448201527f20636c69656e742063657274000000000000000000000000000000000000000060648201526084016103e1565b505050509392505050565b60605f6123ee8484610b6b565b90505f6123fb8583610b6b565b90505f612408868361128f565b90505f612415878561128f565b90505f61242288836117bf565b90507fb60fee1fd85f867dd7c8d16884a49a20287ebe4c0fb49294e9825988aa8e42b461246f605086901c69ffffffffffffffffffff1660a087901c69ffffffffffffffffffff166114ba565b146124d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206365727420616c676f20696400000000000000000000000060448201526064016103e1565b7fbd74344bb507daeb9ed315bc535f24a236ccab72c5cd6945fb0efe5c037e2097612521605085901c69ffffffffffffffffffff1660a086901c69ffffffffffffffffffff166114ba565b14612588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f696e76616c6964206365727420616c676f20706172616d00000000000000000060448201526064016103e1565b5f6125aa69ffffffffffffffffffff60a084901c811690605085901c166159dc565b90506125c36125ba6060836157fb565b8a906060611007565b9998505050505050505050565b60408051610a008101825267428a2f98d728ae228152677137449123ef65cd602082015267b5c0fbcfec4d3b2f9181019190915267e9b5dba58189dbbc6060820152673956c25bf348b53860808201526759f111f1b605d01960a082015267923f82a4af194f9b60c082015267ab1c5ed5da6d811860e082015267d807aa98a30302426101008201526712835b0145706fbe61012082015267243185be4ee4b28c61014082015267550c7dc3d5ffb4e26101608201526772be5d74f27b896f6101808201526780deb1fe3b1696b16101a0820152679bdc06a725c712356101c082015267c19bf174cf6926946101e082015267e49b69c19ef14ad261020082015267efbe4786384f25e3610220820152670fc19dc68b8cd5b561024082015267240ca1cc77ac9c65610260820152672de92c6f592b0275610280820152674a7484aa6ea6e4836102a0820152675cb0a9dcbd41fbd46102c08201526776f988da831153b56102e082015267983e5152ee66dfab61030082015267a831c66d2db4321061032082015267b00327c898fb213f61034082015267bf597fc7beef0ee461036082015267c6e00bf33da88fc261038082015267d5a79147930aa7256103a08201526706ca6351e003826f6103c082015267142929670a0e6e706103e08201526727b70a8546d22ffc610400820152672e1b21385c26c926610420820152674d2c6dfc5ac42aed6104408201526753380d139d95b3df61046082015267650a73548baf63de61048082015267766a0abb3c77b2a86104a08201526781c2c92e47edaee66104c08201526792722c851482353b6104e082015267a2bfe8a14cf1036461050082015267a81a664bbc42300161052082015267c24b8b70d0f8979161054082015267c76c51a30654be3061056082015267d192e819d6ef521861058082015267d69906245565a9106105a082015267f40e35855771202a6105c082015267106aa07032bbd1b86105e08201526719a4c116b8d2d0c8610600820152671e376c085141ab53610620820152672748774cdf8eeb996106408201526734b0bcb5e19b48a861066082015267391c0cb3c5c95a63610680820152674ed8aa4ae3418acb6106a0820152675b9cca4f7763e3736106c082015267682e6ff3d6b2b8a36106e082015267748f82ee5defb2fc6107008201526778a5636f43172f606107208201526784c87814a1f0ab72610740820152678cc702081a6439ec6107608201526790befffa23631e2861078082015267a4506cebde82bde96107a082015267bef9a3f7b2c679156107c082015267c67178f2e372532b6107e082015267ca273eceea26619c61080082015267d186b8c721c0c20761082082015267eada7dd6cde0eb1e61084082015267f57d4f7fee6ed1786108608201526706f067aa72176fba610880820152670a637dc5a2c898a66108a082015267113f9804bef90dae6108c0820152671b710b35131c471b6108e08201526728db77f523047d846109008201526732caab7b40c72493610920820152673c9ebe0a15c9bebc61094082015267431d67c49c100d4c610960820152674cc5d4becb3e42b661098082015267597f299cfc657e2a6109a0820152675fcb6fab3ad6faec6109c0820152676c44198c4a4758176109e08201525f612a8e868686613a07565b905060808151612a9e9190615c03565b15612b05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f50414444494e475f4552524f520000000000000000000000000000000000000060448201526064016103e1565b612b0d61534c565b612b1561536b565b612b1d61538a565b5f612b29608089615c16565b612b34906080615a2b565b90505f5b85518201811015612e285781811015612b5d57612b588b84838d01613b11565b612b6a565b612b6a8684848403613b11565b5f5b6010811015612bba57838160108110612b8757612b8761569a565b6020020151868260508110612b9e57612b9e61569a565b67ffffffffffffffff9092166020929092020152600101612b6c565b5060105b6050811015612c7057856010820360508110612bdc57612bdc61569a565b6020020151612c0387600f840360508110612bf957612bf961569a565b6020020151613b69565b876007840360508110612c1857612c1861569a565b6020020151612c3f896002860360508110612c3557612c3561569a565b6020020151613b97565b010101868260508110612c5457612c5461569a565b67ffffffffffffffff9092166020929092020152600101612bbe565b505f5b6008811015612cc157888160088110612c8e57612c8e61569a565b6020020151858260088110612ca557612ca561569a565b67ffffffffffffffff9092166020929092020152600101612c73565b505f5b6050811015612dcc575f868260508110612ce057612ce061569a565b6020020151898360508110612cf757612cf761569a565b6020020151608088015160a089015160c08a01518219169116186080890151612d1f90613bbd565b89600760200201510101010190505f612d57878260200201518860016020020151896002602002015180821690831691909216181890565b8751612d6290613bdf565b60c08901805167ffffffffffffffff90811660e08c015260a08b018051821690925260808b018051821690925260608b0180518701821690925260408b018051821690925260208b01805182169092528a5181169091529101909201909116865250600101612cc4565b505f5b6008811015612e1f57848160088110612dea57612dea61569a565b6020020151898260088110612e0157612e0161569a565b6020020180519190910167ffffffffffffffff169052600101612dcf565b50608001612b38565b5050505050505050505050565b612e756040518060e00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b604080516101408101909152603060e082018181528291615f386101008401398152602001604051806060016040528060308152602001615e18603091398152602001604051806060016040528060308152602001615f08603091398152602001604051806060016040528060308152602001615e48603091398152602001604051806060016040528060308152602001615f98603091398152602001604051806060016040528060308152602001615f68603091398152602001604051806060016040528060308152602001615ed8603091399052919050565b5f612f7860405180608001604052805f81526020015f81526020015f81526020015f81525090565b612f8184613c01565b60208301528152612f9183613c01565b6060830152604080830191909152805160e0810190915286515f91908190612fb890613cb1565b8152602001612fca8960200151613cb1565b8152602001612fdc8960400151613cb1565b8152602001612fee8960600151613cb1565b81526020016130008960800151613cb1565b81526020016130128960a00151613cb1565b81526020016130248960c00151613cb1565b81525090505f6130378260800151613d45565b835160208101519051919250159015168061306257505f61305f845f01518460a00151613dba565b12155b8061307f575061307f83602001515f602082015191511591141690565b8061309a57505f61309884602001518460c00151613dba565b135b156130aa575f9350505050610574565b6130cb818360800151845f0151856020015187604001518860600151613e5f565b6130da575f9350505050610574565b8651603081101561311d57604080516030808252606082019092525f916020820181803683375091925061311a91505060208a0183830360500184613f3d565b97505b505f61313b8261312c8a613cb1565b86602001518660a00151613f4b565b90505f61315583865f015187602001518760a00151613f4b565b90505f613162600361405b565b90505f61318c85876080015184895f01518a604001518b606001518d604001518e6060015161407b565b90506131a485876080015184895f0151858989614462565b9050809450819550505050506131db6131c38484848860800151613f4b565b86516020808201519083015191519251911491141690565b9a9950505050505050505050565b5f8069ffffffffffffffffffff605084901c81169060a085901c16600d81900361325057600560308784815181106132235761322361569a565b0160200151613235919060f81c6159ef565b60ff16106132455761076c613249565b6107d05b92506132dd565b60308661325e8460016159dc565b8151811061326e5761326e61569a565b0160200151613280919060f81c6159ef565b61328b906064615a08565b60ff1660308784815181106132a2576132a261569a565b01602001516132b4919060f81c6159ef565b6132c39060ff166103e8615c29565b6132cd9190615c47565b92506132da6002836159dc565b91505b6030866132eb8460016159dc565b815181106132fb576132fb61569a565b602001015160f81c60f81b60f81c603088858151811061331d5761331d61569a565b016020015161332f919060f81c6159ef565b61333a90600a615a08565b6133449190615c62565b61334e91906159ef565b61335b9060ff1684615c47565b92505f60308761336c8560036159dc565b8151811061337c5761337c61569a565b016020015160f81c6030896133928760026159dc565b815181106133a2576133a261569a565b01602001516133b4919060f81c6159ef565b6133bf90600a615a08565b6133c99190615c62565b6133d391906159ef565b90505f6030886133e48660056159dc565b815181106133f4576133f461569a565b016020015160f81c60308a61340a8860046159dc565b8151811061341a5761341a61569a565b016020015161342c919060f81c6159ef565b61343790600a615a08565b6134419190615c62565b61344b91906159ef565b90505f60308961345c8760076159dc565b8151811061346c5761346c61569a565b016020015160f81c60308b6134828960066159dc565b815181106134925761349261569a565b01602001516134a4919060f81c6159ef565b6134af90600a615a08565b6134b99190615c62565b6134c391906159ef565b90505f60308a6134d48860096159dc565b815181106134e4576134e461569a565b016020015160f81c60308c6134fa8a60086159dc565b8151811061350a5761350a61569a565b016020015161351c919060f81c6159ef565b61352790600a615a08565b6135319190615c62565b61353b91906159ef565b90505f60308b61354c89600b6159dc565b8151811061355c5761355c61569a565b016020015160f81c60308d6135728b600a6159dc565b815181106135825761358261569a565b0160200151613594919060f81c6159ef565b61359f90600a615a08565b6135a99190615c62565b6135b391906159ef565b90506135d68861ffff168660ff168660ff168660ff168660ff168660ff166145e6565b9b9a5050505050505050505050565b5f8269ffffffffffffffffffff8316815181106136045761360461569a565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f040000000000000000000000000000000000000000000000000000000000000014610c1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f742074797065204f4354455420535452494e47000000000000000000000060448201526064016103e1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f6136e08585610b6b565b90505f8569ffffffffffffffffffff8316815181106137015761370161569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f0100000000000000000000000000000000000000000000000000000000000000036138235760a082901c69ffffffffffffffffffff166001146137c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f696e76616c6964206973434120626f6f6c2076616c756500000000000000000060448201526064016103e1565b85605083901c69ffffffffffffffffffff16815181106137ea576137ea61569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000908116149050613820868361128f565b91505b80151584151514613890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f69734341206d757374206265207472756520666f72204341206365727473000060448201526064016103e1565b8569ffffffffffffffffffff8316815181106138ae576138ae61569a565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f0200000000000000000000000000000000000000000000000000000000000000036110d95761390586836112b5565b9695505050505050565b5f61391a8484614758565b90508115613994578060041660041461398f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f436572745369676e206d7573742062652070726573656e74000000000000000060448201526064016103e1565b613a01565b80608016608014613a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4469676974616c5369676e6174757265206d7573742062652070726573656e7460448201526064016103e1565b50505050565b60605f613a15836008615a2b565b60c01b90505f613a26608085615c03565b90505f6070821015613a4457613a3d8260776157fb565b9050613a52565b613a4f8260f76157fb565b90505b5f8167ffffffffffffffff811115613a6c57613a6c6153f5565b6040519080825280601f01601f191660200182016040528015613a96576020820181803683370190505b5090505f613aba84613aa8898b6159dc565b613ab291906157fb565b8a9086611007565b604051909150613af49082907f80000000000000000000000000000000000000000000000000000000000000009085908990602001615c7b565b604051602081830303815290604052955050505050509392505050565b5f5b6010811015613a0157613b3b613b2a826008615a2b565b613b3490846159dc565b859061487a565b838260108110613b4d57613b4d61569a565b67ffffffffffffffff9092166020929092020152600101613b13565b5f60078267ffffffffffffffff16901c613b848360086148fc565b613b8f8460016148fc565b181892915050565b5f60068267ffffffffffffffff16901c613bb283603d6148fc565b613b8f8460136148fc565b5f613bc98260296148fc565b613bd48360126148fc565b613b8f84600e6148fc565b5f613beb8260276148fc565b613bf68360226148fc565b613b8f84601c6148fc565b5f808251606014613c6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f74203736380000000000000000000000000000000000000060448201526064016103e1565b604080516080810182529250820190505f825260208301516010830152603083015160208301525f81526050830151601082015260608301516020820152915091565b5f8151603014613d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f74203338340000000000000000000000000000000000000060448201526064016103e1565b6040805180820190915290505f81526020820151601082015260308201516020820152919050565b5f613d5861036060408051918201905290565b6060610120820152602061014082018190526040610160830181905260016101e0840152845161020084015284820180516102208501526102408401829052610260840192909252610280830152925161030082015291516103208301525090565b815181515f919080821115613dd457600192505050610b65565b80821015613e06577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610b65565b50506020838101519083015180821115613e2557600192505050610b65565b80821015613e57577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610b65565b505092915050565b602082015182515f911590151680613e8557506020868101519084015187518551149114165b80613e97575060208201518251159015165b80613eb057506020868101519083015187518451149114165b15613ebc57505f613905565b5f613ec988846002614938565b90505f613ed889866003614938565b6020880151885191925015901516613f0257613eff81613ef98b888b61497c565b8a614a6d565b90505b6020860151865115901516613f1f57613f1c81878a614a6d565b90505b60208181015190830151915192519114911416979650505050505050565b8082828560045afa50505050565b5f613f57858484614acf565b905061401c8482876060018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b60608552602085602001526040856040015260018560c0015281518560e0015260208201518561010001526040816101208760055afa50949350505050565b5f61406c6040808051918201905290565b5f815260208101929092525090565b6140836153a9565b61408c85614b5c565b61409585614b5c565b61409f600161405b565b6080840180516040810192909252602082810193909352929052905180519101516140df918b918b918b918b91908760045b602002015160400151614b82565b61010084018051604080820193909352602081810194909452939093526080840151805181840151919092015193518051930151614137948e948e948e948e949193909290918a60085b602002015160400151614d38565b610180840151604081019190915260208101919091525261415783614b5c565b61416083614b5c565b61416a600161405b565b6020808501805160408101939093528282019390935292905251805191015161419e918b918b918b918b91908760016140d1565b60408085015190810191909152602081810192909252919091528082015180519101516141f6918b918b918b918b91908760015b60209081029190910151604090810151908a015180519201519091908a6002614129565b60608401516040810191909152602081810192909252919091526080820151805191015161424d918b918b918b918b91908760045b60209081029190910151604001518982015180519201519091908a6001614129565b60a084015160408101919091526020818101929092529190915260808201518051910151614286918b918b918b918b91908760046141d2565b60c0840151604081019190915260208181019290925291909152608082015180519101516142de918b918b918b918b91908760045b602090810291909101516040015160608a015180519201519091908a6003614129565b60e08401516040810191909152602081810192909252919091526101008201518051910151614318918b918b918b918b919087600861422b565b6101208401516040810191909152602081810192909252919091526101008201518051910151614353918b918b918b918b91908760086141d2565b610140840151604081019190915260208181019290925291909152610100820151805191015161438e918b918b918b918b91908760086142bb565b61016084015160408101919091526020818101929092529190915261018082015180519101516143c9918b918b918b918b919087600c61422b565b6101a08401516040810191909152602081810192909252919091526101808201518051910151614404918b918b918b918b919087600c6141d2565b6101c0840151604081019190915260208181019290925291909152610180820151805191015161443f918b918b918b918b919087600c6142bb565b6101e0840151604081019190915260208101919091525298975050505050505050565b815181515f918291829182916144778361405b565b95506144825f61405b565b945061448e600161405b565b935060025b60b88111614537576144aa8e8e8e8e8b8b8b614b82565b919850965094506144c08e8e8e8e8b8b8b614b82565b9198509650945060b881900382811c6003169084901c60021b600c16179350831561452f575f8a85601081106144f8576144f861569a565b602002015190506145268f8f8f8f855f5b6020020151866001602002015187600260200201518f8f8f614d38565b91995097509550505b600201614493565b5050506020868101519086015160025b61010081116145d45761455f8e8e8e8e8b8b8b614b82565b919850965094506145758e8e8e8e8b8b8b614b82565b9198509650945061010081900382811c6003169084901c60021b600c1617935083156145cc575f8a85601081106145ae576145ae61569a565b602002015190506145c38f8f8f8f855f614509565b91995097509550505b600201614547565b505050505b9750975097945050505050565b5f6107b28710156145f5575f80fd5b8686865f62253d8c60046064600c61460e600e88615d06565b6146189190615d25565b61462488611324615d8c565b61462e9190615d8c565b6146389190615d25565b614643906003615dab565b61464d9190615d25565b600c8061465b600e88615d06565b6146659190615d25565b61467090600c615dab565b61467b600288615d06565b6146859190615d06565b6146919061016f615dab565b61469b9190615d25565b6004600c6146aa600e89615d06565b6146b49190615d25565b6146c0896112c0615d8c565b6146ca9190615d8c565b6146d6906105b5615dab565b6146e09190615d25565b6146ec617d4b87615d06565b6146f69190615d8c565b6147009190615d8c565b61470a9190615d06565b6147149190615d06565b9050858789614724846018615a2b565b61472e91906159dc565b61473990603c615a2b565b61474391906159dc565b61474e90603c615a2b565b6135d691906159dc565b5f8269ffffffffffffffffffff8316815181106147775761477761569a565b6020910101517fff00000000000000000000000000000000000000000000000000000000000000167f030000000000000000000000000000000000000000000000000000000000000014614827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f7420747970652042495420535452494e470000000000000000000000000060448201526064016103e1565b5f614843600169ffffffffffffffffffff60a086901c166157fb565b90506148508160206157fb565b61485b906008615a2b565b6114778561147169ffffffffffffffffffff605088901c1660016159dc565b5f6148868260086159dc565b835110156148f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016103e1565b50016020015160c01c90565b5f67ffffffffffffffff8381169083161c614918836040615df6565b67ffffffffffffffff168467ffffffffffffffff16901b17905092915050565b5f6149496040808051918201905290565b9050610240840193508251846060015260208301518460800152818460a001526040816101008660055afa509392505050565b5f61498d6040808051918201905290565b9050614a53838361018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040816101208660055afa509392505050565b5f614a7e6040808051918201905290565b6020858101518582015181019183018290528551875101911001815290505f614aa78284613dba565b1261047357602080820180519184015182039081905283518351929091119103038152610473565b5f614ae06040808051918201905290565b9050614b1482614af0600261405b565b60208281015190820151810360c089018190529151925191119190030360a0860152565b604084526040846020015260408460400152825184606001526020830151846080015281518460e0015260208201518461010001526040816101208660055afa509392505050565b5f614b6d6040808051918201905290565b90508151815260208201516020820152919050565b5f805f614b98865f602082015191511591141690565b8015614bab575060208501518551159015165b15614bd757614bb95f61405b565b614bc25f61405b565b614bcc600161405b565b9250925092506145d9565b5f614be38b878761497c565b9050614bef818b614e8c565b614bfa8b828961497c565b9350614c078b8588614ed9565b614c11848b614e8c565b614c1d8b886002614938565b9650614c2a8b888b61497c565b9250614c388b866002614938565b9450614c458b868a614ed9565b614c5083868c614fb5565b614c5c8b846002614938565b9150614c6987858c61500a565b5f614c748b89615029565b9050614c8183828d614fb5565b6020808c015181850151810391830182905284518d51929091109103038152614cac8886838e615060565b614cb78c8986614ed9565b614cc28c888461497c565b9650614cd08c8860026150af565b614cda878c614e8c565b6020808c015181890151810391830182905288518d51929091109103038152614d058489838e615060565b614d118c8684866150de565b614d1e8c848460026151bb565b614d298c8484614ed9565b50509750975097945050505050565b5f805f614d4e895f602082015191511591141690565b8015614d61575060208801518851159015165b15614d8c57614d6f86614b5c565b614d7886614b5c565b614d8186614b5c565b925092509250614e7c565b60208601518651159015168015614daa575060208501518551159015165b15614dca57614db889614b5c565b614dc189614b5c565b614d8189614b5c565b614dd58d898661497c565b9250614de28d868961497c565b9150614def8d8a8661497c565b9050614dfc8d878961497c565b6020808201519083015182518451939850911491141615614e595760208281015190840151835185511491141615614e3d57614d818d8d8d8d8d8d8d614b82565b614e465f61405b565b614e4f5f61405b565b614d81600161405b565b614e648d888661497c565b9950614e758d8b838f8987896151eb565b9250925092505b9a509a509a975050505050505050565b6020820180518351600190811b60ff83901c1785521b90525f614eaf8383613dba565b12614ed55760208281018051918301518203908190529151835191909211919003039052565b5050565b614f9d828261018086018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120830192506040826101208560055afa50505050565b614fd78383602082810180519183015182019081905291518351019110019052565b5f614fe28483613dba565b1261100257602080840180519183015182039081905282518551929091119103038352505050565b6020808301518351600190811b60ff83901c1786521b90840152614fd7565b5f61503a6040808051918201905290565b602080850151818501518103918301829052845186519290911091030381529050610b65565b602083810151838201518101918601829052835185510191100184525f6150878583613dba565b12613a0157602080850180519183015182039081905282518651929091119103038452613a01565b610240830192508151836060015260208201518360800152808360a001526040826101008560055afa50505050565b6151a2828261018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040836101208660055afa5050505050565b610240840193508151846060015260208201518460800152808460a001526040836101008660055afa5050505050565b5f805f806151f98887615029565b905061520685828a614a6d565b6020808a0151818a0151810391840182905289518b51929091109103038252925061523289828a614a6d565b93505f6152418c866002614938565b905061524f8c856002614938565b925061525c8c848d614ed9565b615267888b8b614a6d565b97506152748c8983614ed9565b6020808a0151818a0151810391840182905289518b5192909110910303825261529e83838b614fb5565b5f6152aa8d838861497c565b90506152b78d8786614ed9565b6152c28d8c8461497c565b6020808c015181870151810391860182905286518d519290911091030384529a506152ee8b848c614fb5565b6152f98d868d614ed9565b6153048d888361497c565b6020808c015181830151810391860182905282518d51929091109103038452965061533085848c614fb5565b61533c8d85838f6150de565b5050509750975097945050505050565b60405180610a0001604052806050906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b6040518061020001604052806010905b6153c16153d7565b8152602001906001900390816153b95790505090565b60405180606001604052806003906020820280368337509192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615431575f80fd5b813567ffffffffffffffff8082111561544c5761544c6153f5565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715615492576154926153f5565b816040528381528660208588010111156154aa575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f604084860312156154db575f80fd5b833567ffffffffffffffff808211156154f2575f80fd5b6154fe87838801615422565b94506020860135915080821115615513575f80fd5b818601915086601f830112615526575f80fd5b813581811115615534575f80fd5b8760208260051b8501011115615548575f80fd5b6020830194508093505050509250925092565b5f5b8381101561557557818101518382015260200161555d565b50505f910152565b5f815180845261559481602086016020860161555b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815281511515602082015267ffffffffffffffff6020830151166040820152604082015160070b6060820152606082015160808201525f608083015160a08084015261057460c084018261557d565b602081525f610473602083018461557d565b5f60208284031215615639575f80fd5b5035919050565b5f805f60608486031215615652575f80fd5b833567ffffffffffffffff811115615668575f80fd5b61567486828701615422565b93505060208401358015158114615689575f80fd5b929592945050506040919091013590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126156fa575f80fd5b83018035915067ffffffffffffffff821115615714575f80fd5b602001915036819003821315611c02575f80fd5b818382375f9101908152919050565b600181811c9082168061574b57607f821691505b602082108103615782577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600782810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffff80000000000000008112677fffffffffffffff82131715610b6557610b65615788565b81810381811115610b6557610b65615788565b85151560f81b81527fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b1660018201528360c01b60098201528260118201525f825161586481603185016020870161555b565b919091016031019695505050505050565b601f82111561100257805f5260205f20601f840160051c8101602085101561589a5750805b601f840160051c820191505b818110156158b9575f81556001016158a6565b5050505050565b815167ffffffffffffffff8111156158da576158da6153f5565b6158ee816158e88454615737565b84615875565b602080601f831160018114615940575f841561590a5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556159d4565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561598c5788860151825594840194600190910190840161596d565b50858210156159c857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b505060018460011b0185555b505050505050565b80820180821115610b6557610b65615788565b60ff8281168282160390811115610b6557610b65615788565b60ff8181168382160290811690818114615a2457615a24615788565b5092915050565b8082028115828204841417610b6557610b65615788565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a7257615a72615788565b5060010190565b5f81615a8757615a87615788565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600181815b80851115615b0657817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615aec57615aec615788565b80851615615af957918102915b93841c9390800290615ab2565b509250929050565b5f82615b1c57506001610b65565b81615b2857505f610b65565b8160018114615b3e5760028114615b4857615b64565b6001915050610b65565b60ff841115615b5957615b59615788565b50506001821b610b65565b5060208310610133831016604e8410600b8410161715615b87575081810a610b65565b615b918383615aad565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615bc357615bc3615788565b029392505050565b5f6104738383615b0e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82615c1157615c11615bd6565b500690565b5f82615c2457615c24615bd6565b500490565b61ffff818116838216028082169190828114613e5757613e57615788565b61ffff818116838216019080821115615a2457615a24615788565b60ff8181168382160190811115610b6557610b65615788565b5f8551615c8c818460208a0161555b565b7fff0000000000000000000000000000000000000000000000000000000000000086169083019081528451615cc881600184016020890161555b565b8082019150507fffffffffffffffff000000000000000000000000000000000000000000000000841660018201526009810191505095945050505050565b8181035f831280158383131683831282161715615a2457615a24615788565b5f82615d3357615d33615bd6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615d8757615d87615788565b500590565b8082018281125f831280158216821582161715613e5757613e57615788565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615615de257615de2615788565b8181058314821517610b6557610b65615788565b67ffffffffffffffff828116828216039080821115615a2457615a2461578856feb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5ffc0254eba608c1f36870e29ada90be46383292736e894bfff672d989444b5051e534a4b1f6dbe3c0bc581a32b7b176070ede12d69a3fea211b66e752cf7dd1dd095f6f1370f4170843d9dc100121e4cf63012809664487c9796284304dc53ff4ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffcffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffffa164736f6c6343000818000afc0254eba608c1f36870e29ada90be46383292736e894bfff672d989444b5051e534a4b1f6dbe3c0bc581a32b7b176070ede12d69a3fea211b66e752cf7dd1dd095f6f1370f4170843d9dc100121e4cf63012809664487c9796284304dc53ff4", +} + +// CertManagerABI is the input ABI used to generate the binding from. +// Deprecated: Use CertManagerMetaData.ABI instead. +var CertManagerABI = CertManagerMetaData.ABI + +// CertManagerBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use CertManagerMetaData.Bin instead. +var CertManagerBin = CertManagerMetaData.Bin + +// DeployCertManager deploys a new Ethereum contract, binding an instance of CertManager to it. +func DeployCertManager(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *CertManager, error) { + parsed, err := CertManagerMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(CertManagerBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &CertManager{CertManagerCaller: CertManagerCaller{contract: contract}, CertManagerTransactor: CertManagerTransactor{contract: contract}, CertManagerFilterer: CertManagerFilterer{contract: contract}}, nil +} + +// CertManager is an auto generated Go binding around an Ethereum contract. +type CertManager struct { + CertManagerCaller // Read-only binding to the contract + CertManagerTransactor // Write-only binding to the contract + CertManagerFilterer // Log filterer for contract events +} + +// CertManagerCaller is an auto generated read-only Go binding around an Ethereum contract. +type CertManagerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CertManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type CertManagerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CertManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type CertManagerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CertManagerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type CertManagerSession struct { + Contract *CertManager // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// CertManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type CertManagerCallerSession struct { + Contract *CertManagerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// CertManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type CertManagerTransactorSession struct { + Contract *CertManagerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// CertManagerRaw is an auto generated low-level Go binding around an Ethereum contract. +type CertManagerRaw struct { + Contract *CertManager // Generic contract binding to access the raw methods on +} + +// CertManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type CertManagerCallerRaw struct { + Contract *CertManagerCaller // Generic read-only contract binding to access the raw methods on +} + +// CertManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type CertManagerTransactorRaw struct { + Contract *CertManagerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewCertManager creates a new instance of CertManager, bound to a specific deployed contract. +func NewCertManager(address common.Address, backend bind.ContractBackend) (*CertManager, error) { + contract, err := bindCertManager(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &CertManager{CertManagerCaller: CertManagerCaller{contract: contract}, CertManagerTransactor: CertManagerTransactor{contract: contract}, CertManagerFilterer: CertManagerFilterer{contract: contract}}, nil +} + +// NewCertManagerCaller creates a new read-only instance of CertManager, bound to a specific deployed contract. +func NewCertManagerCaller(address common.Address, caller bind.ContractCaller) (*CertManagerCaller, error) { + contract, err := bindCertManager(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &CertManagerCaller{contract: contract}, nil +} + +// NewCertManagerTransactor creates a new write-only instance of CertManager, bound to a specific deployed contract. +func NewCertManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*CertManagerTransactor, error) { + contract, err := bindCertManager(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &CertManagerTransactor{contract: contract}, nil +} + +// NewCertManagerFilterer creates a new log filterer instance of CertManager, bound to a specific deployed contract. +func NewCertManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*CertManagerFilterer, error) { + contract, err := bindCertManager(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &CertManagerFilterer{contract: contract}, nil +} + +// bindCertManager binds a generic wrapper to an already deployed contract. +func bindCertManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := CertManagerMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_CertManager *CertManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CertManager.Contract.CertManagerCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_CertManager *CertManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CertManager.Contract.CertManagerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_CertManager *CertManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CertManager.Contract.CertManagerTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_CertManager *CertManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CertManager.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_CertManager *CertManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CertManager.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_CertManager *CertManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CertManager.Contract.contract.Transact(opts, method, params...) +} + +// BASICCONSTRAINTSOID is a free data retrieval call binding the contract method 0x4519a352. +// +// Solidity: function BASIC_CONSTRAINTS_OID() view returns(bytes32) +func (_CertManager *CertManagerCaller) BASICCONSTRAINTSOID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _CertManager.contract.Call(opts, &out, "BASIC_CONSTRAINTS_OID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// BASICCONSTRAINTSOID is a free data retrieval call binding the contract method 0x4519a352. +// +// Solidity: function BASIC_CONSTRAINTS_OID() view returns(bytes32) +func (_CertManager *CertManagerSession) BASICCONSTRAINTSOID() ([32]byte, error) { + return _CertManager.Contract.BASICCONSTRAINTSOID(&_CertManager.CallOpts) +} + +// BASICCONSTRAINTSOID is a free data retrieval call binding the contract method 0x4519a352. +// +// Solidity: function BASIC_CONSTRAINTS_OID() view returns(bytes32) +func (_CertManager *CertManagerCallerSession) BASICCONSTRAINTSOID() ([32]byte, error) { + return _CertManager.Contract.BASICCONSTRAINTSOID(&_CertManager.CallOpts) +} + +// CERTALGOOID is a free data retrieval call binding the contract method 0xaf9bdbc2. +// +// Solidity: function CERT_ALGO_OID() view returns(bytes32) +func (_CertManager *CertManagerCaller) CERTALGOOID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _CertManager.contract.Call(opts, &out, "CERT_ALGO_OID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CERTALGOOID is a free data retrieval call binding the contract method 0xaf9bdbc2. +// +// Solidity: function CERT_ALGO_OID() view returns(bytes32) +func (_CertManager *CertManagerSession) CERTALGOOID() ([32]byte, error) { + return _CertManager.Contract.CERTALGOOID(&_CertManager.CallOpts) +} + +// CERTALGOOID is a free data retrieval call binding the contract method 0xaf9bdbc2. +// +// Solidity: function CERT_ALGO_OID() view returns(bytes32) +func (_CertManager *CertManagerCallerSession) CERTALGOOID() ([32]byte, error) { + return _CertManager.Contract.CERTALGOOID(&_CertManager.CallOpts) +} + +// ECPUBKEYOID is a free data retrieval call binding the contract method 0xf69a82fe. +// +// Solidity: function EC_PUB_KEY_OID() view returns(bytes32) +func (_CertManager *CertManagerCaller) ECPUBKEYOID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _CertManager.contract.Call(opts, &out, "EC_PUB_KEY_OID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ECPUBKEYOID is a free data retrieval call binding the contract method 0xf69a82fe. +// +// Solidity: function EC_PUB_KEY_OID() view returns(bytes32) +func (_CertManager *CertManagerSession) ECPUBKEYOID() ([32]byte, error) { + return _CertManager.Contract.ECPUBKEYOID(&_CertManager.CallOpts) +} + +// ECPUBKEYOID is a free data retrieval call binding the contract method 0xf69a82fe. +// +// Solidity: function EC_PUB_KEY_OID() view returns(bytes32) +func (_CertManager *CertManagerCallerSession) ECPUBKEYOID() ([32]byte, error) { + return _CertManager.Contract.ECPUBKEYOID(&_CertManager.CallOpts) +} + +// KEYUSAGEOID is a free data retrieval call binding the contract method 0xaeb255ea. +// +// Solidity: function KEY_USAGE_OID() view returns(bytes32) +func (_CertManager *CertManagerCaller) KEYUSAGEOID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _CertManager.contract.Call(opts, &out, "KEY_USAGE_OID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// KEYUSAGEOID is a free data retrieval call binding the contract method 0xaeb255ea. +// +// Solidity: function KEY_USAGE_OID() view returns(bytes32) +func (_CertManager *CertManagerSession) KEYUSAGEOID() ([32]byte, error) { + return _CertManager.Contract.KEYUSAGEOID(&_CertManager.CallOpts) +} + +// KEYUSAGEOID is a free data retrieval call binding the contract method 0xaeb255ea. +// +// Solidity: function KEY_USAGE_OID() view returns(bytes32) +func (_CertManager *CertManagerCallerSession) KEYUSAGEOID() ([32]byte, error) { + return _CertManager.Contract.KEYUSAGEOID(&_CertManager.CallOpts) +} + +// ROOTCACERTHASH is a free data retrieval call binding the contract method 0x8fb57b62. +// +// Solidity: function ROOT_CA_CERT_HASH() view returns(bytes32) +func (_CertManager *CertManagerCaller) ROOTCACERTHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _CertManager.contract.Call(opts, &out, "ROOT_CA_CERT_HASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ROOTCACERTHASH is a free data retrieval call binding the contract method 0x8fb57b62. +// +// Solidity: function ROOT_CA_CERT_HASH() view returns(bytes32) +func (_CertManager *CertManagerSession) ROOTCACERTHASH() ([32]byte, error) { + return _CertManager.Contract.ROOTCACERTHASH(&_CertManager.CallOpts) +} + +// ROOTCACERTHASH is a free data retrieval call binding the contract method 0x8fb57b62. +// +// Solidity: function ROOT_CA_CERT_HASH() view returns(bytes32) +func (_CertManager *CertManagerCallerSession) ROOTCACERTHASH() ([32]byte, error) { + return _CertManager.Contract.ROOTCACERTHASH(&_CertManager.CallOpts) +} + +// ROOTCACERTMAXPATHLEN is a free data retrieval call binding the contract method 0x9ecc0050. +// +// Solidity: function ROOT_CA_CERT_MAX_PATH_LEN() view returns(int64) +func (_CertManager *CertManagerCaller) ROOTCACERTMAXPATHLEN(opts *bind.CallOpts) (int64, error) { + var out []interface{} + err := _CertManager.contract.Call(opts, &out, "ROOT_CA_CERT_MAX_PATH_LEN") + + if err != nil { + return *new(int64), err + } + + out0 := *abi.ConvertType(out[0], new(int64)).(*int64) + + return out0, err + +} + +// ROOTCACERTMAXPATHLEN is a free data retrieval call binding the contract method 0x9ecc0050. +// +// Solidity: function ROOT_CA_CERT_MAX_PATH_LEN() view returns(int64) +func (_CertManager *CertManagerSession) ROOTCACERTMAXPATHLEN() (int64, error) { + return _CertManager.Contract.ROOTCACERTMAXPATHLEN(&_CertManager.CallOpts) +} + +// ROOTCACERTMAXPATHLEN is a free data retrieval call binding the contract method 0x9ecc0050. +// +// Solidity: function ROOT_CA_CERT_MAX_PATH_LEN() view returns(int64) +func (_CertManager *CertManagerCallerSession) ROOTCACERTMAXPATHLEN() (int64, error) { + return _CertManager.Contract.ROOTCACERTMAXPATHLEN(&_CertManager.CallOpts) +} + +// ROOTCACERTNOTAFTER is a free data retrieval call binding the contract method 0x58e3139e. +// +// Solidity: function ROOT_CA_CERT_NOT_AFTER() view returns(uint64) +func (_CertManager *CertManagerCaller) ROOTCACERTNOTAFTER(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CertManager.contract.Call(opts, &out, "ROOT_CA_CERT_NOT_AFTER") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// ROOTCACERTNOTAFTER is a free data retrieval call binding the contract method 0x58e3139e. +// +// Solidity: function ROOT_CA_CERT_NOT_AFTER() view returns(uint64) +func (_CertManager *CertManagerSession) ROOTCACERTNOTAFTER() (uint64, error) { + return _CertManager.Contract.ROOTCACERTNOTAFTER(&_CertManager.CallOpts) +} + +// ROOTCACERTNOTAFTER is a free data retrieval call binding the contract method 0x58e3139e. +// +// Solidity: function ROOT_CA_CERT_NOT_AFTER() view returns(uint64) +func (_CertManager *CertManagerCallerSession) ROOTCACERTNOTAFTER() (uint64, error) { + return _CertManager.Contract.ROOTCACERTNOTAFTER(&_CertManager.CallOpts) +} + +// ROOTCACERTPUBKEY is a free data retrieval call binding the contract method 0xab68988d. +// +// Solidity: function ROOT_CA_CERT_PUB_KEY() view returns(bytes) +func (_CertManager *CertManagerCaller) ROOTCACERTPUBKEY(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _CertManager.contract.Call(opts, &out, "ROOT_CA_CERT_PUB_KEY") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// ROOTCACERTPUBKEY is a free data retrieval call binding the contract method 0xab68988d. +// +// Solidity: function ROOT_CA_CERT_PUB_KEY() view returns(bytes) +func (_CertManager *CertManagerSession) ROOTCACERTPUBKEY() ([]byte, error) { + return _CertManager.Contract.ROOTCACERTPUBKEY(&_CertManager.CallOpts) +} + +// ROOTCACERTPUBKEY is a free data retrieval call binding the contract method 0xab68988d. +// +// Solidity: function ROOT_CA_CERT_PUB_KEY() view returns(bytes) +func (_CertManager *CertManagerCallerSession) ROOTCACERTPUBKEY() ([]byte, error) { + return _CertManager.Contract.ROOTCACERTPUBKEY(&_CertManager.CallOpts) +} + +// ROOTCACERTSUBJECTHASH is a free data retrieval call binding the contract method 0x441b31df. +// +// Solidity: function ROOT_CA_CERT_SUBJECT_HASH() view returns(bytes32) +func (_CertManager *CertManagerCaller) ROOTCACERTSUBJECTHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _CertManager.contract.Call(opts, &out, "ROOT_CA_CERT_SUBJECT_HASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ROOTCACERTSUBJECTHASH is a free data retrieval call binding the contract method 0x441b31df. +// +// Solidity: function ROOT_CA_CERT_SUBJECT_HASH() view returns(bytes32) +func (_CertManager *CertManagerSession) ROOTCACERTSUBJECTHASH() ([32]byte, error) { + return _CertManager.Contract.ROOTCACERTSUBJECTHASH(&_CertManager.CallOpts) +} + +// ROOTCACERTSUBJECTHASH is a free data retrieval call binding the contract method 0x441b31df. +// +// Solidity: function ROOT_CA_CERT_SUBJECT_HASH() view returns(bytes32) +func (_CertManager *CertManagerCallerSession) ROOTCACERTSUBJECTHASH() ([32]byte, error) { + return _CertManager.Contract.ROOTCACERTSUBJECTHASH(&_CertManager.CallOpts) +} + +// SECP384R1OID is a free data retrieval call binding the contract method 0x5ab70904. +// +// Solidity: function SECP_384_R1_OID() view returns(bytes32) +func (_CertManager *CertManagerCaller) SECP384R1OID(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _CertManager.contract.Call(opts, &out, "SECP_384_R1_OID") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// SECP384R1OID is a free data retrieval call binding the contract method 0x5ab70904. +// +// Solidity: function SECP_384_R1_OID() view returns(bytes32) +func (_CertManager *CertManagerSession) SECP384R1OID() ([32]byte, error) { + return _CertManager.Contract.SECP384R1OID(&_CertManager.CallOpts) +} + +// SECP384R1OID is a free data retrieval call binding the contract method 0x5ab70904. +// +// Solidity: function SECP_384_R1_OID() view returns(bytes32) +func (_CertManager *CertManagerCallerSession) SECP384R1OID() ([32]byte, error) { + return _CertManager.Contract.SECP384R1OID(&_CertManager.CallOpts) +} + +// Verified is a free data retrieval call binding the contract method 0xc59e43e5. +// +// Solidity: function verified(bytes32 ) view returns(bytes) +func (_CertManager *CertManagerCaller) Verified(opts *bind.CallOpts, arg0 [32]byte) ([]byte, error) { + var out []interface{} + err := _CertManager.contract.Call(opts, &out, "verified", arg0) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// Verified is a free data retrieval call binding the contract method 0xc59e43e5. +// +// Solidity: function verified(bytes32 ) view returns(bytes) +func (_CertManager *CertManagerSession) Verified(arg0 [32]byte) ([]byte, error) { + return _CertManager.Contract.Verified(&_CertManager.CallOpts, arg0) +} + +// Verified is a free data retrieval call binding the contract method 0xc59e43e5. +// +// Solidity: function verified(bytes32 ) view returns(bytes) +func (_CertManager *CertManagerCallerSession) Verified(arg0 [32]byte) ([]byte, error) { + return _CertManager.Contract.Verified(&_CertManager.CallOpts, arg0) +} + +// VerifyCert is a paid mutator transaction binding the contract method 0xdc28a38d. +// +// Solidity: function verifyCert(bytes cert, bool ca, bytes32 parentCertHash) returns((bool,uint64,int64,bytes32,bytes)) +func (_CertManager *CertManagerTransactor) VerifyCert(opts *bind.TransactOpts, cert []byte, ca bool, parentCertHash [32]byte) (*types.Transaction, error) { + return _CertManager.contract.Transact(opts, "verifyCert", cert, ca, parentCertHash) +} + +// VerifyCert is a paid mutator transaction binding the contract method 0xdc28a38d. +// +// Solidity: function verifyCert(bytes cert, bool ca, bytes32 parentCertHash) returns((bool,uint64,int64,bytes32,bytes)) +func (_CertManager *CertManagerSession) VerifyCert(cert []byte, ca bool, parentCertHash [32]byte) (*types.Transaction, error) { + return _CertManager.Contract.VerifyCert(&_CertManager.TransactOpts, cert, ca, parentCertHash) +} + +// VerifyCert is a paid mutator transaction binding the contract method 0xdc28a38d. +// +// Solidity: function verifyCert(bytes cert, bool ca, bytes32 parentCertHash) returns((bool,uint64,int64,bytes32,bytes)) +func (_CertManager *CertManagerTransactorSession) VerifyCert(cert []byte, ca bool, parentCertHash [32]byte) (*types.Transaction, error) { + return _CertManager.Contract.VerifyCert(&_CertManager.TransactOpts, cert, ca, parentCertHash) +} + +// VerifyCertBundle is a paid mutator transaction binding the contract method 0x5b608e2a. +// +// Solidity: function verifyCertBundle(bytes certificate, bytes[] cabundle) returns((bool,uint64,int64,bytes32,bytes)) +func (_CertManager *CertManagerTransactor) VerifyCertBundle(opts *bind.TransactOpts, certificate []byte, cabundle [][]byte) (*types.Transaction, error) { + return _CertManager.contract.Transact(opts, "verifyCertBundle", certificate, cabundle) +} + +// VerifyCertBundle is a paid mutator transaction binding the contract method 0x5b608e2a. +// +// Solidity: function verifyCertBundle(bytes certificate, bytes[] cabundle) returns((bool,uint64,int64,bytes32,bytes)) +func (_CertManager *CertManagerSession) VerifyCertBundle(certificate []byte, cabundle [][]byte) (*types.Transaction, error) { + return _CertManager.Contract.VerifyCertBundle(&_CertManager.TransactOpts, certificate, cabundle) +} + +// VerifyCertBundle is a paid mutator transaction binding the contract method 0x5b608e2a. +// +// Solidity: function verifyCertBundle(bytes certificate, bytes[] cabundle) returns((bool,uint64,int64,bytes32,bytes)) +func (_CertManager *CertManagerTransactorSession) VerifyCertBundle(certificate []byte, cabundle [][]byte) (*types.Transaction, error) { + return _CertManager.Contract.VerifyCertBundle(&_CertManager.TransactOpts, certificate, cabundle) +} diff --git a/bindings/deploy_chain.go b/bindings/deploy_chain.go index c89ddc0..69f0d89 100644 --- a/bindings/deploy_chain.go +++ b/bindings/deploy_chain.go @@ -66,7 +66,7 @@ type DeployChainGenesisConfiguration struct { // DeployChainMetaData contains all meta data concerning the DeployChain contract. var DeployChainMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_proxyAdmin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_protocolVersions\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_PASSER_STORAGE_HASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateBatchInbox\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"deploy\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"genesisConfig\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.GenesisConfiguration\",\"components\":[{\"name\":\"l1Number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"l2Hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"l2StateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"l2Time\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"name\":\"gasConfig\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.GasConfiguration\",\"components\":[{\"name\":\"basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"gasToken\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"addressConfig\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.AddressConfiguration\",\"components\":[{\"name\":\"batcher\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"proposer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"proofsEnabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deployAddresses\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structDeployChain.DeployAddresses\",\"components\":[{\"name\":\"l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"systemConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deployProxy\",\"inputs\":[{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2OutputOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"protocolVersions\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAddress\",\"inputs\":[{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Deploy\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"configHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"batchInbox\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"addresses\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structDeployChain.DeployAddresses\",\"components\":[{\"name\":\"l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"systemConfig\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"anonymous\":false}]", - Bin: "0x6101c06040523480156200001257600080fd5b5060405162001f9138038062001f9183398101604081905262000035916200009c565b6001600160a01b03998a1660805297891660a05295881660c05293871660e05291861661010052851661012052841661014052831661016052821661018052166101a0526200016b565b80516001600160a01b03811681146200009757600080fd5b919050565b6000806000806000806000806000806101408b8d031215620000bd57600080fd5b620000c88b6200007f565b9950620000d860208c016200007f565b9850620000e860408c016200007f565b9750620000f860608c016200007f565b96506200010860808c016200007f565b95506200011860a08c016200007f565b94506200012860c08c016200007f565b93506200013860e08c016200007f565b9250620001496101008c016200007f565b91506200015a6101208c016200007f565b90509295989b9194979a5092959850565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051611d1e6200027360003960006102570152600081816101a90152818161111f01528181611430015281816114f901526115b3015260008181610230015281816107390152610c040152600081816102ba015281816108080152610cd3015260008181610293015281816108d70152610da2015260008181610336015281816108920152610d5d01526000818161010a0152818161084d0152610d180152600081816101820152818161077e0152610c4901526000818161015b015281816107c30152610c8e0152600081816102090152818161043801526106140152611d1e6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80634d9f155911610097578063a711986911610066578063a7119869146102b5578063aabcb26e146102dc578063beab4f7e14610311578063c4e8ddfa1461033157600080fd5b80634d9f15591461022b5780636624856a1461025257806394e49a1b146102795780639b7d7f0a1461028e57600080fd5b806336e0909b116100d357806336e0909b146101cb578063380cb000146101de57806338db8411146101f15780633e47158c1461020457600080fd5b8063078f29cf146101055780630a49cb031461015657806333d7e2bd1461017d57806335e80ab3146101a4575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c6101d9366004611708565b610358565b61012c6101ec36600461174a565b6103e0565b61012c6101ff36600461174a565b61060c565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61028c610287366004611896565b610639565b005b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6103037f8ed4baae3a927be3dea54996b4d5899f8c01e7594bf50b17dc1e741388ce3d1281565b60405190815260200161014d565b61032461031f366004611708565b6106c3565b60405161014d91906119c7565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6000805b82156103965761036d600a84611a67565b61037882600a611aaa565b6103829190611ae7565b905061038f600a84611aff565b925061035c565b60005b81156103c3576103aa600a83611a67565b60049190911b176103bc600a83611aff565b9150610399565b73ff00000000000000000000000000000000000000179392505050565b6040517f600661011c565b730000000000000000000000000000000000000000000000008152606083811b60088301527f9055730000000000000000000000000000000000000000000000000000000000601c8301527f0000000000000000000000000000000000000000000000000000000000000000811b601f8301527f905561012580603f5f395ff35f365f600860dd565b805490918054803314331560338301527f171560545760045f5f375f5160e01c8063f851a4401460a25780635c60da1b1460538301527f609f5780638f2839701460af5780633659cfe61460ac57634f1ef2861460aa5760738301527f5b63204e1c7a60e01b5f52826004525f5f60245f845afa3d5f5f3e3d6020141660938301527f805f510290158402015f875f89895f375f935af43d5f893d60205260205f523e60b38301527f5f3d890191609d57fd5bf35b50505b505f5260205ff35b5f5b93915b5050602060d38301527f60045f375f518091559160d957903333602060445f375f51956064955050604060f38301527f96506054565b5f5ff35b7f360894a13ba1a3210667c828492db98dca3e2076cc6101138301527f3735a920a3ca505d382bbc7fb53127684a568b3173ae13b9f8a6016e243e63b66101338301527fe8ee1178d6a717850b5d61039156ff000000000000000000000000000000000061015383015230901b610162820152610176810182905261016180822061019683015260559101206000905b90505b92915050565b6000610603837f00000000000000000000000000000000000000000000000000000000000000008461091b565b600061064486610b8e565b90506000610659878787876000015186610dc7565b9050600061066688610358565b9050610676868683858789611021565b815160208301516040518a927f49ea8b4c640f12c7d41cb7b7931d984f226f95ce1d55e1e449ee3d61b877c1ad926106b19286908990611b13565b60405180910390a25050505050505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260008260405160200161071191815260200190565b6040516020818303038152906040528051906020012090506040518060e0016040528061075e7f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016107a37f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016107e87f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff16815260200161082d7f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108727f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108b77f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108fc7f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1690529392505050565b6040517f600661011c565b730000000000000000000000000000000000000000000000008152606084811b60088301527f9055730000000000000000000000000000000000000000000000000000000000601c83015283901b601f8201527f905561012580603f5f395ff35f365f600860dd565b805490918054803314331560338201527f171560545760045f5f375f5160e01c8063f851a4401460a25780635c60da1b1460538201527f609f5780638f2839701460af5780633659cfe61460ac57634f1ef2861460aa5760738201527f5b63204e1c7a60e01b5f52826004525f5f60245f845afa3d5f5f3e3d6020141660938201527f805f510290158402015f875f89895f375f935af43d5f893d60205260205f523e60b38201527f5f3d890191609d57fd5bf35b50505b505f5260205ff35b5f5b93915b5050602060d38201527f60045f375f518091559160d957903333602060445f375f51956064955050604060f38201527f96506054565b5f5ff35b7f360894a13ba1a3210667c828492db98dca3e2076cc6101138201527f3735a920a3ca505d382bbc7fb53127684a568b3173ae13b9f8a6016e243e63b66101338201527fe8ee1178d6a717850b5d61039156000000000000000000000000000000000000610153820152600090826101618284f591505073ffffffffffffffffffffffffffffffffffffffff8116610b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f50726f78793a2063726561746532206661696c6564000000000000000000000060448201526064015b60405180910390fd5b9392505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152600082604051602001610bdc91815260200190565b6040516020818303038152906040528051906020012090506040518060e00160405280610c297f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610c6e7f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610cb37f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610cf87f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d3d7f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d827f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108fc7f00000000000000000000000000000000000000000000000000000000000000008461060c565b6040805180820190915260008082526020820152845167ffffffffffffffff164080610e75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4465706c6f79436861696e3a2067656e6573697320626c6f636b68617368206e60448201527f6f7420617661696c61626c6500000000000000000000000000000000000000006064820152608401610b7e565b6000856000015163ffffffff166020876020015163ffffffff16901b60f86001901b171760001b905060008089848a602001518b606001518a878d604001518c604001518d60200151604051602001610f7a9a9998979695949392919060c09a8b1b7fffffffffffffffff0000000000000000000000000000000000000000000000009081168252600882019a909a526028810198909852604888019690965293881b87166068870152606092831b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090811660708801526084870192909252871b90951660a485015290811b841660ac8401521b9091169181019190915260d40190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060808401835260008085528c840151858401527f8ed4baae3a927be3dea54996b4d5899f8c01e7594bf50b17dc1e741388ce3d1293850193909352908b01516060840152925090611000906116ac565b60408051808201909152928352602083015250925050505b95945050505050565b81516020808401518551918601516040517fb820514800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810193909352604483015283151560648301529091169063b820514890608401600060405180830381600087803b1580156110ae57600080fd5b505af11580156110c2573d6000803e3d6000fd5b505050506040828101518351602085015192517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015292811660248401527f000000000000000000000000000000000000000000000000000000000000000081166044840152169063c0c53b8b90606401600060405180830381600087803b15801561116a57600080fd5b505af115801561117e573d6000803e3d6000fd5b5050505060006112b08388606001516040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040518060e00160405280846060015173ffffffffffffffffffffffffffffffffffffffff1681526020018460a0015173ffffffffffffffffffffffffffffffffffffffff168152602001846080015173ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001846040015173ffffffffffffffffffffffffffffffffffffffff1681526020018460c0015173ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815250905092915050565b9050826020015173ffffffffffffffffffffffffffffffffffffffff1663dc7e20a588600001518960200151896000015173ffffffffffffffffffffffffffffffffffffffff1660001b8b604001518b604001516113876040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c0810182526301312d008152600a6020820152600891810191909152633b9aca006060820152620f424060808201526fffffffffffffffffffffffffffffffff60a082015290565b8c8e602001518a6040518a63ffffffff1660e01b81526004016113b299989796959493929190611bae565b600060405180830381600087803b1580156113cc57600080fd5b505af11580156113e0573d6000803e3d6000fd5b505050506060830151604080850151602086015191517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152918216602482015291811660448301529091169063c0c53b8b90606401600060405180830381600087803b15801561148d57600080fd5b505af11580156114a1573d6000803e3d6000fd5b505050506080830151606084015160208501516040517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201527f000000000000000000000000000000000000000000000000000000000000000083166024820152908216604482015291169063c0c53b8b90606401600060405180830381600087803b15801561154d57600080fd5b505af1158015611561573d6000803e3d6000fd5b50505060a084015160608501516040517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000821660248201529116915063485cc95590604401600060405180830381600087803b15801561160057600080fd5b505af1158015611614573d6000803e3d6000fd5b50505060c084015160808501516040517fc4d66de800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116915063c4d66de890602401600060405180830381600087803b15801561168b57600080fd5b505af115801561169f573d6000803e3d6000fd5b5050505050505050505050565b600081600001518260200151836040015184606001516040516020016116eb949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60006020828403121561171a57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461174557600080fd5b919050565b6000806040838503121561175d57600080fd5b61176683611721565b946020939093013593505050565b6040516080810167ffffffffffffffff811182821017156117be577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803567ffffffffffffffff8116811461174557600080fd5b803563ffffffff8116811461174557600080fd5b60006060828403121561180257600080fd5b6040516060810181811067ffffffffffffffff8211171561184c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061185b83611721565b815261186960208401611721565b602082015261187a60408401611721565b60408201525092915050565b8035801515811461174557600080fd5b60008060008060008587036101a08112156118b057600080fd5b8635955060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156118e457600080fd5b6118ec611774565b6118f8602089016117c4565b8152604088013560208201526060880135604082015261191a608089016117c4565b6060820152945060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608201121561195157600080fd5b5061195a611774565b61196660a088016117dc565b815261197460c088016117dc565b602082015261198560e088016117c4565b60408201526119976101008801611721565b606082015292506119ac8761012088016117f0565b91506119bb6101808701611886565b90509295509295909350565b60e08101610606828473ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401528060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611a7657611a76611a38565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ae257611ae2611a7b565b500290565b60008219821115611afa57611afa611a7b565b500190565b600082611b0e57611b0e611a38565b500490565b8481526020810184905273ffffffffffffffffffffffffffffffffffffffff831660408201526101408101611018606083018473ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401528060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b60006102808201905063ffffffff808c168352808b16602084015289604084015267ffffffffffffffff8916606084015273ffffffffffffffffffffffffffffffffffffffff881660808401528087511660a084015260ff60208801511660c084015260ff60408801511660e08401528060608801511661010084015280608088015116610120840152506fffffffffffffffffffffffffffffffff60a087015116610140830152611c7961016083018673ffffffffffffffffffffffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff8416610180830152825173ffffffffffffffffffffffffffffffffffffffff9081166101a0840152602084015181166101c0840152604084015181166101e0840152606084015181166102008401526080840151811661022084015260a0840151811661024084015260c0840151166102608301529a995050505050505050505056fea164736f6c634300080f000a", + Bin: "0x6101c06040523480156200001257600080fd5b5060405162001f9138038062001f9183398101604081905262000035916200009c565b6001600160a01b03998a1660805297891660a05295881660c05293871660e05291861661010052851661012052841661014052831661016052821661018052166101a0526200016b565b80516001600160a01b03811681146200009757600080fd5b919050565b6000806000806000806000806000806101408b8d031215620000bd57600080fd5b620000c88b6200007f565b9950620000d860208c016200007f565b9850620000e860408c016200007f565b9750620000f860608c016200007f565b96506200010860808c016200007f565b95506200011860a08c016200007f565b94506200012860c08c016200007f565b93506200013860e08c016200007f565b9250620001496101008c016200007f565b91506200015a6101208c016200007f565b90509295989b9194979a5092959850565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051611d1e6200027360003960006102570152600081816101a90152818161111f01528181611430015281816114f901526115b3015260008181610230015281816107390152610c040152600081816102ba015281816108080152610cd3015260008181610293015281816108d70152610da2015260008181610336015281816108920152610d5d01526000818161010a0152818161084d0152610d180152600081816101820152818161077e0152610c4901526000818161015b015281816107c30152610c8e0152600081816102090152818161043801526106140152611d1e6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80634d9f155911610097578063a711986911610066578063a7119869146102b5578063aabcb26e146102dc578063beab4f7e14610311578063c4e8ddfa1461033157600080fd5b80634d9f15591461022b5780636624856a1461025257806394e49a1b146102795780639b7d7f0a1461028e57600080fd5b806336e0909b116100d357806336e0909b146101cb578063380cb000146101de57806338db8411146101f15780633e47158c1461020457600080fd5b8063078f29cf146101055780630a49cb031461015657806333d7e2bd1461017d57806335e80ab3146101a4575b600080fd5b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c6101d9366004611708565b610358565b61012c6101ec36600461174a565b6103e0565b61012c6101ff36600461174a565b61060c565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61028c610287366004611896565b610639565b005b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6103037f8ed4baae3a927be3dea54996b4d5899f8c01e7594bf50b17dc1e741388ce3d1281565b60405190815260200161014d565b61032461031f366004611708565b6106c3565b60405161014d91906119c7565b61012c7f000000000000000000000000000000000000000000000000000000000000000081565b6000805b82156103965761036d600a84611a67565b61037882600a611aaa565b6103829190611ae7565b905061038f600a84611aff565b925061035c565b60005b81156103c3576103aa600a83611a67565b60049190911b176103bc600a83611aff565b9150610399565b73ff00000000000000000000000000000000000000179392505050565b6040517f600661011c565b730000000000000000000000000000000000000000000000008152606083811b60088301527f9055730000000000000000000000000000000000000000000000000000000000601c8301527f0000000000000000000000000000000000000000000000000000000000000000811b601f8301527f905561012280603f5f395ff35f365f600860dd565b805490918054803314331560338301527f171560545760045f5f375f5160e01c8063f851a4401460a25780635c60da1b1460538301527f609f5780638f2839701460af5780633659cfe61460ac57634f1ef2861460aa5760738301527f5b63204e1c7a60e01b5f52826004525f5f60245f845afa3d5f5f3e3d6020141660938301527f805f510290158402015f875f89895f375f935af43d5f893d60205260205f523e60b38301527f5f3d890191609d57fd5bf35b50505b505f5260205ff35b5f5b93915b5050602060d38301527f60045f375f518091559160d957903333602060445f375f51956064955050604060f38301527f96506054565b5f5ff35b7f360894a13ba1a3210667c828492db98dca3e2076cc6101138301527f3735a920a3ca505d382bbc7fb53127684a568b3173ae13b9f8a6016e243e63b66101338301527fe8ee1178d6a717850b5d61039156ff000000000000000000000000000000000061015383015230901b610162820152610176810182905261016180822061019683015260559101206000905b90505b92915050565b6000610603837f00000000000000000000000000000000000000000000000000000000000000008461091b565b600061064486610b8e565b90506000610659878787876000015186610dc7565b9050600061066688610358565b9050610676868683858789611021565b815160208301516040518a927f49ea8b4c640f12c7d41cb7b7931d984f226f95ce1d55e1e449ee3d61b877c1ad926106b19286908990611b13565b60405180910390a25050505050505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260008260405160200161071191815260200190565b6040516020818303038152906040528051906020012090506040518060e0016040528061075e7f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016107a37f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016107e87f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff16815260200161082d7f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108727f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108b77f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108fc7f0000000000000000000000000000000000000000000000000000000000000000846103e0565b73ffffffffffffffffffffffffffffffffffffffff1690529392505050565b6040517f600661011c565b730000000000000000000000000000000000000000000000008152606084811b60088301527f9055730000000000000000000000000000000000000000000000000000000000601c83015283901b601f8201527f905561012280603f5f395ff35f365f600860dd565b805490918054803314331560338201527f171560545760045f5f375f5160e01c8063f851a4401460a25780635c60da1b1460538201527f609f5780638f2839701460af5780633659cfe61460ac57634f1ef2861460aa5760738201527f5b63204e1c7a60e01b5f52826004525f5f60245f845afa3d5f5f3e3d6020141660938201527f805f510290158402015f875f89895f375f935af43d5f893d60205260205f523e60b38201527f5f3d890191609d57fd5bf35b50505b505f5260205ff35b5f5b93915b5050602060d38201527f60045f375f518091559160d957903333602060445f375f51956064955050604060f38201527f96506054565b5f5ff35b7f360894a13ba1a3210667c828492db98dca3e2076cc6101138201527f3735a920a3ca505d382bbc7fb53127684a568b3173ae13b9f8a6016e243e63b66101338201527fe8ee1178d6a717850b5d61039156000000000000000000000000000000000000610153820152600090826101618284f591505073ffffffffffffffffffffffffffffffffffffffff8116610b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f50726f78793a2063726561746532206661696c6564000000000000000000000060448201526064015b60405180910390fd5b9392505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152600082604051602001610bdc91815260200190565b6040516020818303038152906040528051906020012090506040518060e00160405280610c297f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610c6e7f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610cb37f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610cf87f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d3d7f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff168152602001610d827f00000000000000000000000000000000000000000000000000000000000000008461060c565b73ffffffffffffffffffffffffffffffffffffffff1681526020016108fc7f00000000000000000000000000000000000000000000000000000000000000008461060c565b6040805180820190915260008082526020820152845167ffffffffffffffff164080610e75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4465706c6f79436861696e3a2067656e6573697320626c6f636b68617368206e60448201527f6f7420617661696c61626c6500000000000000000000000000000000000000006064820152608401610b7e565b6000856000015163ffffffff166020876020015163ffffffff16901b60f86001901b171760001b905060008089848a602001518b606001518a878d604001518c604001518d60200151604051602001610f7a9a9998979695949392919060c09a8b1b7fffffffffffffffff0000000000000000000000000000000000000000000000009081168252600882019a909a526028810198909852604888019690965293881b87166068870152606092831b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090811660708801526084870192909252871b90951660a485015290811b841660ac8401521b9091169181019190915260d40190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012060808401835260008085528c840151858401527f8ed4baae3a927be3dea54996b4d5899f8c01e7594bf50b17dc1e741388ce3d1293850193909352908b01516060840152925090611000906116ac565b60408051808201909152928352602083015250925050505b95945050505050565b81516020808401518551918601516040517fb820514800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810193909352604483015283151560648301529091169063b820514890608401600060405180830381600087803b1580156110ae57600080fd5b505af11580156110c2573d6000803e3d6000fd5b505050506040828101518351602085015192517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015292811660248401527f000000000000000000000000000000000000000000000000000000000000000081166044840152169063c0c53b8b90606401600060405180830381600087803b15801561116a57600080fd5b505af115801561117e573d6000803e3d6000fd5b5050505060006112b08388606001516040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040518060e00160405280846060015173ffffffffffffffffffffffffffffffffffffffff1681526020018460a0015173ffffffffffffffffffffffffffffffffffffffff168152602001846080015173ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001846040015173ffffffffffffffffffffffffffffffffffffffff1681526020018460c0015173ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815250905092915050565b9050826020015173ffffffffffffffffffffffffffffffffffffffff1663dc7e20a588600001518960200151896000015173ffffffffffffffffffffffffffffffffffffffff1660001b8b604001518b604001516113876040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c0810182526301312d008152600a6020820152600891810191909152633b9aca006060820152620f424060808201526fffffffffffffffffffffffffffffffff60a082015290565b8c8e602001518a6040518a63ffffffff1660e01b81526004016113b299989796959493929190611bae565b600060405180830381600087803b1580156113cc57600080fd5b505af11580156113e0573d6000803e3d6000fd5b505050506060830151604080850151602086015191517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152918216602482015291811660448301529091169063c0c53b8b90606401600060405180830381600087803b15801561148d57600080fd5b505af11580156114a1573d6000803e3d6000fd5b505050506080830151606084015160208501516040517fc0c53b8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201527f000000000000000000000000000000000000000000000000000000000000000083166024820152908216604482015291169063c0c53b8b90606401600060405180830381600087803b15801561154d57600080fd5b505af1158015611561573d6000803e3d6000fd5b50505060a084015160608501516040517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000821660248201529116915063485cc95590604401600060405180830381600087803b15801561160057600080fd5b505af1158015611614573d6000803e3d6000fd5b50505060c084015160808501516040517fc4d66de800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116915063c4d66de890602401600060405180830381600087803b15801561168b57600080fd5b505af115801561169f573d6000803e3d6000fd5b5050505050505050505050565b600081600001518260200151836040015184606001516040516020016116eb949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60006020828403121561171a57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461174557600080fd5b919050565b6000806040838503121561175d57600080fd5b61176683611721565b946020939093013593505050565b6040516080810167ffffffffffffffff811182821017156117be577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803567ffffffffffffffff8116811461174557600080fd5b803563ffffffff8116811461174557600080fd5b60006060828403121561180257600080fd5b6040516060810181811067ffffffffffffffff8211171561184c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508061185b83611721565b815261186960208401611721565b602082015261187a60408401611721565b60408201525092915050565b8035801515811461174557600080fd5b60008060008060008587036101a08112156118b057600080fd5b8635955060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156118e457600080fd5b6118ec611774565b6118f8602089016117c4565b8152604088013560208201526060880135604082015261191a608089016117c4565b6060820152945060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608201121561195157600080fd5b5061195a611774565b61196660a088016117dc565b815261197460c088016117dc565b602082015261198560e088016117c4565b60408201526119976101008801611721565b606082015292506119ac8761012088016117f0565b91506119bb6101808701611886565b90509295509295909350565b60e08101610606828473ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401528060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611a7657611a76611a38565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ae257611ae2611a7b565b500290565b60008219821115611afa57611afa611a7b565b500190565b600082611b0e57611b0e611a38565b500490565b8481526020810184905273ffffffffffffffffffffffffffffffffffffffff831660408201526101408101611018606083018473ffffffffffffffffffffffffffffffffffffffff8082511683528060208301511660208401528060408301511660408401528060608301511660608401528060808301511660808401528060a08301511660a08401528060c08301511660c0840152505050565b60006102808201905063ffffffff808c168352808b16602084015289604084015267ffffffffffffffff8916606084015273ffffffffffffffffffffffffffffffffffffffff881660808401528087511660a084015260ff60208801511660c084015260ff60408801511660e08401528060608801511661010084015280608088015116610120840152506fffffffffffffffffffffffffffffffff60a087015116610140830152611c7961016083018673ffffffffffffffffffffffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff8416610180830152825173ffffffffffffffffffffffffffffffffffffffff9081166101a0840152602084015181166101c0840152604084015181166101e0840152606084015181166102008401526080840151811661022084015260a0840151811661024084015260c0840151166102608301529a995050505050505050505056fea164736f6c634300080f000a", } // DeployChainABI is the input ABI used to generate the binding from. diff --git a/bindings/gnosis_safe.go b/bindings/gnosis_safe.go new file mode 100644 index 0000000..461df82 --- /dev/null +++ b/bindings/gnosis_safe.go @@ -0,0 +1,3152 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// GnosisSafeMetaData contains all meta data concerning the GnosisSafe contract. +var GnosisSafeMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"fallback\",\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addOwnerWithThreshold\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"approveHash\",\"inputs\":[{\"name\":\"hashToApprove\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"approvedHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"changeThreshold\",\"inputs\":[{\"name\":\"_threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkNSignatures\",\"inputs\":[{\"name\":\"dataHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signatures\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"requiredSignatures\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkSignatures\",\"inputs\":[{\"name\":\"dataHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signatures\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableModule\",\"inputs\":[{\"name\":\"prevModule\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"module\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"enableModule\",\"inputs\":[{\"name\":\"module\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"encodeTransactionData\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operation\",\"type\":\"uint8\",\"internalType\":\"enumEnum.Operation\"},{\"name\":\"safeTxGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"baseGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"refundReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"execTransaction\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operation\",\"type\":\"uint8\",\"internalType\":\"enumEnum.Operation\"},{\"name\":\"safeTxGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"baseGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"refundReceiver\",\"type\":\"address\",\"internalType\":\"addresspayable\"},{\"name\":\"signatures\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"execTransactionFromModule\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operation\",\"type\":\"uint8\",\"internalType\":\"enumEnum.Operation\"}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execTransactionFromModuleReturnData\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operation\",\"type\":\"uint8\",\"internalType\":\"enumEnum.Operation\"}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"returnData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getModulesPaginated\",\"inputs\":[{\"name\":\"start\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"pageSize\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"array\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"next\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOwners\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStorageAt\",\"inputs\":[{\"name\":\"offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getThreshold\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTransactionHash\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operation\",\"type\":\"uint8\",\"internalType\":\"enumEnum.Operation\"},{\"name\":\"safeTxGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"baseGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasPrice\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"refundReceiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isModuleEnabled\",\"inputs\":[{\"name\":\"module\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeOwner\",\"inputs\":[{\"name\":\"prevOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"requiredTxGas\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operation\",\"type\":\"uint8\",\"internalType\":\"enumEnum.Operation\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setFallbackHandler\",\"inputs\":[{\"name\":\"handler\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGuard\",\"inputs\":[{\"name\":\"guard\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setup\",\"inputs\":[{\"name\":\"_owners\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"_threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"fallbackHandler\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"paymentToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payment\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"paymentReceiver\",\"type\":\"address\",\"internalType\":\"addresspayable\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"signedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"simulateAndRevert\",\"inputs\":[{\"name\":\"targetContract\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"calldataPayload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"swapOwner\",\"inputs\":[{\"name\":\"prevOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"oldOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AddedOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ApproveHash\",\"inputs\":[{\"name\":\"approvedHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChangedFallbackHandler\",\"inputs\":[{\"name\":\"handler\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChangedGuard\",\"inputs\":[{\"name\":\"guard\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChangedThreshold\",\"inputs\":[{\"name\":\"threshold\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DisabledModule\",\"inputs\":[{\"name\":\"module\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EnabledModule\",\"inputs\":[{\"name\":\"module\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutionFailure\",\"inputs\":[{\"name\":\"txHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"payment\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutionFromModuleFailure\",\"inputs\":[{\"name\":\"module\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutionFromModuleSuccess\",\"inputs\":[{\"name\":\"module\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutionSuccess\",\"inputs\":[{\"name\":\"txHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"payment\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemovedOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SafeReceived\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SafeSetup\",\"inputs\":[{\"name\":\"initiator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"owners\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"},{\"name\":\"threshold\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"initializer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"fallbackHandler\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SignMsg\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false}]", + Bin: "0x608060405234801561001057600080fd5b506001600455613fb6806100256000396000f3fe6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314610620578063f698da2514610640578063f8dc5dd9146106a7578063ffa1ad74146106c757610218565b8063e19a9dd9146105ab578063e318b52b146105cb578063e75235b8146105eb578063e86637db1461060057610218565b8063cc2f8452116100d1578063cc2f84521461051d578063d4d9bdcd1461054b578063d8d11f781461056b578063e009cfde1461058b57610218565b8063affed0e0146104a7578063b4faba09146104bd578063b63e800d146104dd578063c4ca3a9c146104fd57610218565b80635624b25b1161017a5780636a761202116101495780636a7612021461041a5780637d8329741461042d578063934f3a1114610465578063a0e67e2b1461048557610218565b80635624b25b146103805780635ae6bd37146103ad578063610b5925146103da578063694e80c3146103fa57610218565b80632f54bf6e116101b65780632f54bf6e146102f55780633408e47014610315578063468721a7146103325780635229073f1461035257610218565b80630d582f131461027e57806312fb68e0146102a05780632d9ad53d146102c057610218565b366102185760405134815233907f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d9060200160405180910390a2005b34801561022457600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d580548061024f57005b36600080373360601b365260008060143601600080855af190503d6000803e80610278573d6000fd5b503d6000f35b34801561028a57600080fd5b5061029e6102993660046132ce565b610710565b005b3480156102ac57600080fd5b5061029e6102bb3660046133d4565b610966565b3480156102cc57600080fd5b506102e06102db366004613449565b610fbb565b60405190151581526020015b60405180910390f35b34801561030157600080fd5b506102e0610310366004613449565b611010565b34801561032157600080fd5b50465b6040519081526020016102ec565b34801561033e57600080fd5b506102e061034d366004613475565b611062565b34801561035e57600080fd5b5061037261036d366004613475565b611178565b6040516102ec92919061354a565b34801561038c57600080fd5b506103a061039b366004613565565b6111ae565b6040516102ec9190613587565b3480156103b957600080fd5b506103246103c836600461359a565b60076020526000908152604090205481565b3480156103e657600080fd5b5061029e6103f5366004613449565b611234565b34801561040657600080fd5b5061029e61041536600461359a565b611426565b6102e06104283660046135fc565b61153a565b34801561043957600080fd5b506103246104483660046132ce565b600860209081526000928352604080842090915290825290205481565b34801561047157600080fd5b5061029e6104803660046136d5565b611934565b34801561049157600080fd5b5061049a6119b0565b6040516102ec9190613793565b3480156104b357600080fd5b5061032460055481565b3480156104c957600080fd5b5061029e6104d83660046137a6565b611ac8565b3480156104e957600080fd5b5061029e6104f83660046137f6565b611aeb565b34801561050957600080fd5b506103246105183660046138eb565b611c26565b34801561052957600080fd5b5061053d6105383660046132ce565b611cf8565b6040516102ec92919061395c565b34801561055757600080fd5b5061029e61056636600461359a565b611e26565b34801561057757600080fd5b50610324610586366004613994565b611efa565b34801561059757600080fd5b5061029e6105a6366004613a55565b611f27565b3480156105b757600080fd5b5061029e6105c6366004613449565b612106565b3480156105d757600080fd5b5061029e6105e6366004613a8e565b612178565b3480156105f757600080fd5b50600454610324565b34801561060c57600080fd5b506103a061061b366004613994565b612504565b34801561062c57600080fd5b5061029e61063b366004613449565b61269d565b34801561064c57600080fd5b5061032460007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692184660408051602081019390935282015230606082015260800160405160208183030381529060405280519060200120905090565b3480156106b357600080fd5b5061029e6106c2366004613ad9565b612713565b3480156106d357600080fd5b506103a06040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b6107186129a5565b73ffffffffffffffffffffffffffffffffffffffff821615801590610754575073ffffffffffffffffffffffffffffffffffffffff8216600114155b8015610776575073ffffffffffffffffffffffffffffffffffffffff82163014155b6107e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303300000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615610870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303400000000000000000000000000000000000000000000000000000060448201526064016107d8565b60026020527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0805473ffffffffffffffffffffffffffffffffffffffff8481166000818152604081208054939094167fffffffffffffffffffffffff00000000000000000000000000000000000000009384161790935560018352835490911617909155600380549161090283613b49565b909155505060405173ffffffffffffffffffffffffffffffffffffffff831681527f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269060200160405180910390a180600454146109625761096281611426565b5050565b610971816041612a10565b825110156109db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323000000000000000000000000000000000000000000000000000000060448201526064016107d8565b6000808060008060005b86811015610faf576041818102890160208101516040820151919092015160ff16955090935091506000849003610cbc579193508391610a26876041612a10565b821015610a8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323100000000000000000000000000000000000000000000000000000060448201526064016107d8565b8751610a9c836020612a4c565b1115610b04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323200000000000000000000000000000000000000000000000000000060448201526064016107d8565b602082890181015189519091610b27908390610b21908790612a4c565b90612a4c565b1115610b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323300000000000000000000000000000000000000000000000000000060448201526064016107d8565b6040517f20c13b0b000000000000000000000000000000000000000000000000000000008082528a85016020019173ffffffffffffffffffffffffffffffffffffffff8916906320c13b0b90610beb908f908690600401613b81565b602060405180830381865afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c9190613ba6565b7fffffffff000000000000000000000000000000000000000000000000000000001614610cb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323400000000000000000000000000000000000000000000000000000060448201526064016107d8565b5050610eaf565b8360ff16600103610d8a5791935083913373ffffffffffffffffffffffffffffffffffffffff84161480610d1f575073ffffffffffffffffffffffffffffffffffffffff851660009081526008602090815260408083208d845290915290205415155b610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323500000000000000000000000000000000000000000000000000000060448201526064016107d8565b610eaf565b601e8460ff161115610e4f576040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018b9052600190605c0160405160208183030381529060405280519060200120600486610def9190613be8565b6040805160008152602081018083529390935260ff90911690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610e3e573d6000803e3d6000fd5b505050602060405103519450610eaf565b6040805160008152602081018083528c905260ff861691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa158015610ea2573d6000803e3d6000fd5b5050506020604051035194505b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16118015610f10575073ffffffffffffffffffffffffffffffffffffffff8581166000908152600260205260409020541615155b8015610f33575073ffffffffffffffffffffffffffffffffffffffff8516600114155b610f99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330323600000000000000000000000000000000000000000000000000000060448201526064016107d8565b8495508080610fa790613b49565b9150506109e5565b50505050505050505050565b6000600173ffffffffffffffffffffffffffffffffffffffff83161480159061100a575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600160205260409020541615155b92915050565b600073ffffffffffffffffffffffffffffffffffffffff821660011480159061100a57505073ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416151590565b60003360011480159061109957503360009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1615155b6110ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303400000000000000000000000000000000000000000000000000000060448201526064016107d8565b61110c858585855a612a68565b905080156111445760405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a2611170565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a25b949350505050565b6000606061118886868686611062565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006111bd836020613c0b565b67ffffffffffffffff8111156111d5576111d56132fa565b6040519080825280601f01601f1916602001820160405280156111ff576020820181803683370190505b50905060005b8381101561122c57848101546020808302840101528061122481613b49565b915050611205565b509392505050565b61123c6129a5565b73ffffffffffffffffffffffffffffffffffffffff811615801590611278575073ffffffffffffffffffffffffffffffffffffffff8116600114155b6112de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303100000000000000000000000000000000000000000000000000000060448201526064016107d8565b73ffffffffffffffffffffffffffffffffffffffff818116600090815260016020526040902054161561136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303200000000000000000000000000000000000000000000000000000060448201526064016107d8565b600160208181527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f805473ffffffffffffffffffffffffffffffffffffffff858116600081815260408082208054949095167fffffffffffffffffffffffff000000000000000000000000000000000000000094851617909455959095528254168417909155519182527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844091015b60405180910390a150565b61142e6129a5565b60035481111561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303100000000000000000000000000000000000000000000000000000060448201526064016107d8565b6001811015611505576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303200000000000000000000000000000000000000000000000000000060448201526064016107d8565b60048190556040518181527f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c939060200161141b565b60008060006115548e8e8e8e8e8e8e8e8e8e600554612504565b60058054919250600061156683613b49565b909155505080516020820120915061157f828286611934565b5060006115aa7f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c85490565b905073ffffffffffffffffffffffffffffffffffffffff81161561164a578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b81526004016116179c9b9a99989796959493929190613cb2565b600060405180830381600087803b15801561163157600080fd5b505af1158015611645573d6000803e3d6000fd5b505050505b6116766116598a6109c4613dc8565b603f6116668c6040613c0b565b6116709190613de0565b90612aaf565b611682906101f4613dc8565b5a10156116eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330313000000000000000000000000000000000000000000000000000000060448201526064016107d8565b60005a905061175c8f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e8c600014611749578e612a68565b6109c45a6117579190613e1b565b612a68565b93506117695a8290612ac6565b9050838061177657508915155b8061178057508715155b6117e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330313300000000000000000000000000000000000000000000000000000060448201526064016107d8565b600088156117fe576117fb828b8b8b8b612ae1565b90505b84156118425760408051858152602081018390527f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e910160405180910390a161187c565b60408051858152602081018390527f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23910160405180910390a15b505073ffffffffffffffffffffffffffffffffffffffff811615611923576040517f9327136800000000000000000000000000000000000000000000000000000000815260048101839052831515602482015273ffffffffffffffffffffffffffffffffffffffff821690639327136890604401600060405180830381600087803b15801561190a57600080fd5b505af115801561191e573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b6004548061199e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330303100000000000000000000000000000000000000000000000000000060448201526064016107d8565b6119aa84848484610966565b50505050565b6060600060035467ffffffffffffffff8111156119cf576119cf6132fa565b6040519080825280602002602001820160405280156119f8578160200160208202803683370190505b506001600090815260026020527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0549192509073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff8116600114611ac05780838381518110611a7357611a73613e32565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152918116600090815260029092526040909120541681611ab881613b49565b925050611a42565b509092915050565b600080825160208401855af480600052503d6020523d600060403e60403d016000fd5b611b298a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508c9250612c72915050565b73ffffffffffffffffffffffffffffffffffffffff841615611b6d57611b6d847f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d555565b611bad8787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061303f92505050565b8115611bc457611bc282600060018685612ae1565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b89604051611c12959493929190613e61565b60405180910390a250505050505050505050565b6000805a9050611c6f878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050505a612a68565b611c7857600080fd5b60005a611c859083613e1b565b905080604051602001611c9a91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526107d891600401613587565b606060008267ffffffffffffffff811115611d1557611d156132fa565b604051908082528060200260200182016040528015611d3e578160200160208202803683370190505b5073ffffffffffffffffffffffffffffffffffffffff80861660009081526001602052604081205492945091165b73ffffffffffffffffffffffffffffffffffffffff811615801590611da8575073ffffffffffffffffffffffffffffffffffffffff8116600114155b8015611db357508482105b15611e185780848381518110611dcb57611dcb613e32565b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152918116600090815260019092526040909120541681611e1081613b49565b925050611d6c565b908352919491935090915050565b3360009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16611eb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330333000000000000000000000000000000000000000000000000000000060448201526064016107d8565b336000818152600860209081526040808320858452909152808220600190555183917ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c91a350565b6000611f0f8c8c8c8c8c8c8c8c8c8c8c612504565b8051906020012090509b9a5050505050505050505050565b611f2f6129a5565b73ffffffffffffffffffffffffffffffffffffffff811615801590611f6b575073ffffffffffffffffffffffffffffffffffffffff8116600114155b611fd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303100000000000000000000000000000000000000000000000000000060448201526064016107d8565b73ffffffffffffffffffffffffffffffffffffffff828116600090815260016020526040902054811690821614612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303300000000000000000000000000000000000000000000000000000060448201526064016107d8565b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600160209081526040808320805488871685528285208054919097167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790965592849052825490941690915591519081527faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427691015b60405180910390a15050565b61210e6129a5565b7f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c881815560405173ffffffffffffffffffffffffffffffffffffffff831681527f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2906020016120fa565b6121806129a5565b73ffffffffffffffffffffffffffffffffffffffff8116158015906121bc575073ffffffffffffffffffffffffffffffffffffffff8116600114155b80156121de575073ffffffffffffffffffffffffffffffffffffffff81163014155b612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303300000000000000000000000000000000000000000000000000000060448201526064016107d8565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526002602052604090205416156122d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303400000000000000000000000000000000000000000000000000000060448201526064016107d8565b73ffffffffffffffffffffffffffffffffffffffff82161580159061230f575073ffffffffffffffffffffffffffffffffffffffff8216600114155b612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303300000000000000000000000000000000000000000000000000000060448201526064016107d8565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020526040902054811690831614612408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303500000000000000000000000000000000000000000000000000000060448201526064016107d8565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152600260209081526040808320805487871680865283862080549289167fffffffffffffffffffffffff0000000000000000000000000000000000000000938416179055968a1685528285208054821690971790965592849052825490941690915591519081527ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf910160405180910390a160405173ffffffffffffffffffffffffffffffffffffffff821681527f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269060200160405180910390a1505050565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405161253e929190613ee7565b604051908190038120612564949392918e908e908e908e908e908e908e90602001613ef7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090507f19000000000000000000000000000000000000000000000000000000000000007f010000000000000000000000000000000000000000000000000000000000000061263860007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692184660408051602081019390935282015230606082015260800160405160208183030381529060405280519060200120905090565b6040517fff0000000000000000000000000000000000000000000000000000000000000093841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509b9a5050505050505050505050565b6126a56129a5565b6126cd817f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d555565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b09060200161141b565b61271b6129a5565b80600160035461272b9190613e1b565b1015612793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303100000000000000000000000000000000000000000000000000000060448201526064016107d8565b73ffffffffffffffffffffffffffffffffffffffff8216158015906127cf575073ffffffffffffffffffffffffffffffffffffffff8216600114155b612835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303300000000000000000000000000000000000000000000000000000060448201526064016107d8565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600260205260409020548116908316146128c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303500000000000000000000000000000000000000000000000000000060448201526064016107d8565b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179094559181528254909116909155600380549161294083613f74565b909155505060405173ffffffffffffffffffffffffffffffffffffffff831681527ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf9060200160405180910390a180600454146129a0576129a081611426565b505050565b333014612a0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330333100000000000000000000000000000000000000000000000000000060448201526064016107d8565b565b600082600003612a225750600061100a565b6000612a2e8385613c0b565b905082612a3b8583613de0565b14612a4557600080fd5b9392505050565b600080612a598385613dc8565b905083811015612a4557600080fd5b60006001836001811115612a7e57612a7e613c48565b03612a96576000808551602087018986f49050612aa6565b600080855160208701888a87f190505b95945050505050565b600081831015612abf5781612a45565b5090919050565b600082821115612ad557600080fd5b60006111708385613e1b565b60008073ffffffffffffffffffffffffffffffffffffffff831615612b065782612b08565b325b905073ffffffffffffffffffffffffffffffffffffffff8416612be757612b473a8610612b35573a612b37565b855b612b418989612a4c565b90612a10565b60405190925073ffffffffffffffffffffffffffffffffffffffff82169083156108fc029084906000818181858888f19350505050612be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330313100000000000000000000000000000000000000000000000000000060448201526064016107d8565b612c68565b612bf585612b418989612a4c565b9150612c028482846131cf565b612c68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330313200000000000000000000000000000000000000000000000000000060448201526064016107d8565b5095945050505050565b60045415612cdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303000000000000000000000000000000000000000000000000000000060448201526064016107d8565b8151811115612d47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303100000000000000000000000000000000000000000000000000000060448201526064016107d8565b6001811015612db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303200000000000000000000000000000000000000000000000000000060448201526064016107d8565b600160005b8351811015612fe7576000848281518110612dd457612dd4613e32565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612e32575073ffffffffffffffffffffffffffffffffffffffff8116600114155b8015612e54575073ffffffffffffffffffffffffffffffffffffffff81163014155b8015612e8c57508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b612ef2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303300000000000000000000000000000000000000000000000000000060448201526064016107d8565b73ffffffffffffffffffffffffffffffffffffffff8181166000908152600260205260409020541615612f81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475332303400000000000000000000000000000000000000000000000000000060448201526064016107d8565b73ffffffffffffffffffffffffffffffffffffffff928316600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169382169390931790925580612fdf81613b49565b915050612db7565b5073ffffffffffffffffffffffffffffffffffffffff16600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001660011790559051600355600455565b600160008190526020527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f5473ffffffffffffffffffffffffffffffffffffffff16156130e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475331303000000000000000000000000000000000000000000000000000000060448201526064016107d8565b6001600081905260208190527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80547fffffffffffffffffffffffff000000000000000000000000000000000000000016909117905573ffffffffffffffffffffffffffffffffffffffff821615610962576131698260008360015a612a68565b610962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f475330303000000000000000000000000000000000000000000000000000000060448201526064016107d8565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251600093929184919082896127105a03f13d801561327c5760208114613284576000935061328f565b81935061328f565b600051158215171593505b5050509392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146132bb57600080fd5b50565b80356132c981613299565b919050565b600080604083850312156132e157600080fd5b82356132ec81613299565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261333a57600080fd5b813567ffffffffffffffff80821115613355576133556132fa565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561339b5761339b6132fa565b816040528381528660208588010111156133b457600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156133ea57600080fd5b84359350602085013567ffffffffffffffff8082111561340957600080fd5b61341588838901613329565b9450604087013591508082111561342b57600080fd5b5061343887828801613329565b949793965093946060013593505050565b60006020828403121561345b57600080fd5b8135612a4581613299565b8035600281106132c957600080fd5b6000806000806080858703121561348b57600080fd5b843561349681613299565b935060208501359250604085013567ffffffffffffffff8111156134b957600080fd5b6134c587828801613329565b9250506134d460608601613466565b905092959194509250565b6000815180845260005b81811015613505576020818501810151868301820152016134e9565b81811115613517576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b821515815260406020820152600061117060408301846134df565b6000806040838503121561357857600080fd5b50508035926020909101359150565b602081526000612a4560208301846134df565b6000602082840312156135ac57600080fd5b5035919050565b60008083601f8401126135c557600080fd5b50813567ffffffffffffffff8111156135dd57600080fd5b6020830191508360208285010111156135f557600080fd5b9250929050565b60008060008060008060008060008060006101408c8e03121561361e57600080fd5b6136278c6132be565b9a5060208c0135995067ffffffffffffffff8060408e0135111561364a57600080fd5b61365a8e60408f01358f016135b3565b909a50985061366b60608e01613466565b975060808d0135965060a08d0135955060c08d0135945061368e60e08e016132be565b935061369d6101008e016132be565b9250806101208e013511156136b157600080fd5b506136c38d6101208e01358e01613329565b90509295989b509295989b9093969950565b6000806000606084860312156136ea57600080fd5b83359250602084013567ffffffffffffffff8082111561370957600080fd5b61371587838801613329565b9350604086013591508082111561372b57600080fd5b5061373886828701613329565b9150509250925092565b600081518084526020808501945080840160005b8381101561378857815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101613756565b509495945050505050565b602081526000612a456020830184613742565b600080604083850312156137b957600080fd5b82356137c481613299565b9150602083013567ffffffffffffffff8111156137e057600080fd5b6137ec85828601613329565b9150509250929050565b6000806000806000806000806000806101008b8d03121561381657600080fd5b8a3567ffffffffffffffff8082111561382e57600080fd5b818d0191508d601f83011261384257600080fd5b81358181111561385157600080fd5b8e60208260051b850101111561386657600080fd5b60208381019d50909b508d0135995061388160408e016132be565b985060608d013591508082111561389757600080fd5b506138a48d828e016135b3565b90975095506138b7905060808c016132be565b93506138c560a08c016132be565b925060c08b013591506138da60e08c016132be565b90509295989b9194979a5092959850565b60008060008060006080868803121561390357600080fd5b853561390e81613299565b945060208601359350604086013567ffffffffffffffff81111561393157600080fd5b61393d888289016135b3565b9094509250613950905060608701613466565b90509295509295909350565b60408152600061396f6040830185613742565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b60008060008060008060008060008060006101408c8e0312156139b657600080fd5b8b356139c181613299565b9a5060208c0135995060408c013567ffffffffffffffff8111156139e457600080fd5b6139f08e828f016135b3565b909a509850613a03905060608d01613466565b965060808c0135955060a08c0135945060c08c0135935060e08c0135613a2881613299565b92506101008c0135613a3981613299565b809250506101208c013590509295989b509295989b9093969950565b60008060408385031215613a6857600080fd5b8235613a7381613299565b91506020830135613a8381613299565b809150509250929050565b600080600060608486031215613aa357600080fd5b8335613aae81613299565b92506020840135613abe81613299565b91506040840135613ace81613299565b809150509250925092565b600080600060608486031215613aee57600080fd5b8335613af981613299565b92506020840135613b0981613299565b929592945050506040919091013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b7a57613b7a613b1a565b5060010190565b604081526000613b9460408301856134df565b8281036020840152612aa681856134df565b600060208284031215613bb857600080fd5b81517fffffffff0000000000000000000000000000000000000000000000000000000081168114612a4557600080fd5b600060ff821660ff841680821015613c0257613c02613b1a565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c4357613c43613b1a565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110613cae577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b600061016073ffffffffffffffffffffffffffffffffffffffff8f1683528d60208401528060408401528b81840152506101808b8d828501376000818d850101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8d01168301613d28606085018d613c77565b8a60808501528960a08501528860c0850152613d5c60e085018973ffffffffffffffffffffffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff87166101008501528184820301610120850152613d90828201876134df565b92505050613db761014083018473ffffffffffffffffffffffffffffffffffffffff169052565b9d9c50505050505050505050505050565b60008219821115613ddb57613ddb613b1a565b500190565b600082613e16577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015613e2d57613e2d613b1a565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6080808252810185905260008660a08301825b88811015613eb1578235613e8781613299565b73ffffffffffffffffffffffffffffffffffffffff16825260209283019290910190600101613e74565b506020840196909652505073ffffffffffffffffffffffffffffffffffffffff9283166040820152911660609091015292915050565b8183823760009101908152919050565b6000610160820190508c825273ffffffffffffffffffffffffffffffffffffffff808d1660208401528b60408401528a6060840152613f39608084018b613c77565b60a083019890985260c082019690965260e0810194909452918516610100840152909316610120820152610140019190915295945050505050565b600081613f8357613f83613b1a565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea164736f6c634300080f000a", +} + +// GnosisSafeABI is the input ABI used to generate the binding from. +// Deprecated: Use GnosisSafeMetaData.ABI instead. +var GnosisSafeABI = GnosisSafeMetaData.ABI + +// GnosisSafeBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use GnosisSafeMetaData.Bin instead. +var GnosisSafeBin = GnosisSafeMetaData.Bin + +// DeployGnosisSafe deploys a new Ethereum contract, binding an instance of GnosisSafe to it. +func DeployGnosisSafe(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *GnosisSafe, error) { + parsed, err := GnosisSafeMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(GnosisSafeBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &GnosisSafe{GnosisSafeCaller: GnosisSafeCaller{contract: contract}, GnosisSafeTransactor: GnosisSafeTransactor{contract: contract}, GnosisSafeFilterer: GnosisSafeFilterer{contract: contract}}, nil +} + +// GnosisSafe is an auto generated Go binding around an Ethereum contract. +type GnosisSafe struct { + GnosisSafeCaller // Read-only binding to the contract + GnosisSafeTransactor // Write-only binding to the contract + GnosisSafeFilterer // Log filterer for contract events +} + +// GnosisSafeCaller is an auto generated read-only Go binding around an Ethereum contract. +type GnosisSafeCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GnosisSafeTransactor is an auto generated write-only Go binding around an Ethereum contract. +type GnosisSafeTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GnosisSafeFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type GnosisSafeFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// GnosisSafeSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type GnosisSafeSession struct { + Contract *GnosisSafe // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// GnosisSafeCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type GnosisSafeCallerSession struct { + Contract *GnosisSafeCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// GnosisSafeTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type GnosisSafeTransactorSession struct { + Contract *GnosisSafeTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// GnosisSafeRaw is an auto generated low-level Go binding around an Ethereum contract. +type GnosisSafeRaw struct { + Contract *GnosisSafe // Generic contract binding to access the raw methods on +} + +// GnosisSafeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type GnosisSafeCallerRaw struct { + Contract *GnosisSafeCaller // Generic read-only contract binding to access the raw methods on +} + +// GnosisSafeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type GnosisSafeTransactorRaw struct { + Contract *GnosisSafeTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewGnosisSafe creates a new instance of GnosisSafe, bound to a specific deployed contract. +func NewGnosisSafe(address common.Address, backend bind.ContractBackend) (*GnosisSafe, error) { + contract, err := bindGnosisSafe(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &GnosisSafe{GnosisSafeCaller: GnosisSafeCaller{contract: contract}, GnosisSafeTransactor: GnosisSafeTransactor{contract: contract}, GnosisSafeFilterer: GnosisSafeFilterer{contract: contract}}, nil +} + +// NewGnosisSafeCaller creates a new read-only instance of GnosisSafe, bound to a specific deployed contract. +func NewGnosisSafeCaller(address common.Address, caller bind.ContractCaller) (*GnosisSafeCaller, error) { + contract, err := bindGnosisSafe(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &GnosisSafeCaller{contract: contract}, nil +} + +// NewGnosisSafeTransactor creates a new write-only instance of GnosisSafe, bound to a specific deployed contract. +func NewGnosisSafeTransactor(address common.Address, transactor bind.ContractTransactor) (*GnosisSafeTransactor, error) { + contract, err := bindGnosisSafe(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &GnosisSafeTransactor{contract: contract}, nil +} + +// NewGnosisSafeFilterer creates a new log filterer instance of GnosisSafe, bound to a specific deployed contract. +func NewGnosisSafeFilterer(address common.Address, filterer bind.ContractFilterer) (*GnosisSafeFilterer, error) { + contract, err := bindGnosisSafe(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &GnosisSafeFilterer{contract: contract}, nil +} + +// bindGnosisSafe binds a generic wrapper to an already deployed contract. +func bindGnosisSafe(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := GnosisSafeMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_GnosisSafe *GnosisSafeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _GnosisSafe.Contract.GnosisSafeCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_GnosisSafe *GnosisSafeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GnosisSafe.Contract.GnosisSafeTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_GnosisSafe *GnosisSafeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _GnosisSafe.Contract.GnosisSafeTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_GnosisSafe *GnosisSafeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _GnosisSafe.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_GnosisSafe *GnosisSafeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GnosisSafe.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_GnosisSafe *GnosisSafeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _GnosisSafe.Contract.contract.Transact(opts, method, params...) +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() view returns(string) +func (_GnosisSafe *GnosisSafeCaller) VERSION(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "VERSION") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() view returns(string) +func (_GnosisSafe *GnosisSafeSession) VERSION() (string, error) { + return _GnosisSafe.Contract.VERSION(&_GnosisSafe.CallOpts) +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() view returns(string) +func (_GnosisSafe *GnosisSafeCallerSession) VERSION() (string, error) { + return _GnosisSafe.Contract.VERSION(&_GnosisSafe.CallOpts) +} + +// ApprovedHashes is a free data retrieval call binding the contract method 0x7d832974. +// +// Solidity: function approvedHashes(address , bytes32 ) view returns(uint256) +func (_GnosisSafe *GnosisSafeCaller) ApprovedHashes(opts *bind.CallOpts, arg0 common.Address, arg1 [32]byte) (*big.Int, error) { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "approvedHashes", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ApprovedHashes is a free data retrieval call binding the contract method 0x7d832974. +// +// Solidity: function approvedHashes(address , bytes32 ) view returns(uint256) +func (_GnosisSafe *GnosisSafeSession) ApprovedHashes(arg0 common.Address, arg1 [32]byte) (*big.Int, error) { + return _GnosisSafe.Contract.ApprovedHashes(&_GnosisSafe.CallOpts, arg0, arg1) +} + +// ApprovedHashes is a free data retrieval call binding the contract method 0x7d832974. +// +// Solidity: function approvedHashes(address , bytes32 ) view returns(uint256) +func (_GnosisSafe *GnosisSafeCallerSession) ApprovedHashes(arg0 common.Address, arg1 [32]byte) (*big.Int, error) { + return _GnosisSafe.Contract.ApprovedHashes(&_GnosisSafe.CallOpts, arg0, arg1) +} + +// CheckNSignatures is a free data retrieval call binding the contract method 0x12fb68e0. +// +// Solidity: function checkNSignatures(bytes32 dataHash, bytes data, bytes signatures, uint256 requiredSignatures) view returns() +func (_GnosisSafe *GnosisSafeCaller) CheckNSignatures(opts *bind.CallOpts, dataHash [32]byte, data []byte, signatures []byte, requiredSignatures *big.Int) error { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "checkNSignatures", dataHash, data, signatures, requiredSignatures) + + if err != nil { + return err + } + + return err + +} + +// CheckNSignatures is a free data retrieval call binding the contract method 0x12fb68e0. +// +// Solidity: function checkNSignatures(bytes32 dataHash, bytes data, bytes signatures, uint256 requiredSignatures) view returns() +func (_GnosisSafe *GnosisSafeSession) CheckNSignatures(dataHash [32]byte, data []byte, signatures []byte, requiredSignatures *big.Int) error { + return _GnosisSafe.Contract.CheckNSignatures(&_GnosisSafe.CallOpts, dataHash, data, signatures, requiredSignatures) +} + +// CheckNSignatures is a free data retrieval call binding the contract method 0x12fb68e0. +// +// Solidity: function checkNSignatures(bytes32 dataHash, bytes data, bytes signatures, uint256 requiredSignatures) view returns() +func (_GnosisSafe *GnosisSafeCallerSession) CheckNSignatures(dataHash [32]byte, data []byte, signatures []byte, requiredSignatures *big.Int) error { + return _GnosisSafe.Contract.CheckNSignatures(&_GnosisSafe.CallOpts, dataHash, data, signatures, requiredSignatures) +} + +// CheckSignatures is a free data retrieval call binding the contract method 0x934f3a11. +// +// Solidity: function checkSignatures(bytes32 dataHash, bytes data, bytes signatures) view returns() +func (_GnosisSafe *GnosisSafeCaller) CheckSignatures(opts *bind.CallOpts, dataHash [32]byte, data []byte, signatures []byte) error { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "checkSignatures", dataHash, data, signatures) + + if err != nil { + return err + } + + return err + +} + +// CheckSignatures is a free data retrieval call binding the contract method 0x934f3a11. +// +// Solidity: function checkSignatures(bytes32 dataHash, bytes data, bytes signatures) view returns() +func (_GnosisSafe *GnosisSafeSession) CheckSignatures(dataHash [32]byte, data []byte, signatures []byte) error { + return _GnosisSafe.Contract.CheckSignatures(&_GnosisSafe.CallOpts, dataHash, data, signatures) +} + +// CheckSignatures is a free data retrieval call binding the contract method 0x934f3a11. +// +// Solidity: function checkSignatures(bytes32 dataHash, bytes data, bytes signatures) view returns() +func (_GnosisSafe *GnosisSafeCallerSession) CheckSignatures(dataHash [32]byte, data []byte, signatures []byte) error { + return _GnosisSafe.Contract.CheckSignatures(&_GnosisSafe.CallOpts, dataHash, data, signatures) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_GnosisSafe *GnosisSafeCaller) DomainSeparator(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "domainSeparator") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_GnosisSafe *GnosisSafeSession) DomainSeparator() ([32]byte, error) { + return _GnosisSafe.Contract.DomainSeparator(&_GnosisSafe.CallOpts) +} + +// DomainSeparator is a free data retrieval call binding the contract method 0xf698da25. +// +// Solidity: function domainSeparator() view returns(bytes32) +func (_GnosisSafe *GnosisSafeCallerSession) DomainSeparator() ([32]byte, error) { + return _GnosisSafe.Contract.DomainSeparator(&_GnosisSafe.CallOpts) +} + +// EncodeTransactionData is a free data retrieval call binding the contract method 0xe86637db. +// +// Solidity: function encodeTransactionData(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, uint256 _nonce) view returns(bytes) +func (_GnosisSafe *GnosisSafeCaller) EncodeTransactionData(opts *bind.CallOpts, to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, _nonce *big.Int) ([]byte, error) { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "encodeTransactionData", to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// EncodeTransactionData is a free data retrieval call binding the contract method 0xe86637db. +// +// Solidity: function encodeTransactionData(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, uint256 _nonce) view returns(bytes) +func (_GnosisSafe *GnosisSafeSession) EncodeTransactionData(to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, _nonce *big.Int) ([]byte, error) { + return _GnosisSafe.Contract.EncodeTransactionData(&_GnosisSafe.CallOpts, to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce) +} + +// EncodeTransactionData is a free data retrieval call binding the contract method 0xe86637db. +// +// Solidity: function encodeTransactionData(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, uint256 _nonce) view returns(bytes) +func (_GnosisSafe *GnosisSafeCallerSession) EncodeTransactionData(to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, _nonce *big.Int) ([]byte, error) { + return _GnosisSafe.Contract.EncodeTransactionData(&_GnosisSafe.CallOpts, to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce) +} + +// GetChainId is a free data retrieval call binding the contract method 0x3408e470. +// +// Solidity: function getChainId() view returns(uint256) +func (_GnosisSafe *GnosisSafeCaller) GetChainId(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "getChainId") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetChainId is a free data retrieval call binding the contract method 0x3408e470. +// +// Solidity: function getChainId() view returns(uint256) +func (_GnosisSafe *GnosisSafeSession) GetChainId() (*big.Int, error) { + return _GnosisSafe.Contract.GetChainId(&_GnosisSafe.CallOpts) +} + +// GetChainId is a free data retrieval call binding the contract method 0x3408e470. +// +// Solidity: function getChainId() view returns(uint256) +func (_GnosisSafe *GnosisSafeCallerSession) GetChainId() (*big.Int, error) { + return _GnosisSafe.Contract.GetChainId(&_GnosisSafe.CallOpts) +} + +// GetModulesPaginated is a free data retrieval call binding the contract method 0xcc2f8452. +// +// Solidity: function getModulesPaginated(address start, uint256 pageSize) view returns(address[] array, address next) +func (_GnosisSafe *GnosisSafeCaller) GetModulesPaginated(opts *bind.CallOpts, start common.Address, pageSize *big.Int) (struct { + Array []common.Address + Next common.Address +}, error) { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "getModulesPaginated", start, pageSize) + + outstruct := new(struct { + Array []common.Address + Next common.Address + }) + if err != nil { + return *outstruct, err + } + + outstruct.Array = *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + outstruct.Next = *abi.ConvertType(out[1], new(common.Address)).(*common.Address) + + return *outstruct, err + +} + +// GetModulesPaginated is a free data retrieval call binding the contract method 0xcc2f8452. +// +// Solidity: function getModulesPaginated(address start, uint256 pageSize) view returns(address[] array, address next) +func (_GnosisSafe *GnosisSafeSession) GetModulesPaginated(start common.Address, pageSize *big.Int) (struct { + Array []common.Address + Next common.Address +}, error) { + return _GnosisSafe.Contract.GetModulesPaginated(&_GnosisSafe.CallOpts, start, pageSize) +} + +// GetModulesPaginated is a free data retrieval call binding the contract method 0xcc2f8452. +// +// Solidity: function getModulesPaginated(address start, uint256 pageSize) view returns(address[] array, address next) +func (_GnosisSafe *GnosisSafeCallerSession) GetModulesPaginated(start common.Address, pageSize *big.Int) (struct { + Array []common.Address + Next common.Address +}, error) { + return _GnosisSafe.Contract.GetModulesPaginated(&_GnosisSafe.CallOpts, start, pageSize) +} + +// GetOwners is a free data retrieval call binding the contract method 0xa0e67e2b. +// +// Solidity: function getOwners() view returns(address[]) +func (_GnosisSafe *GnosisSafeCaller) GetOwners(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "getOwners") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// GetOwners is a free data retrieval call binding the contract method 0xa0e67e2b. +// +// Solidity: function getOwners() view returns(address[]) +func (_GnosisSafe *GnosisSafeSession) GetOwners() ([]common.Address, error) { + return _GnosisSafe.Contract.GetOwners(&_GnosisSafe.CallOpts) +} + +// GetOwners is a free data retrieval call binding the contract method 0xa0e67e2b. +// +// Solidity: function getOwners() view returns(address[]) +func (_GnosisSafe *GnosisSafeCallerSession) GetOwners() ([]common.Address, error) { + return _GnosisSafe.Contract.GetOwners(&_GnosisSafe.CallOpts) +} + +// GetStorageAt is a free data retrieval call binding the contract method 0x5624b25b. +// +// Solidity: function getStorageAt(uint256 offset, uint256 length) view returns(bytes) +func (_GnosisSafe *GnosisSafeCaller) GetStorageAt(opts *bind.CallOpts, offset *big.Int, length *big.Int) ([]byte, error) { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "getStorageAt", offset, length) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// GetStorageAt is a free data retrieval call binding the contract method 0x5624b25b. +// +// Solidity: function getStorageAt(uint256 offset, uint256 length) view returns(bytes) +func (_GnosisSafe *GnosisSafeSession) GetStorageAt(offset *big.Int, length *big.Int) ([]byte, error) { + return _GnosisSafe.Contract.GetStorageAt(&_GnosisSafe.CallOpts, offset, length) +} + +// GetStorageAt is a free data retrieval call binding the contract method 0x5624b25b. +// +// Solidity: function getStorageAt(uint256 offset, uint256 length) view returns(bytes) +func (_GnosisSafe *GnosisSafeCallerSession) GetStorageAt(offset *big.Int, length *big.Int) ([]byte, error) { + return _GnosisSafe.Contract.GetStorageAt(&_GnosisSafe.CallOpts, offset, length) +} + +// GetThreshold is a free data retrieval call binding the contract method 0xe75235b8. +// +// Solidity: function getThreshold() view returns(uint256) +func (_GnosisSafe *GnosisSafeCaller) GetThreshold(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "getThreshold") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetThreshold is a free data retrieval call binding the contract method 0xe75235b8. +// +// Solidity: function getThreshold() view returns(uint256) +func (_GnosisSafe *GnosisSafeSession) GetThreshold() (*big.Int, error) { + return _GnosisSafe.Contract.GetThreshold(&_GnosisSafe.CallOpts) +} + +// GetThreshold is a free data retrieval call binding the contract method 0xe75235b8. +// +// Solidity: function getThreshold() view returns(uint256) +func (_GnosisSafe *GnosisSafeCallerSession) GetThreshold() (*big.Int, error) { + return _GnosisSafe.Contract.GetThreshold(&_GnosisSafe.CallOpts) +} + +// GetTransactionHash is a free data retrieval call binding the contract method 0xd8d11f78. +// +// Solidity: function getTransactionHash(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, uint256 _nonce) view returns(bytes32) +func (_GnosisSafe *GnosisSafeCaller) GetTransactionHash(opts *bind.CallOpts, to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, _nonce *big.Int) ([32]byte, error) { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "getTransactionHash", to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// GetTransactionHash is a free data retrieval call binding the contract method 0xd8d11f78. +// +// Solidity: function getTransactionHash(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, uint256 _nonce) view returns(bytes32) +func (_GnosisSafe *GnosisSafeSession) GetTransactionHash(to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, _nonce *big.Int) ([32]byte, error) { + return _GnosisSafe.Contract.GetTransactionHash(&_GnosisSafe.CallOpts, to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce) +} + +// GetTransactionHash is a free data retrieval call binding the contract method 0xd8d11f78. +// +// Solidity: function getTransactionHash(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, uint256 _nonce) view returns(bytes32) +func (_GnosisSafe *GnosisSafeCallerSession) GetTransactionHash(to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, _nonce *big.Int) ([32]byte, error) { + return _GnosisSafe.Contract.GetTransactionHash(&_GnosisSafe.CallOpts, to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, _nonce) +} + +// IsModuleEnabled is a free data retrieval call binding the contract method 0x2d9ad53d. +// +// Solidity: function isModuleEnabled(address module) view returns(bool) +func (_GnosisSafe *GnosisSafeCaller) IsModuleEnabled(opts *bind.CallOpts, module common.Address) (bool, error) { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "isModuleEnabled", module) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsModuleEnabled is a free data retrieval call binding the contract method 0x2d9ad53d. +// +// Solidity: function isModuleEnabled(address module) view returns(bool) +func (_GnosisSafe *GnosisSafeSession) IsModuleEnabled(module common.Address) (bool, error) { + return _GnosisSafe.Contract.IsModuleEnabled(&_GnosisSafe.CallOpts, module) +} + +// IsModuleEnabled is a free data retrieval call binding the contract method 0x2d9ad53d. +// +// Solidity: function isModuleEnabled(address module) view returns(bool) +func (_GnosisSafe *GnosisSafeCallerSession) IsModuleEnabled(module common.Address) (bool, error) { + return _GnosisSafe.Contract.IsModuleEnabled(&_GnosisSafe.CallOpts, module) +} + +// IsOwner is a free data retrieval call binding the contract method 0x2f54bf6e. +// +// Solidity: function isOwner(address owner) view returns(bool) +func (_GnosisSafe *GnosisSafeCaller) IsOwner(opts *bind.CallOpts, owner common.Address) (bool, error) { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "isOwner", owner) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsOwner is a free data retrieval call binding the contract method 0x2f54bf6e. +// +// Solidity: function isOwner(address owner) view returns(bool) +func (_GnosisSafe *GnosisSafeSession) IsOwner(owner common.Address) (bool, error) { + return _GnosisSafe.Contract.IsOwner(&_GnosisSafe.CallOpts, owner) +} + +// IsOwner is a free data retrieval call binding the contract method 0x2f54bf6e. +// +// Solidity: function isOwner(address owner) view returns(bool) +func (_GnosisSafe *GnosisSafeCallerSession) IsOwner(owner common.Address) (bool, error) { + return _GnosisSafe.Contract.IsOwner(&_GnosisSafe.CallOpts, owner) +} + +// Nonce is a free data retrieval call binding the contract method 0xaffed0e0. +// +// Solidity: function nonce() view returns(uint256) +func (_GnosisSafe *GnosisSafeCaller) Nonce(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "nonce") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Nonce is a free data retrieval call binding the contract method 0xaffed0e0. +// +// Solidity: function nonce() view returns(uint256) +func (_GnosisSafe *GnosisSafeSession) Nonce() (*big.Int, error) { + return _GnosisSafe.Contract.Nonce(&_GnosisSafe.CallOpts) +} + +// Nonce is a free data retrieval call binding the contract method 0xaffed0e0. +// +// Solidity: function nonce() view returns(uint256) +func (_GnosisSafe *GnosisSafeCallerSession) Nonce() (*big.Int, error) { + return _GnosisSafe.Contract.Nonce(&_GnosisSafe.CallOpts) +} + +// SignedMessages is a free data retrieval call binding the contract method 0x5ae6bd37. +// +// Solidity: function signedMessages(bytes32 ) view returns(uint256) +func (_GnosisSafe *GnosisSafeCaller) SignedMessages(opts *bind.CallOpts, arg0 [32]byte) (*big.Int, error) { + var out []interface{} + err := _GnosisSafe.contract.Call(opts, &out, "signedMessages", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SignedMessages is a free data retrieval call binding the contract method 0x5ae6bd37. +// +// Solidity: function signedMessages(bytes32 ) view returns(uint256) +func (_GnosisSafe *GnosisSafeSession) SignedMessages(arg0 [32]byte) (*big.Int, error) { + return _GnosisSafe.Contract.SignedMessages(&_GnosisSafe.CallOpts, arg0) +} + +// SignedMessages is a free data retrieval call binding the contract method 0x5ae6bd37. +// +// Solidity: function signedMessages(bytes32 ) view returns(uint256) +func (_GnosisSafe *GnosisSafeCallerSession) SignedMessages(arg0 [32]byte) (*big.Int, error) { + return _GnosisSafe.Contract.SignedMessages(&_GnosisSafe.CallOpts, arg0) +} + +// AddOwnerWithThreshold is a paid mutator transaction binding the contract method 0x0d582f13. +// +// Solidity: function addOwnerWithThreshold(address owner, uint256 _threshold) returns() +func (_GnosisSafe *GnosisSafeTransactor) AddOwnerWithThreshold(opts *bind.TransactOpts, owner common.Address, _threshold *big.Int) (*types.Transaction, error) { + return _GnosisSafe.contract.Transact(opts, "addOwnerWithThreshold", owner, _threshold) +} + +// AddOwnerWithThreshold is a paid mutator transaction binding the contract method 0x0d582f13. +// +// Solidity: function addOwnerWithThreshold(address owner, uint256 _threshold) returns() +func (_GnosisSafe *GnosisSafeSession) AddOwnerWithThreshold(owner common.Address, _threshold *big.Int) (*types.Transaction, error) { + return _GnosisSafe.Contract.AddOwnerWithThreshold(&_GnosisSafe.TransactOpts, owner, _threshold) +} + +// AddOwnerWithThreshold is a paid mutator transaction binding the contract method 0x0d582f13. +// +// Solidity: function addOwnerWithThreshold(address owner, uint256 _threshold) returns() +func (_GnosisSafe *GnosisSafeTransactorSession) AddOwnerWithThreshold(owner common.Address, _threshold *big.Int) (*types.Transaction, error) { + return _GnosisSafe.Contract.AddOwnerWithThreshold(&_GnosisSafe.TransactOpts, owner, _threshold) +} + +// ApproveHash is a paid mutator transaction binding the contract method 0xd4d9bdcd. +// +// Solidity: function approveHash(bytes32 hashToApprove) returns() +func (_GnosisSafe *GnosisSafeTransactor) ApproveHash(opts *bind.TransactOpts, hashToApprove [32]byte) (*types.Transaction, error) { + return _GnosisSafe.contract.Transact(opts, "approveHash", hashToApprove) +} + +// ApproveHash is a paid mutator transaction binding the contract method 0xd4d9bdcd. +// +// Solidity: function approveHash(bytes32 hashToApprove) returns() +func (_GnosisSafe *GnosisSafeSession) ApproveHash(hashToApprove [32]byte) (*types.Transaction, error) { + return _GnosisSafe.Contract.ApproveHash(&_GnosisSafe.TransactOpts, hashToApprove) +} + +// ApproveHash is a paid mutator transaction binding the contract method 0xd4d9bdcd. +// +// Solidity: function approveHash(bytes32 hashToApprove) returns() +func (_GnosisSafe *GnosisSafeTransactorSession) ApproveHash(hashToApprove [32]byte) (*types.Transaction, error) { + return _GnosisSafe.Contract.ApproveHash(&_GnosisSafe.TransactOpts, hashToApprove) +} + +// ChangeThreshold is a paid mutator transaction binding the contract method 0x694e80c3. +// +// Solidity: function changeThreshold(uint256 _threshold) returns() +func (_GnosisSafe *GnosisSafeTransactor) ChangeThreshold(opts *bind.TransactOpts, _threshold *big.Int) (*types.Transaction, error) { + return _GnosisSafe.contract.Transact(opts, "changeThreshold", _threshold) +} + +// ChangeThreshold is a paid mutator transaction binding the contract method 0x694e80c3. +// +// Solidity: function changeThreshold(uint256 _threshold) returns() +func (_GnosisSafe *GnosisSafeSession) ChangeThreshold(_threshold *big.Int) (*types.Transaction, error) { + return _GnosisSafe.Contract.ChangeThreshold(&_GnosisSafe.TransactOpts, _threshold) +} + +// ChangeThreshold is a paid mutator transaction binding the contract method 0x694e80c3. +// +// Solidity: function changeThreshold(uint256 _threshold) returns() +func (_GnosisSafe *GnosisSafeTransactorSession) ChangeThreshold(_threshold *big.Int) (*types.Transaction, error) { + return _GnosisSafe.Contract.ChangeThreshold(&_GnosisSafe.TransactOpts, _threshold) +} + +// DisableModule is a paid mutator transaction binding the contract method 0xe009cfde. +// +// Solidity: function disableModule(address prevModule, address module) returns() +func (_GnosisSafe *GnosisSafeTransactor) DisableModule(opts *bind.TransactOpts, prevModule common.Address, module common.Address) (*types.Transaction, error) { + return _GnosisSafe.contract.Transact(opts, "disableModule", prevModule, module) +} + +// DisableModule is a paid mutator transaction binding the contract method 0xe009cfde. +// +// Solidity: function disableModule(address prevModule, address module) returns() +func (_GnosisSafe *GnosisSafeSession) DisableModule(prevModule common.Address, module common.Address) (*types.Transaction, error) { + return _GnosisSafe.Contract.DisableModule(&_GnosisSafe.TransactOpts, prevModule, module) +} + +// DisableModule is a paid mutator transaction binding the contract method 0xe009cfde. +// +// Solidity: function disableModule(address prevModule, address module) returns() +func (_GnosisSafe *GnosisSafeTransactorSession) DisableModule(prevModule common.Address, module common.Address) (*types.Transaction, error) { + return _GnosisSafe.Contract.DisableModule(&_GnosisSafe.TransactOpts, prevModule, module) +} + +// EnableModule is a paid mutator transaction binding the contract method 0x610b5925. +// +// Solidity: function enableModule(address module) returns() +func (_GnosisSafe *GnosisSafeTransactor) EnableModule(opts *bind.TransactOpts, module common.Address) (*types.Transaction, error) { + return _GnosisSafe.contract.Transact(opts, "enableModule", module) +} + +// EnableModule is a paid mutator transaction binding the contract method 0x610b5925. +// +// Solidity: function enableModule(address module) returns() +func (_GnosisSafe *GnosisSafeSession) EnableModule(module common.Address) (*types.Transaction, error) { + return _GnosisSafe.Contract.EnableModule(&_GnosisSafe.TransactOpts, module) +} + +// EnableModule is a paid mutator transaction binding the contract method 0x610b5925. +// +// Solidity: function enableModule(address module) returns() +func (_GnosisSafe *GnosisSafeTransactorSession) EnableModule(module common.Address) (*types.Transaction, error) { + return _GnosisSafe.Contract.EnableModule(&_GnosisSafe.TransactOpts, module) +} + +// ExecTransaction is a paid mutator transaction binding the contract method 0x6a761202. +// +// Solidity: function execTransaction(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, bytes signatures) payable returns(bool success) +func (_GnosisSafe *GnosisSafeTransactor) ExecTransaction(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, signatures []byte) (*types.Transaction, error) { + return _GnosisSafe.contract.Transact(opts, "execTransaction", to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, signatures) +} + +// ExecTransaction is a paid mutator transaction binding the contract method 0x6a761202. +// +// Solidity: function execTransaction(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, bytes signatures) payable returns(bool success) +func (_GnosisSafe *GnosisSafeSession) ExecTransaction(to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, signatures []byte) (*types.Transaction, error) { + return _GnosisSafe.Contract.ExecTransaction(&_GnosisSafe.TransactOpts, to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, signatures) +} + +// ExecTransaction is a paid mutator transaction binding the contract method 0x6a761202. +// +// Solidity: function execTransaction(address to, uint256 value, bytes data, uint8 operation, uint256 safeTxGas, uint256 baseGas, uint256 gasPrice, address gasToken, address refundReceiver, bytes signatures) payable returns(bool success) +func (_GnosisSafe *GnosisSafeTransactorSession) ExecTransaction(to common.Address, value *big.Int, data []byte, operation uint8, safeTxGas *big.Int, baseGas *big.Int, gasPrice *big.Int, gasToken common.Address, refundReceiver common.Address, signatures []byte) (*types.Transaction, error) { + return _GnosisSafe.Contract.ExecTransaction(&_GnosisSafe.TransactOpts, to, value, data, operation, safeTxGas, baseGas, gasPrice, gasToken, refundReceiver, signatures) +} + +// ExecTransactionFromModule is a paid mutator transaction binding the contract method 0x468721a7. +// +// Solidity: function execTransactionFromModule(address to, uint256 value, bytes data, uint8 operation) returns(bool success) +func (_GnosisSafe *GnosisSafeTransactor) ExecTransactionFromModule(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte, operation uint8) (*types.Transaction, error) { + return _GnosisSafe.contract.Transact(opts, "execTransactionFromModule", to, value, data, operation) +} + +// ExecTransactionFromModule is a paid mutator transaction binding the contract method 0x468721a7. +// +// Solidity: function execTransactionFromModule(address to, uint256 value, bytes data, uint8 operation) returns(bool success) +func (_GnosisSafe *GnosisSafeSession) ExecTransactionFromModule(to common.Address, value *big.Int, data []byte, operation uint8) (*types.Transaction, error) { + return _GnosisSafe.Contract.ExecTransactionFromModule(&_GnosisSafe.TransactOpts, to, value, data, operation) +} + +// ExecTransactionFromModule is a paid mutator transaction binding the contract method 0x468721a7. +// +// Solidity: function execTransactionFromModule(address to, uint256 value, bytes data, uint8 operation) returns(bool success) +func (_GnosisSafe *GnosisSafeTransactorSession) ExecTransactionFromModule(to common.Address, value *big.Int, data []byte, operation uint8) (*types.Transaction, error) { + return _GnosisSafe.Contract.ExecTransactionFromModule(&_GnosisSafe.TransactOpts, to, value, data, operation) +} + +// ExecTransactionFromModuleReturnData is a paid mutator transaction binding the contract method 0x5229073f. +// +// Solidity: function execTransactionFromModuleReturnData(address to, uint256 value, bytes data, uint8 operation) returns(bool success, bytes returnData) +func (_GnosisSafe *GnosisSafeTransactor) ExecTransactionFromModuleReturnData(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte, operation uint8) (*types.Transaction, error) { + return _GnosisSafe.contract.Transact(opts, "execTransactionFromModuleReturnData", to, value, data, operation) +} + +// ExecTransactionFromModuleReturnData is a paid mutator transaction binding the contract method 0x5229073f. +// +// Solidity: function execTransactionFromModuleReturnData(address to, uint256 value, bytes data, uint8 operation) returns(bool success, bytes returnData) +func (_GnosisSafe *GnosisSafeSession) ExecTransactionFromModuleReturnData(to common.Address, value *big.Int, data []byte, operation uint8) (*types.Transaction, error) { + return _GnosisSafe.Contract.ExecTransactionFromModuleReturnData(&_GnosisSafe.TransactOpts, to, value, data, operation) +} + +// ExecTransactionFromModuleReturnData is a paid mutator transaction binding the contract method 0x5229073f. +// +// Solidity: function execTransactionFromModuleReturnData(address to, uint256 value, bytes data, uint8 operation) returns(bool success, bytes returnData) +func (_GnosisSafe *GnosisSafeTransactorSession) ExecTransactionFromModuleReturnData(to common.Address, value *big.Int, data []byte, operation uint8) (*types.Transaction, error) { + return _GnosisSafe.Contract.ExecTransactionFromModuleReturnData(&_GnosisSafe.TransactOpts, to, value, data, operation) +} + +// RemoveOwner is a paid mutator transaction binding the contract method 0xf8dc5dd9. +// +// Solidity: function removeOwner(address prevOwner, address owner, uint256 _threshold) returns() +func (_GnosisSafe *GnosisSafeTransactor) RemoveOwner(opts *bind.TransactOpts, prevOwner common.Address, owner common.Address, _threshold *big.Int) (*types.Transaction, error) { + return _GnosisSafe.contract.Transact(opts, "removeOwner", prevOwner, owner, _threshold) +} + +// RemoveOwner is a paid mutator transaction binding the contract method 0xf8dc5dd9. +// +// Solidity: function removeOwner(address prevOwner, address owner, uint256 _threshold) returns() +func (_GnosisSafe *GnosisSafeSession) RemoveOwner(prevOwner common.Address, owner common.Address, _threshold *big.Int) (*types.Transaction, error) { + return _GnosisSafe.Contract.RemoveOwner(&_GnosisSafe.TransactOpts, prevOwner, owner, _threshold) +} + +// RemoveOwner is a paid mutator transaction binding the contract method 0xf8dc5dd9. +// +// Solidity: function removeOwner(address prevOwner, address owner, uint256 _threshold) returns() +func (_GnosisSafe *GnosisSafeTransactorSession) RemoveOwner(prevOwner common.Address, owner common.Address, _threshold *big.Int) (*types.Transaction, error) { + return _GnosisSafe.Contract.RemoveOwner(&_GnosisSafe.TransactOpts, prevOwner, owner, _threshold) +} + +// RequiredTxGas is a paid mutator transaction binding the contract method 0xc4ca3a9c. +// +// Solidity: function requiredTxGas(address to, uint256 value, bytes data, uint8 operation) returns(uint256) +func (_GnosisSafe *GnosisSafeTransactor) RequiredTxGas(opts *bind.TransactOpts, to common.Address, value *big.Int, data []byte, operation uint8) (*types.Transaction, error) { + return _GnosisSafe.contract.Transact(opts, "requiredTxGas", to, value, data, operation) +} + +// RequiredTxGas is a paid mutator transaction binding the contract method 0xc4ca3a9c. +// +// Solidity: function requiredTxGas(address to, uint256 value, bytes data, uint8 operation) returns(uint256) +func (_GnosisSafe *GnosisSafeSession) RequiredTxGas(to common.Address, value *big.Int, data []byte, operation uint8) (*types.Transaction, error) { + return _GnosisSafe.Contract.RequiredTxGas(&_GnosisSafe.TransactOpts, to, value, data, operation) +} + +// RequiredTxGas is a paid mutator transaction binding the contract method 0xc4ca3a9c. +// +// Solidity: function requiredTxGas(address to, uint256 value, bytes data, uint8 operation) returns(uint256) +func (_GnosisSafe *GnosisSafeTransactorSession) RequiredTxGas(to common.Address, value *big.Int, data []byte, operation uint8) (*types.Transaction, error) { + return _GnosisSafe.Contract.RequiredTxGas(&_GnosisSafe.TransactOpts, to, value, data, operation) +} + +// SetFallbackHandler is a paid mutator transaction binding the contract method 0xf08a0323. +// +// Solidity: function setFallbackHandler(address handler) returns() +func (_GnosisSafe *GnosisSafeTransactor) SetFallbackHandler(opts *bind.TransactOpts, handler common.Address) (*types.Transaction, error) { + return _GnosisSafe.contract.Transact(opts, "setFallbackHandler", handler) +} + +// SetFallbackHandler is a paid mutator transaction binding the contract method 0xf08a0323. +// +// Solidity: function setFallbackHandler(address handler) returns() +func (_GnosisSafe *GnosisSafeSession) SetFallbackHandler(handler common.Address) (*types.Transaction, error) { + return _GnosisSafe.Contract.SetFallbackHandler(&_GnosisSafe.TransactOpts, handler) +} + +// SetFallbackHandler is a paid mutator transaction binding the contract method 0xf08a0323. +// +// Solidity: function setFallbackHandler(address handler) returns() +func (_GnosisSafe *GnosisSafeTransactorSession) SetFallbackHandler(handler common.Address) (*types.Transaction, error) { + return _GnosisSafe.Contract.SetFallbackHandler(&_GnosisSafe.TransactOpts, handler) +} + +// SetGuard is a paid mutator transaction binding the contract method 0xe19a9dd9. +// +// Solidity: function setGuard(address guard) returns() +func (_GnosisSafe *GnosisSafeTransactor) SetGuard(opts *bind.TransactOpts, guard common.Address) (*types.Transaction, error) { + return _GnosisSafe.contract.Transact(opts, "setGuard", guard) +} + +// SetGuard is a paid mutator transaction binding the contract method 0xe19a9dd9. +// +// Solidity: function setGuard(address guard) returns() +func (_GnosisSafe *GnosisSafeSession) SetGuard(guard common.Address) (*types.Transaction, error) { + return _GnosisSafe.Contract.SetGuard(&_GnosisSafe.TransactOpts, guard) +} + +// SetGuard is a paid mutator transaction binding the contract method 0xe19a9dd9. +// +// Solidity: function setGuard(address guard) returns() +func (_GnosisSafe *GnosisSafeTransactorSession) SetGuard(guard common.Address) (*types.Transaction, error) { + return _GnosisSafe.Contract.SetGuard(&_GnosisSafe.TransactOpts, guard) +} + +// Setup is a paid mutator transaction binding the contract method 0xb63e800d. +// +// Solidity: function setup(address[] _owners, uint256 _threshold, address to, bytes data, address fallbackHandler, address paymentToken, uint256 payment, address paymentReceiver) returns() +func (_GnosisSafe *GnosisSafeTransactor) Setup(opts *bind.TransactOpts, _owners []common.Address, _threshold *big.Int, to common.Address, data []byte, fallbackHandler common.Address, paymentToken common.Address, payment *big.Int, paymentReceiver common.Address) (*types.Transaction, error) { + return _GnosisSafe.contract.Transact(opts, "setup", _owners, _threshold, to, data, fallbackHandler, paymentToken, payment, paymentReceiver) +} + +// Setup is a paid mutator transaction binding the contract method 0xb63e800d. +// +// Solidity: function setup(address[] _owners, uint256 _threshold, address to, bytes data, address fallbackHandler, address paymentToken, uint256 payment, address paymentReceiver) returns() +func (_GnosisSafe *GnosisSafeSession) Setup(_owners []common.Address, _threshold *big.Int, to common.Address, data []byte, fallbackHandler common.Address, paymentToken common.Address, payment *big.Int, paymentReceiver common.Address) (*types.Transaction, error) { + return _GnosisSafe.Contract.Setup(&_GnosisSafe.TransactOpts, _owners, _threshold, to, data, fallbackHandler, paymentToken, payment, paymentReceiver) +} + +// Setup is a paid mutator transaction binding the contract method 0xb63e800d. +// +// Solidity: function setup(address[] _owners, uint256 _threshold, address to, bytes data, address fallbackHandler, address paymentToken, uint256 payment, address paymentReceiver) returns() +func (_GnosisSafe *GnosisSafeTransactorSession) Setup(_owners []common.Address, _threshold *big.Int, to common.Address, data []byte, fallbackHandler common.Address, paymentToken common.Address, payment *big.Int, paymentReceiver common.Address) (*types.Transaction, error) { + return _GnosisSafe.Contract.Setup(&_GnosisSafe.TransactOpts, _owners, _threshold, to, data, fallbackHandler, paymentToken, payment, paymentReceiver) +} + +// SimulateAndRevert is a paid mutator transaction binding the contract method 0xb4faba09. +// +// Solidity: function simulateAndRevert(address targetContract, bytes calldataPayload) returns() +func (_GnosisSafe *GnosisSafeTransactor) SimulateAndRevert(opts *bind.TransactOpts, targetContract common.Address, calldataPayload []byte) (*types.Transaction, error) { + return _GnosisSafe.contract.Transact(opts, "simulateAndRevert", targetContract, calldataPayload) +} + +// SimulateAndRevert is a paid mutator transaction binding the contract method 0xb4faba09. +// +// Solidity: function simulateAndRevert(address targetContract, bytes calldataPayload) returns() +func (_GnosisSafe *GnosisSafeSession) SimulateAndRevert(targetContract common.Address, calldataPayload []byte) (*types.Transaction, error) { + return _GnosisSafe.Contract.SimulateAndRevert(&_GnosisSafe.TransactOpts, targetContract, calldataPayload) +} + +// SimulateAndRevert is a paid mutator transaction binding the contract method 0xb4faba09. +// +// Solidity: function simulateAndRevert(address targetContract, bytes calldataPayload) returns() +func (_GnosisSafe *GnosisSafeTransactorSession) SimulateAndRevert(targetContract common.Address, calldataPayload []byte) (*types.Transaction, error) { + return _GnosisSafe.Contract.SimulateAndRevert(&_GnosisSafe.TransactOpts, targetContract, calldataPayload) +} + +// SwapOwner is a paid mutator transaction binding the contract method 0xe318b52b. +// +// Solidity: function swapOwner(address prevOwner, address oldOwner, address newOwner) returns() +func (_GnosisSafe *GnosisSafeTransactor) SwapOwner(opts *bind.TransactOpts, prevOwner common.Address, oldOwner common.Address, newOwner common.Address) (*types.Transaction, error) { + return _GnosisSafe.contract.Transact(opts, "swapOwner", prevOwner, oldOwner, newOwner) +} + +// SwapOwner is a paid mutator transaction binding the contract method 0xe318b52b. +// +// Solidity: function swapOwner(address prevOwner, address oldOwner, address newOwner) returns() +func (_GnosisSafe *GnosisSafeSession) SwapOwner(prevOwner common.Address, oldOwner common.Address, newOwner common.Address) (*types.Transaction, error) { + return _GnosisSafe.Contract.SwapOwner(&_GnosisSafe.TransactOpts, prevOwner, oldOwner, newOwner) +} + +// SwapOwner is a paid mutator transaction binding the contract method 0xe318b52b. +// +// Solidity: function swapOwner(address prevOwner, address oldOwner, address newOwner) returns() +func (_GnosisSafe *GnosisSafeTransactorSession) SwapOwner(prevOwner common.Address, oldOwner common.Address, newOwner common.Address) (*types.Transaction, error) { + return _GnosisSafe.Contract.SwapOwner(&_GnosisSafe.TransactOpts, prevOwner, oldOwner, newOwner) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() returns() +func (_GnosisSafe *GnosisSafeTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _GnosisSafe.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() returns() +func (_GnosisSafe *GnosisSafeSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _GnosisSafe.Contract.Fallback(&_GnosisSafe.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() returns() +func (_GnosisSafe *GnosisSafeTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _GnosisSafe.Contract.Fallback(&_GnosisSafe.TransactOpts, calldata) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_GnosisSafe *GnosisSafeTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _GnosisSafe.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_GnosisSafe *GnosisSafeSession) Receive() (*types.Transaction, error) { + return _GnosisSafe.Contract.Receive(&_GnosisSafe.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_GnosisSafe *GnosisSafeTransactorSession) Receive() (*types.Transaction, error) { + return _GnosisSafe.Contract.Receive(&_GnosisSafe.TransactOpts) +} + +// GnosisSafeAddedOwnerIterator is returned from FilterAddedOwner and is used to iterate over the raw logs and unpacked data for AddedOwner events raised by the GnosisSafe contract. +type GnosisSafeAddedOwnerIterator struct { + Event *GnosisSafeAddedOwner // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GnosisSafeAddedOwnerIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GnosisSafeAddedOwner) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GnosisSafeAddedOwner) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GnosisSafeAddedOwnerIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GnosisSafeAddedOwnerIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GnosisSafeAddedOwner represents a AddedOwner event raised by the GnosisSafe contract. +type GnosisSafeAddedOwner struct { + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAddedOwner is a free log retrieval operation binding the contract event 0x9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea26. +// +// Solidity: event AddedOwner(address owner) +func (_GnosisSafe *GnosisSafeFilterer) FilterAddedOwner(opts *bind.FilterOpts) (*GnosisSafeAddedOwnerIterator, error) { + + logs, sub, err := _GnosisSafe.contract.FilterLogs(opts, "AddedOwner") + if err != nil { + return nil, err + } + return &GnosisSafeAddedOwnerIterator{contract: _GnosisSafe.contract, event: "AddedOwner", logs: logs, sub: sub}, nil +} + +// WatchAddedOwner is a free log subscription operation binding the contract event 0x9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea26. +// +// Solidity: event AddedOwner(address owner) +func (_GnosisSafe *GnosisSafeFilterer) WatchAddedOwner(opts *bind.WatchOpts, sink chan<- *GnosisSafeAddedOwner) (event.Subscription, error) { + + logs, sub, err := _GnosisSafe.contract.WatchLogs(opts, "AddedOwner") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GnosisSafeAddedOwner) + if err := _GnosisSafe.contract.UnpackLog(event, "AddedOwner", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseAddedOwner is a log parse operation binding the contract event 0x9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea26. +// +// Solidity: event AddedOwner(address owner) +func (_GnosisSafe *GnosisSafeFilterer) ParseAddedOwner(log types.Log) (*GnosisSafeAddedOwner, error) { + event := new(GnosisSafeAddedOwner) + if err := _GnosisSafe.contract.UnpackLog(event, "AddedOwner", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GnosisSafeApproveHashIterator is returned from FilterApproveHash and is used to iterate over the raw logs and unpacked data for ApproveHash events raised by the GnosisSafe contract. +type GnosisSafeApproveHashIterator struct { + Event *GnosisSafeApproveHash // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GnosisSafeApproveHashIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GnosisSafeApproveHash) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GnosisSafeApproveHash) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GnosisSafeApproveHashIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GnosisSafeApproveHashIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GnosisSafeApproveHash represents a ApproveHash event raised by the GnosisSafe contract. +type GnosisSafeApproveHash struct { + ApprovedHash [32]byte + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproveHash is a free log retrieval operation binding the contract event 0xf2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c. +// +// Solidity: event ApproveHash(bytes32 indexed approvedHash, address indexed owner) +func (_GnosisSafe *GnosisSafeFilterer) FilterApproveHash(opts *bind.FilterOpts, approvedHash [][32]byte, owner []common.Address) (*GnosisSafeApproveHashIterator, error) { + + var approvedHashRule []interface{} + for _, approvedHashItem := range approvedHash { + approvedHashRule = append(approvedHashRule, approvedHashItem) + } + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _GnosisSafe.contract.FilterLogs(opts, "ApproveHash", approvedHashRule, ownerRule) + if err != nil { + return nil, err + } + return &GnosisSafeApproveHashIterator{contract: _GnosisSafe.contract, event: "ApproveHash", logs: logs, sub: sub}, nil +} + +// WatchApproveHash is a free log subscription operation binding the contract event 0xf2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c. +// +// Solidity: event ApproveHash(bytes32 indexed approvedHash, address indexed owner) +func (_GnosisSafe *GnosisSafeFilterer) WatchApproveHash(opts *bind.WatchOpts, sink chan<- *GnosisSafeApproveHash, approvedHash [][32]byte, owner []common.Address) (event.Subscription, error) { + + var approvedHashRule []interface{} + for _, approvedHashItem := range approvedHash { + approvedHashRule = append(approvedHashRule, approvedHashItem) + } + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + + logs, sub, err := _GnosisSafe.contract.WatchLogs(opts, "ApproveHash", approvedHashRule, ownerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GnosisSafeApproveHash) + if err := _GnosisSafe.contract.UnpackLog(event, "ApproveHash", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseApproveHash is a log parse operation binding the contract event 0xf2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c. +// +// Solidity: event ApproveHash(bytes32 indexed approvedHash, address indexed owner) +func (_GnosisSafe *GnosisSafeFilterer) ParseApproveHash(log types.Log) (*GnosisSafeApproveHash, error) { + event := new(GnosisSafeApproveHash) + if err := _GnosisSafe.contract.UnpackLog(event, "ApproveHash", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GnosisSafeChangedFallbackHandlerIterator is returned from FilterChangedFallbackHandler and is used to iterate over the raw logs and unpacked data for ChangedFallbackHandler events raised by the GnosisSafe contract. +type GnosisSafeChangedFallbackHandlerIterator struct { + Event *GnosisSafeChangedFallbackHandler // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GnosisSafeChangedFallbackHandlerIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GnosisSafeChangedFallbackHandler) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GnosisSafeChangedFallbackHandler) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GnosisSafeChangedFallbackHandlerIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GnosisSafeChangedFallbackHandlerIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GnosisSafeChangedFallbackHandler represents a ChangedFallbackHandler event raised by the GnosisSafe contract. +type GnosisSafeChangedFallbackHandler struct { + Handler common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChangedFallbackHandler is a free log retrieval operation binding the contract event 0x5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b0. +// +// Solidity: event ChangedFallbackHandler(address handler) +func (_GnosisSafe *GnosisSafeFilterer) FilterChangedFallbackHandler(opts *bind.FilterOpts) (*GnosisSafeChangedFallbackHandlerIterator, error) { + + logs, sub, err := _GnosisSafe.contract.FilterLogs(opts, "ChangedFallbackHandler") + if err != nil { + return nil, err + } + return &GnosisSafeChangedFallbackHandlerIterator{contract: _GnosisSafe.contract, event: "ChangedFallbackHandler", logs: logs, sub: sub}, nil +} + +// WatchChangedFallbackHandler is a free log subscription operation binding the contract event 0x5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b0. +// +// Solidity: event ChangedFallbackHandler(address handler) +func (_GnosisSafe *GnosisSafeFilterer) WatchChangedFallbackHandler(opts *bind.WatchOpts, sink chan<- *GnosisSafeChangedFallbackHandler) (event.Subscription, error) { + + logs, sub, err := _GnosisSafe.contract.WatchLogs(opts, "ChangedFallbackHandler") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GnosisSafeChangedFallbackHandler) + if err := _GnosisSafe.contract.UnpackLog(event, "ChangedFallbackHandler", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseChangedFallbackHandler is a log parse operation binding the contract event 0x5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b0. +// +// Solidity: event ChangedFallbackHandler(address handler) +func (_GnosisSafe *GnosisSafeFilterer) ParseChangedFallbackHandler(log types.Log) (*GnosisSafeChangedFallbackHandler, error) { + event := new(GnosisSafeChangedFallbackHandler) + if err := _GnosisSafe.contract.UnpackLog(event, "ChangedFallbackHandler", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GnosisSafeChangedGuardIterator is returned from FilterChangedGuard and is used to iterate over the raw logs and unpacked data for ChangedGuard events raised by the GnosisSafe contract. +type GnosisSafeChangedGuardIterator struct { + Event *GnosisSafeChangedGuard // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GnosisSafeChangedGuardIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GnosisSafeChangedGuard) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GnosisSafeChangedGuard) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GnosisSafeChangedGuardIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GnosisSafeChangedGuardIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GnosisSafeChangedGuard represents a ChangedGuard event raised by the GnosisSafe contract. +type GnosisSafeChangedGuard struct { + Guard common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChangedGuard is a free log retrieval operation binding the contract event 0x1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2. +// +// Solidity: event ChangedGuard(address guard) +func (_GnosisSafe *GnosisSafeFilterer) FilterChangedGuard(opts *bind.FilterOpts) (*GnosisSafeChangedGuardIterator, error) { + + logs, sub, err := _GnosisSafe.contract.FilterLogs(opts, "ChangedGuard") + if err != nil { + return nil, err + } + return &GnosisSafeChangedGuardIterator{contract: _GnosisSafe.contract, event: "ChangedGuard", logs: logs, sub: sub}, nil +} + +// WatchChangedGuard is a free log subscription operation binding the contract event 0x1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2. +// +// Solidity: event ChangedGuard(address guard) +func (_GnosisSafe *GnosisSafeFilterer) WatchChangedGuard(opts *bind.WatchOpts, sink chan<- *GnosisSafeChangedGuard) (event.Subscription, error) { + + logs, sub, err := _GnosisSafe.contract.WatchLogs(opts, "ChangedGuard") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GnosisSafeChangedGuard) + if err := _GnosisSafe.contract.UnpackLog(event, "ChangedGuard", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseChangedGuard is a log parse operation binding the contract event 0x1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2. +// +// Solidity: event ChangedGuard(address guard) +func (_GnosisSafe *GnosisSafeFilterer) ParseChangedGuard(log types.Log) (*GnosisSafeChangedGuard, error) { + event := new(GnosisSafeChangedGuard) + if err := _GnosisSafe.contract.UnpackLog(event, "ChangedGuard", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GnosisSafeChangedThresholdIterator is returned from FilterChangedThreshold and is used to iterate over the raw logs and unpacked data for ChangedThreshold events raised by the GnosisSafe contract. +type GnosisSafeChangedThresholdIterator struct { + Event *GnosisSafeChangedThreshold // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GnosisSafeChangedThresholdIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GnosisSafeChangedThreshold) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GnosisSafeChangedThreshold) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GnosisSafeChangedThresholdIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GnosisSafeChangedThresholdIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GnosisSafeChangedThreshold represents a ChangedThreshold event raised by the GnosisSafe contract. +type GnosisSafeChangedThreshold struct { + Threshold *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChangedThreshold is a free log retrieval operation binding the contract event 0x610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c93. +// +// Solidity: event ChangedThreshold(uint256 threshold) +func (_GnosisSafe *GnosisSafeFilterer) FilterChangedThreshold(opts *bind.FilterOpts) (*GnosisSafeChangedThresholdIterator, error) { + + logs, sub, err := _GnosisSafe.contract.FilterLogs(opts, "ChangedThreshold") + if err != nil { + return nil, err + } + return &GnosisSafeChangedThresholdIterator{contract: _GnosisSafe.contract, event: "ChangedThreshold", logs: logs, sub: sub}, nil +} + +// WatchChangedThreshold is a free log subscription operation binding the contract event 0x610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c93. +// +// Solidity: event ChangedThreshold(uint256 threshold) +func (_GnosisSafe *GnosisSafeFilterer) WatchChangedThreshold(opts *bind.WatchOpts, sink chan<- *GnosisSafeChangedThreshold) (event.Subscription, error) { + + logs, sub, err := _GnosisSafe.contract.WatchLogs(opts, "ChangedThreshold") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GnosisSafeChangedThreshold) + if err := _GnosisSafe.contract.UnpackLog(event, "ChangedThreshold", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseChangedThreshold is a log parse operation binding the contract event 0x610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c93. +// +// Solidity: event ChangedThreshold(uint256 threshold) +func (_GnosisSafe *GnosisSafeFilterer) ParseChangedThreshold(log types.Log) (*GnosisSafeChangedThreshold, error) { + event := new(GnosisSafeChangedThreshold) + if err := _GnosisSafe.contract.UnpackLog(event, "ChangedThreshold", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GnosisSafeDisabledModuleIterator is returned from FilterDisabledModule and is used to iterate over the raw logs and unpacked data for DisabledModule events raised by the GnosisSafe contract. +type GnosisSafeDisabledModuleIterator struct { + Event *GnosisSafeDisabledModule // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GnosisSafeDisabledModuleIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GnosisSafeDisabledModule) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GnosisSafeDisabledModule) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GnosisSafeDisabledModuleIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GnosisSafeDisabledModuleIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GnosisSafeDisabledModule represents a DisabledModule event raised by the GnosisSafe contract. +type GnosisSafeDisabledModule struct { + Module common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDisabledModule is a free log retrieval operation binding the contract event 0xaab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276. +// +// Solidity: event DisabledModule(address module) +func (_GnosisSafe *GnosisSafeFilterer) FilterDisabledModule(opts *bind.FilterOpts) (*GnosisSafeDisabledModuleIterator, error) { + + logs, sub, err := _GnosisSafe.contract.FilterLogs(opts, "DisabledModule") + if err != nil { + return nil, err + } + return &GnosisSafeDisabledModuleIterator{contract: _GnosisSafe.contract, event: "DisabledModule", logs: logs, sub: sub}, nil +} + +// WatchDisabledModule is a free log subscription operation binding the contract event 0xaab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276. +// +// Solidity: event DisabledModule(address module) +func (_GnosisSafe *GnosisSafeFilterer) WatchDisabledModule(opts *bind.WatchOpts, sink chan<- *GnosisSafeDisabledModule) (event.Subscription, error) { + + logs, sub, err := _GnosisSafe.contract.WatchLogs(opts, "DisabledModule") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GnosisSafeDisabledModule) + if err := _GnosisSafe.contract.UnpackLog(event, "DisabledModule", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseDisabledModule is a log parse operation binding the contract event 0xaab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276. +// +// Solidity: event DisabledModule(address module) +func (_GnosisSafe *GnosisSafeFilterer) ParseDisabledModule(log types.Log) (*GnosisSafeDisabledModule, error) { + event := new(GnosisSafeDisabledModule) + if err := _GnosisSafe.contract.UnpackLog(event, "DisabledModule", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GnosisSafeEnabledModuleIterator is returned from FilterEnabledModule and is used to iterate over the raw logs and unpacked data for EnabledModule events raised by the GnosisSafe contract. +type GnosisSafeEnabledModuleIterator struct { + Event *GnosisSafeEnabledModule // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GnosisSafeEnabledModuleIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GnosisSafeEnabledModule) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GnosisSafeEnabledModule) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GnosisSafeEnabledModuleIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GnosisSafeEnabledModuleIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GnosisSafeEnabledModule represents a EnabledModule event raised by the GnosisSafe contract. +type GnosisSafeEnabledModule struct { + Module common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterEnabledModule is a free log retrieval operation binding the contract event 0xecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440. +// +// Solidity: event EnabledModule(address module) +func (_GnosisSafe *GnosisSafeFilterer) FilterEnabledModule(opts *bind.FilterOpts) (*GnosisSafeEnabledModuleIterator, error) { + + logs, sub, err := _GnosisSafe.contract.FilterLogs(opts, "EnabledModule") + if err != nil { + return nil, err + } + return &GnosisSafeEnabledModuleIterator{contract: _GnosisSafe.contract, event: "EnabledModule", logs: logs, sub: sub}, nil +} + +// WatchEnabledModule is a free log subscription operation binding the contract event 0xecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440. +// +// Solidity: event EnabledModule(address module) +func (_GnosisSafe *GnosisSafeFilterer) WatchEnabledModule(opts *bind.WatchOpts, sink chan<- *GnosisSafeEnabledModule) (event.Subscription, error) { + + logs, sub, err := _GnosisSafe.contract.WatchLogs(opts, "EnabledModule") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GnosisSafeEnabledModule) + if err := _GnosisSafe.contract.UnpackLog(event, "EnabledModule", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseEnabledModule is a log parse operation binding the contract event 0xecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f8440. +// +// Solidity: event EnabledModule(address module) +func (_GnosisSafe *GnosisSafeFilterer) ParseEnabledModule(log types.Log) (*GnosisSafeEnabledModule, error) { + event := new(GnosisSafeEnabledModule) + if err := _GnosisSafe.contract.UnpackLog(event, "EnabledModule", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GnosisSafeExecutionFailureIterator is returned from FilterExecutionFailure and is used to iterate over the raw logs and unpacked data for ExecutionFailure events raised by the GnosisSafe contract. +type GnosisSafeExecutionFailureIterator struct { + Event *GnosisSafeExecutionFailure // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GnosisSafeExecutionFailureIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GnosisSafeExecutionFailure) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GnosisSafeExecutionFailure) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GnosisSafeExecutionFailureIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GnosisSafeExecutionFailureIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GnosisSafeExecutionFailure represents a ExecutionFailure event raised by the GnosisSafe contract. +type GnosisSafeExecutionFailure struct { + TxHash [32]byte + Payment *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecutionFailure is a free log retrieval operation binding the contract event 0x23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23. +// +// Solidity: event ExecutionFailure(bytes32 txHash, uint256 payment) +func (_GnosisSafe *GnosisSafeFilterer) FilterExecutionFailure(opts *bind.FilterOpts) (*GnosisSafeExecutionFailureIterator, error) { + + logs, sub, err := _GnosisSafe.contract.FilterLogs(opts, "ExecutionFailure") + if err != nil { + return nil, err + } + return &GnosisSafeExecutionFailureIterator{contract: _GnosisSafe.contract, event: "ExecutionFailure", logs: logs, sub: sub}, nil +} + +// WatchExecutionFailure is a free log subscription operation binding the contract event 0x23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23. +// +// Solidity: event ExecutionFailure(bytes32 txHash, uint256 payment) +func (_GnosisSafe *GnosisSafeFilterer) WatchExecutionFailure(opts *bind.WatchOpts, sink chan<- *GnosisSafeExecutionFailure) (event.Subscription, error) { + + logs, sub, err := _GnosisSafe.contract.WatchLogs(opts, "ExecutionFailure") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GnosisSafeExecutionFailure) + if err := _GnosisSafe.contract.UnpackLog(event, "ExecutionFailure", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseExecutionFailure is a log parse operation binding the contract event 0x23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23. +// +// Solidity: event ExecutionFailure(bytes32 txHash, uint256 payment) +func (_GnosisSafe *GnosisSafeFilterer) ParseExecutionFailure(log types.Log) (*GnosisSafeExecutionFailure, error) { + event := new(GnosisSafeExecutionFailure) + if err := _GnosisSafe.contract.UnpackLog(event, "ExecutionFailure", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GnosisSafeExecutionFromModuleFailureIterator is returned from FilterExecutionFromModuleFailure and is used to iterate over the raw logs and unpacked data for ExecutionFromModuleFailure events raised by the GnosisSafe contract. +type GnosisSafeExecutionFromModuleFailureIterator struct { + Event *GnosisSafeExecutionFromModuleFailure // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GnosisSafeExecutionFromModuleFailureIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GnosisSafeExecutionFromModuleFailure) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GnosisSafeExecutionFromModuleFailure) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GnosisSafeExecutionFromModuleFailureIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GnosisSafeExecutionFromModuleFailureIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GnosisSafeExecutionFromModuleFailure represents a ExecutionFromModuleFailure event raised by the GnosisSafe contract. +type GnosisSafeExecutionFromModuleFailure struct { + Module common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecutionFromModuleFailure is a free log retrieval operation binding the contract event 0xacd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375. +// +// Solidity: event ExecutionFromModuleFailure(address indexed module) +func (_GnosisSafe *GnosisSafeFilterer) FilterExecutionFromModuleFailure(opts *bind.FilterOpts, module []common.Address) (*GnosisSafeExecutionFromModuleFailureIterator, error) { + + var moduleRule []interface{} + for _, moduleItem := range module { + moduleRule = append(moduleRule, moduleItem) + } + + logs, sub, err := _GnosisSafe.contract.FilterLogs(opts, "ExecutionFromModuleFailure", moduleRule) + if err != nil { + return nil, err + } + return &GnosisSafeExecutionFromModuleFailureIterator{contract: _GnosisSafe.contract, event: "ExecutionFromModuleFailure", logs: logs, sub: sub}, nil +} + +// WatchExecutionFromModuleFailure is a free log subscription operation binding the contract event 0xacd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375. +// +// Solidity: event ExecutionFromModuleFailure(address indexed module) +func (_GnosisSafe *GnosisSafeFilterer) WatchExecutionFromModuleFailure(opts *bind.WatchOpts, sink chan<- *GnosisSafeExecutionFromModuleFailure, module []common.Address) (event.Subscription, error) { + + var moduleRule []interface{} + for _, moduleItem := range module { + moduleRule = append(moduleRule, moduleItem) + } + + logs, sub, err := _GnosisSafe.contract.WatchLogs(opts, "ExecutionFromModuleFailure", moduleRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GnosisSafeExecutionFromModuleFailure) + if err := _GnosisSafe.contract.UnpackLog(event, "ExecutionFromModuleFailure", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseExecutionFromModuleFailure is a log parse operation binding the contract event 0xacd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd375. +// +// Solidity: event ExecutionFromModuleFailure(address indexed module) +func (_GnosisSafe *GnosisSafeFilterer) ParseExecutionFromModuleFailure(log types.Log) (*GnosisSafeExecutionFromModuleFailure, error) { + event := new(GnosisSafeExecutionFromModuleFailure) + if err := _GnosisSafe.contract.UnpackLog(event, "ExecutionFromModuleFailure", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GnosisSafeExecutionFromModuleSuccessIterator is returned from FilterExecutionFromModuleSuccess and is used to iterate over the raw logs and unpacked data for ExecutionFromModuleSuccess events raised by the GnosisSafe contract. +type GnosisSafeExecutionFromModuleSuccessIterator struct { + Event *GnosisSafeExecutionFromModuleSuccess // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GnosisSafeExecutionFromModuleSuccessIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GnosisSafeExecutionFromModuleSuccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GnosisSafeExecutionFromModuleSuccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GnosisSafeExecutionFromModuleSuccessIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GnosisSafeExecutionFromModuleSuccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GnosisSafeExecutionFromModuleSuccess represents a ExecutionFromModuleSuccess event raised by the GnosisSafe contract. +type GnosisSafeExecutionFromModuleSuccess struct { + Module common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecutionFromModuleSuccess is a free log retrieval operation binding the contract event 0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8. +// +// Solidity: event ExecutionFromModuleSuccess(address indexed module) +func (_GnosisSafe *GnosisSafeFilterer) FilterExecutionFromModuleSuccess(opts *bind.FilterOpts, module []common.Address) (*GnosisSafeExecutionFromModuleSuccessIterator, error) { + + var moduleRule []interface{} + for _, moduleItem := range module { + moduleRule = append(moduleRule, moduleItem) + } + + logs, sub, err := _GnosisSafe.contract.FilterLogs(opts, "ExecutionFromModuleSuccess", moduleRule) + if err != nil { + return nil, err + } + return &GnosisSafeExecutionFromModuleSuccessIterator{contract: _GnosisSafe.contract, event: "ExecutionFromModuleSuccess", logs: logs, sub: sub}, nil +} + +// WatchExecutionFromModuleSuccess is a free log subscription operation binding the contract event 0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8. +// +// Solidity: event ExecutionFromModuleSuccess(address indexed module) +func (_GnosisSafe *GnosisSafeFilterer) WatchExecutionFromModuleSuccess(opts *bind.WatchOpts, sink chan<- *GnosisSafeExecutionFromModuleSuccess, module []common.Address) (event.Subscription, error) { + + var moduleRule []interface{} + for _, moduleItem := range module { + moduleRule = append(moduleRule, moduleItem) + } + + logs, sub, err := _GnosisSafe.contract.WatchLogs(opts, "ExecutionFromModuleSuccess", moduleRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GnosisSafeExecutionFromModuleSuccess) + if err := _GnosisSafe.contract.UnpackLog(event, "ExecutionFromModuleSuccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseExecutionFromModuleSuccess is a log parse operation binding the contract event 0x6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb8. +// +// Solidity: event ExecutionFromModuleSuccess(address indexed module) +func (_GnosisSafe *GnosisSafeFilterer) ParseExecutionFromModuleSuccess(log types.Log) (*GnosisSafeExecutionFromModuleSuccess, error) { + event := new(GnosisSafeExecutionFromModuleSuccess) + if err := _GnosisSafe.contract.UnpackLog(event, "ExecutionFromModuleSuccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GnosisSafeExecutionSuccessIterator is returned from FilterExecutionSuccess and is used to iterate over the raw logs and unpacked data for ExecutionSuccess events raised by the GnosisSafe contract. +type GnosisSafeExecutionSuccessIterator struct { + Event *GnosisSafeExecutionSuccess // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GnosisSafeExecutionSuccessIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GnosisSafeExecutionSuccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GnosisSafeExecutionSuccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GnosisSafeExecutionSuccessIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GnosisSafeExecutionSuccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GnosisSafeExecutionSuccess represents a ExecutionSuccess event raised by the GnosisSafe contract. +type GnosisSafeExecutionSuccess struct { + TxHash [32]byte + Payment *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterExecutionSuccess is a free log retrieval operation binding the contract event 0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e. +// +// Solidity: event ExecutionSuccess(bytes32 txHash, uint256 payment) +func (_GnosisSafe *GnosisSafeFilterer) FilterExecutionSuccess(opts *bind.FilterOpts) (*GnosisSafeExecutionSuccessIterator, error) { + + logs, sub, err := _GnosisSafe.contract.FilterLogs(opts, "ExecutionSuccess") + if err != nil { + return nil, err + } + return &GnosisSafeExecutionSuccessIterator{contract: _GnosisSafe.contract, event: "ExecutionSuccess", logs: logs, sub: sub}, nil +} + +// WatchExecutionSuccess is a free log subscription operation binding the contract event 0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e. +// +// Solidity: event ExecutionSuccess(bytes32 txHash, uint256 payment) +func (_GnosisSafe *GnosisSafeFilterer) WatchExecutionSuccess(opts *bind.WatchOpts, sink chan<- *GnosisSafeExecutionSuccess) (event.Subscription, error) { + + logs, sub, err := _GnosisSafe.contract.WatchLogs(opts, "ExecutionSuccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GnosisSafeExecutionSuccess) + if err := _GnosisSafe.contract.UnpackLog(event, "ExecutionSuccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseExecutionSuccess is a log parse operation binding the contract event 0x442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e. +// +// Solidity: event ExecutionSuccess(bytes32 txHash, uint256 payment) +func (_GnosisSafe *GnosisSafeFilterer) ParseExecutionSuccess(log types.Log) (*GnosisSafeExecutionSuccess, error) { + event := new(GnosisSafeExecutionSuccess) + if err := _GnosisSafe.contract.UnpackLog(event, "ExecutionSuccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GnosisSafeRemovedOwnerIterator is returned from FilterRemovedOwner and is used to iterate over the raw logs and unpacked data for RemovedOwner events raised by the GnosisSafe contract. +type GnosisSafeRemovedOwnerIterator struct { + Event *GnosisSafeRemovedOwner // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GnosisSafeRemovedOwnerIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GnosisSafeRemovedOwner) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GnosisSafeRemovedOwner) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GnosisSafeRemovedOwnerIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GnosisSafeRemovedOwnerIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GnosisSafeRemovedOwner represents a RemovedOwner event raised by the GnosisSafe contract. +type GnosisSafeRemovedOwner struct { + Owner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRemovedOwner is a free log retrieval operation binding the contract event 0xf8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf. +// +// Solidity: event RemovedOwner(address owner) +func (_GnosisSafe *GnosisSafeFilterer) FilterRemovedOwner(opts *bind.FilterOpts) (*GnosisSafeRemovedOwnerIterator, error) { + + logs, sub, err := _GnosisSafe.contract.FilterLogs(opts, "RemovedOwner") + if err != nil { + return nil, err + } + return &GnosisSafeRemovedOwnerIterator{contract: _GnosisSafe.contract, event: "RemovedOwner", logs: logs, sub: sub}, nil +} + +// WatchRemovedOwner is a free log subscription operation binding the contract event 0xf8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf. +// +// Solidity: event RemovedOwner(address owner) +func (_GnosisSafe *GnosisSafeFilterer) WatchRemovedOwner(opts *bind.WatchOpts, sink chan<- *GnosisSafeRemovedOwner) (event.Subscription, error) { + + logs, sub, err := _GnosisSafe.contract.WatchLogs(opts, "RemovedOwner") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GnosisSafeRemovedOwner) + if err := _GnosisSafe.contract.UnpackLog(event, "RemovedOwner", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRemovedOwner is a log parse operation binding the contract event 0xf8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf. +// +// Solidity: event RemovedOwner(address owner) +func (_GnosisSafe *GnosisSafeFilterer) ParseRemovedOwner(log types.Log) (*GnosisSafeRemovedOwner, error) { + event := new(GnosisSafeRemovedOwner) + if err := _GnosisSafe.contract.UnpackLog(event, "RemovedOwner", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GnosisSafeSafeReceivedIterator is returned from FilterSafeReceived and is used to iterate over the raw logs and unpacked data for SafeReceived events raised by the GnosisSafe contract. +type GnosisSafeSafeReceivedIterator struct { + Event *GnosisSafeSafeReceived // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GnosisSafeSafeReceivedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GnosisSafeSafeReceived) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GnosisSafeSafeReceived) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GnosisSafeSafeReceivedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GnosisSafeSafeReceivedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GnosisSafeSafeReceived represents a SafeReceived event raised by the GnosisSafe contract. +type GnosisSafeSafeReceived struct { + Sender common.Address + Value *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSafeReceived is a free log retrieval operation binding the contract event 0x3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d. +// +// Solidity: event SafeReceived(address indexed sender, uint256 value) +func (_GnosisSafe *GnosisSafeFilterer) FilterSafeReceived(opts *bind.FilterOpts, sender []common.Address) (*GnosisSafeSafeReceivedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _GnosisSafe.contract.FilterLogs(opts, "SafeReceived", senderRule) + if err != nil { + return nil, err + } + return &GnosisSafeSafeReceivedIterator{contract: _GnosisSafe.contract, event: "SafeReceived", logs: logs, sub: sub}, nil +} + +// WatchSafeReceived is a free log subscription operation binding the contract event 0x3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d. +// +// Solidity: event SafeReceived(address indexed sender, uint256 value) +func (_GnosisSafe *GnosisSafeFilterer) WatchSafeReceived(opts *bind.WatchOpts, sink chan<- *GnosisSafeSafeReceived, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _GnosisSafe.contract.WatchLogs(opts, "SafeReceived", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GnosisSafeSafeReceived) + if err := _GnosisSafe.contract.UnpackLog(event, "SafeReceived", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSafeReceived is a log parse operation binding the contract event 0x3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d. +// +// Solidity: event SafeReceived(address indexed sender, uint256 value) +func (_GnosisSafe *GnosisSafeFilterer) ParseSafeReceived(log types.Log) (*GnosisSafeSafeReceived, error) { + event := new(GnosisSafeSafeReceived) + if err := _GnosisSafe.contract.UnpackLog(event, "SafeReceived", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GnosisSafeSafeSetupIterator is returned from FilterSafeSetup and is used to iterate over the raw logs and unpacked data for SafeSetup events raised by the GnosisSafe contract. +type GnosisSafeSafeSetupIterator struct { + Event *GnosisSafeSafeSetup // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GnosisSafeSafeSetupIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GnosisSafeSafeSetup) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GnosisSafeSafeSetup) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GnosisSafeSafeSetupIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GnosisSafeSafeSetupIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GnosisSafeSafeSetup represents a SafeSetup event raised by the GnosisSafe contract. +type GnosisSafeSafeSetup struct { + Initiator common.Address + Owners []common.Address + Threshold *big.Int + Initializer common.Address + FallbackHandler common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSafeSetup is a free log retrieval operation binding the contract event 0x141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8. +// +// Solidity: event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler) +func (_GnosisSafe *GnosisSafeFilterer) FilterSafeSetup(opts *bind.FilterOpts, initiator []common.Address) (*GnosisSafeSafeSetupIterator, error) { + + var initiatorRule []interface{} + for _, initiatorItem := range initiator { + initiatorRule = append(initiatorRule, initiatorItem) + } + + logs, sub, err := _GnosisSafe.contract.FilterLogs(opts, "SafeSetup", initiatorRule) + if err != nil { + return nil, err + } + return &GnosisSafeSafeSetupIterator{contract: _GnosisSafe.contract, event: "SafeSetup", logs: logs, sub: sub}, nil +} + +// WatchSafeSetup is a free log subscription operation binding the contract event 0x141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8. +// +// Solidity: event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler) +func (_GnosisSafe *GnosisSafeFilterer) WatchSafeSetup(opts *bind.WatchOpts, sink chan<- *GnosisSafeSafeSetup, initiator []common.Address) (event.Subscription, error) { + + var initiatorRule []interface{} + for _, initiatorItem := range initiator { + initiatorRule = append(initiatorRule, initiatorItem) + } + + logs, sub, err := _GnosisSafe.contract.WatchLogs(opts, "SafeSetup", initiatorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GnosisSafeSafeSetup) + if err := _GnosisSafe.contract.UnpackLog(event, "SafeSetup", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSafeSetup is a log parse operation binding the contract event 0x141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a8. +// +// Solidity: event SafeSetup(address indexed initiator, address[] owners, uint256 threshold, address initializer, address fallbackHandler) +func (_GnosisSafe *GnosisSafeFilterer) ParseSafeSetup(log types.Log) (*GnosisSafeSafeSetup, error) { + event := new(GnosisSafeSafeSetup) + if err := _GnosisSafe.contract.UnpackLog(event, "SafeSetup", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// GnosisSafeSignMsgIterator is returned from FilterSignMsg and is used to iterate over the raw logs and unpacked data for SignMsg events raised by the GnosisSafe contract. +type GnosisSafeSignMsgIterator struct { + Event *GnosisSafeSignMsg // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *GnosisSafeSignMsgIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(GnosisSafeSignMsg) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(GnosisSafeSignMsg) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *GnosisSafeSignMsgIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *GnosisSafeSignMsgIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// GnosisSafeSignMsg represents a SignMsg event raised by the GnosisSafe contract. +type GnosisSafeSignMsg struct { + MsgHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSignMsg is a free log retrieval operation binding the contract event 0xe7f4675038f4f6034dfcbbb24c4dc08e4ebf10eb9d257d3d02c0f38d122ac6e4. +// +// Solidity: event SignMsg(bytes32 indexed msgHash) +func (_GnosisSafe *GnosisSafeFilterer) FilterSignMsg(opts *bind.FilterOpts, msgHash [][32]byte) (*GnosisSafeSignMsgIterator, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _GnosisSafe.contract.FilterLogs(opts, "SignMsg", msgHashRule) + if err != nil { + return nil, err + } + return &GnosisSafeSignMsgIterator{contract: _GnosisSafe.contract, event: "SignMsg", logs: logs, sub: sub}, nil +} + +// WatchSignMsg is a free log subscription operation binding the contract event 0xe7f4675038f4f6034dfcbbb24c4dc08e4ebf10eb9d257d3d02c0f38d122ac6e4. +// +// Solidity: event SignMsg(bytes32 indexed msgHash) +func (_GnosisSafe *GnosisSafeFilterer) WatchSignMsg(opts *bind.WatchOpts, sink chan<- *GnosisSafeSignMsg, msgHash [][32]byte) (event.Subscription, error) { + + var msgHashRule []interface{} + for _, msgHashItem := range msgHash { + msgHashRule = append(msgHashRule, msgHashItem) + } + + logs, sub, err := _GnosisSafe.contract.WatchLogs(opts, "SignMsg", msgHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(GnosisSafeSignMsg) + if err := _GnosisSafe.contract.UnpackLog(event, "SignMsg", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSignMsg is a log parse operation binding the contract event 0xe7f4675038f4f6034dfcbbb24c4dc08e4ebf10eb9d257d3d02c0f38d122ac6e4. +// +// Solidity: event SignMsg(bytes32 indexed msgHash) +func (_GnosisSafe *GnosisSafeFilterer) ParseSignMsg(log types.Log) (*GnosisSafeSignMsg, error) { + event := new(GnosisSafeSignMsg) + if err := _GnosisSafe.contract.UnpackLog(event, "SignMsg", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/bindings/system_config_global.go b/bindings/system_config_global.go new file mode 100644 index 0000000..3492bb4 --- /dev/null +++ b/bindings/system_config_global.go @@ -0,0 +1,1295 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// NitroValidatorPtrs is an auto generated low-level Go binding around an user-defined struct. +type NitroValidatorPtrs struct { + ModuleID *big.Int + Timestamp uint64 + Digest *big.Int + Pcrs []*big.Int + Cert *big.Int + Cabundle []*big.Int + PublicKey *big.Int + UserData *big.Int + Nonce *big.Int +} + +// SystemConfigGlobalMetaData contains all meta data concerning the SystemConfigGlobal contract. +var SystemConfigGlobalMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"certManager\",\"type\":\"address\",\"internalType\":\"contractICertManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ATTESTATION_DIGEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ATTESTATION_TBS_PREFIX\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"CABUNDLE_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"CERTIFICATE_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DIGEST_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_AGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MODULE_ID_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"NONCE_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PCRS_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PUBLIC_KEY_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TIMESTAMP_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"USER_DATA_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"certManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractICertManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decodeAttestationTbs\",\"inputs\":[{\"name\":\"attestation\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"deregisterPCR0\",\"inputs\":[{\"name\":\"pcr0\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterSigner\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerPCR0\",\"inputs\":[{\"name\":\"pcr0\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerSigner\",\"inputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setProposer\",\"inputs\":[{\"name\":\"_proposer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validPCR0s\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validSigners\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validateAttestation\",\"inputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structNitroValidator.Ptrs\",\"components\":[{\"name\":\"moduleID\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"digest\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"pcrs\",\"type\":\"uint256[]\",\"internalType\":\"CborElement[]\"},{\"name\":\"cert\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"cabundle\",\"type\":\"uint256[]\",\"internalType\":\"CborElement[]\"},{\"name\":\"publicKey\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"userData\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"CborElement\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162005f7038038062005f7083398101604081905262000034916200039e565b6001600160a01b0381166080526200004e61dead62000055565b50620003d0565b600054610100900460ff1615808015620000765750600054600160ff909116105b80620000a6575062000093306200019360201b620017471760201c565b158015620000a6575060005460ff166001145b6200010f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000133576000805461ff0019166101001790555b6200013d620001a2565b62000148826200020a565b80156200018f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001fe5760405162461bcd60e51b815260206004820152602b602482015260008051602062005f5083398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000106565b6200020862000289565b565b62000214620002f0565b6001600160a01b0381166200027b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000106565b62000286816200034c565b50565b600054610100900460ff16620002e55760405162461bcd60e51b815260206004820152602b602482015260008051602062005f5083398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000106565b62000208336200034c565b6033546001600160a01b03163314620002085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000106565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620003b157600080fd5b81516001600160a01b0381168114620003c957600080fd5b9392505050565b608051615b5d620003f3600039600081816103ff0152610ec60152615b5d6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063739e8484116100f9578063b22bed7e11610097578063cebf08d711610071578063cebf08d71461063b578063e0a655ff14610697578063e8b6d3fe146106f3578063f2fde38b1461074f57600080fd5b8063b22bed7e146105b9578063ba58e82a14610615578063c4d66de81461062857600080fd5b80639cc3eb48116100d35780639cc3eb48146104c0578063a8e4fb901461051c578063a903a2771461053c578063ae9511491461055d57600080fd5b8063739e8484146103fa5780638da5cb5b146104465780639adb2d681461046457600080fd5b80633893af6d116101665780636378aad5116101405780636378aad5146103175780636a73b00b146103735780636be1e68b14610396578063715018a6146103f257600080fd5b80633893af6d1461029e57806350697a3f146102c557806354fd4d50146102d857600080fd5b80631fb4a228116101a25780631fb4a2281461021e578063295840d9146102315780632c68fa02146102645780632d4bad8a1461027757600080fd5b806305f7aead146101c95780630ba24fe0146101f25780630dcaeaf214610207575b600080fd5b6101dc6101d7366004615181565b610762565b6040516101e99190615220565b60405180910390f35b6102056102003660046152e0565b610f92565b005b610210610e1081565b6040519081526020016101e9565b61020561022c3660046152e0565b610fe6565b61025461023f366004615316565b60666020526000908152604090205460ff1681565b60405190151581526020016101e9565b610205610272366004615378565b611035565b6102107f63ce814bd924c1ef12c43686e4cbf48ed1639a78387b0570c23ca921e8ce071c81565b6102107f501a3a7a4e0cf54b03f2488098bdd59bc1c2e8d741a300d6b25926d531733fef81565b6102056102d3366004615378565b611084565b604080518082018252600581527f302e302e31000000000000000000000000000000000000000000000000000000602082015290516101e99190615430565b60408051808201909152600581527f6e6f6e63650000000000000000000000000000000000000000000000000000006020909101526102107f7ab1577440dd7bedf920cb6de2f9fc6bf7ba98c78c85a3fa1f8311aac95e175981565b6102546103813660046152e0565b60676020526000908152604090205460ff1681565b60408051808201909152600681527f64696765737400000000000000000000000000000000000000000000000000006020909101526102107f682a7e258d80bd2421d3103cbe71e3e3b82138116756b97b8256f061dc2f11fb81565b6102056110e3565b6104217f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b60335473ffffffffffffffffffffffffffffffffffffffff16610421565b60408051808201909152600981527f6d6f64756c655f696400000000000000000000000000000000000000000000006020909101526102107f8ce577cf664c36ba5130242bf5790c2675e9f4e6986a842b607821bee25372ee81565b60408051808201909152600881527f636162756e646c650000000000000000000000000000000000000000000000006020909101526102107f8a8cb7aa1da17ada103546ae6b4e13ccc2fafa17adf5f93925e0a0a4e5681a6a81565b6065546104219073ffffffffffffffffffffffffffffffffffffffff1681565b61054f61054a366004615443565b6110f7565b6040516101e9929190615478565b60408051808201909152600b81527f63657274696669636174650000000000000000000000000000000000000000006020909101526102107f925cec779426f44d8d555e01d2683a3a765ce2fa7562ca7352aeb09dfc57ea6a81565b60408051808201909152600481527f70637273000000000000000000000000000000000000000000000000000000006020909101526102107f61585f8bc67a4b6d5891a4639a074964ac66fc2241dc0b36c157dc101325367a81565b6102056106233660046154a6565b61123e565b6102056106363660046152e0565b6114f4565b60408051808201909152600981527f757365725f6461746100000000000000000000000000000000000000000000006020909101526102107f5e4ea5393e4327b3014bc32f2264336b0d1ee84a4cfd197c8ad7e1e16829a16a81565b60408051808201909152600981527f74696d657374616d7000000000000000000000000000000000000000000000006020909101526102107f4ebf727c48eac2c66272456b06a885c5cc03e54d140f63b63b6fd10c1227958e81565b60408051808201909152600a81527f7075626c69635f6b6579000000000000000000000000000000000000000000006020909101526102107fc7b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a481565b61020561075d3660046152e0565b611690565b6107bb60405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b60006107c684611763565b905060006107d78260000151611ffb565b11610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f206d6f64756c65206964000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000816020015167ffffffffffffffff16116108bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f2074696d657374616d700000000000000000000000000000000000000000604482015260640161083a565b60008160a00151511161092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f20636162756e646c65000000000000000000000000000000000000000000604482015260640161083a565b7f501a3a7a4e0cf54b03f2488098bdd59bc1c2e8d741a300d6b25926d531733fef61096282604001518661203c90919063ffffffff16565b146109c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c696420646967657374000000000000000000000000000000000000604482015260640161083a565b8060600151516001111580156109e55750602081606001515111155b610a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f696e76616c696420706372730000000000000000000000000000000000000000604482015260640161083a565b60c081015160ff1660f61480610a875750610a698160c00151611ffb565b600111158015610a875750610400610a848260c00151611ffb565b11155b610aed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420707562206b65790000000000000000000000000000000000604482015260640161083a565b60e081015160ff1660f61480610b115750610200610b0e8260e00151611ffb565b11155b610b77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f696e76616c696420757365722064617461000000000000000000000000000000604482015260640161083a565b61010081015160ff1660f61480610b9d5750610200610b9a826101000151611ffb565b11155b610c03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c6964206e6f6e636500000000000000000000000000000000000000604482015260640161083a565b60005b816060015151811015610cfa57610c3982606001518281518110610c2c57610c2c615512565b6020026020010151611ffb565b60201480610c5f5750610c5b82606001518281518110610c2c57610c2c615512565b6030145b80610c825750610c7e82606001518281518110610c2c57610c2c615512565b6040145b610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c696420706372000000000000000000000000000000000000000000604482015260640161083a565b80610cf281615570565b915050610c06565b506000610d1482608001518661206e90919063ffffffff16565b905060008260a001515167ffffffffffffffff811115610d3657610d3661503e565b604051908082528060200260200182016040528015610d6957816020015b6060815260200190600190039081610d545790505b50905060005b8360a0015151811015610e8557610d958460a001518281518110610c2c57610c2c615512565b600111158015610dbf5750610400610dbc8560a001518381518110610c2c57610c2c615512565b11155b610e25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420636162756e646c6520636572740000000000000000000000604482015260640161083a565b610e558460a001518281518110610e3e57610e3e615512565b60200260200101518861206e90919063ffffffff16565b828281518110610e6757610e67615512565b60200260200101819052508080610e7d90615570565b915050610d6f565b506040517f5b608e2a00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690635b608e2a90610efd90869086906004016155a8565b6000604051808303816000875af1158015610f1c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f629190810190615694565b90506000610f738860008a51612095565b9050610f84826080015182896121bc565b509293505050505b92915050565b610f9a61223a565b73ffffffffffffffffffffffffffffffffffffffff16600090815260676020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b610fee61223a565b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61103d61223a565b600160666000848460405161105392919061574c565b6040518091039020815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61108c61223a565b6066600083836040516110a092919061574c565b6040805191829003909120825260208201929092520160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050565b6110eb61223a565b6110f560006122bb565b565b6060806000600190508360008151811061111357611113615512565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167fd20000000000000000000000000000000000000000000000000000000000000003611164575060025b60006111708583612332565b9050600061117e8683612342565b9050600061118c8783612356565b9050600061119a8883612356565b90506000856111a88661236e565b6111b2919061575c565b905060006111bf8561236e565b6111c88561236e565b6111d2919061575c565b905060006111e18b8985612393565b905060006111f96111f18861236e565b8d9085612393565b90506112078285838661246e565b9a5061122e605086901c69ffffffffffffffffffff1661122687611ffb565b8e9190612393565b9950505050505050505050915091565b61124661223a565b60006112bb85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8901819004810282018101909252878152925087915086908190840183828082843760009201919091525061076292505050565b9050600061132082606001516000815181106112d9576112d9615512565b602002602001015187878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505061203c9050565b60008181526066602052604090205490915060ff1661139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964207063723020696e206174746573746174696f6e0000000000604482015260640161083a565b42610e10836020015167ffffffffffffffff166113b89190615773565b1161141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f6174746573746174696f6e20746f6f206f6c6400000000000000000000000000604482015260640161083a565b60c082015160009061149e9060501c69ffffffffffffffffffff16611445906001615773565b60016114548660c00151611ffb565b61145e919061575c565b89898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092949392505061265f9050565b73ffffffffffffffffffffffffffffffffffffffff16600090815260676020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550505050505050565b600054610100900460ff16158080156115145750600054600160ff909116105b8061152e5750303b15801561152e575060005460ff166001145b6115ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161083a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561161857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b611620612668565b61162982611690565b801561168c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b61169861223a565b73ffffffffffffffffffffffffffffffffffffffff811661173b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161083a565b611744816122bb565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6117bc60405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b601260208301207f63ce814bd924c1ef12c43686e4cbf48ed1639a78387b0570c23ca921e8ce071c1461184b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f696e76616c6964206174746573746174696f6e20707265666978000000000000604482015260640161083a565b6000611858836012612332565b905060006118768469ffffffffffffffffffff605085901c16612707565b90506118d160405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b60006118dc8461236e565b90505b806118e98461236e565b1015611ff2576118f98684612717565b92506000611907878561203c565b60408051808201909152600981527f6d6f64756c655f6964000000000000000000000000000000000000000000000060209091015290507f731a883099b3c945aecfdbd40a86f3d98a160b1967957bd49f87de411dac8d1281016119795761196f8785612717565b8084529350611fec565b60408051808201909152600681527f64696765737400000000000000000000000000000000000000000000000000006020909101527f97d581da727f42dbde2cefc3418e1c1c47dec7ee98a946847da90f9e23d0ee0581016119ed576119df8785612717565b604084018190529350611fec565b60408051808201909152600b81527f63657274696669636174650000000000000000000000000000000000000000006020909101527f6da313886bd90bb272aaa1fe2d97c5c589a31d058a9d358cad514f6203a815968101611a6157611a538785612356565b608084018190529350611fec565b60408051808201909152600a81527f7075626c69635f6b6579000000000000000000000000000000000000000000006020909101527f384d7fe6330242cf0039a6ae26b447a361d47bcbeee5fff4a502acc319a0a85c8101611ad557611ac7878561272f565b60c084018190529350611fec565b60408051808201909152600981527f757365725f6461746100000000000000000000000000000000000000000000006020909101527fa1b15ac6c1bcd84cfeb43cd0dd9bcc94f2e117b5b302e68375281e1e97d65e968101611b4957611b3b878561272f565b60e084018190529350611fec565b60408051808201909152600581527f6e6f6e63650000000000000000000000000000000000000000000000000000006020909101527f854ea88bbf22841206df34921d06039408456738737a5c05e07cee5536a1e8a78101611bbe57611baf878561272f565b61010084018190529350611fec565b60408051808201909152600981527f74696d657374616d7000000000000000000000000000000000000000000000006020909101527fb1408d83b7153d399d8dba94f9577a3a33fc1ab2ebf09c49c4902ef3edd86a728101611c4457611c248785612747565b9350611c308460a01c90565b67ffffffffffffffff166020840152611fec565b60408051808201909152600881527f636162756e646c650000000000000000000000000000000000000000000000006020909101527f75734855e25e8525efcab95194b1ec333d0505e8520a06c6da1f5f5b1a97e5968101611d5d57611caa878561275f565b9350611cb68460a01c90565b67ffffffffffffffff1667ffffffffffffffff811115611cd857611cd861503e565b604051908082528060200260200182016040528015611d01578160200160208202803683370190505b5060a084015260005b8360a0015151811015611d5757611d218886612356565b9450848460a001518281518110611d3a57611d3a615512565b602090810291909101015280611d4f81615570565b915050611d0a565b50611fec565b60408051808201909152600481527f70637273000000000000000000000000000000000000000000000000000000006020909101527f9ea7a0743985b492a76e5b9c65f8b69b539903ddbe23f4c93ea823efecdac9868101611f8a57611dc38785612342565b9350611dcf8460a01c90565b67ffffffffffffffff1667ffffffffffffffff811115611df157611df161503e565b604051908082528060200260200182016040528015611e1a578160200160208202803683370190505b50606084015260005b836060015151811015611d5757611e3a8886612747565b94506000611e488660a01c90565b67ffffffffffffffff1690508460600151518110611ec2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420706372206b65792076616c75650000000000000000000000604482015260640161083a565b84606001518181518110611ed857611ed8615512565b6020026020010151600014611f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6475706c696361746520706372206b6579000000000000000000000000000000604482015260640161083a565b611f538987612356565b95508585606001518281518110611f6c57611f6c615512565b60209081029190910101525080611f8281615570565b915050611e23565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f696e76616c6964206174746573746174696f6e206b6579000000000000000000604482015260640161083a565b506118df565b50949350505050565b600081604060ff8216148061201357508060ff166060145b15612033576120228360a01c90565b67ffffffffffffffff169392505050565b50600092915050565b6000612067605083901c69ffffffffffffffffffff1661205b84611ffb565b85919091016020012090565b9392505050565b6060612067605083901c69ffffffffffffffffffff1661208d84611ffb565b859190612393565b604080516101008101825267cbbb9d5dc1059ed8815267629a292a367cd5076020820152679159015a3070dd179181019190915267152fecd8f70e59396060828101919091526767332667ffc00b316080830152678eb44a876858151160a083015267db0c2e0d64f98fa760c08301526747b5481dbefa4fa460e08301529061212085858584612777565b80516020808301516040808501516060860151608087015160a088015184517fffffffffffffffff00000000000000000000000000000000000000000000000060c0998a1b81169882019890985295881b8716602887015292871b8616603086015290861b85166038850152851b84169183019190915290921b1660488201526050016040516020818303038152906040529150509392505050565b6121cf6121c7612fe5565b838386613100565b612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c696420736967000000000000000000000000000000000000000000604482015260640161083a565b505050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161083a565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006120678383604060016133b1565b6000612067836123518461236e565b612707565b6000612067836123658461236e565b604060016133b1565b600061237982611ffb565b610f8c9069ffffffffffffffffffff605085901c16615773565b82516060906123a28385615773565b111561240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b8167ffffffffffffffff8111156124235761242361503e565b6040519080825280601f01601f19166020018201604052801561244d576020820181803683370190505b50905060208082019085850101612465828286613683565b50509392505050565b60608161247c85600d615773565b6124869190615773565b67ffffffffffffffff81111561249e5761249e61503e565b6040519080825280601f01601f1916602001820160405280156124c8576020820181803683370190505b509050608460f81b816000815181106124e3576124e3615512565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350606a60f81b8160018151811061252a5761252a615512565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f40000000000000000000000000000000000000000000000000000000000000008161258686600c615773565b8151811061259657612596615512565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060408051808201909152600a81527f5369676e617475726531000000000000000000000000000000000000000000006020808301918252838101919088810190870161261d612615856002615773565b84600a613683565b61263261262b85600c615773565b838b613683565b6126528961264186600d615773565b61264b9190615773565b8289613683565b5050505050949350505050565b91016020012090565b600054610100900460ff166126ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161083a565b6110f56136f8565b6000612067838360a060016133b1565b6000612067836127268461236e565b606060016133b1565b60006120678361273e8461236e565b604060006133b1565b6000612067836127568461236e565b600060016133b1565b60006120678361276e8461236e565b608060016133b1565b60408051610a008101825267428a2f98d728ae228152677137449123ef65cd602082015267b5c0fbcfec4d3b2f9181019190915267e9b5dba58189dbbc6060820152673956c25bf348b53860808201526759f111f1b605d01960a082015267923f82a4af194f9b60c082015267ab1c5ed5da6d811860e082015267d807aa98a30302426101008201526712835b0145706fbe61012082015267243185be4ee4b28c61014082015267550c7dc3d5ffb4e26101608201526772be5d74f27b896f6101808201526780deb1fe3b1696b16101a0820152679bdc06a725c712356101c082015267c19bf174cf6926946101e082015267e49b69c19ef14ad261020082015267efbe4786384f25e3610220820152670fc19dc68b8cd5b561024082015267240ca1cc77ac9c65610260820152672de92c6f592b0275610280820152674a7484aa6ea6e4836102a0820152675cb0a9dcbd41fbd46102c08201526776f988da831153b56102e082015267983e5152ee66dfab61030082015267a831c66d2db4321061032082015267b00327c898fb213f61034082015267bf597fc7beef0ee461036082015267c6e00bf33da88fc261038082015267d5a79147930aa7256103a08201526706ca6351e003826f6103c082015267142929670a0e6e706103e08201526727b70a8546d22ffc610400820152672e1b21385c26c926610420820152674d2c6dfc5ac42aed6104408201526753380d139d95b3df61046082015267650a73548baf63de61048082015267766a0abb3c77b2a86104a08201526781c2c92e47edaee66104c08201526792722c851482353b6104e082015267a2bfe8a14cf1036461050082015267a81a664bbc42300161052082015267c24b8b70d0f8979161054082015267c76c51a30654be3061056082015267d192e819d6ef521861058082015267d69906245565a9106105a082015267f40e35855771202a6105c082015267106aa07032bbd1b86105e08201526719a4c116b8d2d0c8610600820152671e376c085141ab53610620820152672748774cdf8eeb996106408201526734b0bcb5e19b48a861066082015267391c0cb3c5c95a63610680820152674ed8aa4ae3418acb6106a0820152675b9cca4f7763e3736106c082015267682e6ff3d6b2b8a36106e082015267748f82ee5defb2fc6107008201526778a5636f43172f606107208201526784c87814a1f0ab72610740820152678cc702081a6439ec6107608201526790befffa23631e2861078082015267a4506cebde82bde96107a082015267bef9a3f7b2c679156107c082015267c67178f2e372532b6107e082015267ca273eceea26619c61080082015267d186b8c721c0c20761082082015267eada7dd6cde0eb1e61084082015267f57d4f7fee6ed1786108608201526706f067aa72176fba610880820152670a637dc5a2c898a66108a082015267113f9804bef90dae6108c0820152671b710b35131c471b6108e08201526728db77f523047d846109008201526732caab7b40c72493610920820152673c9ebe0a15c9bebc61094082015267431d67c49c100d4c610960820152674cc5d4becb3e42b661098082015267597f299cfc657e2a6109a0820152675fcb6fab3ad6faec6109c0820152676c44198c4a4758176109e08201526000612c36868686613798565b905060808151612c4691906157ba565b15612cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f50414444494e475f4552524f5200000000000000000000000000000000000000604482015260640161083a565b612cb5614f95565b612cbd614fb4565b612cc5614fd3565b6000612cd26080896157ce565b612cdd9060806157e2565b905060005b85518201811015612fd85781811015612d0757612d028b84838d016138a7565b612d14565b612d1486848484036138a7565b60005b6010811015612d6557838160108110612d3257612d32615512565b6020020151868260508110612d4957612d49615512565b67ffffffffffffffff9092166020929092020152600101612d17565b5060105b6050811015612e1b57856010820360508110612d8757612d87615512565b6020020151612dae87600f840360508110612da457612da4615512565b602002015161390e565b876007840360508110612dc357612dc3615512565b6020020151612dea896002860360508110612de057612de0615512565b602002015161393d565b010101868260508110612dff57612dff615512565b67ffffffffffffffff9092166020929092020152600101612d69565b5060005b6008811015612e6d57888160088110612e3a57612e3a615512565b6020020151858260088110612e5157612e51615512565b67ffffffffffffffff9092166020929092020152600101612e1f565b5060005b6050811015612f7b576000868260508110612e8e57612e8e615512565b6020020151898360508110612ea557612ea5615512565b6020020151608088015160a089015160c08a01518219169116186080890151612ecd90613964565b89600760200201510101010190506000612f06878260200201518860016020020151896002602002015180821690831691909216181890565b8751612f1190613987565b60c08901805167ffffffffffffffff90811660e08c015260a08b018051821690925260808b018051821690925260608b0180518701821690925260408b018051821690925260208b01805182169092528a5181169091529101909201909116865250600101612e71565b5060005b6008811015612fcf57848160088110612f9a57612f9a615512565b6020020151898260088110612fb157612fb1615512565b6020020180519190910167ffffffffffffffff169052600101612f7f565b50608001612ce2565b5050505050505050505050565b6130256040518060e00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b604080516101408101909152603060e082018181528291615ac16101008401398152602001604051806060016040528060308152602001615a01603091398152602001604051806060016040528060308152602001615a91603091398152602001604051806060016040528060308152602001615a31603091398152602001604051806060016040528060308152602001615b21603091398152602001604051806060016040528060308152602001615af1603091398152602001604051806060016040528060308152602001615a61603091399052919050565b600061312d6040518060800160405280600081526020016000815260200160008152602001600081525090565b613136846139aa565b60208301528152613146836139aa565b6060830152604080830191909152805160e08101909152865160009190819061316e90613a5d565b81526020016131808960200151613a5d565b81526020016131928960400151613a5d565b81526020016131a48960600151613a5d565b81526020016131b68960800151613a5d565b81526020016131c88960a00151613a5d565b81526020016131da8960c00151613a5d565b815250905060006131ee8260800151613af3565b835160208101519051919250159015168061321b5750600061321884600001518460a00151613b69565b12155b80613239575061323983602001516000602082015191511591141690565b806132555750600061325384602001518460c00151613b69565b135b1561326657600093505050506133a9565b6132888183608001518460000151856020015187604001518860600151613c0f565b61329857600093505050506133a9565b865160308110156132dc5760408051603080825260608201909252600091602082018180368337509192506132d991505060208a0183830360500184613cf3565b97505b5060006132fb826132ec8a613a5d565b86602001518660a00151613d01565b9050600061331783866000015187602001518760a00151613d01565b905060006133256003613e12565b905060006133518587608001518489600001518a604001518b606001518d604001518e60600151613e34565b905061336a85876080015184896000015185898961421b565b9050809450819550505050506133a16133898484848860800151613d01565b86516020808201519083015191519251911491141690565b955050505050505b949350505050565b6000808585815181106133c6576133c6615512565b602001015160f81c60f81b60e060f81b1660f81c905060008686815181106133f0576133f0615512565b60209101015160f81c601f16905060ff821660e0036134a45783158061341a57508060ff16601614155b613480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6e756c6c2076616c756520666f7220726571756972656420656c656d656e7400604482015260640161083a565b61349b60ff83831716613494886001615773565b60501b1790565b925050506133a9565b8460ff168260ff1614613513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f756e657870656374656420747970650000000000000000000000000000000000604482015260640161083a565b8060ff166018036135655761349b60ff8316613530886002615773565b8961353c8a6001615773565b8151811061354c5761354c615512565b016020015160f81c60a01b60509190911b919091171790565b8060ff166019036135ac5761349b60ff8316613582886003615773565b6135976135908a6001615773565b8b906143a5565b61ffff1660a01b60509190911b919091171790565b8060ff16601a036135f55761349b60ff83166135c9886005615773565b6135de6135d78a6001615773565b8b90614428565b63ffffffff1660a01b60509190911b919091171790565b8060ff16601b036136425761349b60ff8316613612886009615773565b6136276136208a6001615773565b8b906144ab565b67ffffffffffffffff1660a01b60509190911b919091171790565b61367860ff8316613654886001615773565b60501b1774ff000000000000000000000000000000000000000060a084901b161790565b979650505050505050565b602081106136bb578151835261369a602084615773565b92506136a7602083615773565b91506136b460208261575c565b9050613683565b801561223557600060016136d083602061575c565b6136dc9061010061593f565b6136e6919061575c565b83518551821691191617845250505050565b600054610100900460ff1661378f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161083a565b6110f5336122bb565b606060006137a78360086157e2565b60c01b905060006137b96080856157ba565b9050600060708210156137d8576137d182607761575c565b90506137e6565b6137e38260f761575c565b90505b60008167ffffffffffffffff8111156138015761380161503e565b6040519080825280601f01601f19166020018201604052801561382b576020820181803683370190505b50905060006138508461383e898b615773565b613848919061575c565b8a9086612393565b60405190915061388a9082907f8000000000000000000000000000000000000000000000000000000000000000908590899060200161594b565b604051602081830303815290604052955050505050509392505050565b60005b6010811015613908576138d26138c18260086157e2565b6138cb9084615773565b85906144ab565b8382601081106138e4576138e4615512565b67ffffffffffffffff909216602092909202015261390181615570565b90506138aa565b50505050565b600060078267ffffffffffffffff16901c61392a83600861452e565b61393584600161452e565b181892915050565b600060068267ffffffffffffffff16901c61395983603d61452e565b61393584601361452e565b600061397182602961452e565b61397c83601261452e565b61393584600e61452e565b600061399482602761452e565b61399f83602261452e565b61393584601c61452e565b6000808251606014613a18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f742037363800000000000000000000000000000000000000604482015260640161083a565b60408051608081018252925082019050600082526020830151601083015260308301516020830152600081526050830151601082015260608301516020820152915091565b60008151603014613aca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f742033383400000000000000000000000000000000000000604482015260640161083a565b604080518082019091529050600081526020820151601082015260308201516020820152919050565b6000613b0761036060408051918201905290565b6060610120820152602061014082018190526040610160830181905260016101e0840152845161020084015284820180516102208501526102408401829052610260840192909252610280830152925161030082015291516103208301525090565b815181516000919080821115613b8457600192505050610f8c565b80821015613bb6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610f8c565b50506020838101519083015180821115613bd557600192505050610f8c565b80821015613c07577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610f8c565b505092915050565b602082015182516000911590151680613c3657506020868101519084015187518551149114165b80613c48575060208201518251159015165b80613c6157506020868101519083015187518451149114165b15613c6e57506000613ce9565b6000613c7c8884600261456b565b90506000613c8c8986600361456b565b6020880151885191925015901516613cb657613cb381613cad8b888b6145b0565b8a6146a2565b90505b6020860151865115901516613cd357613cd081878a6146a2565b90505b6020818101519083015191519251911491141690505b9695505050505050565b8082828560045afa50505050565b6000613d0e858484614706565b9050613dd38482876060018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b60608552602085602001526040856040015260018560c0015281518560e0015260208201518561010001526040816101208760055afa50949350505050565b6000613e246040808051918201905290565b6000815260208101929092525090565b613e3c614ff2565b613e4585614794565b613e4e85614794565b613e586001613e12565b608084018051604081019290925260208281019390935292905290518051910151613e98918b918b918b918b91908760045b6020020151604001516147bb565b61010084018051604080820193909352602081810194909452939093526080840151805181840151919092015193518051930151613ef0948e948e948e948e949193909290918a60085b602002015160400151614978565b6101808401516040810191909152602081019190915252613f1083614794565b613f1983614794565b613f236001613e12565b60208085018051604081019390935282820193909352929052518051910151613f57918b918b918b918b9190876001613e8a565b6040808501519081019190915260208181019290925291909152808201518051910151613faf918b918b918b918b91908760015b60209081029190910151604090810151908a015180519201519091908a6002613ee2565b606084015160408101919091526020818101929092529190915260808201518051910151614006918b918b918b918b91908760045b60209081029190910151604001518982015180519201519091908a6001613ee2565b60a08401516040810191909152602081810192909252919091526080820151805191015161403f918b918b918b918b9190876004613f8b565b60c084015160408101919091526020818101929092529190915260808201518051910151614097918b918b918b918b91908760045b602090810291909101516040015160608a015180519201519091908a6003613ee2565b60e084015160408101919091526020818101929092529190915261010082015180519101516140d1918b918b918b918b9190876008613fe4565b610120840151604081019190915260208181019290925291909152610100820151805191015161410c918b918b918b918b9190876008613f8b565b6101408401516040810191909152602081810192909252919091526101008201518051910151614147918b918b918b918b9190876008614074565b6101608401516040810191909152602081810192909252919091526101808201518051910151614182918b918b918b918b919087600c613fe4565b6101a084015160408101919091526020818101929092529190915261018082015180519101516141bd918b918b918b918b919087600c613f8b565b6101c084015160408101919091526020818101929092529190915261018082015180519101516141f8918b918b918b918b919087600c614074565b6101e0840151604081019190915260208101919091525298975050505050505050565b8151815160009182918291829161423183613e12565b955061423d6000613e12565b94506142496001613e12565b935060025b60b881116142f4576142658e8e8e8e8b8b8b6147bb565b9198509650945061427b8e8e8e8e8b8b8b6147bb565b9198509650945060b881900382811c6003169084901c60021b600c1617935083156142ec5760008a85601081106142b4576142b4615512565b602002015190506142e38f8f8f8f8560005b6020020151866001602002015187600260200201518f8f8f614978565b91995097509550505b60020161424e565b5050506020868101519086015160025b61010081116143935761431c8e8e8e8e8b8b8b6147bb565b919850965094506143328e8e8e8e8b8b8b6147bb565b9198509650945061010081900382811c6003169084901c60021b600c16179350831561438b5760008a856010811061436c5761436c615512565b602002015190506143828f8f8f8f8560006142c6565b91995097509550505b600201614304565b505050505b9750975097945050505050565b60006143b2826002615773565b8351101561441c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b50016020015160f01c90565b6000614435826004615773565b8351101561449f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b50016020015160e01c90565b60006144b8826008615773565b83511015614522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640161083a565b50016020015160c01c90565b600067ffffffffffffffff8381169083161c61454b8360406159d7565b67ffffffffffffffff168467ffffffffffffffff16901b17905092915050565b600061457d6040808051918201905290565b9050610240840193508251846060015260208301518460800152818460a001526040816101008660055afa509392505050565b60006145c26040808051918201905290565b9050614688838361018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040816101208660055afa509392505050565b60006146b46040808051918201905290565b60208581015185820151810191830182905285518751019110018152905060006146de8284613b69565b1261206757602080820180519184015182039081905283518351929091119103038152612067565b60006147186040808051918201905290565b905061474c826147286002613e12565b60208281015190820151810360c089018190529151925191119190030360a0860152565b604084526040846020015260408460400152825184606001526020830151846080015281518460e0015260208201518461010001526040816101208660055afa509392505050565b60006147a66040808051918201905290565b90508151815260208201516020820152919050565b60008060006147d4866000602082015191511591141690565b80156147e7575060208501518551159015165b15614815576147f66000613e12565b6148006000613e12565b61480a6001613e12565b925092509250614398565b60006148228b87876145b0565b905061482e818b614ad1565b6148398b82896145b0565b93506148468b8588614b1b565b614850848b614ad1565b61485c8b88600261456b565b96506148698b888b6145b0565b92506148778b86600261456b565b94506148848b868a614b1b565b61488f83868c614bf7565b61489b8b84600261456b565b91506148a887858c614c4d565b60006148b48b89614c6c565b90506148c183828d614bf7565b6020808c015181850151810391830182905284518d519290911091030381526148ec8886838e614ca4565b6148f78c8986614b1b565b6149028c88846145b0565b96506149108c886002614cf4565b61491a878c614ad1565b6020808c015181890151810391830182905288518d519290911091030381526149458489838e614ca4565b6149518c868486614d23565b61495e8c84846002614e00565b6149698c8484614b1b565b50509750975097945050505050565b6000806000614991896000602082015191511591141690565b80156149a4575060208801518851159015165b156149cf576149b286614794565b6149bb86614794565b6149c486614794565b925092509250614ac1565b602086015186511590151680156149ed575060208501518551159015165b15614a0d576149fb89614794565b614a0489614794565b6149c489614794565b614a188d89866145b0565b9250614a258d86896145b0565b9150614a328d8a866145b0565b9050614a3f8d87896145b0565b6020808201519083015182518451939850911491141615614a9e5760208281015190840151835185511491141615614a80576149c48d8d8d8d8d8d8d6147bb565b614a8a6000613e12565b614a946000613e12565b6149c46001613e12565b614aa98d88866145b0565b9950614aba8d8b838f898789614e30565b9250925092505b9a509a509a975050505050505050565b6020820180518351600190811b60ff83901c1785521b90526000614af58383613b69565b1261168c5760208281018051918301518203908190529151835191909211919003039052565b614bdf828261018086018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120830192506040826101208560055afa50505050565b614c198383602082810180519183015182019081905291518351019110019052565b6000614c258483613b69565b1261223557602080840180519183015182039081905282518551929091119103038352505050565b6020808301518351600190811b60ff83901c1786521b90840152614c19565b6000614c7e6040808051918201905290565b602080850151818501518103918301829052845186519290911091030381529050610f8c565b602083810151838201518101918601829052835185510191100184526000614ccc8583613b69565b1261390857602080850180519183015182039081905282518651929091119103038452613908565b610240830192508151836060015260208201518360800152808360a001526040826101008560055afa50505050565b614de7828261018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040836101208660055afa5050505050565b610240840193508151846060015260208201518460800152808460a001526040836101008660055afa5050505050565b600080600080614e408887614c6c565b9050614e4d85828a6146a2565b6020808a0151818a0151810391840182905289518b519290911091030382529250614e7989828a6146a2565b93506000614e898c86600261456b565b9050614e978c85600261456b565b9250614ea48c848d614b1b565b614eaf888b8b6146a2565b9750614ebc8c8983614b1b565b6020808a0151818a0151810391840182905289518b51929091109103038252614ee683838b614bf7565b6000614ef38d83886145b0565b9050614f008d8786614b1b565b614f0b8d8c846145b0565b6020808c015181870151810391860182905286518d519290911091030384529a50614f378b848c614bf7565b614f428d868d614b1b565b614f4d8d88836145b0565b6020808c015181830151810391860182905282518d519290911091030384529650614f7985848c614bf7565b614f858d85838f614d23565b5050509750975097945050505050565b60405180610a0001604052806050906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b6040518061020001604052806010905b61500a615020565b8152602001906001900390816150025790505090565b60405180606001604052806003906020820280368337509192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156150905761509061503e565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156150dd576150dd61503e565b604052919050565b600067ffffffffffffffff8211156150ff576150ff61503e565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f83011261513c57600080fd5b813561514f61514a826150e5565b615096565b81815284602083860101111561516457600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561519457600080fd5b823567ffffffffffffffff808211156151ac57600080fd5b6151b88683870161512b565b935060208501359150808211156151ce57600080fd5b506151db8582860161512b565b9150509250929050565b600081518084526020808501945080840160005b83811015615215578151875295820195908201906001016151f9565b509495945050505050565b602081528151602082015260006020830151615248604084018267ffffffffffffffff169052565b5060408301516060830152606083015161012080608085015261526f6101408501836151e5565b9150608085015160a085015260a08501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08584030160c08601526152b483826151e5565b60c087015160e08781019190915287015161010080880191909152909601519190940152509192915050565b6000602082840312156152f257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461206757600080fd5b60006020828403121561532857600080fd5b5035919050565b60008083601f84011261534157600080fd5b50813567ffffffffffffffff81111561535957600080fd5b60208301915083602082850101111561537157600080fd5b9250929050565b6000806020838503121561538b57600080fd5b823567ffffffffffffffff8111156153a257600080fd5b6153ae8582860161532f565b90969095509350505050565b60005b838110156153d55781810151838201526020016153bd565b838111156139085750506000910152565b600081518084526153fe8160208601602086016153ba565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061206760208301846153e6565b60006020828403121561545557600080fd5b813567ffffffffffffffff81111561546c57600080fd5b6133a98482850161512b565b60408152600061548b60408301856153e6565b828103602084015261549d81856153e6565b95945050505050565b600080600080604085870312156154bc57600080fd5b843567ffffffffffffffff808211156154d457600080fd5b6154e08883890161532f565b909650945060208701359150808211156154f957600080fd5b506155068782880161532f565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155a1576155a1615541565b5060010190565b6040815260006155bb60408301856153e6565b6020838203818501528185518084528284019150828160051b85010183880160005b83811015615629577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08784030185526156178383516153e6565b948601949250908501906001016155dd565b50909998505050505050505050565b8051600781900b811461564a57600080fd5b919050565b600082601f83011261566057600080fd5b815161566e61514a826150e5565b81815284602083860101111561568357600080fd5b6133a98260208301602087016153ba565b6000602082840312156156a657600080fd5b815167ffffffffffffffff808211156156be57600080fd5b9083019060a082860312156156d257600080fd5b6156da61506d565b825180151581146156ea57600080fd5b8152602083015182811681146156ff57600080fd5b602082015261571060408401615638565b60408201526060830151606082015260808301518281111561573157600080fd5b61573d8782860161564f565b60808301525095945050505050565b8183823760009101908152919050565b60008282101561576e5761576e615541565b500390565b6000821982111561578657615786615541565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826157c9576157c961578b565b500690565b6000826157dd576157dd61578b565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561581a5761581a615541565b500290565b600181815b8085111561587857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561585e5761585e615541565b8085161561586b57918102915b93841c9390800290615824565b509250929050565b60008261588f57506001610f8c565b8161589c57506000610f8c565b81600181146158b257600281146158bc576158d8565b6001915050610f8c565b60ff8411156158cd576158cd615541565b50506001821b610f8c565b5060208310610133831016604e8410600b84101617156158fb575081810a610f8c565b615905838361581f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561593757615937615541565b029392505050565b60006120678383615880565b6000855161595d818460208a016153ba565b7fff00000000000000000000000000000000000000000000000000000000000000861690830190815284516159998160018401602089016153ba565b8082019150507fffffffffffffffff000000000000000000000000000000000000000000000000841660018201526009810191505095945050505050565b600067ffffffffffffffff838116908316818110156159f8576159f8615541565b03939250505056feb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5fffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffcffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffffa164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", +} + +// SystemConfigGlobalABI is the input ABI used to generate the binding from. +// Deprecated: Use SystemConfigGlobalMetaData.ABI instead. +var SystemConfigGlobalABI = SystemConfigGlobalMetaData.ABI + +// SystemConfigGlobalBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use SystemConfigGlobalMetaData.Bin instead. +var SystemConfigGlobalBin = SystemConfigGlobalMetaData.Bin + +// DeploySystemConfigGlobal deploys a new Ethereum contract, binding an instance of SystemConfigGlobal to it. +func DeploySystemConfigGlobal(auth *bind.TransactOpts, backend bind.ContractBackend, certManager common.Address) (common.Address, *types.Transaction, *SystemConfigGlobal, error) { + parsed, err := SystemConfigGlobalMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SystemConfigGlobalBin), backend, certManager) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SystemConfigGlobal{SystemConfigGlobalCaller: SystemConfigGlobalCaller{contract: contract}, SystemConfigGlobalTransactor: SystemConfigGlobalTransactor{contract: contract}, SystemConfigGlobalFilterer: SystemConfigGlobalFilterer{contract: contract}}, nil +} + +// SystemConfigGlobal is an auto generated Go binding around an Ethereum contract. +type SystemConfigGlobal struct { + SystemConfigGlobalCaller // Read-only binding to the contract + SystemConfigGlobalTransactor // Write-only binding to the contract + SystemConfigGlobalFilterer // Log filterer for contract events +} + +// SystemConfigGlobalCaller is an auto generated read-only Go binding around an Ethereum contract. +type SystemConfigGlobalCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SystemConfigGlobalTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SystemConfigGlobalTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SystemConfigGlobalFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SystemConfigGlobalFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SystemConfigGlobalSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SystemConfigGlobalSession struct { + Contract *SystemConfigGlobal // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SystemConfigGlobalCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SystemConfigGlobalCallerSession struct { + Contract *SystemConfigGlobalCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SystemConfigGlobalTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SystemConfigGlobalTransactorSession struct { + Contract *SystemConfigGlobalTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SystemConfigGlobalRaw is an auto generated low-level Go binding around an Ethereum contract. +type SystemConfigGlobalRaw struct { + Contract *SystemConfigGlobal // Generic contract binding to access the raw methods on +} + +// SystemConfigGlobalCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SystemConfigGlobalCallerRaw struct { + Contract *SystemConfigGlobalCaller // Generic read-only contract binding to access the raw methods on +} + +// SystemConfigGlobalTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SystemConfigGlobalTransactorRaw struct { + Contract *SystemConfigGlobalTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSystemConfigGlobal creates a new instance of SystemConfigGlobal, bound to a specific deployed contract. +func NewSystemConfigGlobal(address common.Address, backend bind.ContractBackend) (*SystemConfigGlobal, error) { + contract, err := bindSystemConfigGlobal(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SystemConfigGlobal{SystemConfigGlobalCaller: SystemConfigGlobalCaller{contract: contract}, SystemConfigGlobalTransactor: SystemConfigGlobalTransactor{contract: contract}, SystemConfigGlobalFilterer: SystemConfigGlobalFilterer{contract: contract}}, nil +} + +// NewSystemConfigGlobalCaller creates a new read-only instance of SystemConfigGlobal, bound to a specific deployed contract. +func NewSystemConfigGlobalCaller(address common.Address, caller bind.ContractCaller) (*SystemConfigGlobalCaller, error) { + contract, err := bindSystemConfigGlobal(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SystemConfigGlobalCaller{contract: contract}, nil +} + +// NewSystemConfigGlobalTransactor creates a new write-only instance of SystemConfigGlobal, bound to a specific deployed contract. +func NewSystemConfigGlobalTransactor(address common.Address, transactor bind.ContractTransactor) (*SystemConfigGlobalTransactor, error) { + contract, err := bindSystemConfigGlobal(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SystemConfigGlobalTransactor{contract: contract}, nil +} + +// NewSystemConfigGlobalFilterer creates a new log filterer instance of SystemConfigGlobal, bound to a specific deployed contract. +func NewSystemConfigGlobalFilterer(address common.Address, filterer bind.ContractFilterer) (*SystemConfigGlobalFilterer, error) { + contract, err := bindSystemConfigGlobal(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SystemConfigGlobalFilterer{contract: contract}, nil +} + +// bindSystemConfigGlobal binds a generic wrapper to an already deployed contract. +func bindSystemConfigGlobal(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := SystemConfigGlobalMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SystemConfigGlobal *SystemConfigGlobalRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SystemConfigGlobal.Contract.SystemConfigGlobalCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SystemConfigGlobal *SystemConfigGlobalRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.SystemConfigGlobalTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SystemConfigGlobal *SystemConfigGlobalRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.SystemConfigGlobalTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SystemConfigGlobal *SystemConfigGlobalCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SystemConfigGlobal.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SystemConfigGlobal *SystemConfigGlobalTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SystemConfigGlobal *SystemConfigGlobalTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.contract.Transact(opts, method, params...) +} + +// ATTESTATIONDIGEST is a free data retrieval call binding the contract method 0x3893af6d. +// +// Solidity: function ATTESTATION_DIGEST() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) ATTESTATIONDIGEST(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "ATTESTATION_DIGEST") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ATTESTATIONDIGEST is a free data retrieval call binding the contract method 0x3893af6d. +// +// Solidity: function ATTESTATION_DIGEST() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalSession) ATTESTATIONDIGEST() ([32]byte, error) { + return _SystemConfigGlobal.Contract.ATTESTATIONDIGEST(&_SystemConfigGlobal.CallOpts) +} + +// ATTESTATIONDIGEST is a free data retrieval call binding the contract method 0x3893af6d. +// +// Solidity: function ATTESTATION_DIGEST() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) ATTESTATIONDIGEST() ([32]byte, error) { + return _SystemConfigGlobal.Contract.ATTESTATIONDIGEST(&_SystemConfigGlobal.CallOpts) +} + +// ATTESTATIONTBSPREFIX is a free data retrieval call binding the contract method 0x2d4bad8a. +// +// Solidity: function ATTESTATION_TBS_PREFIX() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) ATTESTATIONTBSPREFIX(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "ATTESTATION_TBS_PREFIX") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ATTESTATIONTBSPREFIX is a free data retrieval call binding the contract method 0x2d4bad8a. +// +// Solidity: function ATTESTATION_TBS_PREFIX() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalSession) ATTESTATIONTBSPREFIX() ([32]byte, error) { + return _SystemConfigGlobal.Contract.ATTESTATIONTBSPREFIX(&_SystemConfigGlobal.CallOpts) +} + +// ATTESTATIONTBSPREFIX is a free data retrieval call binding the contract method 0x2d4bad8a. +// +// Solidity: function ATTESTATION_TBS_PREFIX() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) ATTESTATIONTBSPREFIX() ([32]byte, error) { + return _SystemConfigGlobal.Contract.ATTESTATIONTBSPREFIX(&_SystemConfigGlobal.CallOpts) +} + +// CABUNDLEKEY is a free data retrieval call binding the contract method 0x9cc3eb48. +// +// Solidity: function CABUNDLE_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) CABUNDLEKEY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "CABUNDLE_KEY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CABUNDLEKEY is a free data retrieval call binding the contract method 0x9cc3eb48. +// +// Solidity: function CABUNDLE_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalSession) CABUNDLEKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.CABUNDLEKEY(&_SystemConfigGlobal.CallOpts) +} + +// CABUNDLEKEY is a free data retrieval call binding the contract method 0x9cc3eb48. +// +// Solidity: function CABUNDLE_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) CABUNDLEKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.CABUNDLEKEY(&_SystemConfigGlobal.CallOpts) +} + +// CERTIFICATEKEY is a free data retrieval call binding the contract method 0xae951149. +// +// Solidity: function CERTIFICATE_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) CERTIFICATEKEY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "CERTIFICATE_KEY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// CERTIFICATEKEY is a free data retrieval call binding the contract method 0xae951149. +// +// Solidity: function CERTIFICATE_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalSession) CERTIFICATEKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.CERTIFICATEKEY(&_SystemConfigGlobal.CallOpts) +} + +// CERTIFICATEKEY is a free data retrieval call binding the contract method 0xae951149. +// +// Solidity: function CERTIFICATE_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) CERTIFICATEKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.CERTIFICATEKEY(&_SystemConfigGlobal.CallOpts) +} + +// DIGESTKEY is a free data retrieval call binding the contract method 0x6be1e68b. +// +// Solidity: function DIGEST_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) DIGESTKEY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "DIGEST_KEY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DIGESTKEY is a free data retrieval call binding the contract method 0x6be1e68b. +// +// Solidity: function DIGEST_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalSession) DIGESTKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.DIGESTKEY(&_SystemConfigGlobal.CallOpts) +} + +// DIGESTKEY is a free data retrieval call binding the contract method 0x6be1e68b. +// +// Solidity: function DIGEST_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) DIGESTKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.DIGESTKEY(&_SystemConfigGlobal.CallOpts) +} + +// MAXAGE is a free data retrieval call binding the contract method 0x0dcaeaf2. +// +// Solidity: function MAX_AGE() view returns(uint256) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) MAXAGE(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "MAX_AGE") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MAXAGE is a free data retrieval call binding the contract method 0x0dcaeaf2. +// +// Solidity: function MAX_AGE() view returns(uint256) +func (_SystemConfigGlobal *SystemConfigGlobalSession) MAXAGE() (*big.Int, error) { + return _SystemConfigGlobal.Contract.MAXAGE(&_SystemConfigGlobal.CallOpts) +} + +// MAXAGE is a free data retrieval call binding the contract method 0x0dcaeaf2. +// +// Solidity: function MAX_AGE() view returns(uint256) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) MAXAGE() (*big.Int, error) { + return _SystemConfigGlobal.Contract.MAXAGE(&_SystemConfigGlobal.CallOpts) +} + +// MODULEIDKEY is a free data retrieval call binding the contract method 0x9adb2d68. +// +// Solidity: function MODULE_ID_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) MODULEIDKEY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "MODULE_ID_KEY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// MODULEIDKEY is a free data retrieval call binding the contract method 0x9adb2d68. +// +// Solidity: function MODULE_ID_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalSession) MODULEIDKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.MODULEIDKEY(&_SystemConfigGlobal.CallOpts) +} + +// MODULEIDKEY is a free data retrieval call binding the contract method 0x9adb2d68. +// +// Solidity: function MODULE_ID_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) MODULEIDKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.MODULEIDKEY(&_SystemConfigGlobal.CallOpts) +} + +// NONCEKEY is a free data retrieval call binding the contract method 0x6378aad5. +// +// Solidity: function NONCE_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) NONCEKEY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "NONCE_KEY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// NONCEKEY is a free data retrieval call binding the contract method 0x6378aad5. +// +// Solidity: function NONCE_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalSession) NONCEKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.NONCEKEY(&_SystemConfigGlobal.CallOpts) +} + +// NONCEKEY is a free data retrieval call binding the contract method 0x6378aad5. +// +// Solidity: function NONCE_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) NONCEKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.NONCEKEY(&_SystemConfigGlobal.CallOpts) +} + +// PCRSKEY is a free data retrieval call binding the contract method 0xb22bed7e. +// +// Solidity: function PCRS_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) PCRSKEY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "PCRS_KEY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PCRSKEY is a free data retrieval call binding the contract method 0xb22bed7e. +// +// Solidity: function PCRS_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalSession) PCRSKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.PCRSKEY(&_SystemConfigGlobal.CallOpts) +} + +// PCRSKEY is a free data retrieval call binding the contract method 0xb22bed7e. +// +// Solidity: function PCRS_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) PCRSKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.PCRSKEY(&_SystemConfigGlobal.CallOpts) +} + +// PUBLICKEYKEY is a free data retrieval call binding the contract method 0xe8b6d3fe. +// +// Solidity: function PUBLIC_KEY_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) PUBLICKEYKEY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "PUBLIC_KEY_KEY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PUBLICKEYKEY is a free data retrieval call binding the contract method 0xe8b6d3fe. +// +// Solidity: function PUBLIC_KEY_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalSession) PUBLICKEYKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.PUBLICKEYKEY(&_SystemConfigGlobal.CallOpts) +} + +// PUBLICKEYKEY is a free data retrieval call binding the contract method 0xe8b6d3fe. +// +// Solidity: function PUBLIC_KEY_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) PUBLICKEYKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.PUBLICKEYKEY(&_SystemConfigGlobal.CallOpts) +} + +// TIMESTAMPKEY is a free data retrieval call binding the contract method 0xe0a655ff. +// +// Solidity: function TIMESTAMP_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) TIMESTAMPKEY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "TIMESTAMP_KEY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// TIMESTAMPKEY is a free data retrieval call binding the contract method 0xe0a655ff. +// +// Solidity: function TIMESTAMP_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalSession) TIMESTAMPKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.TIMESTAMPKEY(&_SystemConfigGlobal.CallOpts) +} + +// TIMESTAMPKEY is a free data retrieval call binding the contract method 0xe0a655ff. +// +// Solidity: function TIMESTAMP_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) TIMESTAMPKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.TIMESTAMPKEY(&_SystemConfigGlobal.CallOpts) +} + +// USERDATAKEY is a free data retrieval call binding the contract method 0xcebf08d7. +// +// Solidity: function USER_DATA_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) USERDATAKEY(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "USER_DATA_KEY") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// USERDATAKEY is a free data retrieval call binding the contract method 0xcebf08d7. +// +// Solidity: function USER_DATA_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalSession) USERDATAKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.USERDATAKEY(&_SystemConfigGlobal.CallOpts) +} + +// USERDATAKEY is a free data retrieval call binding the contract method 0xcebf08d7. +// +// Solidity: function USER_DATA_KEY() view returns(bytes32) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) USERDATAKEY() ([32]byte, error) { + return _SystemConfigGlobal.Contract.USERDATAKEY(&_SystemConfigGlobal.CallOpts) +} + +// CertManager is a free data retrieval call binding the contract method 0x739e8484. +// +// Solidity: function certManager() view returns(address) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) CertManager(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "certManager") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// CertManager is a free data retrieval call binding the contract method 0x739e8484. +// +// Solidity: function certManager() view returns(address) +func (_SystemConfigGlobal *SystemConfigGlobalSession) CertManager() (common.Address, error) { + return _SystemConfigGlobal.Contract.CertManager(&_SystemConfigGlobal.CallOpts) +} + +// CertManager is a free data retrieval call binding the contract method 0x739e8484. +// +// Solidity: function certManager() view returns(address) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) CertManager() (common.Address, error) { + return _SystemConfigGlobal.Contract.CertManager(&_SystemConfigGlobal.CallOpts) +} + +// DecodeAttestationTbs is a free data retrieval call binding the contract method 0xa903a277. +// +// Solidity: function decodeAttestationTbs(bytes attestation) pure returns(bytes attestationTbs, bytes signature) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) DecodeAttestationTbs(opts *bind.CallOpts, attestation []byte) (struct { + AttestationTbs []byte + Signature []byte +}, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "decodeAttestationTbs", attestation) + + outstruct := new(struct { + AttestationTbs []byte + Signature []byte + }) + if err != nil { + return *outstruct, err + } + + outstruct.AttestationTbs = *abi.ConvertType(out[0], new([]byte)).(*[]byte) + outstruct.Signature = *abi.ConvertType(out[1], new([]byte)).(*[]byte) + + return *outstruct, err + +} + +// DecodeAttestationTbs is a free data retrieval call binding the contract method 0xa903a277. +// +// Solidity: function decodeAttestationTbs(bytes attestation) pure returns(bytes attestationTbs, bytes signature) +func (_SystemConfigGlobal *SystemConfigGlobalSession) DecodeAttestationTbs(attestation []byte) (struct { + AttestationTbs []byte + Signature []byte +}, error) { + return _SystemConfigGlobal.Contract.DecodeAttestationTbs(&_SystemConfigGlobal.CallOpts, attestation) +} + +// DecodeAttestationTbs is a free data retrieval call binding the contract method 0xa903a277. +// +// Solidity: function decodeAttestationTbs(bytes attestation) pure returns(bytes attestationTbs, bytes signature) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) DecodeAttestationTbs(attestation []byte) (struct { + AttestationTbs []byte + Signature []byte +}, error) { + return _SystemConfigGlobal.Contract.DecodeAttestationTbs(&_SystemConfigGlobal.CallOpts, attestation) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_SystemConfigGlobal *SystemConfigGlobalSession) Owner() (common.Address, error) { + return _SystemConfigGlobal.Contract.Owner(&_SystemConfigGlobal.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) Owner() (common.Address, error) { + return _SystemConfigGlobal.Contract.Owner(&_SystemConfigGlobal.CallOpts) +} + +// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90. +// +// Solidity: function proposer() view returns(address) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) Proposer(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "proposer") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90. +// +// Solidity: function proposer() view returns(address) +func (_SystemConfigGlobal *SystemConfigGlobalSession) Proposer() (common.Address, error) { + return _SystemConfigGlobal.Contract.Proposer(&_SystemConfigGlobal.CallOpts) +} + +// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90. +// +// Solidity: function proposer() view returns(address) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) Proposer() (common.Address, error) { + return _SystemConfigGlobal.Contract.Proposer(&_SystemConfigGlobal.CallOpts) +} + +// ValidPCR0s is a free data retrieval call binding the contract method 0x295840d9. +// +// Solidity: function validPCR0s(bytes32 ) view returns(bool) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) ValidPCR0s(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "validPCR0s", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// ValidPCR0s is a free data retrieval call binding the contract method 0x295840d9. +// +// Solidity: function validPCR0s(bytes32 ) view returns(bool) +func (_SystemConfigGlobal *SystemConfigGlobalSession) ValidPCR0s(arg0 [32]byte) (bool, error) { + return _SystemConfigGlobal.Contract.ValidPCR0s(&_SystemConfigGlobal.CallOpts, arg0) +} + +// ValidPCR0s is a free data retrieval call binding the contract method 0x295840d9. +// +// Solidity: function validPCR0s(bytes32 ) view returns(bool) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) ValidPCR0s(arg0 [32]byte) (bool, error) { + return _SystemConfigGlobal.Contract.ValidPCR0s(&_SystemConfigGlobal.CallOpts, arg0) +} + +// ValidSigners is a free data retrieval call binding the contract method 0x6a73b00b. +// +// Solidity: function validSigners(address ) view returns(bool) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) ValidSigners(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "validSigners", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// ValidSigners is a free data retrieval call binding the contract method 0x6a73b00b. +// +// Solidity: function validSigners(address ) view returns(bool) +func (_SystemConfigGlobal *SystemConfigGlobalSession) ValidSigners(arg0 common.Address) (bool, error) { + return _SystemConfigGlobal.Contract.ValidSigners(&_SystemConfigGlobal.CallOpts, arg0) +} + +// ValidSigners is a free data retrieval call binding the contract method 0x6a73b00b. +// +// Solidity: function validSigners(address ) view returns(bool) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) ValidSigners(arg0 common.Address) (bool, error) { + return _SystemConfigGlobal.Contract.ValidSigners(&_SystemConfigGlobal.CallOpts, arg0) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() pure returns(string) +func (_SystemConfigGlobal *SystemConfigGlobalCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _SystemConfigGlobal.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() pure returns(string) +func (_SystemConfigGlobal *SystemConfigGlobalSession) Version() (string, error) { + return _SystemConfigGlobal.Contract.Version(&_SystemConfigGlobal.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() pure returns(string) +func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) Version() (string, error) { + return _SystemConfigGlobal.Contract.Version(&_SystemConfigGlobal.CallOpts) +} + +// DeregisterPCR0 is a paid mutator transaction binding the contract method 0x50697a3f. +// +// Solidity: function deregisterPCR0(bytes pcr0) returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactor) DeregisterPCR0(opts *bind.TransactOpts, pcr0 []byte) (*types.Transaction, error) { + return _SystemConfigGlobal.contract.Transact(opts, "deregisterPCR0", pcr0) +} + +// DeregisterPCR0 is a paid mutator transaction binding the contract method 0x50697a3f. +// +// Solidity: function deregisterPCR0(bytes pcr0) returns() +func (_SystemConfigGlobal *SystemConfigGlobalSession) DeregisterPCR0(pcr0 []byte) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.DeregisterPCR0(&_SystemConfigGlobal.TransactOpts, pcr0) +} + +// DeregisterPCR0 is a paid mutator transaction binding the contract method 0x50697a3f. +// +// Solidity: function deregisterPCR0(bytes pcr0) returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) DeregisterPCR0(pcr0 []byte) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.DeregisterPCR0(&_SystemConfigGlobal.TransactOpts, pcr0) +} + +// DeregisterSigner is a paid mutator transaction binding the contract method 0x0ba24fe0. +// +// Solidity: function deregisterSigner(address signer) returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactor) DeregisterSigner(opts *bind.TransactOpts, signer common.Address) (*types.Transaction, error) { + return _SystemConfigGlobal.contract.Transact(opts, "deregisterSigner", signer) +} + +// DeregisterSigner is a paid mutator transaction binding the contract method 0x0ba24fe0. +// +// Solidity: function deregisterSigner(address signer) returns() +func (_SystemConfigGlobal *SystemConfigGlobalSession) DeregisterSigner(signer common.Address) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.DeregisterSigner(&_SystemConfigGlobal.TransactOpts, signer) +} + +// DeregisterSigner is a paid mutator transaction binding the contract method 0x0ba24fe0. +// +// Solidity: function deregisterSigner(address signer) returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) DeregisterSigner(signer common.Address) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.DeregisterSigner(&_SystemConfigGlobal.TransactOpts, signer) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _owner) returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address) (*types.Transaction, error) { + return _SystemConfigGlobal.contract.Transact(opts, "initialize", _owner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _owner) returns() +func (_SystemConfigGlobal *SystemConfigGlobalSession) Initialize(_owner common.Address) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.Initialize(&_SystemConfigGlobal.TransactOpts, _owner) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. +// +// Solidity: function initialize(address _owner) returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) Initialize(_owner common.Address) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.Initialize(&_SystemConfigGlobal.TransactOpts, _owner) +} + +// RegisterPCR0 is a paid mutator transaction binding the contract method 0x2c68fa02. +// +// Solidity: function registerPCR0(bytes pcr0) returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactor) RegisterPCR0(opts *bind.TransactOpts, pcr0 []byte) (*types.Transaction, error) { + return _SystemConfigGlobal.contract.Transact(opts, "registerPCR0", pcr0) +} + +// RegisterPCR0 is a paid mutator transaction binding the contract method 0x2c68fa02. +// +// Solidity: function registerPCR0(bytes pcr0) returns() +func (_SystemConfigGlobal *SystemConfigGlobalSession) RegisterPCR0(pcr0 []byte) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.RegisterPCR0(&_SystemConfigGlobal.TransactOpts, pcr0) +} + +// RegisterPCR0 is a paid mutator transaction binding the contract method 0x2c68fa02. +// +// Solidity: function registerPCR0(bytes pcr0) returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) RegisterPCR0(pcr0 []byte) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.RegisterPCR0(&_SystemConfigGlobal.TransactOpts, pcr0) +} + +// RegisterSigner is a paid mutator transaction binding the contract method 0xba58e82a. +// +// Solidity: function registerSigner(bytes attestationTbs, bytes signature) returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactor) RegisterSigner(opts *bind.TransactOpts, attestationTbs []byte, signature []byte) (*types.Transaction, error) { + return _SystemConfigGlobal.contract.Transact(opts, "registerSigner", attestationTbs, signature) +} + +// RegisterSigner is a paid mutator transaction binding the contract method 0xba58e82a. +// +// Solidity: function registerSigner(bytes attestationTbs, bytes signature) returns() +func (_SystemConfigGlobal *SystemConfigGlobalSession) RegisterSigner(attestationTbs []byte, signature []byte) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.RegisterSigner(&_SystemConfigGlobal.TransactOpts, attestationTbs, signature) +} + +// RegisterSigner is a paid mutator transaction binding the contract method 0xba58e82a. +// +// Solidity: function registerSigner(bytes attestationTbs, bytes signature) returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) RegisterSigner(attestationTbs []byte, signature []byte) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.RegisterSigner(&_SystemConfigGlobal.TransactOpts, attestationTbs, signature) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SystemConfigGlobal.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_SystemConfigGlobal *SystemConfigGlobalSession) RenounceOwnership() (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.RenounceOwnership(&_SystemConfigGlobal.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.RenounceOwnership(&_SystemConfigGlobal.TransactOpts) +} + +// SetProposer is a paid mutator transaction binding the contract method 0x1fb4a228. +// +// Solidity: function setProposer(address _proposer) returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactor) SetProposer(opts *bind.TransactOpts, _proposer common.Address) (*types.Transaction, error) { + return _SystemConfigGlobal.contract.Transact(opts, "setProposer", _proposer) +} + +// SetProposer is a paid mutator transaction binding the contract method 0x1fb4a228. +// +// Solidity: function setProposer(address _proposer) returns() +func (_SystemConfigGlobal *SystemConfigGlobalSession) SetProposer(_proposer common.Address) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.SetProposer(&_SystemConfigGlobal.TransactOpts, _proposer) +} + +// SetProposer is a paid mutator transaction binding the contract method 0x1fb4a228. +// +// Solidity: function setProposer(address _proposer) returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) SetProposer(_proposer common.Address) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.SetProposer(&_SystemConfigGlobal.TransactOpts, _proposer) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _SystemConfigGlobal.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_SystemConfigGlobal *SystemConfigGlobalSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.TransferOwnership(&_SystemConfigGlobal.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.TransferOwnership(&_SystemConfigGlobal.TransactOpts, newOwner) +} + +// ValidateAttestation is a paid mutator transaction binding the contract method 0x05f7aead. +// +// Solidity: function validateAttestation(bytes attestationTbs, bytes signature) returns((uint256,uint64,uint256,uint256[],uint256,uint256[],uint256,uint256,uint256)) +func (_SystemConfigGlobal *SystemConfigGlobalTransactor) ValidateAttestation(opts *bind.TransactOpts, attestationTbs []byte, signature []byte) (*types.Transaction, error) { + return _SystemConfigGlobal.contract.Transact(opts, "validateAttestation", attestationTbs, signature) +} + +// ValidateAttestation is a paid mutator transaction binding the contract method 0x05f7aead. +// +// Solidity: function validateAttestation(bytes attestationTbs, bytes signature) returns((uint256,uint64,uint256,uint256[],uint256,uint256[],uint256,uint256,uint256)) +func (_SystemConfigGlobal *SystemConfigGlobalSession) ValidateAttestation(attestationTbs []byte, signature []byte) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.ValidateAttestation(&_SystemConfigGlobal.TransactOpts, attestationTbs, signature) +} + +// ValidateAttestation is a paid mutator transaction binding the contract method 0x05f7aead. +// +// Solidity: function validateAttestation(bytes attestationTbs, bytes signature) returns((uint256,uint64,uint256,uint256[],uint256,uint256[],uint256,uint256,uint256)) +func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) ValidateAttestation(attestationTbs []byte, signature []byte) (*types.Transaction, error) { + return _SystemConfigGlobal.Contract.ValidateAttestation(&_SystemConfigGlobal.TransactOpts, attestationTbs, signature) +} + +// SystemConfigGlobalInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the SystemConfigGlobal contract. +type SystemConfigGlobalInitializedIterator struct { + Event *SystemConfigGlobalInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SystemConfigGlobalInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SystemConfigGlobalInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SystemConfigGlobalInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SystemConfigGlobalInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SystemConfigGlobalInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SystemConfigGlobalInitialized represents a Initialized event raised by the SystemConfigGlobal contract. +type SystemConfigGlobalInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_SystemConfigGlobal *SystemConfigGlobalFilterer) FilterInitialized(opts *bind.FilterOpts) (*SystemConfigGlobalInitializedIterator, error) { + + logs, sub, err := _SystemConfigGlobal.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &SystemConfigGlobalInitializedIterator{contract: _SystemConfigGlobal.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_SystemConfigGlobal *SystemConfigGlobalFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *SystemConfigGlobalInitialized) (event.Subscription, error) { + + logs, sub, err := _SystemConfigGlobal.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SystemConfigGlobalInitialized) + if err := _SystemConfigGlobal.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_SystemConfigGlobal *SystemConfigGlobalFilterer) ParseInitialized(log types.Log) (*SystemConfigGlobalInitialized, error) { + event := new(SystemConfigGlobalInitialized) + if err := _SystemConfigGlobal.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SystemConfigGlobalOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the SystemConfigGlobal contract. +type SystemConfigGlobalOwnershipTransferredIterator struct { + Event *SystemConfigGlobalOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *SystemConfigGlobalOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(SystemConfigGlobalOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(SystemConfigGlobalOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *SystemConfigGlobalOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SystemConfigGlobalOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SystemConfigGlobalOwnershipTransferred represents a OwnershipTransferred event raised by the SystemConfigGlobal contract. +type SystemConfigGlobalOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_SystemConfigGlobal *SystemConfigGlobalFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*SystemConfigGlobalOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _SystemConfigGlobal.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &SystemConfigGlobalOwnershipTransferredIterator{contract: _SystemConfigGlobal.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_SystemConfigGlobal *SystemConfigGlobalFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *SystemConfigGlobalOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _SystemConfigGlobal.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(SystemConfigGlobalOwnershipTransferred) + if err := _SystemConfigGlobal.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_SystemConfigGlobal *SystemConfigGlobalFilterer) ParseOwnershipTransferred(log types.Log) (*SystemConfigGlobalOwnershipTransferred, error) { + event := new(SystemConfigGlobalOwnershipTransferred) + if err := _SystemConfigGlobal.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/deployments/84532-certmanager.json b/deployments/84532-certmanager.json index 31c750f..b1dbf58 100644 --- a/deployments/84532-certmanager.json +++ b/deployments/84532-certmanager.json @@ -1,3 +1,3 @@ { - "CertManager": "0x00a452e7B56052f0beC5EF863F77eDDfd81938C4" + "CertManager": "0xD42fd50A9A8eE3F127A11AEACD4ADAA67Da7FE3B" } \ No newline at end of file diff --git a/deployments/84532-deploy.json b/deployments/84532-deploy.json index c280e5e..9fefd3a 100644 --- a/deployments/84532-deploy.json +++ b/deployments/84532-deploy.json @@ -1,7 +1,7 @@ { "AddressManager": "0xdcB1Ee2F0F35F8053C1EbD700c030180f7b2C14b", "AnchorStateRegistryProxy": "0x0000000000000000000000000000000000000001", - "CertManager": "0x00a452e7B56052f0beC5EF863F77eDDfd81938C4", + "CertManager": "0xD42fd50A9A8eE3F127A11AEACD4ADAA67Da7FE3B", "DelayedWETHProxy": "0x0000000000000000000000000000000000000001", "DeployChain": "0x8B4dB9468126EA0AA6EC8f1FAEb32173de3A27c7", "DisputeGameFactoryProxy": "0x0000000000000000000000000000000000000001", @@ -27,7 +27,7 @@ "SuperchainConfig": "0xC77dB710C47b6e294D3d544572a10187e8Ef6b2C", "SuperchainConfigProxy": "0xCf940f9c053092d07EB62DaB59D0AFddF426dE67", "SystemConfig": "0x8aB8559E6C661eFEB0a44C0f08E180CEe344dABE", - "SystemConfigGlobal": "0x9C9a3B1c8676c1E0A6Ebb9402E7354930Bc52A59", + "SystemConfigGlobal": "0x0933e802B0977fe6287C48a0F601b39244118E04", "SystemConfigGlobalProxy": "0x53200eC3d6E91E7Ba1fD1087D38430F43501C9Fb", "SystemConfigProxy": "0x57708f73fF01e8697799B38f47Fbd65bDf9138Bc", "SystemOwnerSafe": "0xFCD4AfF397A2F9D2a435B64AdA1A70efC59310aD" diff --git a/lib/nitro-validator b/lib/nitro-validator index c4d1396..9cf6ecb 160000 --- a/lib/nitro-validator +++ b/lib/nitro-validator @@ -1 +1 @@ -Subproject commit c4d13965f3ce86cfe82184f87c6ec482bf39bae4 +Subproject commit 9cf6ecb1b597d1c53fb3a616c294656409542f48 diff --git a/register-signer/main.go b/register-signer/main.go new file mode 100644 index 0000000..12794a1 --- /dev/null +++ b/register-signer/main.go @@ -0,0 +1,181 @@ +package main + +import ( + "bytes" + "context" + "encoding/json" + "flag" + "fmt" + "os" + "time" + + "github.com/base-org/op-enclave/bindings" + "github.com/base-org/op-enclave/op-withdrawer/withdrawals" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/hf/nitrite" +) + +type deployment struct { + SystemConfigGlobalProxy common.Address `json:"SystemConfigGlobalProxy"` +} + +func main() { + var attestationHex string + var rpcUrl string + var privateKeyHex string + var deploymentFile string + flag.StringVar(&attestationHex, "attestation", "", "attestation hex") + flag.StringVar(&rpcUrl, "rpc", "https://sepolia.base.org", "rpc url") + flag.StringVar(&privateKeyHex, "private-key", "", "private key") + flag.StringVar(&deploymentFile, "deployment", "deployments/84532-deploy.json", "deployment file") + flag.Parse() + + if attestationHex == "" || privateKeyHex == "" { + flag.Usage() + os.Exit(1) + } + + attestation, err := hexutil.Decode(attestationHex) + if err != nil { + panic(err) + } + privateKey, err := hexutil.Decode(privateKeyHex) + if err != nil { + panic(err) + } + + res, err := nitrite.Verify(attestation, nitrite.VerifyOptions{}) + if err != nil { + panic(err) + } + + ctx := context.Background() + client, err := ethclient.DialContext(ctx, rpcUrl) + if err != nil { + panic(err) + } + + deploy, err := os.ReadFile(deploymentFile) + if err != nil { + panic(err) + } + var d deployment + err = json.Unmarshal(deploy, &d) + if err != nil { + panic(err) + } + + if bytes.Equal(common.Address{}.Bytes(), d.SystemConfigGlobalProxy.Bytes()) { + panic("SystemConfigGlobalProxy address not found in deployment file") + } + + key, err := crypto.ToECDSA(privateKey) + if err != nil { + panic(err) + } + + chainId, err := client.ChainID(ctx) + if err != nil { + panic(err) + } + signer := types.LatestSignerForChainID(chainId) + auth := &bind.TransactOpts{ + From: crypto.PubkeyToAddress(key.PublicKey), + Signer: func(_ common.Address, tx *types.Transaction) (*types.Transaction, error) { + return types.SignTx(tx, signer, key) + }, + } + + systemConfigGlobal, err := bindings.NewSystemConfigGlobal(d.SystemConfigGlobalProxy, client) + if err != nil { + panic(err) + } + + pub, err := crypto.UnmarshalPubkey(res.Document.PublicKey) + if err != nil { + panic(err) + } + signerAddr := crypto.PubkeyToAddress(*pub) + validSigner, err := systemConfigGlobal.ValidSigners(&bind.CallOpts{}, signerAddr) + if err != nil { + panic(err) + } + fmt.Printf("Public key: %s\n", hexutil.Encode(res.Document.PublicKey)) + fmt.Printf("Signer: %s\n", signerAddr.String()) + if validSigner { + fmt.Printf("Signer already registered: %s\n", signerAddr.String()) + return + } + + certManagerAddr, err := systemConfigGlobal.CertManager(&bind.CallOpts{}) + if err != nil { + panic(err) + } + certManager, err := bindings.NewCertManager(certManagerAddr, client) + if err != nil { + panic(err) + } + + verifyCert := func(cert []byte, ca bool, parentCertHash common.Hash) common.Hash { + certHash := crypto.Keccak256Hash(cert) + verified, err := certManager.Verified(&bind.CallOpts{}, certHash) + if err != nil { + panic(err) + } + if len(verified) == 0 { + tx, err := certManager.VerifyCert(auth, cert, ca, parentCertHash) + if err != nil { + panic(err) + } + receipt, err := withdrawals.WaitForReceipt(ctx, client, tx.Hash(), 2*time.Second) + if err != nil { + panic(err) + } + fmt.Printf("Verified cert: %s, tx: %s\n", certHash.String(), receipt.TxHash.String()) + } else { + fmt.Printf("Cert already verified: %s\n", certHash.String()) + } + return certHash + } + + parentCertHash := crypto.Keccak256Hash(res.Document.CABundle[0]) + for i := 0; i < len(res.Document.CABundle); i++ { + cert := res.Document.CABundle[i] + parentCertHash = verifyCert(cert, true, parentCertHash) + } + verifyCert(res.Document.Certificate, false, parentCertHash) + + pcr0Hash := crypto.Keccak256Hash(res.Document.PCRs[0]) + valid, err := systemConfigGlobal.ValidPCR0s(&bind.CallOpts{}, pcr0Hash) + if err != nil { + panic(err) + } + if !valid { + tx, err := systemConfigGlobal.RegisterPCR0(auth, res.Document.PCRs[0]) + if err != nil { + panic(err) + } + receipt, err := withdrawals.WaitForReceipt(ctx, client, tx.Hash(), 2*time.Second) + if err != nil { + panic(err) + } + fmt.Printf("Registered PCR0, tx: %s\n", receipt.TxHash.String()) + } else { + fmt.Printf("PCR0 already registered: %s\n", pcr0Hash.String()) + } + + tx, err := systemConfigGlobal.RegisterSigner(auth, res.COSESign1, res.Signature) + if err != nil { + panic(err) + } + receipt, err := withdrawals.WaitForReceipt(ctx, client, tx.Hash(), 2*time.Second) + if err != nil { + panic(err) + } + fmt.Printf("Registered signer, tx: %s\n", receipt.TxHash.String()) +} diff --git a/script/UpgradeSystemConfigGlobal.s.sol b/script/UpgradeSystemConfigGlobal.s.sol new file mode 100644 index 0000000..25f35bd --- /dev/null +++ b/script/UpgradeSystemConfigGlobal.s.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import {Script} from "forge-std/Script.sol"; +import {console2 as console} from "forge-std/console2.sol"; +import {DeployChain} from "../src/DeployChain.sol"; +import {Artifacts} from "@eth-optimism-bedrock/scripts/Artifacts.s.sol"; +import {ProxyAdmin} from "@eth-optimism-bedrock/src/universal/ProxyAdmin.sol"; +import {SystemConfigGlobal} from "../src/SystemConfigGlobal.sol"; +import {ICertManager} from "@nitro-validator/ICertManager.sol"; +import {IGnosisSafe, Enum} from "@eth-optimism-bedrock/scripts/interfaces/IGnosisSafe.sol"; + +contract UpgradeSystemConfigGlobal is Script, Artifacts { + function run() public { + _loadAddresses(deploymentOutfile); + + bytes memory signature = abi.encodePacked(uint256(uint160(msg.sender)), bytes32(0), uint8(1)); + + console.log("Deploying SystemConfigGlobal implementation"); + vm.startBroadcast(); + + address addr_ = address(new SystemConfigGlobal{salt: _implSalt()}(ICertManager(mustGetAddress("CertManager")))); + bytes memory data = + abi.encodeCall(ProxyAdmin.upgrade, (payable(mustGetAddress("SystemConfigGlobalProxy")), address(addr_))); + IGnosisSafe(mustGetAddress("SystemOwnerSafe")).execTransaction({ + to: mustGetAddress("ProxyAdmin"), + value: 0, + data: data, + operation: Enum.Operation.Call, + safeTxGas: 0, + baseGas: 0, + gasPrice: 0, + gasToken: address(0), + refundReceiver: payable(address(0)), + signatures: signature + }); + + vm.stopBroadcast(); + + delete _namedDeployments["SystemConfigGlobal"]; + save("SystemConfigGlobal", addr_); + } + + function _implSalt() internal view returns (bytes32 _env) { + _env = keccak256(bytes(vm.envOr("IMPL_SALT", string("ethers phoenix")))); + } +} diff --git a/src/SystemConfigGlobal.sol b/src/SystemConfigGlobal.sol index 7fe5533..737a99d 100644 --- a/src/SystemConfigGlobal.sol +++ b/src/SystemConfigGlobal.sol @@ -5,11 +5,14 @@ pragma solidity ^0.8.0; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import {ISemver} from "@eth-optimism-bedrock/src/universal/interfaces/ISemver.sol"; import {NitroValidator} from "@nitro-validator/NitroValidator.sol"; -import {CborDecode} from "@nitro-validator/CborDecode.sol"; +import {LibBytes} from "@nitro-validator/LibBytes.sol"; +import {LibCborElement, CborElement, CborDecode} from "@nitro-validator/CborDecode.sol"; import {ICertManager} from "@nitro-validator/ICertManager.sol"; contract SystemConfigGlobal is OwnableUpgradeable, ISemver, NitroValidator { + using LibBytes for bytes; using CborDecode for bytes; + using LibCborElement for CborElement; uint256 public constant MAX_AGE = 60 minutes; @@ -56,8 +59,8 @@ contract SystemConfigGlobal is OwnableUpgradeable, ISemver, NitroValidator { require(ptrs.timestamp + MAX_AGE > block.timestamp, "attestation too old"); - bytes memory publicKey = attestationTbs.slice(ptrs.publicKey); - address enclaveAddress = address(uint160(uint256(keccak256(publicKey)))); + bytes32 publicKeyHash = attestationTbs.keccak(ptrs.publicKey.start() + 1, ptrs.publicKey.length() - 1); + address enclaveAddress = address(uint160(uint256(publicKeyHash))); validSigners[enclaveAddress] = true; } diff --git a/test/SystemConfigGlobal.t.sol b/test/SystemConfigGlobal.t.sol index 898f7b8..ba9c6fd 100644 --- a/test/SystemConfigGlobal.t.sol +++ b/test/SystemConfigGlobal.t.sol @@ -26,7 +26,7 @@ contract SystemConfigGlobalTest is Test { (bytes memory attestationTbs, bytes memory signature) = systemConfigGlobal.decodeAttestationTbs(attestation); systemConfigGlobal.registerSigner(attestationTbs, signature); - address expectedSigner = 0xe04d808785d2BBdE18E9D0C01c05FB8CE0711f2d; + address expectedSigner = 0x874a4c5675cd4850dB08bD9A1e3184ED239087e4; assertTrue(systemConfigGlobal.validSigners(expectedSigner)); } }