@daostack/arc-experimental
Version:
A platform for building DAOs
964 lines • 81.8 kB
JSON
{
"contractName": "ContributionRewardExt",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_avatar",
"type": "address"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "_intVoteInterface",
"type": "address"
},
{
"indexed": false,
"internalType": "string",
"name": "_descriptionHash",
"type": "string"
},
{
"indexed": false,
"internalType": "int256",
"name": "_reputationChange",
"type": "int256"
},
{
"indexed": false,
"internalType": "uint256[3]",
"name": "_rewards",
"type": "uint256[3]"
},
{
"indexed": false,
"internalType": "contract IERC20",
"name": "_externalToken",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "_beneficiary",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "_proposer",
"type": "address"
}
],
"name": "NewContributionProposal",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_avatar",
"type": "address"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "int256",
"name": "_param",
"type": "int256"
}
],
"name": "ProposalExecuted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_avatar",
"type": "address"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "_beneficiary",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "RedeemEther",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_avatar",
"type": "address"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "_beneficiary",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "RedeemExternalToken",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_avatar",
"type": "address"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "_beneficiary",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "RedeemNativeToken",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_avatar",
"type": "address"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "_beneficiary",
"type": "address"
},
{
"indexed": false,
"internalType": "int256",
"name": "_amount",
"type": "int256"
}
],
"name": "RedeemReputation",
"type": "event"
},
{
"inputs": [],
"name": "avatar",
"outputs": [
{
"internalType": "contract Avatar",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "_stakingToken",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "balanceOfStakingToken",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_beneficiary",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "burnReputation",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
},
{
"internalType": "int256",
"name": "_decision",
"type": "int256"
}
],
"name": "executeProposal",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "getProposalAcceptedByVotingMachine",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "getProposalEthReward",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "getProposalExternalToken",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "getProposalExternalTokenReward",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "getProposalNativeTokenReward",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "getProposalReputationReward",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "getTotalReputationSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract Avatar",
"name": "_avatar",
"type": "address"
},
{
"internalType": "contract IntVoteInterface",
"name": "_votingMachine",
"type": "address"
},
{
"internalType": "uint256[11]",
"name": "_votingParams",
"type": "uint256[11]"
},
{
"internalType": "address",
"name": "_voteOnBehalf",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_voteParamsHash",
"type": "bytes32"
},
{
"internalType": "contract DAOFactory",
"name": "_daoFactory",
"type": "address"
},
{
"internalType": "uint64[3]",
"name": "_packageVersion",
"type": "uint64[3]"
},
{
"internalType": "string",
"name": "_rewarderName",
"type": "string"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_beneficiary",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "mintReputation",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "organizationProposals",
"outputs": [
{
"internalType": "uint256",
"name": "nativeTokenReward",
"type": "uint256"
},
{
"internalType": "int256",
"name": "reputationChange",
"type": "int256"
},
{
"internalType": "uint256",
"name": "ethReward",
"type": "uint256"
},
{
"internalType": "contract IERC20",
"name": "externalToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "externalTokenReward",
"type": "uint256"
},
{
"internalType": "address payable",
"name": "beneficiary",
"type": "address"
},
{
"internalType": "uint256",
"name": "nativeTokenRewardLeft",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "reputationChangeLeft",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "ethRewardLeft",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "externalTokenRewardLeft",
"type": "uint256"
},
{
"internalType": "bool",
"name": "acceptedByVotingMachine",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "proposalsBlockNumber",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_descriptionHash",
"type": "string"
},
{
"internalType": "int256",
"name": "_reputationChange",
"type": "int256"
},
{
"internalType": "uint256[3]",
"name": "_rewards",
"type": "uint256[3]"
},
{
"internalType": "contract IERC20",
"name": "_externalToken",
"type": "address"
},
{
"internalType": "address payable",
"name": "_beneficiary",
"type": "address"
},
{
"internalType": "address",
"name": "_proposer",
"type": "address"
}
],
"name": "proposeContributionReward",
"outputs": [
{
"internalType": "bytes32",
"name": "proposalId",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
},
{
"internalType": "bool[4]",
"name": "_whatToRedeem",
"type": "bool[4]"
}
],
"name": "redeem",
"outputs": [
{
"internalType": "int256",
"name": "reputationReward",
"type": "int256"
},
{
"internalType": "uint256",
"name": "nativeTokenReward",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "etherReward",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "externalTokenReward",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "redeemEther",
"outputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
},
{
"internalType": "address payable",
"name": "_beneficiary",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "redeemEtherByRewarder",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "redeemExternalToken",
"outputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
},
{
"internalType": "address",
"name": "_beneficiary",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "redeemExternalTokenByRewarder",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "redeemNativeToken",
"outputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
},
{
"internalType": "address",
"name": "_beneficiary",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "redeemNativeTokenByRewarder",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "redeemReputation",
"outputs": [
{
"internalType": "int256",
"name": "reputation",
"type": "int256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
},
{
"internalType": "address",
"name": "_beneficiary",
"type": "address"
},
{
"internalType": "uint256",
"name": "_reputation",
"type": "uint256"
}
],
"name": "redeemReputationByRewarder",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "reputationOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "rewarder",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "_stakingToken",
"type": "address"
},
{
"internalType": "address",
"name": "_beneficiary",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "_proposalId",
"type": "bytes32"
}
],
"name": "stakingTokenTransfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "vault",
"outputs": [
{
"internalType": "contract Vault",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "voteParamsHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "votingMachine",
"outputs": [
{
"internalType": "contract IntVoteInterface",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b50613b00806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80639d4c162d1161010f578063cbba1f5a116100a2578063de9a957a11610071578063de9a957a146107b2578063f3f4b048146107e4578063f81f8bf614610801578063fbfa77cf14610833576101e5565b8063cbba1f5a146106d7578063d29b5d2f146106f4578063d8145e2d14610726578063dcc3e06e146107aa576101e5565b8063bea75f28116100de578063bea75f281461059b578063c4a17ec9146105d7578063c595b55014610609578063c7916cf9146106ba576101e5565b80639d4c162d1461050d5780639f874c9914610544578063b551c37314610561578063b5b8b8651461057e576101e5565b806352717a5e116101875780636e8a6188116101565780636e8a6188146104755780637a5cb92c146104a75780637e078b55146104c45780639588378e146104e1576101e5565b806352717a5e1461040757806358243213146104245780635aef7de6146104415780636b8eb40314610449576101e5565b80633c2163dc116101c35780633c2163dc146102c95780633edf7ca1146102e6578063432848dc1461030a5780634ea2c7ec146103ff576101e5565b80632ac8c1b2146101ea57806334f243521461021e5780633a0284ff1461024d575b600080fd5b61021c6004803603606081101561020057600080fd5b508035906001600160a01b03602082013516906040013561083b565b005b61023b6004803603602081101561023457600080fd5b50356109dd565b60408051918252519081900360200190f35b6102a3600480360360a081101561026357600080fd5b604080516080818101909252833593928301929160a08301919060208401906004908390839080828437600092019190915250919450610bbc9350505050565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61023b600480360360208110156102df57600080fd5b5035610c24565b6102ee610e2a565b604080516001600160a01b039092168252519081900360200190f35b61023b600480360361010081101561032157600080fd5b81019060208101813564010000000081111561033c57600080fd5b82018360208201111561034e57600080fd5b8035906020019184600183028401116401000000008311171561037057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805160608181019092529396853596909590946080820194509250602001906003908390839080828437600092019190915250919450506001600160a01b03823581169350602083013581169260400135169050610e39565b61023b611336565b61023b6004803603602081101561041d57600080fd5b503561133c565b61023b6004803603602081101561043a57600080fd5b5035611351565b6102ee611543565b61023b6004803603604081101561045f57600080fd5b506001600160a01b038135169060200135611552565b61021c6004803603606081101561048b57600080fd5b508035906001600160a01b03602082013516906040013561162c565b61023b600480360360208110156104bd57600080fd5b50356117da565b6102ee600480360360208110156104da57600080fd5b50356117ec565b61023b600480360360408110156104f757600080fd5b506001600160a01b03813516906020013561180a565b6105306004803603604081101561052357600080fd5b508035906020013561193b565b604080519115158252519081900360200190f35b61023b6004803603602081101561055a57600080fd5b5035611a4a565b61023b6004803603602081101561057757600080fd5b5035611a5f565b61023b6004803603602081101561059457600080fd5b5035611cf6565b610530600480360360808110156105b157600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611d08565b61021c600480360360608110156105ed57600080fd5b508035906001600160a01b036020820135169060400135611e6c565b61021c600480360361028081101561062057600080fd5b6001600160a01b038235811692602081013582169260408201926101a08301358116926101c0810135926101e08201359092169161020082019190810190610280810161026082013564010000000081111561067b57600080fd5b82018360208201111561068d57600080fd5b803590602001918460018302840111640100000000831117156106af57600080fd5b509092509050612084565b61023b600480360360208110156106d057600080fd5b5035612305565b610530600480360360208110156106ed57600080fd5b5035612615565b6105306004803603606081101561070a57600080fd5b508035906001600160a01b03602082013516906040013561262d565b6107436004803603602081101561073c57600080fd5b5035612788565b604080519b8c5260208c019a909a528a8a01989098526001600160a01b0396871660608b015260808a01959095529290941660a088015260c087015260e0860192909252610100850191909152610120840152151561014083015251908190036101600190f35b6102ee6127f0565b61021c600480360360608110156107c857600080fd5b508035906001600160a01b0360208201351690604001356127ff565b61023b600480360360208110156107fa57600080fd5b503561294a565b6105306004803603606081101561081757600080fd5b508035906001600160a01b03602082013516906040013561295f565b6102ee612a85565b6038546001600160a01b03163314610888576040805162461bcd60e51b815260206004820152601c6024820152600080516020613914833981519152604482015290519081900360640190fd5b6000838152603760205260409020600a81015460ff166108d95760405162461bcd60e51b815260040180806020018281038252602f815260200180613885602f913960400191505060405180910390fd5b61090282604051806080016040528060568152602001613a756056913960088401549190612a94565b600882015581156109d7576039546040805163658b6a5160e11b8152600481018590526001600160a01b0386811660248301529151919092169163cb16d4a29160448083019260209291908290030181600087803b15801561096357600080fd5b505af1158015610977573d6000803e3d6000fd5b505050506040513d602081101561098d57600080fd5b50506033546040805184815290516001600160a01b038087169388939116917f7dd55ea53ce2c347b544c257b778e1dd6638f232fa6b94320e740440e72b4b879181900360200190a45b50505050565b6000818152603760205260408120600a81015460ff16610a2e5760405162461bcd60e51b815260040180806020018281038252602f815260200180613885602f913960400191505060405180910390fd5b60058101546001600160a01b0316301415610a54576006810154610a5457805460068201555b80546000825591508115610bb657603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ab057600080fd5b505afa158015610ac4573d6000803e3d6000fd5b505050506040513d6020811015610ada57600080fd5b5051600582015460408051630218b66560e31b8152600481018690526001600160a01b039283166024820152905191909216916310c5b3289160448083019260209291908290030181600087803b158015610b3457600080fd5b505af1158015610b48573d6000803e3d6000fd5b505050506040513d6020811015610b5e57600080fd5b5051610b6957600080fd5b60058101546033546040805185815290516001600160a01b0393841693879316917f13f7471cab9806ac4ff5d80ae879babfbf1081e240d05c4450b75f69c626cb2e919081900360200190a45b50919050565b60008080808481602002015115610bd957610bd686612305565b93505b602085015115610bef57610bec866109dd565b92505b604085015115610c0557610c0286611351565b91505b606085015115610c1b57610c1886610c24565b90505b92959194509250565b6000818152603760205260408120600a81015460ff16610c755760405162461bcd60e51b815260040180806020018281038252602f815260200180613885602f913960400191505060405180910390fd5b60058101546001600160a01b0316301415610c9e576009810154610c9e57600481015460098201555b60038101546001600160a01b031615801590610cbe575060008160040154115b15610bb65760048082018054600090915560335460408051638da5cb5b60e01b815290519295506001600160a01b0390911692638da5cb5b928282019260209290829003018186803b158015610d1357600080fd5b505afa158015610d27573d6000803e3d6000fd5b505050506040513d6020811015610d3d57600080fd5b5051600382015460058301546040805163dab0efff60e01b81526001600160a01b03938416600482015291831660248301526044820186905251919092169163dab0efff9160648083019260209291908290030181600087803b158015610da357600080fd5b505af1158015610db7573d6000803e3d6000fd5b505050506040513d6020811015610dcd57600080fd5b5051610dd857600080fd5b60058101546033546040805185815290516001600160a01b0393841693879316917f5a66e28cdcd3bc22082d9f07be2b6bed5f50f349e5d89f655d750ecdd1988374919081900360200190a450919050565b6034546001600160a01b031681565b60335460408051638da5cb5b60e01b815290516000926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015610e7e57600080fd5b505afa158015610e92573d6000803e3d6000fd5b505050506040513d6020811015610ea857600080fd5b505160408051632074193160e21b815230600482015290516001600160a01b03909216916381d064c491602480820192602092909190829003018186803b158015610ef257600080fd5b505afa158015610f06573d6000803e3d6000fd5b505050506040513d6020811015610f1c57600080fd5b5051610f6a576040805162461bcd60e51b81526020600482015260186024820152771cd8da195b59481a5cc81b9bdd081c9959da5cdd195c995960421b604482015290519081900360640190fd5b816001600160a01b038116610f7c5750335b60345460355460335460408051634439bdaf60e11b81526002600482015260248101939093526001600160a01b0385811660448501529182166064840152519216916388737b5e916084808201926020929091908290030181600087803b158015610fe657600080fd5b505af1158015610ffa573d6000803e3d6000fd5b505050506040513d602081101561101057600080fd5b50519150836001600160a01b0381166110265750335b6001600160a01b0381163014156110775760008812156110775760405162461bcd60e51b815260040180806020018281038252602d8152602001806139c1602d913960400191505060405180910390fd5b61107f613102565b60408051610160810182528951815260208082018c90528a0151918101919091526001600160a01b03881660608201526080810189600260200201518152602001836001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600015158152509050806037600086815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506080820151816004015560a08201518160050160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a0160006101000a81548160ff021916908315150217905550905050603460009054906101000a90046001600160a01b03166001600160a01b031684603360009054906101000a90046001600160a01b03166001600160a01b03167ffc38e03bef8d47e8c970c106660459b8a9db8eb045bd1281ef4cc50c16e032278d8d8d8d898b604051808060200187815260200186600360200280838360005b83811015611270578181015183820152602001611258565b50505050905001856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b03168152602001828103825288818151815260200191508051906020019080838360005b838110156112d95781810151838201526020016112c1565b50505050905090810190601f1680156113065780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a450505060008181526036602052604090204390559695505050505050565b60355481565b60009081526037602052604090206004015490565b6000818152603760205260408120600a81015460ff166113a25760405162461bcd60e51b815260040180806020018281038252602f815260200180613885602f913960400191505060405180910390fd5b60058101546001600160a01b0316308114156113da5760088201546113cc57600282015460088301555b506039546001600160a01b03165b60028201805460009091559250821561153c57603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561143b57600080fd5b505afa15801561144f573d6000803e3d6000fd5b505050506040513d602081101561146557600080fd5b50516040805163658b6a5160e11b8152600481018690526001600160a01b0384811660248301529151919092169163cb16d4a29160448083019260209291908290030181600087803b1580156114ba57600080fd5b505af11580156114ce573d6000803e3d6000fd5b505050506040513d60208110156114e457600080fd5b50516114ef57600080fd5b60058201546033546040805186815290516001600160a01b0393841693889316917f7dd55ea53ce2c347b544c257b778e1dd6638f232fa6b94320e740440e72b4b87919081900360200190a45b5050919050565b6033546001600160a01b031681565b60345460009082906001600160a01b031633146115ab576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603354604080516370a0823160e01b81526001600160a01b0392831660048201529051918616916370a0823191602480820192602092909190829003018186803b1580156115f857600080fd5b505afa15801561160c573d6000803e3d6000fd5b505050506040513d602081101561162257600080fd5b5051949350505050565b6038546001600160a01b03163314611679576040805162461bcd60e51b815260206004820152601c6024820152600080516020613914833981519152604482015290519081900360640190fd5b6000838152603760205260409020600a81015460ff166116ca5760405162461bcd60e51b815260040180806020018281038252602f815260200180613885602f913960400191505060405180910390fd5b6116f3826040518060800160405280605d81526020016139ee605d913960068401549190612a94565b600682015581156109d75761178d8383603360009054906101000a90046001600160a01b03166001600160a01b031663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b15801561175157600080fd5b505afa158015611765573d6000803e3d6000fd5b505050506040513d602081101561177b57600080fd5b50516001600160a01b03169190612b2b565b6033546040805184815290516001600160a01b038087169388939116917f13f7471cab9806ac4ff5d80ae879babfbf1081e240d05c4450b75f69c626cb2e9181900360200190a450505050565b60366020526000908152604090205481565b6000908152603760205260409020600301546001600160a01b031690565b60345460009082906001600160a01b03163314611863576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b03166389ae1c906040518163ffffffff1660e01b815260040160206040518083038186803b1580156118b157600080fd5b505afa1580156118c5573d6000803e3d6000fd5b505050506040513d60208110156118db57600080fd5b505160008481526036602090815260409182902054825163277166bf60e11b81526001600160a01b03898116600483015260248201929092529251931692634ee2cd7e926044808201939291829003018186803b1580156115f857600080fd5b60345460009083906001600160a01b03163314611994576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b6000848152603760205260409020600a015460ff16156119b357600080fd5b6000848152603760205260409020600501546001600160a01b03166119d757600080fd5b82600114156119fd576000848152603760205260409020600a01805460ff191660011790555b60335460408051858152905186926001600160a01b0316917fd2632e80f5364f02aded1c64e8a04637b7c8bb9c2db2bedf4b6ac47c013acbc0919081900360200190a35060019392505050565b60009081526037602052604090206002015490565b60345460009082906001600160a01b03163314611ab8576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b0657600080fd5b505afa158015611b1a573d6000803e3d6000fd5b505050506040513d6020811015611b3057600080fd5b505160408051632074193160e21b815230600482015290516001600160a01b03909216916381d064c491602480820192602092909190829003018186803b158015611b7a57600080fd5b505afa158015611b8e573d6000803e3d6000fd5b505050506040513d6020811015611ba457600080fd5b5051611bf2576040805162461bcd60e51b81526020600482015260186024820152771cd8da195b59481a5cc81b9bdd081c9959da5cdd195c995960421b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b03166389ae1c906040518163ffffffff1660e01b815260040160206040518083038186803b158015611c4057600080fd5b505afa158015611c54573d6000803e3d6000fd5b505050506040513d6020811015611c6a57600080fd5b5051600084815260366020908152604091829020548251630981b24d60e41b8152600481019190915291516001600160a01b039093169263981b24d0926024808201939291829003018186803b158015611cc357600080fd5b505afa158015611cd7573d6000803e3d6000fd5b505050506040513d6020811015611ced57600080fd5b50519392505050565b60009081526037602052604090205490565b60345460009082906001600160a01b03163314611d61576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611daf57600080fd5b505afa158015611dc3573d6000803e3d6000fd5b505050506040513d6020811015611dd957600080fd5b50516040805163dab0efff60e01b81526001600160a01b0389811660048301528881166024830152604482018890529151919092169163dab0efff9160648083019260209291908290030181600087803b158015611e3657600080fd5b505af1158015611e4a573d6000803e3d6000fd5b505050506040513d6020811015611e6057600080fd5b50519695505050505050565b6038546001600160a01b03163314611eb9576040805162461bcd60e51b815260206004820152601c6024820152600080516020613914833981519152604482015290519081900360640190fd5b6000838152603760205260409020600a81015460ff16611f0a5760405162461bcd60e51b815260040180806020018281038252602f815260200180613885602f913960400191505060405180910390fd5b611f33826040518060800160405280606081526020016138b46060913960078401549190612a94565b600782015560335460408051638da5cb5b60e01b815290516001600160a01b0390921691638da5cb5b91600480820192602092909190829003018186803b158015611f7d57600080fd5b505afa158015611f91573d6000803e3d6000fd5b505050506040513d6020811015611fa757600080fd5b50516040805163dea9e24d60e01b8152600481018590526001600160a01b0386811660248301529151919092169163dea9e24d9160448083019260209291908290030181600087803b158015611ffc57600080fd5b505af1158015612010573d6000803e3d6000fd5b505050506040513d602081101561202657600080fd5b505161203157600080fd5b81156109d7576033546040805184815290516001600160a01b038087169388939116917feab8bc4bf2fd6ce5634b8e75023e0e48367e68249ce2aa2c0ef7c0efe5648bee9181900360200190a450505050565b6120bb8989878a600b806020026040519081016040528092919082600b602002808284376000920191909152508c9150612b829050565b6040516120c790613170565b604051809103906000f0801580156120e3573d6000803e3d6000fd5b50603980546001600160a01b0319166001600160a01b0392831617908190556040805163189acdbd60e31b81523060048201529051919092169163c4d66de891602480830192600092919082900301818387803b15801561214357600080fd5b505af1158015612157573d6000803e3d6000fd5b5050821591506122fa905057603354604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b031663189acdbd60e31b1790529051634b6c2f7760e11b81526001600160a01b03808816936396d85eee938893889388931691906004018086606080828437600081840152601f19601f82011690508083019250505080602001846001600160a01b031681526020018060200183810383528787828181526020019250808284376000838201819052601f909101601f191690920185810384528651815286516020918201939188019250908190849084905b8381101561225d578181015183820152602001612245565b50505050905090810190601f16801561228a5780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b1580156122ae57600080fd5b505af11580156122c2573d6000803e3d6000fd5b505050506040513d60208110156122d857600080fd5b5051603880546001600160a01b0319166001600160a01b039092169190911790555b505050505050505050565b6000818152603760205260408120600a81015460ff166123565760405162461bcd60e51b815260040180806020018281038252602f815260200180613885602f913960400191505060405180910390fd5b60058101546001600160a01b0316301415612389576007810154612384576001810180546007830155600090555b610bb6565b60018101805460009182905592508213156124aa57603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123ec57600080fd5b505afa158015612400573d6000803e3d6000fd5b505050506040513d602081101561241657600080fd5b505160058201546040805163dea9e24d60e01b8152600481018690526001600160a01b0392831660248201529051919092169163dea9e24d9160448083019260209291908290030181600087803b15801561247057600080fd5b505af1158015612484573d6000803e3d6000fd5b505050506040513d602081101561249a57600080fd5b50516124a557600080fd5b6125bd565b60008212156125bd57603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561250157600080fd5b505afa158015612515573d6000803e3d6000fd5b505050506040513d602081101561252b57600080fd5b505160058201546040805163ddbfcc6b60e01b8152600086810360048301526001600160a01b0393841660248301529151929093169263ddbfcc6b9260448083019360209383900390910190829087803b15801561258857600080fd5b505af115801561259c573d6000803e3d6000fd5b505050506040513d60208110156125b257600080fd5b50516125bd57600080fd5b8115610bb65760058101546033546040805185815290516001600160a01b0393841693879316917feab8bc4bf2fd6ce5634b8e75023e0e48367e68249ce2aa2c0ef7c0efe5648bee919081900360200190a450919050565b6000908152603760205260409020600a015460ff1690565b60345460009082906001600160a01b03163314612686576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156126d457600080fd5b505afa1580156126e8573d6000803e3d6000fd5b505050506040513d60208110156126fe57600080fd5b50516040805163dea9e24d60e01b8152600481018890526001600160a01b0387811660248301529151919092169163dea9e24d9160448083019260209291908290030181600087803b15801561275357600080fd5b505af1158015612767573d6000803e3d6000fd5b505050506040513d602081101561277d57600080fd5b505195945050505050565b603760205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a909a01549899979896976001600160a01b03968716979596909416949293919290919060ff168b565b6038546001600160a01b031681565b6038546001600160a01b0316331461284c576040805162461bcd60e51b815260206004820152601c6024820152600080516020613914833981519152604482015290519081900360640190fd5b6000838152603760205260409020600a81015460ff1661289d5760405162461bcd60e51b815260040180806020018281038252602f815260200180613885602f913960400191505060405180910390fd5b6128c6826040518060800160405280605f8152602001613934605f913960098401549190612a94565b600982015560038101546001600160a01b0316156109d75781156109d75760038101546128fd906001600160a01b03168484612b2b565b6033546040805184815290516001600160a01b038087169388939116917f5a66e28cdcd3bc22082d9f07be2b6bed5f50f349e5d89f655d750ecdd19883749181900360200190a450505050565b60009081526037602052604090206001015490565b60345460009082906001600160a01b031633146129b8576040805162461bcd60e51b81526020600482015260126024820152716f6e6c7920566f74696e674d616368696e6560701b604482015290519081900360640190fd5b603360009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a0657600080fd5b505afa158015612a1a573d6000803e3d6000fd5b505050506040513d6020811015612a3057600080fd5b50516040805163ddbfcc6b60e01b8152600481018890526001600160a01b0387811660248301529151919092169163ddbfcc6b9160448083019260209291908290030181600087803b15801561275357600080fd5b6039546001600160a01b031681565b60008184841115612b235760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612ae8578181015183820152602001612ad0565b50505050905090810190601f168015612b155780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612b7d908490612def565b505050565b6001600160a01b038416612bdd576040805162461bcd60e51b815260206004820152601c60248201527f766f74696e674d616368696e652063616e6e6f74206265207a65726f00000000604482015290519081900360640190fd5b612be685612fa7565b603480546001600160a01b0319166001600160a01b03861617905582612de2576040516307b4e1e360e01b815284906001600160a01b038216906307b4e1e39085908590600401808361016080838360005b83811015612c50578181015183820152602001612c38565b50505050905001826001600160a01b031681526020019250505060206040518083038186803b158015612c8257600080fd5b505afa158015612c96573d6000803e3d6000fd5b505050506040513d6020811015612cac57600080fd5b505160358190556040805162941a0160e21b81526004810192909252516000916001600160a01b038416916302506804916024808201926101a092909190829003018186803b158015612cfe57600080fd5b505afa158015612d12573d6000803e3d6000fd5b505050506040513d6101a0811015612d2957600080fd5b5051905080612ddb57604051638894c41b60e01b81526001600160a01b03831690638894c41b9086908690600401808361016080838360005b83811015612d7a578181015183820152602001612d62565b50505050905001826001600160a01b0316815260200192505050602060405180830381600087803b158015612dae57600080fd5b505af1158015612dc2573d6000803e3d6000fd5b505050506040513d6020811015612dd857600080fd5b50505b5050612de8565b60358390555b5050505050565b612e01826001600160a01b03166130c0565b612e52576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310612e905780518252601f199092019160209182019101612e71565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612ef2576040519150601f19603f3d011682016040523d82523d6000602084013e612ef7565b606091505b509150915081612f4e576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156109d757808060200190516020811015612f6a57600080fd5b50516109d75760405162461bcd60e51b815260040180806020018281038252602a815260200180613a4b602a913960400191505060405180910390fd5b600054610100900460ff1680612fc05750612fc06130fc565b80612fce575060005460ff16155b6130095760405162461bcd60e51b815260040180806020018281038252602e815260200180613993602e913960400191505060405180910390fd5b600054610100900460ff16158015613034576000805460ff1961ff0019909116610100171660011790555b6001600160a01b03821661308f576040805162461bcd60e51b815260206004820152601760248201527f536368656d65206d757374206861766520617661746172000000000000000000604482015290519081900360640190fd5b603380546001600160a01b0319166001600160a01b03841617905580156130bc576000805461ff00191690555b5050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906130f457508115155b949350505050565b303b1590565b60405180610160016040528060008152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581525090565b6107078061317e8339019056fe608060405234801561001057600080fd5b506106e7806100206000396000f3fe60806040526004361061004e5760003560e01c8063715018a6146100905780638da5cb5b146100a7578063c4d66de8146100d8578063cb16d4a21461010b578063f2fde38b146101585761008b565b3661008b5760408051348152905133917ff32a9f77675fd5917534c7746608fd3e309eac68fbdcbf5925e24ca97a704396919081900360200190a2005b600080fd5b34801561009c57600080fd5b506100a561018b565b005b3480156100b357600080fd5b506100bc61023f565b604080516001600160a01b039092168252519081900360200190f35b3480156100e457600080fd5b506100a5600480360360208110156100fb57600080fd5b50356001600160a01b031661024e565b34801561011757600080fd5b506101446004803603604081101561012e57600080fd5b50803590602001356001600160a01b0316610302565b604080519115158252519081900360200190f35b34801561016457600080fd5b506100a56004803603602081101561017b57600080fd5b50356001600160a01b031661044e565b610193610559565b6065546001600160a01b039081169116146101f5576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b6065546001600160a01b031690565b600054610100900460ff1680610267575061026761055d565b80610275575060005460ff16155b6102b05760405162461bcd60e51b815260040180806020018281038252602e815260200180610684602e913960400191505060405180910390fd5b600054610100900460ff161580156102db576000805460ff1961ff0019909116610100171660011790555b6102e3610563565b6102ec8261044e565b80156102fe576000805461ff00191690555b5050565b600061030c610559565b6065546001600160a01b0390811691161461036e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6040516000906001600160a01b0384169085908381818185875af1925050503d80600081146103b9576040519150601f19603f3d011682016040523d82523d6000602084013e6103be565b606091505b5050905080610408576040805162461bcd60e51b815260206004820152601160248201527039b2b73222ba3432b9103330b4b632b21760791b604482015290519081900360640190fd5b6040805185815290516001600160a01b038516917f5cf9c3dc0403b88750b3ce5ea792cdca787ff26128f6d508b99b2d3853ae13ec919081900360200190a25092915050565b610456610559565b6065546001600160a01b039081169116146104b8576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166104fd5760405162461bcd60e51b815260040180806020018281038252602681526020018061065e6026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b303b1590565b600054610100900460ff168061057c575061057c61055d565b8061058a575060005460ff16155b6105c55760405162461bcd60e51b815260040180806020018281038252602e815260200180610684602e913960400191505060405180910390fd5b600054610100900460ff161580156105f0576000805460ff1961ff0019909116610100171660011790555b60006105fa610559565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561065a576000805461ff00191690555b5056fe4f776e61626c653a2