UNPKG

@pvpbet/pvpbet

Version:

A decentralized PVP betting platform based on the Ethereum Virtual Machine (EVM).

998 lines 61.1 kB
{ "_format": "hh-sol-artifact-1", "contractName": "VotingEscrow", "sourceName": "contracts/VotingEscrow.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [], "name": "CannotReceive", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InvalidAmount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "InvalidChip", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [ { "internalType": "enum IBet.Status", "name": "status", "type": "uint8" } ], "name": "InvalidStatus", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "InvalidTarget", "type": "error" }, { "inputs": [], "name": "InvalidToken", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "UnauthorizedAccess", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "VoteInsufficientAvailableBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "VoteInsufficientFixedAllowance", "type": "error" }, { "inputs": [], "name": "VoteNotTransferable", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "VotingConditionsNotMet", "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": "spender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Confiscated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": true, "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "ConfiscatedBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Fixed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "govTokenStaking", "type": "address" } ], "name": "GovTokenStakingSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "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" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Unfixed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": true, "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "UnfixedBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "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": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "arbitrationBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": "bool", "name": "hasFixed", "type": "bool" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "address", "name": "custodian", "type": "address" } ], "name": "confiscate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "address", "name": "custodian", "type": "address" } ], "name": "confiscateBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "fix", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "govTokenStaking", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newGovTokenStaking", "type": "address" } ], "name": "setGovTokenStaking", "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": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "unfix", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "unfixBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" } ], "bytecode": "0x60a06040523060805234801561001457600080fd5b5060805161278a61003e600039600081816115610152818161158a01526116cb015261278a6000f3fe6080604052600436106101b75760003560e01c806372570113116100ec578063a9059cbb1161008a578063b41c7d8d11610064578063b41c7d8d14610508578063da276a5c14610528578063dd62ed3e14610548578063f2fde38b1461056857600080fd5b8063a9059cbb14610497578063ad3cb1cc146104b7578063af41389e146104e857600080fd5b80638129fc1c116100c65780638129fc1c146104105780638da5cb5b1461042557806395d89b41146104625780639dc29fac1461047757600080fd5b806372570113146103b0578063772865e2146103d05780637fdf3d6d146103f057600080fd5b80634f1ef28611610159578063592f7fca11610133578063592f7fca146103295780636a6e152c1461035b57806370a082311461037b578063715018a61461039b57600080fd5b80634f1ef286146102d357806352d1902d146102e657806354fd4d50146102fb57600080fd5b806318160ddd1161019557806318160ddd1461023957806323b872dd14610277578063313ce5671461029757806340c10f19146102b357600080fd5b806306fdde03146101bc578063095ea7b3146101e757806317ffcf9d14610217575b600080fd5b3480156101c857600080fd5b506101d1610588565b6040516101de9190611fe5565b60405180910390f35b3480156101f357600080fd5b5061020761020236600461202d565b610597565b60405190151581526020016101de565b34801561022357600080fd5b506102376102323660046120a5565b6105b1565b005b34801561024557600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016101de565b34801561028357600080fd5b50610207610292366004612129565b610747565b3480156102a357600080fd5b50604051601281526020016101de565b3480156102bf57600080fd5b506102376102ce36600461202d565b610762565b6102376102e1366004612180565b61079d565b3480156102f257600080fd5b506102696107b8565b34801561030757600080fd5b506040805180820190915260058152640312e312e360dc1b60208201526101d1565b34801561033557600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016101de565b34801561036757600080fd5b50610237610376366004612244565b6107d5565b34801561038757600080fd5b50610269610396366004612244565b6107ea565b3480156103a757600080fd5b506102376107f7565b3480156103bc57600080fd5b506102376103cb366004612261565b61080b565b3480156103dc57600080fd5b506102696103eb3660046122b1565b61093a565b3480156103fc57600080fd5b5061023761040b36600461202d565b6109a1565b34801561041c57600080fd5b50610237610a4d565b34801561043157600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610343565b34801561046e57600080fd5b506101d1610bad565b34801561048357600080fd5b5061023761049236600461202d565b610c70565b3480156104a357600080fd5b506102076104b236600461202d565b610ce0565b3480156104c357600080fd5b506101d1604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156104f457600080fd5b5061023761050336600461202d565b611020565b34801561051457600080fd5b50610269610523366004612244565b61111d565b34801561053457600080fd5b506102376105433660046122ea565b611192565b34801561055457600080fd5b50610269610563366004612356565b6112a2565b34801561057457600080fd5b50610237610583366004612244565b6112ec565b6060610592611327565b905090565b6000336105a5818585611366565b60019150505b92915050565b336105bb81611373565b1580156105d757506105d5816001600160a01b03166113f2565b155b1561060557604051633733be5960e21b81526001600160a01b03821660048201526024015b60405180910390fd5b8460005b8181101561067857600088888381811061062557610625612384565b905060200201602081019061063a9190612244565b9050600087878481811061065057610650612384565b90506020020135905061066485838361145b565b61066e82826114ea565b5050600101610609565b5060005460405163d54f33ab60e01b81526001600160a01b039091169063d54f33ab906106b1908a908a908a908a908a906004016123cc565b600060405180830381600087803b1580156106cb57600080fd5b505af11580156106df573d6000803e3d6000fd5b5050505086866040516106f392919061243f565b6040518091039020826001600160a01b03167f41fb5db3d9d0f98c2638da4e59a082c1c476f2f03702225b3a3e45677f6bb2ca8787604051610736929190612481565b60405180910390a350505050505050565b600060405163fccd68d360e01b815260040160405180910390fd5b6000546001600160a01b0316331461078f57604051633733be5960e21b81523360048201526024016105fc565b6107998282611520565b5050565b6107a5611556565b6107ae826115fb565b6107998282611603565b60006107c26116c0565b5060008051602061273583398151915290565b6107de336115fb565b6107e781611709565b50565b60006105ab82600061093a565b6107ff61175d565b61080960006117b8565b565b3361081581611373565b158015610831575061082f816001600160a01b03166113f2565b155b1561085a57604051633733be5960e21b81526001600160a01b03821660048201526024016105fc565b61086581858561145b565b61086f84846114ea565b6000546001600160a01b0316604051635b72b0cb60e01b81526001600160a01b0386811660048301526024820186905284811660448301529190911690635b72b0cb90606401600060405180830381600087803b1580156108cf57600080fd5b505af11580156108e3573d6000803e3d6000fd5b50505050836001600160a01b0316816001600160a01b03167f1d47c187095aefccfdebc8a872d270e98511c7814959be6a804c25428d7fff798560405161092c91815260200190565b60405180910390a350505050565b6001600160a01b03821660009081526000805160206127158339815191526020526040812054821561096d5790506105ab565b6001600160a01b038416600090815260016020526040902054808211610994576000610998565b8082035b95945050505050565b336109ab81611373565b1580156109c757506109c5816001600160a01b03166113f2565b155b156109f057604051633733be5960e21b81526001600160a01b03821660048201526024016105fc565b6109fb81848461145b565b826001600160a01b0316816001600160a01b03167f7e8ec4c2aea1940efb80a3cd1b653371a52deb0cdd86bd4fa4d228a690ac82ed84604051610a4091815260200190565b60405180910390a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610a935750825b905060008267ffffffffffffffff166001148015610ab05750303b155b905081158015610abe575080155b15610adc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b0657845460ff60401b1916600160401b1785555b610b0e611829565b610b6060405180604001604052806012815260200171505650426574566f74696e67457363726f7760701b815250604051806040016040528060068152602001653b32a82b282160d11b8152506118f3565b8315610ba657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04805460609160008051602061271583398151915291610bec9061249d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c189061249d565b8015610c655780601f10610c3a57610100808354040283529160200191610c65565b820191906000526020600020905b815481529060010190602001808311610c4857829003601f168201915b505050505091505090565b6000546001600160a01b03163314610c9d57604051633733be5960e21b81523360048201526024016105fc565b6000610ca8836107ea565b905081811015610cd1578281836040516339b254e360e01b81526004016105fc939291906124d7565b610cdb83836114ea565b505050565b60003381610cf66001600160a01b038616611373565b90506000610d0c866001600160a01b03166113f2565b90508180610d175750805b15610ffb5760008215610d2b575085610d96565b8115610d9657866001600160a01b03166311610c256040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9391906124f8565b90505b6000816001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfa9190612515565b90506006816006811115610e1057610e10612536565b03610e2e5760405163b8ba16bf60e01b815260040160405180910390fd5b6004816006811115610e4257610e42612536565b1480610e5f57506005816006811115610e5d57610e5d612536565b145b15610ee4578615610e835760405163b8ba16bf60e01b815260040160405180910390fd5b816001600160a01b03166386d1a69f6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ebe57600080fd5b505af1158015610ed2573d6000803e3d6000fd5b505050506001955050505050506105ab565b306001600160a01b0316826001600160a01b031663632a9a526040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5091906124f8565b6001600160a01b031614610f825760405163d08525e960e01b81526001600160a01b03891660048201526024016105fc565b828015610fa057506001816006811115610f9e57610f9e612536565b145b15610fb557610fb0858989611905565b610ff4565b6003816006811115610fc957610fc9612536565b03610fd957610fb0858989611a57565b80604051633ba7bf8960e11b81526004016105fc919061254c565b5050611014565b60405163fccd68d360e01b815260040160405180910390fd5b50600195945050505050565b3361102a81611373565b1580156110465750611044816001600160a01b03166113f2565b155b1561106f57604051633733be5960e21b81526001600160a01b03821660048201526024016105fc565b61107a838284611aee565b6000611085846107ea565b9050828110156110ae578381846040516339b254e360e01b81526004016105fc939291906124d7565b6001600160a01b038481166000818152600260209081526040808320948716808452948252808320805489019055838352600182529182902080548801905590518681529192917f3959a6211b07534d597533a2269e6d845fd13a0e8cd0d73cfd13597661889c64910161092c565b60008054604051632769b90b60e01b81526001600160a01b0390911690632769b90b90611151908590600290600401612566565b602060405180830381865afa15801561116e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ab9190612593565b3361119c81611373565b1580156111b857506111b6816001600160a01b03166113f2565b155b156111e157604051633733be5960e21b81526001600160a01b03821660048201526024016105fc565b8360005b8181101561123e576112368388888481811061120357611203612384565b90506020020160208101906112189190612244565b87878581811061122a5761122a612384565b9050602002013561145b565b6001016111e5565b50858560405161124f92919061243f565b6040518091039020826001600160a01b03167f20d7feb8922f8d977385d690060f662bb88fc3b2fa740ce051831a267cf6aff38686604051611292929190612481565b60405180910390a3505050505050565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6112f461175d565b6001600160a01b03811661131e57604051631e4fbdf760e01b8152600060048201526024016105fc565b6107e7816117b8565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03805460609160008051602061271583398151915291610bec9061249d565b610cdb8383836001611b37565b60006001600160a01b0382163b156113ea57816001600160a01b03166335e2e1b26040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113df575060408051601f3d908101601f191682019092526113dc918101906125ac565b60015b156113ea5792915050565b506000919050565b60006001600160a01b0382163b156113ea57816001600160a01b0316638e36d24a6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113df575060408051601f3d908101601f191682019092526113dc918101906125ac565b6001600160a01b03808316600090815260026020908152604080832093871683529290522054818110156114a85782818360405163588adcc760e11b81526004016105fc939291906124d7565b6001600160a01b039283166000818152600260209081526040808320979096168252958652848120928490039092558152600190935291208054919091039055565b6001600160a01b03821661151457604051634b637e8f60e11b8152600060048201526024016105fc565b61079982600083611c1e565b6001600160a01b03821661154a5760405163ec442f0560e01b8152600060048201526024016105fc565b61079960008383611c1e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806115dd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115d1600080516020612735833981519152546001600160a01b031690565b6001600160a01b031614155b156108095760405163703e46dd60e11b815260040160405180910390fd5b6107e761175d565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561165d575060408051601f3d908101601f1916820190925261165a91810190612593565b60015b61168557604051634c9c8ce360e01b81526001600160a01b03831660048201526024016105fc565b60008051602061273583398151915281146116b657604051632a87526960e21b8152600481018290526024016105fc565b610cdb8383611d3b565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108095760405163703e46dd60e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f3240db6e5eac8c1cb558c1bd2eeb63ffcd08e605e3e508a7e8fe67ce8d424b0e9060200160405180910390a150565b3361178f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108095760405163118cdaa760e01b81523360048201526024016105fc565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff1660008115801561186f5750825b905060008267ffffffffffffffff16600114801561188c5750303b155b90508115801561189a575080155b156118b85760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156118e257845460ff60401b1916600160401b1785555b6118eb33611d91565b610b60611da2565b6118fb611da6565b6107998282611def565b600080546001600160a01b031660405163f993185560e01b81526001600160a01b038681166004830152919091169063f993185590602401602060405180830381865afa15801561195a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197e9190612593565b90508015611a2d576000611991856107ea565b9050828110156119ba578481846040516339b254e360e01b81526004016105fc939291906124d7565b6119c5858585611366565b604051636704fe9f60e01b81526001600160a01b03868116600483015260248201859052851690636704fe9f90604401600060405180830381600087803b158015611a0f57600080fd5b505af1158015611a23573d6000803e3d6000fd5b5050505050611a51565b60405163c292412f60e01b81526001600160a01b03851660048201526024016105fc565b50505050565b6000611a628461111d565b90508015611a2d57826001600160a01b031663bfa547178560008511611a89576000611a8b565b835b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015611ad157600080fd5b505af1158015611ae5573d6000803e3d6000fd5b50505050611a51565b6000611afa84846112a2565b90506000198114611a515781811015611b2c57828183604051637dc7a0d960e11b81526004016105fc939291906124d7565b611a51848484840360005b6000805160206127158339815191526001600160a01b038516611b705760405163e602df0560e01b8152600060048201526024016105fc565b6001600160a01b038416611b9a57604051634a1406b160e11b8152600060048201526024016105fc565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115610ba657836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051611c0f91815260200190565b60405180910390a35050505050565b6000805160206127158339815191526001600160a01b038416611c5a5781816002016000828254611c4f91906125c9565b90915550611cb99050565b6001600160a01b03841660009081526020829052604090205482811015611c9a5784818460405163391434e360e21b81526004016105fc939291906124d7565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316611cd7576002810180548390039055611cf6565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161092c91815260200190565b611d4482611e40565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611d8957610cdb8282611ea5565b610799611f12565b611d99611da6565b6107e781611f31565b6108095b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661080957604051631afcd79f60e31b815260040160405180910390fd5b611df7611da6565b6000805160206127158339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03611e318482612638565b5060048101611a518382612638565b806001600160a01b03163b600003611e7657604051634c9c8ce360e01b81526001600160a01b03821660048201526024016105fc565b60008051602061273583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611ec291906126f8565b600060405180830381855af49150503d8060008114611efd576040519150601f19603f3d011682016040523d82523d6000602084013e611f02565b606091505b5091509150610998858383611f39565b34156108095760405163b398979f60e01b815260040160405180910390fd5b6112f4611da6565b606082611f4e57611f4982611f98565b611f91565b8151158015611f6557506001600160a01b0384163b155b15611f8e57604051639996b31560e01b81526001600160a01b03851660048201526024016105fc565b50805b9392505050565b805115611fa85780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60005b83811015611fdc578181015183820152602001611fc4565b50506000910152565b6020815260008251806020840152612004816040850160208701611fc1565b601f01601f19169190910160400192915050565b6001600160a01b03811681146107e757600080fd5b6000806040838503121561204057600080fd5b823561204b81612018565b946020939093013593505050565b60008083601f84011261206b57600080fd5b50813567ffffffffffffffff81111561208357600080fd5b6020830191508360208260051b850101111561209e57600080fd5b9250929050565b6000806000806000606086880312156120bd57600080fd5b853567ffffffffffffffff808211156120d557600080fd5b6120e189838a01612059565b909750955060208801359150808211156120fa57600080fd5b5061210788828901612059565b909450925050604086013561211b81612018565b809150509295509295909350565b60008060006060848603121561213e57600080fd5b833561214981612018565b9250602084013561215981612018565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561219357600080fd5b823561219e81612018565b9150602083013567ffffffffffffffff808211156121bb57600080fd5b818501915085601f8301126121cf57600080fd5b8135818111156121e1576121e161216a565b604051601f8201601f19908116603f011681019083821181831017156122095761220961216a565b8160405282815288602084870101111561222257600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60006020828403121561225657600080fd5b8135611f9181612018565b60008060006060848603121561227657600080fd5b833561228181612018565b925060208401359150604084013561229881612018565b809150509250925092565b80151581146107e757600080fd5b600080604083850312156122c457600080fd5b82356122cf81612018565b915060208301356122df816122a3565b809150509250929050565b6000806000806040858703121561230057600080fd5b843567ffffffffffffffff8082111561231857600080fd5b61232488838901612059565b9096509450602087013591508082111561233d57600080fd5b5061234a87828801612059565b95989497509550505050565b6000806040838503121561236957600080fd5b823561237481612018565b915060208301356122df81612018565b634e487b7160e01b600052603260045260246000fd5b81835260006001600160fb1b038311156123b357600080fd5b8260051b80836020870137939093016020019392505050565b6060808252810185905260008660808301825b8881101561240f5782356123f281612018565b6001600160a01b03168252602092830192909101906001016123df565b50838103602085015261242381878961239a565b9250505060018060a01b03831660408301529695505050505050565b60008184825b8581101561247657813561245881612018565b6001600160a01b031683526020928301929190910190600101612445565b509095945050505050565b60208152600061249560208301848661239a565b949350505050565b600181811c908216806124b157607f821691505b6020821081036124d157634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b039390931683526020830191909152604082015260600190565b60006020828403121561250a57600080fd5b8151611f9181612018565b60006020828403121561252757600080fd5b815160078110611f9157600080fd5b634e487b7160e01b600052602160045260246000fd5b602081016007831061256057612560612536565b91905290565b6001600160a01b0383168152604081016003831061258657612586612536565b8260208301529392505050565b6000602082840312156125a557600080fd5b5051919050565b6000602082840312156125be57600080fd5b8151611f91816122a3565b808201808211156105ab57634e487b7160e01b600052601160045260246000fd5b601f821115610cdb57600081815260208120601f850160051c810160208610156126115750805b601f850160051c820191505b818110156126305782815560010161261d565b505050505050565b815167ffffffffffffffff8111156126525761265261216a565b61266681612660845461249d565b846125ea565b602080601f83116001811461269b57600084156126835750858301515b600019600386901b1c1916600185901b178555612630565b600085815260208120601f198616915b828110156126ca578886015182559484019460019091019084016126ab565b50858210156126e85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000825161270a818460208701611fc1565b919091019291505056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220b68ef42005023ee579f8820dd0a6a3b5ad6187b1e3b5bc3aaab66666213913ad64736f6c63430008140033", "deployedBytecode": "0x6080604052600436106101b75760003560e01c806372570113116100ec578063a9059cbb1161008a578063b41c7d8d11610064578063b41c7d8d14610508578063da276a5c14610528578063dd62ed3e14610548578063f2fde38b1461056857600080fd5b8063a9059cbb14610497578063ad3cb1cc146104b7578063af41389e146104e857600080fd5b80638129fc1c116100c65780638129fc1c146104105780638da5cb5b1461042557806395d89b41146104625780639dc29fac1461047757600080fd5b806372570113146103b0578063772865e2146103d05780637fdf3d6d146103f057600080fd5b80634f1ef28611610159578063592f7fca11610133578063592f7fca146103295780636a6e152c1461035b57806370a082311461037b578063715018a61461039b57600080fd5b80634f1ef286146102d357806352d1902d146102e657806354fd4d50146102fb57600080fd5b806318160ddd1161019557806318160ddd1461023957806323b872dd14610277578063313ce5671461029757806340c10f19146102b357600080fd5b806306fdde03146101bc578063095ea7b3146101e757806317ffcf9d14610217575b600080fd5b3480156101c857600080fd5b506101d1610588565b6040516101de9190611fe5565b60405180910390f35b3480156101f357600080fd5b5061020761020236600461202d565b610597565b60405190151581526020016101de565b34801561022357600080fd5b506102376102323660046120a5565b6105b1565b005b34801561024557600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016101de565b34801561028357600080fd5b50610207610292366004612129565b610747565b3480156102a357600080fd5b50604051601281526020016101de565b3480156102bf57600080fd5b506102376102ce36600461202d565b610762565b6102376102e1366004612180565b61079d565b3480156102f257600080fd5b506102696107b8565b34801561030757600080fd5b506040805180820190915260058152640312e312e360dc1b60208201526101d1565b34801561033557600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016101de565b34801561036757600080fd5b50610237610376366004612244565b6107d5565b34801561038757600080fd5b50610269610396366004612244565b6107ea565b3480156103a757600080fd5b506102376107f7565b3480156103bc57600080fd5b506102376103cb366004612261565b61080b565b3480156103dc57600080fd5b506102696103eb3660046122b1565b61093a565b3480156103fc57600080fd5b5061023761040b36600461202d565b6109a1565b34801561041c57600080fd5b50610237610a4d565b34801561043157600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610343565b34801561046e57600080fd5b506101d1610bad565b34801561048357600080fd5b5061023761049236600461202d565b610c70565b3480156104a357600080fd5b506102076104b236600461202d565b610ce0565b3480156104c357600080fd5b506101d1604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156104f457600080fd5b5061023761050336600461202d565b611020565b34801561051457600080fd5b50610269610523366004612244565b61111d565b34801561053457600080fd5b506102376105433660046122ea565b611192565b34801561055457600080fd5b50610269610563366004612356565b6112a2565b34801561057457600080fd5b50610237610583366004612244565b6112ec565b6060610592611327565b905090565b6000336105a5818585611366565b60019150505b92915050565b336105bb81611373565b1580156105d757506105d5816001600160a01b03166113f2565b155b1561060557604051633733be5960e21b81526001600160a01b03821660048201526024015b60405180910390fd5b8460005b8181101561067857600088888381811061062557610625612384565b905060200201602081019061063a9190612244565b9050600087878481811061065057610650612384565b90506020020135905061066485838361145b565b61066e82826114ea565b5050600101610609565b5060005460405163d54f33ab60e01b81526001600160a01b039091169063d54f33ab906106b1908a908a908a908a908a906004016123cc565b600060405180830381600087803b1580156106cb57600080fd5b505af11580156106df573d6000803e3d6000fd5b5050505086866040516106f392919061243f565b6040518091039020826001600160a01b03167f41fb5db3d9d0f98c2638da4e59a082c1c476f2f03702225b3a3e45677f6bb2ca8787604051610736929190612481565b60405180910390a350505050505050565b600060405163fccd68d360e01b815260040160405180910390fd5b6000546001600160a01b0316331461078f57604051633733be5960e21b81523360048201526024016105fc565b6107998282611520565b5050565b6107a5611556565b6107ae826115fb565b6107998282611603565b60006107c26116c0565b5060008051602061273583398151915290565b6107de336115fb565b6107e781611709565b50565b60006105ab82600061093a565b6107ff61175d565b61080960006117b8565b565b3361081581611373565b158015610831575061082f816001600160a01b03166113f2565b155b1561085a57604051633733be5960e21b81526001600160a01b03821660048201526024016105fc565b61086581858561145b565b61086f84846114ea565b6000546001600160a01b0316604051635b72b0cb60e01b81526001600160a01b0386811660048301526024820186905284811660448301529190911690635b72b0cb90606401600060405180830381600087803b1580156108cf57600080fd5b505af11580156108e3573d6000803e3d6000fd5b50505050836001600160a01b0316816001600160a01b03167f1d47c187095aefccfdebc8a872d270e98511c7814959be6a804c25428d7fff798560405161092c91815260200190565b60405180910390a350505050565b6001600160a01b03821660009081526000805160206127158339815191526020526040812054821561096d5790506105ab565b6001600160a01b038416600090815260016020526040902054808211610994576000610998565b8082035b95945050505050565b336109ab81611373565b1580156109c757506109c5816001600160a01b03166113f2565b155b156109f057604051633733be5960e21b81526001600160a01b03821660048201526024016105fc565b6109fb81848461145b565b826001600160a01b0316816001600160a01b03167f7e8ec4c2aea1940efb80a3cd1b653371a52deb0cdd86bd4fa4d228a690ac82ed84604051610a4091815260200190565b60405180910390a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610a935750825b905060008267ffffffffffffffff166001148015610ab05750303b155b905081158015610abe575080155b15610adc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b0657845460ff60401b1916600160401b1785555b610b0e611829565b610b6060405180604001604052806012815260200171505650426574566f74696e67457363726f7760701b815250604051806040016040528060068152602001653b32a82b282160d11b8152506118f3565b8315610ba657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04805460609160008051602061271583398151915291610bec9061249d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c189061249d565b8015610c655780601f10610c3a57610100808354040283529160200191610c65565b820191906000526020600020905b815481529060010190602001808311610c4857829003601f168201915b505050505091505090565b6000546001600160a01b03163314610c9d57604051633733be5960e21b81523360048201526024016105fc565b6000610ca8836107ea565b905081811015610cd1578281836040516339b254e360e01b81526004016105fc939291906124d7565b610cdb83836114ea565b505050565b60003381610cf66001600160a01b038616611373565b90506000610d0c866001600160a01b03166113f2565b90508180610d175750805b15610ffb5760008215610d2b575085610d96565b8115610d9657866001600160a01b03166311610c256040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9391906124f8565b90505b6000816001600160a01b031663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfa9190612515565b90506006816006811115610e1057610e10612536565b03610e2e5760405163b8ba16bf60e01b815260040160405180910390fd5b6004816006811115610e4257610e42612536565b1480610e5f57506005816006811115610e5d57610e5d612536565b145b15610ee4578615610e835760405163b8ba16bf60e01b815260040160405180910390fd5b816001600160a01b03166386d1a69f6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ebe57600080fd5b505af1158015610ed2573d6000803e3d6000fd5b505050506001955050505050506105ab565b306001600160a01b0316826001600160a01b031663632a9a526040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5091906124f8565b6001600160a01b031614610f825760405163d08525e960e01b81526001600160a01b03891660048201526024016105fc565b828015610fa057506001816006811115610f9e57610f9e612536565b145b15610fb557610fb0858989611905565b610ff4565b6003816006811115610fc957610fc9612536565b03610fd957610fb0858989611a57565b80604051633ba7bf8960e11b81526004016105fc919061254c565b5050611014565b60405163fccd68d360e01b815260040160405180910390fd5b50600195945050505050565b3361102a81611373565b1580156110465750611044816001600160a01b03166113f2565b155b1561106f57604051633733be5960e21b81526001600160a01b03821660048201526024016105fc565b61107a838284611aee565b6000611085846107ea565b9050828110156110ae578381846040516339b254e360e01b81526004016105fc939291906124d7565b6001600160a01b038481166000818152600260209081526040808320948716808452948252808320805489019055838352600182529182902080548801905590518681529192917f3959a6211b07534d597533a2269e6d845fd13a0e8cd0d73cfd13597661889c64910161092c565b60008054604051632769b90b60e01b81526001600160a01b0390911690632769b90b90611151908590600290600401612566565b602060405180830381865afa15801561116e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ab9190612593565b3361119c81611373565b1580156111b857506111b6816001600160a01b03166113f2565b155b156111e157604051633733be5960e21b81526001600160a01b03821660048201526024016105fc565b83