SudoToken
Deploy on AlchemyContract Information
Explore the source code, ABI, and bytecode for the SudoToken smart contract.
More Info
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"owner_","type":"address"},{"internalType":"uint256","name":"dropMultiplier_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"SudoToken__CallerNotLockdrop","type":"error"},{"inputs":[],"name":"SudoToken__InvalidInput","type":"error"},{"inputs":[],"name":"SudoToken__LockdropAlreadyActive","type":"error"},{"inputs":[],"name":"SudoToken__TransferDisabled","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lockdrop_","type":"address"}],"name":"activateLockdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"isAllowed","type":"bool"}],"name":"addAllowedFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint32","name":"pos","type":"uint32"}],"name":"checkpoints","outputs":[{"components":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint224","name":"votes","type":"uint224"}],"internalType":"struct ERC20Votes.Checkpoint","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"oldTokenAmount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"drop","outputs":[{"internalType":"uint256","name":"newTokenAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dropMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPastTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPastVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockdrop","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"owner_","type":"address"},{"internalType":"uint256","name":"dropMultiplier_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"SudoToken__CallerNotLockdrop","type":"error"},{"inputs":[],"name":"SudoToken__InvalidInput","type":"error"},{"inputs":[],"name":"SudoToken__LockdropAlreadyActive","type":"error"},{"inputs":[],"name":"SudoToken__TransferDisabled","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lockdrop_","type":"address"}],"name":"activateLockdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"isAllowed","type":"bool"}],"name":"addAllowedFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint32","name":"pos","type":"uint32"}],"name":"checkpoints","outputs":[{"components":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint224","name":"votes","type":"uint224"}],"internalType":"struct ERC20Votes.Checkpoint","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"oldTokenAmount","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"drop","outputs":[{"internalType":"uint256","name":"newTokenAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dropMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPastTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPastVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockdrop","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
6101606040523480156200001257600080fd5b50604051620031d9380380620031d98339810160408190526200003591620002e4565b818480604051806040016040528060018152602001603160f81b815250878781600390805190602001906200006c92919062000171565b5080516200008290600490602084019062000171565b5050825160208085019190912083518483012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c0019052805194019390932091935091906080523060c052610120525050600a80546001600160a01b0319166001600160a01b038616908117909155604051909350600092507f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091508290a3506101405250620003b3915050565b8280546200017f9062000377565b90600052602060002090601f016020900481019282620001a35760008555620001ee565b82601f10620001be57805160ff1916838001178555620001ee565b82800160010185558215620001ee579182015b82811115620001ee578251825591602001919060010190620001d1565b50620001fc92915062000200565b5090565b5b80821115620001fc576000815560010162000201565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200023f57600080fd5b81516001600160401b03808211156200025c576200025c62000217565b604051601f8301601f19908116603f0116810190828211818310171562000287576200028762000217565b81604052838152602092508683858801011115620002a457600080fd5b600091505b83821015620002c85785820183015181830184015290820190620002a9565b83821115620002da5760008385830101525b9695505050505050565b60008060008060808587031215620002fb57600080fd5b84516001600160401b03808211156200031357600080fd5b62000321888389016200022d565b955060208701519150808211156200033857600080fd5b5062000347878288016200022d565b604087015190945090506001600160a01b03811681146200036757600080fd5b6060959095015193969295505050565b600181811c908216806200038c57607f821691505b602082108103620003ad57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610100516101205161014051612dc462000415600039600081816102e50152610ba40152600061195c015260006119ab01526000611986015260006118df01526000611909015260006119330152612dc46000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c806370a0823111610145578063a457c2d7116100bd578063d505accf1161008c578063f1127ed811610071578063f1127ed8146105c7578063f1b50c1d14610619578063f2fde38b1461062157600080fd5b8063d505accf1461056e578063dd62ed3e1461058157600080fd5b8063a457c2d714610522578063a9059cbb14610535578063b4b5ea5714610548578063c3cda5201461055b57600080fd5b806387e96a24116101145780638e539e8c116100f95780638e539e8c146104f457806395d89b41146105075780639ab24eb01461050f57600080fd5b806387e96a24146104c15780638da5cb5b146104d457600080fd5b806370a08231146104355780637500806f1461046b578063782d6fe11461047e5780637ecebe00146104ae57600080fd5b806332e07d9a116101d857806340c10f19116101a7578063587cde1e1161018c578063587cde1e146103c15780635c19a95c146103fa5780636fcfff451461040d57600080fd5b806340c10f19146103895780634cd412d51461039c57600080fd5b806332e07d9a146103165780633644e5151461035b57806339509351146103635780633a46b1a81461037657600080fd5b806318b822811161021457806318b82281146102b857806323b872dd146102cd57806327dc95c3146102e0578063313ce5671461030757600080fd5b80630455e6941461024657806306fdde031461027e578063095ea7b31461029357806318160ddd146102a6575b600080fd5b610269610254366004612937565b600c6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b610286610634565b6040516102759190612952565b6102696102a13660046129c5565b6106c6565b6002545b604051908152602001610275565b6102cb6102c6366004612937565b6106e0565b005b6102696102db3660046129ef565b61084a565b6102aa7f000000000000000000000000000000000000000000000000000000000000000081565b60405160128152602001610275565b600b546103369073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610275565b6102aa61086e565b6102696103713660046129c5565b61087d565b6102aa6103843660046129c5565b6108c9565b6102cb6103973660046129c5565b61096a565b600b546102699074010000000000000000000000000000000000000000900460ff1681565b6103366103cf366004612937565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600760205260409020541690565b6102cb610408366004612937565b6109f9565b61042061041b366004612937565b610a06565b60405163ffffffff9091168152602001610275565b6102aa610443366004612937565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102cb610479366004612a2b565b610a35565b61049161048c3660046129c5565b610b0c565b6040516bffffffffffffffffffffffff9091168152602001610275565b6102aa6104bc366004612937565b610b20565b6102aa6104cf366004612a67565b610b4b565b600a546103369073ffffffffffffffffffffffffffffffffffffffff1681565b6102aa610502366004612a93565b610bd5565b610286610c4b565b6102aa61051d366004612937565b610c5a565b6102696105303660046129c5565b610d3e565b6102696105433660046129c5565b610e0f565b610491610556366004612937565b610e1d565b6102cb610569366004612abd565b610e2b565b6102cb61057c366004612b15565b610fa2565b6102aa61058f366004612b7f565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6105da6105d5366004612ba9565b611161565b60408051825163ffffffff1681526020928301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169281019290925201610275565b6102cb611207565b6102cb61062f366004612937565b6112c9565b60606003805461064390612bde565b80601f016020809104026020016040519081016040528092919081815260200182805461066f90612bde565b80156106bc5780601f10610691576101008083540402835291602001916106bc565b820191906000526020600020905b81548152906001019060200180831161069f57829003601f168201915b5050505050905090565b6000336106d48185856113bb565b60019150505b92915050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166107b3576040517f3643e58e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b5473ffffffffffffffffffffffffffffffffffffffff1615610803576040517fcc080c7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60003361085885828561156e565b610863858585611645565b506001949350505050565b60006108786118c5565b905090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906106d490829086906108c4908790612c5a565b6113bb565b6000438210610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604482015260640161075d565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902061096390836119f9565b9392505050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146109eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640161075d565b6109f58282611b2a565b5050565b610a033382611be0565b50565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260408120546106da90611c7e565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610ab6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640161075d565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000610963610b1b84846108c9565b611d18565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560205260408120546106da565b600b5460009073ffffffffffffffffffffffffffffffffffffffff163314610b9f576040517f2bf2559000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc97f000000000000000000000000000000000000000000000000000000000000000084612c72565b90506106da8282611b2a565b6000438210610c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604482015260640161075d565b6106da6009836119f9565b60606004805461064390612bde565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260408120548015610d165773ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301908110610cdf57610cdf612caf565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610d19565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610e02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161075d565b61086382868684036113bb565b6000336106d4818585611645565b60006106da610b1b83610c5a565b83421115610e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4552433230566f7465733a207369676e61747572652065787069726564000000604482015260640161075d565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf602082015273ffffffffffffffffffffffffffffffffffffffff8816918101919091526060810186905260808101859052600090610f1c90610f149060a00160405160208183030381529060405280519060200120611db6565b858585611e1f565b9050610f2781611e47565b8614610f8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000604482015260640161075d565b610f998188611be0565b50505050505050565b8342111561100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161075d565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861103b8c611e47565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006110a382611db6565b905060006110b382878787611e1f565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161075d565b6111558a8a8a6113bb565b50505050505050505050565b604080518082019091526000808252602082015273ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805463ffffffff84169081106111b2576111b2612caf565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16918101919091529392505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640161075d565b600b80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b600a5473ffffffffffffffffffffffffffffffffffffffff16331461134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640161075d565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b73ffffffffffffffffffffffffffffffffffffffff831661145d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161075d565b73ffffffffffffffffffffffffffffffffffffffff8216611500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161075d565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461163f5781811015611632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161075d565b61163f84848484036113bb565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166116e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161075d565b73ffffffffffffffffffffffffffffffffffffffff821661178b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161075d565b611796838383611e7c565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161075d565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361163f848484611f2a565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561192b57507f000000000000000000000000000000000000000000000000000000000000000046145b1561195557507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b815460009081816005811115611a53576000611a1484611f69565b611a1e9085612cde565b600088815260209020909150869082015463ffffffff161115611a4357809150611a51565b611a4e816001612c5a565b92505b505b80821015611aa0576000611a678383612051565b600088815260209020909150869082015463ffffffff161115611a8c57809150611a9a565b611a97816001612c5a565b92505b50611a53565b8015611aff5760008681526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611b02565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169695505050505050565b611b34828261206c565b6002546bffffffffffffffffffffffff1015611bd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201527f766572666c6f77696e6720766f74657300000000000000000000000000000000606482015260840161075d565b61163f60096121738361217f565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152600760208181526040808420805485845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461163f828483612363565b600063ffffffff821115611d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f3220626974730000000000000000000000000000000000000000000000000000606482015260840161075d565b5090565b60006bffffffffffffffffffffffff821115611d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201527f3620626974730000000000000000000000000000000000000000000000000000606482015260840161075d565b60006106da611dc36118c5565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611e3087878787612508565b91509150611e3d816125f7565b5095945050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090208054600181018255905b50919050565b73ffffffffffffffffffffffffffffffffffffffff831615801590611ebc5750600b5474010000000000000000000000000000000000000000900460ff16155b8015611eee575073ffffffffffffffffffffffffffffffffffffffff83166000908152600c602052604090205460ff16155b15611f25576040517f12e2915200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260076020526040808220548584168352912054611f2592918216911683612363565b600081600003611f7b57506000919050565b60006001611f88846127aa565b901c6001901b90506001818481611fa157611fa1612cf5565b048201901c90506001818481611fb957611fb9612cf5565b048201901c90506001818481611fd157611fd1612cf5565b048201901c90506001818481611fe957611fe9612cf5565b048201901c9050600181848161200157612001612cf5565b048201901c9050600181848161201957612019612cf5565b048201901c9050600181848161203157612031612cf5565b048201901c90506109638182858161204b5761204b612cf5565b0461283e565b60006120606002848418612d24565b61096390848416612c5a565b73ffffffffffffffffffffffffffffffffffffffff82166120e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161075d565b6120f560008383611e7c565b80600260008282546121079190612c5a565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109f560008383611f2a565b60006109638284612c5a565b825460009081908181156121ff5760008781526020902082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160408051808201909152905463ffffffff8116825264010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166020820152612214565b60408051808201909152600080825260208201525b905080602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16935061224984868863ffffffff16565b92506000821180156122615750805163ffffffff1643145b156122d95761226f83612854565b60008881526020902083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092166401000000000263ffffffff909216919091179055612359565b8660405180604001604052806122ee43611c7e565b63ffffffff16815260200161230286612854565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561239f5750600081115b15611f255773ffffffffffffffffffffffffffffffffffffffff8316156124545773ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040812081906123f4906129028561217f565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612449929190918252602082015260400190565b60405180910390a250505b73ffffffffffffffffffffffffffffffffffffffff821615611f255773ffffffffffffffffffffffffffffffffffffffff8216600090815260086020526040812081906124a4906121738561217f565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516124f9929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561253f57506000905060036125ee565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612593573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166125e7576000600192509250506125ee565b9150600090505b94509492505050565b600081600481111561260b5761260b612d5f565b036126135750565b600181600481111561262757612627612d5f565b0361268e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161075d565b60028160048111156126a2576126a2612d5f565b03612709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161075d565b600381600481111561271d5761271d612d5f565b03610a03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161075d565b600080608083901c156127bf57608092831c92015b604083901c156127d157604092831c92015b602083901c156127e357602092831c92015b601083901c156127f557601092831c92015b600883901c1561280757600892831c92015b600483901c1561281957600492831c92015b600283901c1561282b57600292831c92015b600183901c156106da5760010192915050565b600081831061284d5781610963565b5090919050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115611d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f3234206269747300000000000000000000000000000000000000000000000000606482015260840161075d565b60006109638284612cde565b803573ffffffffffffffffffffffffffffffffffffffff8116811461293257600080fd5b919050565b60006020828403121561294957600080fd5b6109638261290e565b600060208083528351808285015260005b8181101561297f57858101830151858201604001528201612963565b81811115612991576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600080604083850312156129d857600080fd5b6129e18361290e565b946020939093013593505050565b600080600060608486031215612a0457600080fd5b612a0d8461290e565b9250612a1b6020850161290e565b9150604084013590509250925092565b60008060408385031215612a3e57600080fd5b612a478361290e565b915060208301358015158114612a5c57600080fd5b809150509250929050565b60008060408385031215612a7a57600080fd5b82359150612a8a6020840161290e565b90509250929050565b600060208284031215612aa557600080fd5b5035919050565b803560ff8116811461293257600080fd5b60008060008060008060c08789031215612ad657600080fd5b612adf8761290e565b95506020870135945060408701359350612afb60608801612aac565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215612b3057600080fd5b612b398861290e565b9650612b476020890161290e565b95506040880135945060608801359350612b6360808901612aac565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215612b9257600080fd5b612b9b8361290e565b9150612a8a6020840161290e565b60008060408385031215612bbc57600080fd5b612bc58361290e565b9150602083013563ffffffff81168114612a5c57600080fd5b600181811c90821680612bf257607f821691505b602082108103611e76577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612c6d57612c6d612c2b565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612caa57612caa612c2b565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082821015612cf057612cf0612c2b565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612d5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea2646970667358221220941a416624488a9e6e2a04741df09cd0e6ac5d5a15f8d9652f84c927a171346664736f6c634300080e0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000ca413ad62b215bb5cb7cae02eb8d4158f407a251000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000155355444f20474f5645524e414e434520544f4b454e000000000000000000000000000000000000000000000000000000000000000000000000000000000000045355444f00000000000000000000000000000000000000000000000000000000
6101606040523480156200001257600080fd5b50604051620031d9380380620031d98339810160408190526200003591620002e4565b818480604051806040016040528060018152602001603160f81b815250878781600390805190602001906200006c92919062000171565b5080516200008290600490602084019062000171565b5050825160208085019190912083518483012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c0019052805194019390932091935091906080523060c052610120525050600a80546001600160a01b0319166001600160a01b038616908117909155604051909350600092507f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091508290a3506101405250620003b3915050565b8280546200017f9062000377565b90600052602060002090601f016020900481019282620001a35760008555620001ee565b82601f10620001be57805160ff1916838001178555620001ee565b82800160010185558215620001ee579182015b82811115620001ee578251825591602001919060010190620001d1565b50620001fc92915062000200565b5090565b5b80821115620001fc576000815560010162000201565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200023f57600080fd5b81516001600160401b03808211156200025c576200025c62000217565b604051601f8301601f19908116603f0116810190828211818310171562000287576200028762000217565b81604052838152602092508683858801011115620002a457600080fd5b600091505b83821015620002c85785820183015181830184015290820190620002a9565b83821115620002da5760008385830101525b9695505050505050565b60008060008060808587031215620002fb57600080fd5b84516001600160401b03808211156200031357600080fd5b62000321888389016200022d565b955060208701519150808211156200033857600080fd5b5062000347878288016200022d565b604087015190945090506001600160a01b03811681146200036757600080fd5b6060959095015193969295505050565b600181811c908216806200038c57607f821691505b602082108103620003ad57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e051610100516101205161014051612dc462000415600039600081816102e50152610ba40152600061195c015260006119ab01526000611986015260006118df01526000611909015260006119330152612dc46000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c806370a0823111610145578063a457c2d7116100bd578063d505accf1161008c578063f1127ed811610071578063f1127ed8146105c7578063f1b50c1d14610619578063f2fde38b1461062157600080fd5b8063d505accf1461056e578063dd62ed3e1461058157600080fd5b8063a457c2d714610522578063a9059cbb14610535578063b4b5ea5714610548578063c3cda5201461055b57600080fd5b806387e96a24116101145780638e539e8c116100f95780638e539e8c146104f457806395d89b41146105075780639ab24eb01461050f57600080fd5b806387e96a24146104c15780638da5cb5b146104d457600080fd5b806370a08231146104355780637500806f1461046b578063782d6fe11461047e5780637ecebe00146104ae57600080fd5b806332e07d9a116101d857806340c10f19116101a7578063587cde1e1161018c578063587cde1e146103c15780635c19a95c146103fa5780636fcfff451461040d57600080fd5b806340c10f19146103895780634cd412d51461039c57600080fd5b806332e07d9a146103165780633644e5151461035b57806339509351146103635780633a46b1a81461037657600080fd5b806318b822811161021457806318b82281146102b857806323b872dd146102cd57806327dc95c3146102e0578063313ce5671461030757600080fd5b80630455e6941461024657806306fdde031461027e578063095ea7b31461029357806318160ddd146102a6575b600080fd5b610269610254366004612937565b600c6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b610286610634565b6040516102759190612952565b6102696102a13660046129c5565b6106c6565b6002545b604051908152602001610275565b6102cb6102c6366004612937565b6106e0565b005b6102696102db3660046129ef565b61084a565b6102aa7f000000000000000000000000000000000000000000000000000000000000000081565b60405160128152602001610275565b600b546103369073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610275565b6102aa61086e565b6102696103713660046129c5565b61087d565b6102aa6103843660046129c5565b6108c9565b6102cb6103973660046129c5565b61096a565b600b546102699074010000000000000000000000000000000000000000900460ff1681565b6103366103cf366004612937565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600760205260409020541690565b6102cb610408366004612937565b6109f9565b61042061041b366004612937565b610a06565b60405163ffffffff9091168152602001610275565b6102aa610443366004612937565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102cb610479366004612a2b565b610a35565b61049161048c3660046129c5565b610b0c565b6040516bffffffffffffffffffffffff9091168152602001610275565b6102aa6104bc366004612937565b610b20565b6102aa6104cf366004612a67565b610b4b565b600a546103369073ffffffffffffffffffffffffffffffffffffffff1681565b6102aa610502366004612a93565b610bd5565b610286610c4b565b6102aa61051d366004612937565b610c5a565b6102696105303660046129c5565b610d3e565b6102696105433660046129c5565b610e0f565b610491610556366004612937565b610e1d565b6102cb610569366004612abd565b610e2b565b6102cb61057c366004612b15565b610fa2565b6102aa61058f366004612b7f565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6105da6105d5366004612ba9565b611161565b60408051825163ffffffff1681526020928301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169281019290925201610275565b6102cb611207565b6102cb61062f366004612937565b6112c9565b60606003805461064390612bde565b80601f016020809104026020016040519081016040528092919081815260200182805461066f90612bde565b80156106bc5780601f10610691576101008083540402835291602001916106bc565b820191906000526020600020905b81548152906001019060200180831161069f57829003601f168201915b5050505050905090565b6000336106d48185856113bb565b60019150505b92915050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166107b3576040517f3643e58e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b5473ffffffffffffffffffffffffffffffffffffffff1615610803576040517fcc080c7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60003361085885828561156e565b610863858585611645565b506001949350505050565b60006108786118c5565b905090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906106d490829086906108c4908790612c5a565b6113bb565b6000438210610934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604482015260640161075d565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902061096390836119f9565b9392505050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146109eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640161075d565b6109f58282611b2a565b5050565b610a033382611be0565b50565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260408120546106da90611c7e565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610ab6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640161075d565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000610963610b1b84846108c9565b611d18565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600560205260408120546106da565b600b5460009073ffffffffffffffffffffffffffffffffffffffff163314610b9f576040517f2bf2559000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc97f000000000000000000000000000000000000000000000000000000000000000084612c72565b90506106da8282611b2a565b6000438210610c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604482015260640161075d565b6106da6009836119f9565b60606004805461064390612bde565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260408120548015610d165773ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301908110610cdf57610cdf612caf565b60009182526020909120015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610d19565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610e02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161075d565b61086382868684036113bb565b6000336106d4818585611645565b60006106da610b1b83610c5a565b83421115610e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4552433230566f7465733a207369676e61747572652065787069726564000000604482015260640161075d565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf602082015273ffffffffffffffffffffffffffffffffffffffff8816918101919091526060810186905260808101859052600090610f1c90610f149060a00160405160208183030381529060405280519060200120611db6565b858585611e1f565b9050610f2781611e47565b8614610f8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000604482015260640161075d565b610f998188611be0565b50505050505050565b8342111561100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161075d565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861103b8c611e47565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006110a382611db6565b905060006110b382878787611e1f565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161075d565b6111558a8a8a6113bb565b50505050505050505050565b604080518082019091526000808252602082015273ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805463ffffffff84169081106111b2576111b2612caf565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16918101919091529392505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640161075d565b600b80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b600a5473ffffffffffffffffffffffffffffffffffffffff16331461134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015260640161075d565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b73ffffffffffffffffffffffffffffffffffffffff831661145d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161075d565b73ffffffffffffffffffffffffffffffffffffffff8216611500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161075d565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461163f5781811015611632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161075d565b61163f84848484036113bb565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166116e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161075d565b73ffffffffffffffffffffffffffffffffffffffff821661178b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161075d565b611796838383611e7c565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161075d565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361163f848484611f2a565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561192b57507f000000000000000000000000000000000000000000000000000000000000000046145b1561195557507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b815460009081816005811115611a53576000611a1484611f69565b611a1e9085612cde565b600088815260209020909150869082015463ffffffff161115611a4357809150611a51565b611a4e816001612c5a565b92505b505b80821015611aa0576000611a678383612051565b600088815260209020909150869082015463ffffffff161115611a8c57809150611a9a565b611a97816001612c5a565b92505b50611a53565b8015611aff5760008681526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015464010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611b02565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169695505050505050565b611b34828261206c565b6002546bffffffffffffffffffffffff1015611bd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201527f766572666c6f77696e6720766f74657300000000000000000000000000000000606482015260840161075d565b61163f60096121738361217f565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152600760208181526040808420805485845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461163f828483612363565b600063ffffffff821115611d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f3220626974730000000000000000000000000000000000000000000000000000606482015260840161075d565b5090565b60006bffffffffffffffffffffffff821115611d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201527f3620626974730000000000000000000000000000000000000000000000000000606482015260840161075d565b60006106da611dc36118c5565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611e3087878787612508565b91509150611e3d816125f7565b5095945050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090208054600181018255905b50919050565b73ffffffffffffffffffffffffffffffffffffffff831615801590611ebc5750600b5474010000000000000000000000000000000000000000900460ff16155b8015611eee575073ffffffffffffffffffffffffffffffffffffffff83166000908152600c602052604090205460ff16155b15611f25576040517f12e2915200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260076020526040808220548584168352912054611f2592918216911683612363565b600081600003611f7b57506000919050565b60006001611f88846127aa565b901c6001901b90506001818481611fa157611fa1612cf5565b048201901c90506001818481611fb957611fb9612cf5565b048201901c90506001818481611fd157611fd1612cf5565b048201901c90506001818481611fe957611fe9612cf5565b048201901c9050600181848161200157612001612cf5565b048201901c9050600181848161201957612019612cf5565b048201901c9050600181848161203157612031612cf5565b048201901c90506109638182858161204b5761204b612cf5565b0461283e565b60006120606002848418612d24565b61096390848416612c5a565b73ffffffffffffffffffffffffffffffffffffffff82166120e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161075d565b6120f560008383611e7c565b80600260008282546121079190612c5a565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36109f560008383611f2a565b60006109638284612c5a565b825460009081908181156121ff5760008781526020902082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160408051808201909152905463ffffffff8116825264010000000090047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166020820152612214565b60408051808201909152600080825260208201525b905080602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16935061224984868863ffffffff16565b92506000821180156122615750805163ffffffff1643145b156122d95761226f83612854565b60008881526020902083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092166401000000000263ffffffff909216919091179055612359565b8660405180604001604052806122ee43611c7e565b63ffffffff16815260200161230286612854565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561239f5750600081115b15611f255773ffffffffffffffffffffffffffffffffffffffff8316156124545773ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040812081906123f4906129028561217f565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612449929190918252602082015260400190565b60405180910390a250505b73ffffffffffffffffffffffffffffffffffffffff821615611f255773ffffffffffffffffffffffffffffffffffffffff8216600090815260086020526040812081906124a4906121738561217f565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516124f9929190918252602082015260400190565b60405180910390a25050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561253f57506000905060036125ee565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612593573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166125e7576000600192509250506125ee565b9150600090505b94509492505050565b600081600481111561260b5761260b612d5f565b036126135750565b600181600481111561262757612627612d5f565b0361268e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161075d565b60028160048111156126a2576126a2612d5f565b03612709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161075d565b600381600481111561271d5761271d612d5f565b03610a03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161075d565b600080608083901c156127bf57608092831c92015b604083901c156127d157604092831c92015b602083901c156127e357602092831c92015b601083901c156127f557601092831c92015b600883901c1561280757600892831c92015b600483901c1561281957600492831c92015b600283901c1561282b57600292831c92015b600183901c156106da5760010192915050565b600081831061284d5781610963565b5090919050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115611d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f3234206269747300000000000000000000000000000000000000000000000000606482015260840161075d565b60006109638284612cde565b803573ffffffffffffffffffffffffffffffffffffffff8116811461293257600080fd5b919050565b60006020828403121561294957600080fd5b6109638261290e565b600060208083528351808285015260005b8181101561297f57858101830151858201604001528201612963565b81811115612991576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600080604083850312156129d857600080fd5b6129e18361290e565b946020939093013593505050565b600080600060608486031215612a0457600080fd5b612a0d8461290e565b9250612a1b6020850161290e565b9150604084013590509250925092565b60008060408385031215612a3e57600080fd5b612a478361290e565b915060208301358015158114612a5c57600080fd5b809150509250929050565b60008060408385031215612a7a57600080fd5b82359150612a8a6020840161290e565b90509250929050565b600060208284031215612aa557600080fd5b5035919050565b803560ff8116811461293257600080fd5b60008060008060008060c08789031215612ad657600080fd5b612adf8761290e565b95506020870135945060408701359350612afb60608801612aac565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215612b3057600080fd5b612b398861290e565b9650612b476020890161290e565b95506040880135945060608801359350612b6360808901612aac565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215612b9257600080fd5b612b9b8361290e565b9150612a8a6020840161290e565b60008060408385031215612bbc57600080fd5b612bc58361290e565b9150602083013563ffffffff81168114612a5c57600080fd5b600181811c90821680612bf257607f821691505b602082108103611e76577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612c6d57612c6d612c2b565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612caa57612caa612c2b565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082821015612cf057612cf0612c2b565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612d5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea2646970667358221220941a416624488a9e6e2a04741df09cd0e6ac5d5a15f8d9652f84c927a171346664736f6c634300080e0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000ca413ad62b215bb5cb7cae02eb8d4158f407a251000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000155355444f20474f5645524e414e434520544f4b454e000000000000000000000000000000000000000000000000000000000000000000000000000000000000045355444f00000000000000000000000000000000000000000000000000000000