Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 33 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Distribute Cycle... | 13694173 | 1162 days ago | IN | 0 ETH | 0.01444027 | ||||
Distribute Cycle... | 12866485 | 1292 days ago | IN | 0 ETH | 0.00087108 | ||||
Renounce Ownersh... | 12844670 | 1295 days ago | IN | 0 ETH | 0.00079511 | ||||
Time Restricted ... | 12777284 | 1306 days ago | IN | 0 ETH | 0.00156102 | ||||
Time Restricted ... | 12687153 | 1320 days ago | IN | 0 ETH | 0.00051646 | ||||
Distribute Cycle... | 12597001 | 1334 days ago | IN | 0 ETH | 0.00290979 | ||||
Distribute Cycle... | 12416229 | 1362 days ago | IN | 0 ETH | 0.0484965 | ||||
Distribute Cycle... | 12325554 | 1376 days ago | IN | 0 ETH | 0.00272215 | ||||
Distribute Cycle... | 12234870 | 1390 days ago | IN | 0 ETH | 0.00442401 | ||||
Distribute Cycle... | 12143797 | 1404 days ago | IN | 0 ETH | 0.02050815 | ||||
Distribute Cycle... | 12081676 | 1413 days ago | IN | 0 ETH | 0.00406287 | ||||
Distribute Cycle... | 12081665 | 1413 days ago | IN | 0 ETH | 0.00406287 | ||||
Distribute Cycle... | 12081657 | 1413 days ago | IN | 0 ETH | 0.00406287 | ||||
Distribute Cycle... | 12081651 | 1413 days ago | IN | 0 ETH | 0.00406287 | ||||
Distribute Cycle... | 12081635 | 1413 days ago | IN | 0 ETH | 0.00406287 | ||||
Distribute Cycle... | 12081597 | 1413 days ago | IN | 0 ETH | 0.00406287 | ||||
Distribute Cycle... | 12081327 | 1413 days ago | IN | 0 ETH | 0.00406287 | ||||
Distribute Cycle... | 12081310 | 1413 days ago | IN | 0 ETH | 0.00406287 | ||||
Distribute Cycle... | 12080752 | 1413 days ago | IN | 0 ETH | 0.00406287 | ||||
Distribute Cycle... | 12080744 | 1413 days ago | IN | 0 ETH | 0.00406287 | ||||
Distribute Cycle... | 12080736 | 1413 days ago | IN | 0 ETH | 0.00406287 | ||||
Distribute Cycle... | 12080721 | 1413 days ago | IN | 0 ETH | 0.00406287 | ||||
Distribute Cycle... | 12080714 | 1413 days ago | IN | 0 ETH | 0.00406287 | ||||
Check Is Live | 12080713 | 1413 days ago | IN | 0 ETH | 0.00289836 | ||||
Check Is Live | 12080705 | 1413 days ago | IN | 0 ETH | 0.00289836 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12777284 | 1306 days ago | 68.7642758 ETH | ||||
12777029 | 1306 days ago | 2.86517815 ETH | ||||
12687120 | 1320 days ago | 2.98456058 ETH | ||||
12597001 | 1334 days ago | 3.92705339 ETH | ||||
12506594 | 1348 days ago | 8.72678532 ETH | ||||
12416229 | 1362 days ago | 21.81696331 ETH | ||||
12325548 | 1376 days ago | 46.75063568 ETH | ||||
12234869 | 1390 days ago | 83.91139737 ETH | ||||
12143797 | 1404 days ago | 159.83123309 ETH | ||||
12052843 | 1418 days ago | 326.92752223 ETH | ||||
11961978 | 1432 days ago | 0.27086338 ETH | ||||
11961977 | 1432 days ago | 0.085 ETH | ||||
11961961 | 1432 days ago | 0.4 ETH | ||||
11961945 | 1432 days ago | 0.76 ETH | ||||
11961928 | 1432 days ago | 0.1 ETH | ||||
11961866 | 1432 days ago | 3.38 ETH | ||||
11961840 | 1432 days ago | 0.025 ETH | ||||
11961825 | 1432 days ago | 2 ETH | ||||
11961820 | 1432 days ago | 0.2 ETH | ||||
11961788 | 1432 days ago | 0.335 ETH | ||||
11961689 | 1432 days ago | 0.06 ETH | ||||
11961682 | 1432 days ago | 0.788 ETH | ||||
11961645 | 1432 days ago | 13.1 ETH | ||||
11961607 | 1432 days ago | 0.7 ETH | ||||
11961470 | 1432 days ago | 0.039 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
CleverProtocol
Compiler Version
v0.5.5+commit.47a71e8f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion, Audited
Contract Source Code (Solidity Standard Json-Input format)Audit Report
pragma solidity ^0.5.0; import "hardhat/console.sol"; import "./TimedSwap.sol"; import "./CleverToken.sol"; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; import "@openzeppelin/contracts/ownership/Ownable.sol"; /** * @title CleverProtocol * @dev Extension of Crowdsale contract that increases the price of tokens linearly in time. * Note that what should be provided to the constructor is the addresses of mintable token and the TimedSwap contract */ contract CleverProtocol is ReentrancyGuard, Ownable { using SafeMath for uint256; //state variables uint256 private openingTime; uint256 private closingTime; uint256 private _interval; uint256 public fortnight; bool public isLive; uint256 MAX_SUPPLY; //set DECIMALS uint DECIMALS = 1e18; // The token being managed CleverToken private _cleverToken; TimedSwap private _timedSwap; // just for loading isOpen() and openingTime/interval address payable adminWallet; // Track Cycles completed uint256 private cycles; //Store the cycle varaibles mapping(uint256 => uint256) private cycleAwards; mapping(uint256 => uint256) private cycleBonus; mapping(uint256 => uint256) private payoutPercent; //track the addresses being paid out on a cycle basis mapping(uint256 => bool) private cyclePaid; mapping(uint256 => bool) private ETHflushed; /* * @dev Constructor, sets the addresses of token and TimedSwap */ constructor (CleverToken _token, address payable _adminWallet) public { adminWallet = _adminWallet; //set the on-chain contract addresses _cleverToken = CleverToken(_token); //set the state variables fortnight = 14; MAX_SUPPLY = uint256(1_000_000_000_000).mul(DECIMALS); //init the # of cycles cycles = 0; //setFundsRequired & cycleAwards //-- setting these in the constructor function gurantees they will not be manipulated setCycleAwards(); setCycleBonus(); //for admin fee setThePayoutPercentage(); /*just for testing*/ //openingTime = now.sub(30 minutes); //closingTime = now; } function() payable external { //here simply to get forwarded funds from timedswap } function checkIsLive() public returns(bool){ require(now > openingTime, "Timed Swap has not begun"); if(!_timedSwap.hasClosed()){ return false; }else{ isLive = true; return isLive; } } function setTimedSwap(address payable _TimedSwap) public onlyOwner{ //inits the timedSwap contract _timedSwap = TimedSwap(_TimedSwap); openingTime = _timedSwap.openingTime(); closingTime = _timedSwap.closingTime(); _interval = _timedSwap.interval(); } function timedSwap() public view returns(address){ return address(_timedSwap); } function distributeCycleAward() public nonReentrant returns (uint256){ //update isLive require(checkIsLive(), "Not live yet"); //calculate cycle uint256 cycle = getCycle(); require(cycle > 0, "cycle is not greater than 0"); if (cyclePaid[cycle]){ revert("cycle has been paid already"); } uint256 in_application_cycle = cycle; //map the cycle -> range if (cycle < 51) { in_application_cycle = cycle; } else if(cycle > 50 && cycle <101){ in_application_cycle = 51; } else if (cycle > 100 && cycle <201) { in_application_cycle = 101; } else if (cycle > 201 && cycle < 401){ in_application_cycle = 201; } else if (cycle > 400 && cycle < 601){ in_application_cycle = 401; } else if (cycle > 600 && cycle < 801){ in_application_cycle = 601; } else { in_application_cycle = 801; } //differentiation is made between cycle and in_application_cycle as the token will //only accept non repeating cycles, this is done to ensure only one payout is possible //per cycle uint256 cycleAwardPercentage = cycleAwards[in_application_cycle]; uint256 cycleBonusPercentage = cycleBonus[in_application_cycle]; //cycle award first, then the cycle bonus basedo newly established balance //call on the Coin to distribute set percentageo each wallet's holdings _cleverToken.distribute(cycle, cycleAwardPercentage, cycleBonusPercentage); //this check is made to prevent bricking the function in case of low balance amount within the contract if(address(this).balance >= 10000000) { //flush the ETH with the corresponding percentage for this cycle and update payment flag uint256 cyclepayoutPercent = getPayoutPercentage(in_application_cycle); adminWallet.transfer(address(this).balance.mul(cyclepayoutPercent).div(1e5)); ETHflushed[cycle] = true; } //set this cycle to being paid cyclePaid[cycle] = true; //update cycles complete cycles = cycle; return cycles; } function getPayoutPercentage(uint256 _cycle) internal view returns(uint256){ uint256 cycle; if( _cycle < 9){ cycle = _cycle; } else{ cycle = 8; } return payoutPercent[cycle]; } /* returns floor of vision therefore giving the proper cycle #*/ function getCycle() public view returns (uint256){ //automatically determines if in isLive window require(isLive, "The swapping phase must have ended! -- no cycles to return"); //auto reverts when day < 1st fortnight return ((getDay().sub(30)).div(fortnight)); } function getDay() public view returns (uint256){ require(now > openingTime, "Swap has not begun yet"); return getElapsedTime().div(_interval); } function getElapsedTime() public view returns (uint256){ return block.timestamp.sub(openingTime); } function cyclesCompleted() public view returns (uint256) { return cycles; } function timeRestrictedWithdraw() public onlyOwner{ require(cycles>8, "It is too soon to be able to withdraw remaining ETH"); adminWallet.transfer(address(this).balance); } function token() public view returns(address){ return address(_cleverToken); } function admin() public view returns(address payable){ return adminWallet; } /* Called once on contract creation */ function setThePayoutPercentage () internal { payoutPercent[1] = 45000; payoutPercent[2] = 40000; payoutPercent[3] = 35000; payoutPercent[4] = 30000; payoutPercent[5] = 20000; payoutPercent[6] = 10000; payoutPercent[7] = 5000; payoutPercent[8] = 4000; } function setCycleAwards() private { //0.01% as 10, 0.1% as 1e2, 1% as 1e3 ,10% as 1e4, 100% as 1e5 cycleAwards[1] = 1e4; cycleAwards[2] = 5e3; cycleAwards[3] = 49e2; cycleAwards[4] = 48e2; cycleAwards[5] = 47e2; cycleAwards[6] = 46e2; cycleAwards[7] = 45e2; cycleAwards[8] = 44e2; cycleAwards[9] = 43e2; cycleAwards[10] = 42e2; cycleAwards[11] = 41e2; cycleAwards[12] = 40e2; //4.0% cycleAwards[13] = 39e2; cycleAwards[14] = 38e2; cycleAwards[15] = 37e2; cycleAwards[16] = 36e2; cycleAwards[17] = 35e2; cycleAwards[18] = 34e2; cycleAwards[19] = 33e2; cycleAwards[20] = 32e2; cycleAwards[21] = 31e2; cycleAwards[22] = 30e2; cycleAwards[23] = 29e2; cycleAwards[24] = 28e2; cycleAwards[25] = 27e2; cycleAwards[26] = 26e2; cycleAwards[27] = 25e2; //2.5% cycleAwards[28] = 24e2; cycleAwards[29] = 23e2; cycleAwards[30] = 22e2; cycleAwards[31] = 21e2; cycleAwards[32] = 20e2; cycleAwards[33] = 19e2; cycleAwards[34] = 18e2; cycleAwards[35] = 17e2; cycleAwards[36] = 16e2; cycleAwards[37] = 15e2; cycleAwards[38] = 14e2; cycleAwards[39] = 13e2; cycleAwards[40] = 12e2; cycleAwards[41] = 11e2; cycleAwards[42] = 10e2; //1% cycleAwards[43] = 950; cycleAwards[44] = 900; cycleAwards[45] = 850; cycleAwards[46] = 800; cycleAwards[47] = 750; cycleAwards[48] = 700; cycleAwards[49] = 650; cycleAwards[50] = 600; cycleAwards[51] = 500; cycleAwards[101] = 250; cycleAwards[201] = 200; cycleAwards[401] = 150; cycleAwards[601] = 100; cycleAwards[801] = 50; //%0.05% } function setCycleBonus() private { //0.01% as 10, 0.1% as 1e2, 1% as 1e3 ,10% as 1e4, 100% as 1e5 cycleBonus[1] = 1e3; cycleBonus[2] = 1e3; cycleBonus[3] = 1e3; cycleBonus[4] = 1e3; cycleBonus[5] = 1e3; cycleBonus[6] = 1e3; cycleBonus[7] = 1e3; cycleBonus[8] = 1e3; cycleBonus[9] = 0; cycleBonus[10] = 0; cycleBonus[11] = 0; cycleBonus[12] = 0; cycleBonus[13] = 0; cycleBonus[14] = 0; cycleBonus[15] = 0; cycleBonus[16] = 1e3; cycleBonus[17] = 0; cycleBonus[18] = 0; cycleBonus[19] = 0; cycleBonus[20] = 0; cycleBonus[21] = 0; cycleBonus[22] = 0; cycleBonus[23] = 0; cycleBonus[24] = 1e3; cycleBonus[25] = 0; cycleBonus[26] = 0; cycleBonus[27] = 0; cycleBonus[28] = 0; cycleBonus[29] = 0; cycleBonus[30] = 0; cycleBonus[31] = 0; cycleBonus[32] = 1e3; cycleBonus[33] = 0; cycleBonus[34] = 0; cycleBonus[35] = 0; cycleBonus[36] = 0; cycleBonus[37] = 0; cycleBonus[38] = 0; cycleBonus[39] = 0; cycleBonus[40] = 1e3; cycleBonus[41] = 0; cycleBonus[42] = 0; //1% cycleBonus[43] = 0; cycleBonus[44] = 0; cycleBonus[45] = 0; cycleBonus[46] = 0; cycleBonus[47] = 0; cycleBonus[48] = 1e3; cycleBonus[49] = 0; cycleBonus[50] = 0; cycleBonus[51] = 0; cycleBonus[101] = 0; cycleBonus[201] = 0; cycleBonus[401] = 0; cycleBonus[601] = 0; cycleBonus[801] = 0; } }
// SPDX-License-Identifier: MIT pragma solidity >= 0.4.22 <0.8.0; library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int)", p0)); } function logUint(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logByte(byte p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(byte)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1)); } function log(uint p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1)); } function log(uint p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1)); } function log(uint p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1)); } function log(string memory p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); } function log(uint p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); } function log(uint p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); } function log(uint p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); } function log(uint p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); } function log(uint p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); } function log(uint p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); } function log(uint p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); } function log(uint p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); } function log(uint p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); } function log(uint p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); } function log(uint p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); } function log(uint p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); } function log(uint p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); } function log(uint p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); } function log(uint p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); } function log(string memory p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); } function log(string memory p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); } function log(string memory p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); } function log(string memory p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); } function log(bool p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); } function log(bool p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); } function log(bool p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); } function log(address p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); } function log(address p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); } function log(address p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } }
pragma solidity ^0.5.0; import "hardhat/console.sol"; import "./CleverToken.sol"; import "./CleverProtocol.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; import "@openzeppelin/contracts/GSN/Context.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; /** * @title TimedSwap * @dev Extension of Crowdsale contract that increases the price of tokens * Note that what should be provided to the constructor is the address for the token and policy * established the amount of tokens per wei contributed. */ contract TimedSwap is Context, ReentrancyGuard{ using SafeMath for uint256; using SafeERC20 for CleverToken; //events event TokensPurchased(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); // Rates uint256 private _firstRate; uint256 private _secondRate; uint256 private _thirdRate; uint256 private _fourthRate; uint256 private _finalRate; // Windows uint256 private _firstWindow; uint256 private _secondWindow; uint256 private _thirdWindow; uint256 private _fourthWindow; uint256 private _finalWindow; // Times uint256 private _openingTime; uint256 private _closingTime; uint256 private _interval; // The token being sold CleverToken private _token; // Protocol to forward the funds address payable internal _protocol; // Amount of wei raised uint256 private _weiRaised; //modifiers modifier onlyWhileOpen { require(isOpen(), "TimedSwap is not open"); _; } /*Fall back*/ function () external payable { buyTokens(_msgSender()); } /** * @dev Constructor, sets the rates of tokens received per wei contributed. */ constructor (address payable protocol, address token, uint256 open, bool daysFlag) public { //1e18 wei = 1 ETH, therefore 0.002 ETH = 2e15 or 20e14 // Refer to _getTokenAmount() to clarify _Xrate usage // interval type set if(daysFlag) { _interval = (1 days); }else{ //mock minutes instead of days -- testing _interval = (1 minutes); } // Set rates _firstRate = 500; //1e18 CLVA = 2e15 * _firstRate _secondRate = 476; //5% penalty _thirdRate = 455; //10% penalty _fourthRate = 435; //15% penalty _finalRate = 417; //20% penalty // Windows for time frames _firstWindow = uint(1).mul(_interval); //Day 1 _secondWindow = uint(2).mul(_interval); //Day 2-3 _thirdWindow = uint(4).mul(_interval); //Day 4-7 _fourthWindow = uint(3).mul(_interval); //Day 8-10 _finalWindow = uint(20).mul(_interval); //Day 11-30 // Set times _openingTime = open; // unix time _closingTime = _openingTime + uint(30).mul(_interval);//30 days; //TODO: set the correct days require(_closingTime > _openingTime, "Opening time is not before closing time"); // Setup the external contracts require(protocol != address(0), "Crowdsale: wallet is the zero address"); require(address(token) != address(0), "Crowdsale: token is the zero address"); _protocol = protocol; _token = CleverToken(token); } /** * @dev low level token purchase * This function has a non-reentrancy guard, so it shouldn't be called by * another `nonReentrant` function. * @param beneficiary Recipient of the token purchase */ function buyTokens(address beneficiary) public nonReentrant onlyWhileOpen payable { uint256 weiAmount = msg.value; //makes sure sale is open from valid address with value sent _preValidatePurchase(beneficiary, weiAmount); // calculate token amount to be created uint256 tokens = _getTokenAmount(weiAmount); // update state _weiRaised = _weiRaised.add(weiAmount); //call internal deliver -- delivers tokens _processPurchase(beneficiary, tokens); //forward funds to the protocol address _forwardFunds(); //emit purchase event emit TokensPurchased(_msgSender(), beneficiary, weiAmount, tokens); } /** * @dev Returns the rate of tokens per wei at the present time. * @return The number of tokens a buyer gets per wei at a given time */ function getCurrentRate() public view returns (uint256) { require(now > openingTime(), "Swapping has not begun"); require(isOpen(), "The initial swapping has ended"); // solhint-disable-next-line not-rely-on-time uint256 elapsedTime = getElapsedTime(); uint256 numberOfDaysElapsed = uint(elapsedTime).div(_interval); require (numberOfDaysElapsed < 30, "The number of days passed exceeds the initial swap"); //find the window for the swap if (numberOfDaysElapsed < 1){ require(elapsedTime < _firstWindow); //in the first window return _firstRate; } else if (numberOfDaysElapsed < 3) { require(elapsedTime < (_firstWindow + _secondWindow)); //in second window return _secondRate; } else if (numberOfDaysElapsed < 7) { require(elapsedTime < (_firstWindow + _secondWindow + _thirdWindow)); //in third window return _thirdRate; } else if (numberOfDaysElapsed < 10) { require(elapsedTime < (_firstWindow + _secondWindow + _thirdWindow + _fourthWindow)); //in fourth window return _fourthRate; } else if (numberOfDaysElapsed < 30) { require(elapsedTime < (_firstWindow + _secondWindow + _thirdWindow + _fourthWindow + _finalWindow)); //in final window return _finalRate; } revert("error with getting current rate; swap is not open"); } /********************* * INTERNAL FUNCTIONS * **********************/ /** * @dev Overrides parent method taking into account variable rate. * @param weiAmount The value in wei to be converted into tokens * @return The number of tokens _weiAmount wei will buy at present time */ function _getTokenAmount(uint256 weiAmount) internal view returns (uint256) { uint256 currentRate = getCurrentRate(); return currentRate.mul(weiAmount); } /** * @dev Determines how ETH is stored/forwarded on purchases. */ function _forwardFunds() internal { //send funds to the protocol _protocol.transfer(msg.value); } /** * @dev Overrides delivery by minting tokens upon purchase. * @param beneficiary Token purchaser * @param tokenAmount Number of tokens to be minted */ function _deliverTokens(address beneficiary, uint256 tokenAmount) internal { // Potentially dangerous assumption about the type of the token. require( CleverToken(address(token())).mint(beneficiary, tokenAmount), "MintedCrowdsale: minting failed" ); } /** * @dev Executed when a purchase has been validated and is ready to be executed. Doesn't necessarily emit/send * tokens. * @param beneficiary Address receiving the tokens * @param tokenAmount Number of tokens to be purchased */ function _processPurchase(address beneficiary, uint256 tokenAmount) internal { _deliverTokens(beneficiary, tokenAmount); } /** * @dev Validation of an incoming purchase. Use require statements to revert state when conditions are not met. * Use `super` in contracts that inherit from Crowdsale to extend their validations. * Example from CappedCrowdsale.sol's _preValidatePurchase method: * super._preValidatePurchase(beneficiary, weiAmount); * require(weiRaised().add(weiAmount) <= cap); * @param beneficiary Address performing the token purchase * @param weiAmount Value in wei involved in the purchase */ function _preValidatePurchase(address beneficiary, uint256 weiAmount) internal onlyWhileOpen view { require(beneficiary != address(0), "Crowdsale: beneficiary is the zero address"); require(weiAmount != 0, "Crowdsale: weiAmount is 0"); this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 } /*************** * PUBLIC UTILS * ****************/ /** * @return the crowdsale opening time. */ function openingTime() public view returns (uint256) { return _openingTime; } /** * @return the crowdsale closing time. */ function closingTime() public view returns (uint256) { return _closingTime; } function interval() public view returns(uint256){ return _interval; } /** * @return true if the crowdsale is open, false otherwise. */ function isOpen() public view returns (bool) { // solhint-disable-next-line not-rely-on-time return block.timestamp >= _openingTime && block.timestamp <= _closingTime; } function getElapsedTime() public view returns (uint256){ require(now > openingTime()); return block.timestamp.sub(openingTime()); } /** * @dev Checks whether the period in which the crowdsale is open has already elapsed. * @return Whether crowdsale period has elapsed */ function hasClosed() public returns (bool) { // solhint-disable-next-line not-rely-on-time //renounce minting if if(block.timestamp > _closingTime){ if(token().isMinter(address(this))){ //renounce minter role if this contract is still a minter and it has closed token().renounceMinter(); } //and return true return true; }else{ return false; } } /** * @return the token being sold. */ function token() public view returns (CleverToken) { return _token; } /** * @return the address where funds are collected. */ function wallet() public view returns (address payable) { return _protocol; } /** * @return the amount of wei raised. */ function weiRaised() public view returns (uint256) { return _weiRaised; } /** * @return the initial rate of the swap */ function initialRate() public view returns (uint256) { return _firstRate; } }
pragma solidity ^0.5.0; import "hardhat/console.sol"; import "./CleverProtocol.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/ownership/Ownable.sol"; import "@openzeppelin/contracts/access/roles/MinterRole.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; /** * @dev Implementation of the ERC20 CleverToken * * At construction, the deployer of the contract is the only owner, * which will be used to solely set the Protocol and then renounce, * bricking any onlyOwner functions in this token. Additionally, the * owner is set as the only minter, and should revoke minting ability * */ contract CleverToken is Ownable, MinterRole, IERC20 { using SafeMath for uint256; string private _name; string private _symbol; uint8 private _decimals; // Used for authentication of distribution address payable public Protocol; address payable private _admin; event LogCycleDistribution(uint256 indexed cycle, uint256 newly_added_tokens); event LogProtocolSet(address Protocol); uint256 private fragsPerToken; uint256 private lastCyclePaid = 0; uint256 private DECIMALS = 18; uint256 private constant MAX_UINT256 = ~uint256(0); uint256 private totalFrags = 1e60; bool private lockedSwap = false; uint256 internal _cap; uint256 private _totalSupply; mapping (address => uint256) private _fragBalances; mapping (address => mapping (address => uint256)) private _allowances; modifier onlyProtocol() { require(msg.sender == Protocol,"Sender is not the Protocol!"); _; } modifier validRecipient(address to) { require(to != address(0x0)); require(to != address(this)); _; } constructor (string memory name, string memory symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; _totalSupply = 0; fragsPerToken = 1e30; _cap = uint256(1_000_000_000_000).mul(1e18); //1 trillion tokens } function distribute(uint256 _cycle, uint256 _percentageFactor,uint256 _bonusPercentageFactor) external onlyProtocol { //Protocol ensures that this will not be called prior to swap/minting phase ending //require this cycle to be +1 to the last cycle paid require(_cycle > lastCyclePaid, "Cycle attempting to be paid out is in the past!"); if(!lockedSwap){ //set the contract constants based on the _totalSupply at the time of the first distrubtion //totalFrags from here forth is permanent-- this locks in the proper % distributions // 1e30 is the maximum resolution required since max_supply is 1e12 totalFrags = _totalSupply.mul(uint256(1e30)); //lock Minting from here lockedSwap = true; } require(lockedSwap,"Swapping phase is not over!"); //retrieve the initial supply uint256 initial_total_supply = _totalSupply; //factor is percentage taken out of 1e5, therefore if factor is 1 then the percentage is 0.00001 //since the max supply is 1e12*1e18, instability is not taken into account uint256 delta = (initial_total_supply.mul(_percentageFactor)).div(1e5); require(delta > 0, "supply delta was not greater than 0"); //set the internal supply of the CLVA token _totalSupply = _totalSupply.add(delta); //distribute the bonus if applicable if(_bonusPercentageFactor > 0) { //calculate initial supply uint256 initial_total_supply_two = _totalSupply; uint256 delta_two = (initial_total_supply_two.mul(_bonusPercentageFactor)).div(1e5); require(delta_two > 0, "supply delta was not greater than 0"); //set the internal supply of the CLVA token _totalSupply = _totalSupply.add(delta_two); } //if cap is ever reached, simply set the supply in circulation equal to that and continue if (_totalSupply > _cap) { _totalSupply = _cap; } else{ fragsPerToken = totalFrags.div(_totalSupply); //send to admin as long as cap is not met //admin receives 0.1% of new total supply uint256 forAdmin = (_totalSupply.mul(1e2)).div(1e5); //update total supply AND total frags so that the rate does not change _totalSupply = _totalSupply.add(forAdmin); totalFrags = totalFrags.add(forAdmin.mul(fragsPerToken)); _fragBalances[_admin] = _fragBalances[_admin].add(forAdmin.mul(fragsPerToken)); fragsPerToken = totalFrags.div(_totalSupply); } lastCyclePaid = lastCyclePaid.add(1); emit LogCycleDistribution(lastCyclePaid, delta); } function setProtocol(address payable _protocol) external onlyOwner { Protocol = _protocol; CleverProtocol protocolContract = CleverProtocol(Protocol); _admin = protocolContract.admin(); emit LogProtocolSet(Protocol); } function protocol() public view returns(address){ return Protocol; } function balanceOf(address account) public view returns (uint256) { return _fragBalances[account].div(fragsPerToken); } function fragsOf(address account) public view returns (uint256){ return _fragBalances[account]; } function admin() public view returns(address){ return _admin; } function mint(address account, uint256 amount) public onlyMinter returns (bool) { require(totalSupply().add(amount) <= _cap, "CLVA in circulation has reached 1 trillion!"); if(lockedSwap){ // different minting funciton _mintAfterSwap(account,amount); } else{ _mint(account, amount); } return true; } /** * @dev Override interal mint function * @param account The account to receive newly minted coins * @param amount The amount to be transferred. */ function _mint(address account, uint256 amount) internal { require(!lockedSwap, "minting phase is over"); require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _fragBalances[account] = _fragBalances[account].add(amount.mul(fragsPerToken)); emit Transfer(address(0), account, amount); } function _mintAfterSwap(address account, uint256 amount) internal{ require(account != address(0), "ERC20: mint to the zero address"); //add amount to total supply _totalSupply = _totalSupply.add(amount); //calculate the number of frags this is uint256 fragAmount = amount.mul(fragsPerToken); //add this frag amount to the address account _fragBalances[account] = _fragBalances[account].add(fragAmount); //fragsPerToken ~ 1e60 - O(totalSupply), amount ~ O(totalSupply), therefore fragAmount~ 1e48 - O(totalSupply) + O(totalSupply) ~ 1e48 require(amount < _totalSupply, "amount < totalSupply -- bounding this ensures no inflationary issues in regards to the internal FRAG denomination -- will always be O(e60)"); //update total frags totalFrags = totalFrags.add(fragAmount); //update fragsPerToken fragsPerToken = totalFrags.div(_totalSupply); emit Transfer(address(0), account, amount); } function adminDistribute(uint256 _percentageFactor) external onlyOwner { //Protocol ensures that this will not be called prior to swap/minting phase ending //require this cycle to be +1 to the last cycle paid if(!lockedSwap){ revert("no distribution available while in intial minting phase."); } require(lockedSwap,"Swapping phase is not over!"); if (_totalSupply > _cap) { revert("max supply has been reached!"); } //retrieve the initial supply uint256 initial_total_supply = _totalSupply; //factor is percentage taken out of 1e5, therefore if factor is 1 then the percentage is 0.00001 //since the max supply is 1e12*1e18, instability is not taken into account uint256 delta = (initial_total_supply.mul(_percentageFactor)).div(1e5); require(delta > 0, "supply delta was not greater than 0"); //set the internal supply of the CLVA token _totalSupply = _totalSupply.add(delta); //if cap is ever reached, simply set the supply in circulation equal to that if (_totalSupply > _cap) { _totalSupply = _cap; } fragsPerToken = totalFrags.div(_totalSupply); emit LogCycleDistribution(999, delta); } /** * @param to The address to transfer to. * @param value The amount to be transferred. * @return True on success, false otherwise. */ function transfer(address to, uint256 value) public returns (bool) { require(to != address(0), "ERC20: transfer from the zero address"); uint256 fragValue = value.mul(fragsPerToken); _fragBalances[msg.sender] = _fragBalances[msg.sender].sub(fragValue); _fragBalances[to] = _fragBalances[to].add(fragValue); emit Transfer(msg.sender, to, value); return true; } /** * Transfer tokens from one address to another. * @param from The address you want to send tokens from. * @param to The address you want to transfer to. * @param value The amount of tokens to be transferred. */ function transferFrom(address from, address to, uint256 value) public returns (bool) { require(to != address(0), "ERC20: transfer from the zero address"); require(from != address(0), "ERC20: transfer from the zero address"); _allowances[from][msg.sender] = _allowances[from][msg.sender].sub(value); uint256 fragValue = value.mul(fragsPerToken); _fragBalances[from] = _fragBalances[from].sub(fragValue); _fragBalances[to] = _fragBalances[to].add(fragValue); emit Transfer(from, to, value); return true; } /** * @dev Function to check the amount of tokens that an owner has allowed to a spender. * @param owner_ The address which owns the funds. * @param spender The address which will spend the funds. * @return The number of tokens still available for the spender. */ function allowance(address owner_, address spender) public view returns (uint256) { return _allowances[owner_][spender]; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of * msg.sender. This method is included for ERC20 compatibility. * Changing an allowance with this method brings the risk that someone may transfer both * the old and the new allowance - if they are both greater than zero - if a transfer * transaction is mined before the later approve() call is mined. * * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) public returns (bool) { _allowances[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { require(spender != address(0), "ERC20: zero address"); _allowances[msg.sender][spender] = _allowances[msg.sender][spender].add(addedValue); emit Approval(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { require(spender != address(0), "ERC20: zero address"); _allowances[msg.sender][spender] = _allowances[msg.sender][spender].sub(subtractedValue); emit Approval(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue)); return true; } /** * @dev Returns the cap on the token's total supply. */ function cap() public view returns (uint256) { return _cap; } /** * @dev Returns the token's total supply. */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } }
pragma solidity ^0.5.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. * * _Since v2.5.0:_ this module is now much more gas efficient, given net gas * metering changes introduced in the Istanbul hardfork. */ contract ReentrancyGuard { bool private _notEntered; constructor () internal { // Storing an initial non-zero value makes deployment a bit more // expensive, but in exchange the refund on every call to nonReentrant // will be lower in amount. Since refunds are capped to a percetange of // the total transaction's gas, it is best to keep them low in cases // like this one, to increase the likelihood of the full refund coming // into effect. _notEntered = true; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_notEntered, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _notEntered = false; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _notEntered = true; } }
pragma solidity ^0.5.0; import "../GSN/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
pragma solidity ^0.5.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
pragma solidity ^0.5.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
pragma solidity ^0.5.0; import "./IERC20.sol"; import "../../math/SafeMath.sol"; import "../../utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
pragma solidity ^0.5.0; import "../../GSN/Context.sol"; import "../Roles.sol"; contract MinterRole is Context { using Roles for Roles.Role; event MinterAdded(address indexed account); event MinterRemoved(address indexed account); Roles.Role private _minters; constructor () internal { _addMinter(_msgSender()); } modifier onlyMinter() { require(isMinter(_msgSender()), "MinterRole: caller does not have the Minter role"); _; } function isMinter(address account) public view returns (bool) { return _minters.has(account); } function addMinter(address account) public onlyMinter { _addMinter(account); } function renounceMinter() public { _removeMinter(_msgSender()); } function _addMinter(address account) internal { _minters.add(account); emit MinterAdded(account); } function _removeMinter(address account) internal { _minters.remove(account); emit MinterRemoved(account); } }
pragma solidity ^0.5.0; /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } }
pragma solidity ^0.5.5; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- Block Hunters - December 23rd, 2020 - Security Audit Report
[{"constant":true,"inputs":[],"name":"getElapsedTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"checkIsLive","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cyclesCompleted","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCycle","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"distributeCycleAward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isLive","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"timeRestrictedWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"timedSwap","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fortnight","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_TimedSwap","type":"address"}],"name":"setTimedSwap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"},{"name":"_adminWallet","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
6080604052670de0b6b3a76400006007553480156200001d57600080fd5b50604051604080620027ff833981018060405260408110156200003f57600080fd5b81019080805190602001909291908051906020019092919050505060016000806101000a81548160ff0219169083151502179055506000620000866200021660201b60201c565b905080600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e600481905550620001d060075464e8d4a510006200021e60201b620014571790919060201c565b6006819055506000600b81905550620001ee620002ad60201b60201c565b620001fe6200089560201b60201c565b6200020e62000e5760201b60201c565b505062000f31565b600033905090565b600080831415620002335760009050620002a7565b600082840290508284828115156200024757fe5b04141515620002a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620027de6021913960400191505060405180910390fd5b809150505b92915050565b612710600c60006001815260200190815260200160002081905550611388600c60006002815260200190815260200160002081905550611324600c600060038152602001908152602001600020819055506112c0600c6000600481526020019081526020016000208190555061125c600c600060058152602001908152602001600020819055506111f8600c60006006815260200190815260200160002081905550611194600c60006007815260200190815260200160002081905550611130600c600060088152602001908152602001600020819055506110cc600c60006009815260200190815260200160002081905550611068600c6000600a815260200190815260200160002081905550611004600c6000600b815260200190815260200160002081905550610fa0600c6000600c815260200190815260200160002081905550610f3c600c6000600d815260200190815260200160002081905550610ed8600c6000600e815260200190815260200160002081905550610e74600c6000600f815260200190815260200160002081905550610e10600c60006010815260200190815260200160002081905550610dac600c60006011815260200190815260200160002081905550610d48600c60006012815260200190815260200160002081905550610ce4600c60006013815260200190815260200160002081905550610c80600c60006014815260200190815260200160002081905550610c1c600c60006015815260200190815260200160002081905550610bb8600c60006016815260200190815260200160002081905550610b54600c60006017815260200190815260200160002081905550610af0600c60006018815260200190815260200160002081905550610a8c600c60006019815260200190815260200160002081905550610a28600c6000601a8152602001908152602001600020819055506109c4600c6000601b815260200190815260200160002081905550610960600c6000601c8152602001908152602001600020819055506108fc600c6000601d815260200190815260200160002081905550610898600c6000601e815260200190815260200160002081905550610834600c6000601f8152602001908152602001600020819055506107d0600c6000602081526020019081526020016000208190555061076c600c60006021815260200190815260200160002081905550610708600c600060228152602001908152602001600020819055506106a4600c60006023815260200190815260200160002081905550610640600c600060248152602001908152602001600020819055506105dc600c60006025815260200190815260200160002081905550610578600c60006026815260200190815260200160002081905550610514600c600060278152602001908152602001600020819055506104b0600c6000602881526020019081526020016000208190555061044c600c600060298152602001908152602001600020819055506103e8600c6000602a8152602001908152602001600020819055506103b6600c6000602b815260200190815260200160002081905550610384600c6000602c815260200190815260200160002081905550610352600c6000602d815260200190815260200160002081905550610320600c6000602e8152602001908152602001600020819055506102ee600c6000602f8152602001908152602001600020819055506102bc600c6000603081526020019081526020016000208190555061028a600c60006031815260200190815260200160002081905550610258600c600060328152602001908152602001600020819055506101f4600c6000603381526020019081526020016000208190555060fa600c6000606581526020019081526020016000208190555060c8600c600060c98152602001908152602001600020819055506096600c60006101918152602001908152602001600020819055506064600c60006102598152602001908152602001600020819055506032600c6000610321815260200190815260200160002081905550565b6103e8600d600060018152602001908152602001600020819055506103e8600d600060028152602001908152602001600020819055506103e8600d600060038152602001908152602001600020819055506103e8600d600060048152602001908152602001600020819055506103e8600d600060058152602001908152602001600020819055506103e8600d600060068152602001908152602001600020819055506103e8600d600060078152602001908152602001600020819055506103e8600d600060088152602001908152602001600020819055506000600d600060098152602001908152602001600020819055506000600d6000600a8152602001908152602001600020819055506000600d6000600b8152602001908152602001600020819055506000600d6000600c8152602001908152602001600020819055506000600d6000600d8152602001908152602001600020819055506000600d6000600e8152602001908152602001600020819055506000600d6000600f8152602001908152602001600020819055506103e8600d600060108152602001908152602001600020819055506000600d600060118152602001908152602001600020819055506000600d600060128152602001908152602001600020819055506000600d600060138152602001908152602001600020819055506000600d600060148152602001908152602001600020819055506000600d600060158152602001908152602001600020819055506000600d600060168152602001908152602001600020819055506000600d600060178152602001908152602001600020819055506103e8600d600060188152602001908152602001600020819055506000600d600060198152602001908152602001600020819055506000600d6000601a8152602001908152602001600020819055506000600d6000601b8152602001908152602001600020819055506000600d6000601c8152602001908152602001600020819055506000600d6000601d8152602001908152602001600020819055506000600d6000601e8152602001908152602001600020819055506000600d6000601f8152602001908152602001600020819055506103e8600d600060208152602001908152602001600020819055506000600d600060218152602001908152602001600020819055506000600d600060228152602001908152602001600020819055506000600d600060238152602001908152602001600020819055506000600d600060248152602001908152602001600020819055506000600d600060258152602001908152602001600020819055506000600d600060268152602001908152602001600020819055506000600d600060278152602001908152602001600020819055506103e8600d600060288152602001908152602001600020819055506000600d600060298152602001908152602001600020819055506000600d6000602a8152602001908152602001600020819055506000600d6000602b8152602001908152602001600020819055506000600d6000602c8152602001908152602001600020819055506000600d6000602d8152602001908152602001600020819055506000600d6000602e8152602001908152602001600020819055506000600d6000602f8152602001908152602001600020819055506103e8600d600060308152602001908152602001600020819055506000600d600060318152602001908152602001600020819055506000600d600060328152602001908152602001600020819055506000600d600060338152602001908152602001600020819055506000600d600060658152602001908152602001600020819055506000600d600060c98152602001908152602001600020819055506000600d60006101918152602001908152602001600020819055506000600d60006102598152602001908152602001600020819055506000600d6000610321815260200190815260200160002081905550565b61afc8600e60006001815260200190815260200160002081905550619c40600e600060028152602001908152602001600020819055506188b8600e60006003815260200190815260200160002081905550617530600e60006004815260200190815260200160002081905550614e20600e60006005815260200190815260200160002081905550612710600e60006006815260200190815260200160002081905550611388600e60006007815260200190815260200160002081905550610fa0600e60006008815260200190815260200160002081905550565b61189d8062000f416000396000f3fe6080604052600436106100fe5760003560e01c80638f32d59b11610095578063f08e703b11610064578063f08e703b14610340578063f1ed9ed51461036b578063f2fde38b146103bc578063f851a4401461040d578063fc0c546a14610464576100fe565b80638f32d59b14610274578063b8f7a665146102a3578063baa2c10e146102d2578063d7cca880146102e9576100fe565b8063655bce22116100d1578063655bce22146101b0578063715018a6146101db57806372461aa3146101f25780638da5cb5b1461021d576100fe565b8063125d70201461010057806314ba5c091461012b5780632b4013ae146101565780634b5929c214610185575b005b34801561010c57600080fd5b506101156104bb565b6040518082815260200191505060405180910390f35b34801561013757600080fd5b506101406104d7565b6040518082815260200191505060405180910390f35b34801561016257600080fd5b5061016b610573565b604051808215151515815260200191505060405180910390f35b34801561019157600080fd5b5061019a6106d3565b6040518082815260200191505060405180910390f35b3480156101bc57600080fd5b506101c56106dd565b6040518082815260200191505060405180910390f35b3480156101e757600080fd5b506101f061077a565b005b3480156101fe57600080fd5b506102076108b6565b6040518082815260200191505060405180910390f35b34801561022957600080fd5b50610232610dd2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561028057600080fd5b50610289610dfb565b604051808215151515815260200191505060405180910390f35b3480156102af57600080fd5b506102b8610e59565b604051808215151515815260200191505060405180910390f35b3480156102de57600080fd5b506102e7610e6c565b005b3480156102f557600080fd5b506102fe610fc7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561034c57600080fd5b50610355610ff1565b6040518082815260200191505060405180910390f35b34801561037757600080fd5b506103ba6004803603602081101561038e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ff7565b005b3480156103c857600080fd5b5061040b600480360360208110156103df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112b2565b005b34801561041957600080fd5b5061042261133a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561047057600080fd5b50610479611364565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006104d26001544261138e90919063ffffffff16565b905090565b600060015442111515610552576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f5377617020686173206e6f7420626567756e207965740000000000000000000081525060200191505060405180910390fd5b61056e6003546105606104bb565b6113d890919063ffffffff16565b905090565b6000600154421115156105ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54696d6564205377617020686173206e6f7420626567756e000000000000000081525060200191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631515bc2b6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561065857600080fd5b505af115801561066c573d6000803e3d6000fd5b505050506040513d602081101561068257600080fd5b810190808051906020019092919050505015156106a257600090506106d0565b6001600560006101000a81548160ff021916908315150217905550600560009054906101000a900460ff1690505b90565b6000600b54905090565b6000600560009054906101000a900460ff161515610746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180611838603a913960400191505060405180910390fd5b610775600454610767601e6107596104d7565b61138e90919063ffffffff16565b6113d890919063ffffffff16565b905090565b610782610dfb565b15156107f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900460ff16151561093b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060006101000a81548160ff02191690831515021790555061095d610573565b15156109d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206c69766520796574000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006109db6106dd565b9050600081111515610a55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6379636c65206973206e6f742067726561746572207468616e2030000000000081525060200191505060405180910390fd5b600f600082815260200190815260200160002060009054906101000a900460ff1615610ae9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6379636c6520686173206265656e207061696420616c7265616479000000000081525060200191505060405180910390fd5b60008190506033821015610aff57819050610ba7565b603282118015610b0f5750606582105b15610b1d5760339050610ba6565b606482118015610b2d575060c982105b15610b3b5760659050610ba5565b60c982118015610b4c575061019182105b15610b5a5760c99050610ba4565b61019082118015610b6c575061025982105b15610b7b576101919050610ba3565b61025882118015610b8d575061032182105b15610b9c576102599050610ba2565b61032190505b5b5b5b5b5b6000600c60008381526020019081526020016000205490506000600d6000848152602001908152602001600020549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2de6ec58584846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015610c5c57600080fd5b505af1158015610c70573d6000803e3d6000fd5b50505050629896803073ffffffffffffffffffffffffffffffffffffffff1631101515610d79576000610ca284611422565b9050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc610d1f620186a0610d11853073ffffffffffffffffffffffffffffffffffffffff163161145790919063ffffffff16565b6113d890919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015610d4a573d6000803e3d6000fd5b5060016010600087815260200190815260200160002060006101000a81548160ff021916908315150217905550505b6001600f600086815260200190815260200160002060006101000a81548160ff02191690831515021790555083600b81905550600b5494505050505060016000806101000a81548160ff02191690831515021790555090565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e3d6114e1565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600560009054906101000a900460ff1681565b610e74610dfb565b1515610ee8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6008600b54111515610f45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806118056033913960400191505060405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015610fc4573d6000803e3d6000fd5b50565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60045481565b610fff610dfb565b1515611073576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b7a8807c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561111c57600080fd5b505afa158015611130573d6000803e3d6000fd5b505050506040513d602081101561114657600080fd5b8101908080519060200190929190505050600181905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634b6753bc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111c557600080fd5b505afa1580156111d9573d6000803e3d6000fd5b505050506040513d60208110156111ef57600080fd5b8101908080519060200190929190505050600281905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663947a36fb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561126e57600080fd5b505afa158015611282573d6000803e3d6000fd5b505050506040513d602081101561129857600080fd5b810190808051906020019092919050505060038190555050565b6112ba610dfb565b151561132e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611337816114e9565b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006113d083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611631565b905092915050565b600061141a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506116f3565b905092915050565b60008060098310156114365782905061143b565b600890505b600e600082815260200190815260200160002054915050919050565b60008083141561146a57600090506114db565b6000828402905082848281151561147d57fe5b041415156114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117e46021913960400191505060405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611571576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806117be6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600083831115829015156116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116a557808201518184015260208101905061168a565b50505050905090810190601f1680156116d25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808311829015156117a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561176657808201518184015260208101905061174b565b50505050905090810190601f1680156117935780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858115156117af57fe5b04905080915050939250505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77497420697320746f6f20736f6f6e20746f2062652061626c6520746f2077697468647261772072656d61696e696e6720455448546865207377617070696e67207068617365206d757374206861766520656e64656421202d2d206e6f206379636c657320746f2072657475726ea165627a7a7230582033673e2f7a740c6bdecf508ee33716e9cccc6e463526fe39d9482c15dcc0d4350029536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77000000000000000000000000c52e23194476b1dd39408cb0b9d935da8e6db3d6000000000000000000000000fc41eeb6474066d66f35eaf42455499b68e21b41
Deployed Bytecode
0x6080604052600436106100fe5760003560e01c80638f32d59b11610095578063f08e703b11610064578063f08e703b14610340578063f1ed9ed51461036b578063f2fde38b146103bc578063f851a4401461040d578063fc0c546a14610464576100fe565b80638f32d59b14610274578063b8f7a665146102a3578063baa2c10e146102d2578063d7cca880146102e9576100fe565b8063655bce22116100d1578063655bce22146101b0578063715018a6146101db57806372461aa3146101f25780638da5cb5b1461021d576100fe565b8063125d70201461010057806314ba5c091461012b5780632b4013ae146101565780634b5929c214610185575b005b34801561010c57600080fd5b506101156104bb565b6040518082815260200191505060405180910390f35b34801561013757600080fd5b506101406104d7565b6040518082815260200191505060405180910390f35b34801561016257600080fd5b5061016b610573565b604051808215151515815260200191505060405180910390f35b34801561019157600080fd5b5061019a6106d3565b6040518082815260200191505060405180910390f35b3480156101bc57600080fd5b506101c56106dd565b6040518082815260200191505060405180910390f35b3480156101e757600080fd5b506101f061077a565b005b3480156101fe57600080fd5b506102076108b6565b6040518082815260200191505060405180910390f35b34801561022957600080fd5b50610232610dd2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561028057600080fd5b50610289610dfb565b604051808215151515815260200191505060405180910390f35b3480156102af57600080fd5b506102b8610e59565b604051808215151515815260200191505060405180910390f35b3480156102de57600080fd5b506102e7610e6c565b005b3480156102f557600080fd5b506102fe610fc7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561034c57600080fd5b50610355610ff1565b6040518082815260200191505060405180910390f35b34801561037757600080fd5b506103ba6004803603602081101561038e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ff7565b005b3480156103c857600080fd5b5061040b600480360360208110156103df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112b2565b005b34801561041957600080fd5b5061042261133a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561047057600080fd5b50610479611364565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006104d26001544261138e90919063ffffffff16565b905090565b600060015442111515610552576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f5377617020686173206e6f7420626567756e207965740000000000000000000081525060200191505060405180910390fd5b61056e6003546105606104bb565b6113d890919063ffffffff16565b905090565b6000600154421115156105ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54696d6564205377617020686173206e6f7420626567756e000000000000000081525060200191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631515bc2b6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561065857600080fd5b505af115801561066c573d6000803e3d6000fd5b505050506040513d602081101561068257600080fd5b810190808051906020019092919050505015156106a257600090506106d0565b6001600560006101000a81548160ff021916908315150217905550600560009054906101000a900460ff1690505b90565b6000600b54905090565b6000600560009054906101000a900460ff161515610746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180611838603a913960400191505060405180910390fd5b610775600454610767601e6107596104d7565b61138e90919063ffffffff16565b6113d890919063ffffffff16565b905090565b610782610dfb565b15156107f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900460ff16151561093b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60008060006101000a81548160ff02191690831515021790555061095d610573565b15156109d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4e6f74206c69766520796574000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006109db6106dd565b9050600081111515610a55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6379636c65206973206e6f742067726561746572207468616e2030000000000081525060200191505060405180910390fd5b600f600082815260200190815260200160002060009054906101000a900460ff1615610ae9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6379636c6520686173206265656e207061696420616c7265616479000000000081525060200191505060405180910390fd5b60008190506033821015610aff57819050610ba7565b603282118015610b0f5750606582105b15610b1d5760339050610ba6565b606482118015610b2d575060c982105b15610b3b5760659050610ba5565b60c982118015610b4c575061019182105b15610b5a5760c99050610ba4565b61019082118015610b6c575061025982105b15610b7b576101919050610ba3565b61025882118015610b8d575061032182105b15610b9c576102599050610ba2565b61032190505b5b5b5b5b5b6000600c60008381526020019081526020016000205490506000600d6000848152602001908152602001600020549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2de6ec58584846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b158015610c5c57600080fd5b505af1158015610c70573d6000803e3d6000fd5b50505050629896803073ffffffffffffffffffffffffffffffffffffffff1631101515610d79576000610ca284611422565b9050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc610d1f620186a0610d11853073ffffffffffffffffffffffffffffffffffffffff163161145790919063ffffffff16565b6113d890919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015610d4a573d6000803e3d6000fd5b5060016010600087815260200190815260200160002060006101000a81548160ff021916908315150217905550505b6001600f600086815260200190815260200160002060006101000a81548160ff02191690831515021790555083600b81905550600b5494505050505060016000806101000a81548160ff02191690831515021790555090565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e3d6114e1565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600560009054906101000a900460ff1681565b610e74610dfb565b1515610ee8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6008600b54111515610f45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806118056033913960400191505060405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015610fc4573d6000803e3d6000fd5b50565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60045481565b610fff610dfb565b1515611073576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b7a8807c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561111c57600080fd5b505afa158015611130573d6000803e3d6000fd5b505050506040513d602081101561114657600080fd5b8101908080519060200190929190505050600181905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634b6753bc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111c557600080fd5b505afa1580156111d9573d6000803e3d6000fd5b505050506040513d60208110156111ef57600080fd5b8101908080519060200190929190505050600281905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663947a36fb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561126e57600080fd5b505afa158015611282573d6000803e3d6000fd5b505050506040513d602081101561129857600080fd5b810190808051906020019092919050505060038190555050565b6112ba610dfb565b151561132e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611337816114e9565b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006113d083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611631565b905092915050565b600061141a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506116f3565b905092915050565b60008060098310156114365782905061143b565b600890505b600e600082815260200190815260200160002054915050919050565b60008083141561146a57600090506114db565b6000828402905082848281151561147d57fe5b041415156114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117e46021913960400191505060405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611571576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806117be6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600083831115829015156116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116a557808201518184015260208101905061168a565b50505050905090810190601f1680156116d25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808311829015156117a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561176657808201518184015260208101905061174b565b50505050905090810190601f1680156117935780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858115156117af57fe5b04905080915050939250505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77497420697320746f6f20736f6f6e20746f2062652061626c6520746f2077697468647261772072656d61696e696e6720455448546865207377617070696e67207068617365206d757374206861766520656e64656421202d2d206e6f206379636c657320746f2072657475726ea165627a7a7230582033673e2f7a740c6bdecf508ee33716e9cccc6e463526fe39d9482c15dcc0d4350029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c52e23194476b1dd39408cb0b9d935da8e6db3d6000000000000000000000000fc41eeb6474066d66f35eaf42455499b68e21b41
-----Decoded View---------------
Arg [0] : _token (address): 0xC52e23194476B1dD39408cB0B9D935dA8e6Db3d6
Arg [1] : _adminWallet (address): 0xfc41eeb6474066D66f35EaF42455499B68e21B41
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c52e23194476b1dd39408cb0b9d935da8e6db3d6
Arg [1] : 000000000000000000000000fc41eeb6474066d66f35eaf42455499b68e21b41
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.