ERC-20
Overview
Max Total Supply
61,977,004.983838717 LKEYS
Holders
450
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
0.631334675 LKEYSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LockedKeys
Compiler Version
v0.8.14+commit.80d49f37
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity 0.8.14; interface IERC20 { function totalSupply() external view returns (uint256); function symbol() external view returns(string memory); function name() external view returns(string memory); function balanceOf(address account) external view returns (uint256); function decimals() external view returns (uint8); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } 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; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { 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; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @title Owner * @dev Set & change owner */ contract Ownable { address private owner; // event for EVM logging event OwnerSet(address indexed oldOwner, address indexed newOwner); // modifier to check if caller is owner modifier onlyOwner() { // If the first argument of 'require' evaluates to 'false', execution terminates and all // changes to the state and to Ether balances are reverted. // This used to consume all gas in old EVM versions, but not anymore. // It is often a good idea to use 'require' to check if functions are called correctly. // As a second argument, you can also provide an explanation about what went wrong. require(msg.sender == owner, "Caller is not owner"); _; } /** * @dev Set contract deployer as owner */ constructor() { owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor emit OwnerSet(address(0), owner); } /** * @dev Change owner * @param newOwner address of new owner */ function changeOwner(address newOwner) public onlyOwner { emit OwnerSet(owner, newOwner); owner = newOwner; } /** * @dev Return owner address * @return address of owner */ function getOwner() external view returns (address) { return owner; } } /** Locked KEYS Contract Auto Compounding Staking Protocol */ contract LockedKeys is Ownable, IERC20 { using SafeMath for uint256; // Staking Token IERC20 public immutable token; // Staking Protocol Token Info string private _name; string private _symbol; uint8 private immutable _decimals; // Trackable User Info struct UserInfo { uint256 balance; uint256 unlockBlock; uint256 totalStaked; uint256 totalWithdrawn; } // User -> UserInfo mapping ( address => UserInfo ) public userInfo; // Unstake Early Fee uint256 public leaveEarlyFee; // Timer For Leave Early Fee uint256 public leaveEarlyFeeTimer; // total supply of MAXI uint256 private _totalShares; // Swapper To Purchase Token From ETH address public tokenSwapper; // precision factor uint256 private constant precision = 10**18; // Reentrancy Guard uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; modifier nonReentrant() { require(_status != _ENTERED, "Reentrancy Guard call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } // Events event PriceChange(uint256 previous, uint256 current, uint256 totalMAXISupply); event Deposit(address depositor, uint256 amountToken); event Withdraw(address withdrawer, uint256 amountToken); event FeeTaken(uint256 fee); constructor( string memory name_, string memory symbol_, address token_, address tokenSwapper_, uint256 leaveEarlyFee_, uint256 leaveEarlyFeeTimer_ ) { require(token_ != address(0), 'Zero Address'); require(tokenSwapper_ != address(0), 'Zero Address'); require(leaveEarlyFee_ <= 100, 'Fee Too High'); require(leaveEarlyFeeTimer_ <= 10**7, 'Fee Timer Too Long'); // pair token data _name = name_; _symbol = symbol_; _decimals = IERC20(token_).decimals(); // staking data leaveEarlyFee = leaveEarlyFee_; leaveEarlyFeeTimer = leaveEarlyFeeTimer_; tokenSwapper = tokenSwapper_; // pair staking token token = IERC20(token_); // set reentrancy _status = _NOT_ENTERED; // emit transfer so bscscan registers contract as token emit Transfer(address(0), msg.sender, 0); } function name() external view override returns (string memory) { return _name; } function symbol() external view override returns (string memory) { return _symbol; } function decimals() external view override returns (uint8) { return _decimals; } function totalSupply() external view override returns (uint256) { return token.balanceOf(address(this)); } /** Shows The Value Of Users' Staked Token */ function balanceOf(address account) public view override returns (uint256) { return ReflectionsFromContractBalance(userInfo[account].balance); } function transfer(address recipient, uint256 amount) external override returns (bool) { if (recipient == msg.sender) { withdraw(amount); } return true; } function transferFrom(address, address recipient, uint256 amount) external override returns (bool) { if (recipient == msg.sender) { withdraw(amount); } return true; } function setLeaveEarlyFee(uint256 newLeaveEarlyFee) external onlyOwner { require( newLeaveEarlyFee <= 100, 'Early Fee Too High' ); leaveEarlyFee = newLeaveEarlyFee; } function setLeaveEarlyFeeTimer(uint256 newLeaveEarlyFeeTimer) external onlyOwner { require( newLeaveEarlyFeeTimer <= 10**7, 'Fee Timer Too High' ); leaveEarlyFeeTimer = newLeaveEarlyFeeTimer; } function setTokenSwapper(address newTokenSwapper) external onlyOwner { require( newTokenSwapper != address(0), 'Zero Address' ); tokenSwapper = newTokenSwapper; } function withdrawETH() external onlyOwner { (bool s,) = payable(msg.sender).call{value: address(this).balance}(""); require(s, 'Error On ETH Withdrawal'); } function recoverForeignToken(IERC20 _token) external onlyOwner { require( address(_token) != address(token), 'Cannot Withdraw Staking Tokens' ); require( _token.transfer(msg.sender, _token.balanceOf(address(this))), 'Error Withdrawing Foreign Token' ); } /** ETH Sent To Contract Will Buy And Stake Token */ receive() external payable { _deposit(msg.value, true); } /** Transfers in `amount` of Token From Sender And Locks In Contract, Minting MAXI Tokens */ function deposit(uint256 amount) external { _deposit(amount, false); } /** Redeems `amount` of Underlying Tokens, As Seen From BalanceOf() */ function withdraw(uint256 amount) public nonReentrant returns (uint256) { // Token Amount Into Contract Balance Amount uint MAXI_Amount = amount == balanceOf(msg.sender) ? userInfo[msg.sender].balance : TokenToContractBalance(amount); require( userInfo[msg.sender].balance > 0 && userInfo[msg.sender].balance >= MAXI_Amount && balanceOf(msg.sender) >= amount && amount > 0 && MAXI_Amount > 0, 'Insufficient Funds' ); // burn MAXI Tokens From Sender _burn(msg.sender, MAXI_Amount, amount); // increment total withdrawn userInfo[msg.sender].totalWithdrawn += amount; // Take Fee If Withdrawn Before Timer uint fee = remainingLockTime(msg.sender) == 0 ? 100 : amount.mul(leaveEarlyFee).div(1000); // send amount less fee uint256 sendAmount = amount.sub(fee); // ensure round off protection uint256 bal = token.balanceOf(address(this)); if (sendAmount > bal) { sendAmount = bal; } // transfer amount to sender require( token.transfer(msg.sender, sendAmount), 'Error On Token Transfer' ); // emit event emit Withdraw(msg.sender, sendAmount); return sendAmount; } function donate() external payable nonReentrant { // buy staking token _buyToken(address(this).balance); } /** Handles Deposits Internally */ function _deposit(uint256 amount, bool wETH) internal nonReentrant { // Ensure Positive Transfer Amount require( amount > 0, 'Zero Amount' ); // Track Balance Before Deposit uint previousBalance = token.balanceOf(address(this)); // fetch keys token uint received = wETH ? _buyToken(amount) : _transferIn(amount); if (_totalShares == 0 || previousBalance == 0) { // mint first batch to holders _registerFirstPurchase(received); } else { // mints correct token amount to sender given data _mintTo(msg.sender, received, previousBalance); } } /** Registers the First Stake */ function _registerFirstPurchase(uint received) internal { // increment total staked userInfo[msg.sender].totalStaked += received; // mint MAXI Tokens To Sender _mint(msg.sender, received, received); emit Deposit(msg.sender, received); } function _mintTo(address sender, uint256 received, uint256 previousBalance) internal { // Number Of Maxi Tokens To Mint uint nToMint = (_totalShares.mul(received).div(previousBalance)).sub(100); require( nToMint > 0, 'Zero To Mint' ); // increment total staked userInfo[sender].totalStaked += received; // mint MAXI Tokens To Sender _mint(sender, nToMint, received); emit Deposit(sender, received); } function _buyToken(uint amount) internal returns (uint256) { require( amount > 0, 'Zero Amount' ); uint before = token.balanceOf(address(this)); (bool s,) = payable(tokenSwapper).call{value: amount}(""); require(s, 'Failure On Token Purchase'); uint received = token.balanceOf(address(this)).sub(before); require(received > 0, 'Zero Received'); return received; } function _transferIn(uint256 amount) internal returns (uint256) { uint before = token.balanceOf(address(this)); require( token.transferFrom(msg.sender, address(this), amount), 'Failure On TransferFrom' ); uint received = token.balanceOf(address(this)).sub(before); require( received <= amount && received > 0, 'Error On Transfer In' ); return received; } /** * Burns `amount` of Contract Balance Token */ function _burn(address from, uint256 amount, uint256 amountToken) private { userInfo[from].balance = userInfo[from].balance.sub(amount); _totalShares = _totalShares.sub(amount); emit Transfer(from, address(0), amountToken); } /** * Mints `amount` of Contract Balance Token */ function _mint(address to, uint256 amount, uint256 underlyingValue) private { // allocate userInfo[to].balance = userInfo[to].balance.add(amount); _totalShares = _totalShares.add(amount); // update locker info userInfo[msg.sender].unlockBlock = block.number + leaveEarlyFeeTimer; emit Transfer(address(0), to, underlyingValue); } /** Converts A Staking Token Amount Into A MAXI Amount */ function TokenToContractBalance(uint256 amount) public view returns (uint256) { return amount.mul(precision).div(_calculatePrice()); } /** Converts A MAXI Amount Into A Token Amount */ function ReflectionsFromContractBalance(uint256 amount) public view returns (uint256) { return amount.mul(_calculatePrice()).div(precision); } /** Conversion Ratio For MAXI -> Token */ function calculatePrice() external view returns (uint256) { return _calculatePrice(); } /** Lock Time Remaining For Stakers */ function remainingLockTime(address user) public view returns (uint256) { return userInfo[user].unlockBlock < block.number ? 0 : userInfo[user].unlockBlock - block.number; } /** Returns Total Profit for User In Token From MAXI */ function getTotalProfits(address user) external view returns (uint256) { uint top = balanceOf(user) + userInfo[user].totalWithdrawn; return top <= userInfo[user].totalStaked ? 0 : top - userInfo[user].totalStaked; } /** Conversion Ratio For MAXI -> Token */ function _calculatePrice() internal view returns (uint256) { uint256 backingValue = token.balanceOf(address(this)); return (backingValue.mul(precision)).div(_totalShares); } /** function has no use in contract */ function allowance(address, address) external pure override returns (uint256) { return 0; } /** function has no use in contract */ function approve(address spender, uint256) public override returns (bool) { emit Approval(msg.sender, spender, 0); return true; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"token_","type":"address"},{"internalType":"address","name":"tokenSwapper_","type":"address"},{"internalType":"uint256","name":"leaveEarlyFee_","type":"uint256"},{"internalType":"uint256","name":"leaveEarlyFeeTimer_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"depositor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"FeeTaken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"current","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalMAXISupply","type":"uint256"}],"name":"PriceChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"withdrawer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReflectionsFromContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenToContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculatePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getTotalProfits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"leaveEarlyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"leaveEarlyFeeTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"recoverForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"remainingLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLeaveEarlyFee","type":"uint256"}],"name":"setLeaveEarlyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLeaveEarlyFeeTimer","type":"uint256"}],"name":"setLeaveEarlyFeeTimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTokenSwapper","type":"address"}],"name":"setTokenSwapper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenSwapper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"unlockBlock","type":"uint256"},{"internalType":"uint256","name":"totalStaked","type":"uint256"},{"internalType":"uint256","name":"totalWithdrawn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040523480156200001157600080fd5b50604051620042e7380380620042e7833981810160405281019062000037919062000704565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73560405160405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000164576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015b906200083f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620001d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001cd906200083f565b60405180910390fd5b60648211156200021d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200021490620008b1565b60405180910390fd5b6298968081111562000266576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025d9062000923565b60405180910390fd5b85600190805190602001906200027e92919062000417565b5084600290805190602001906200029792919062000417565b508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030a919062000983565b60ff1660a08160ff1681525050816004819055508060058190555082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060016008819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600060405162000403919062000a02565b60405180910390a350505050505062000a83565b828054620004259062000a4e565b90600052602060002090601f01602090048101928262000449576000855562000495565b82601f106200046457805160ff191683800117855562000495565b8280016001018555821562000495579182015b828111156200049457825182559160200191906001019062000477565b5b509050620004a49190620004a8565b5090565b5b80821115620004c3576000816000905550600101620004a9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200053082620004e5565b810181811067ffffffffffffffff82111715620005525762000551620004f6565b5b80604052505050565b600062000567620004c7565b905062000575828262000525565b919050565b600067ffffffffffffffff821115620005985762000597620004f6565b5b620005a382620004e5565b9050602081019050919050565b60005b83811015620005d0578082015181840152602081019050620005b3565b83811115620005e0576000848401525b50505050565b6000620005fd620005f7846200057a565b6200055b565b9050828152602081018484840111156200061c576200061b620004e0565b5b62000629848285620005b0565b509392505050565b600082601f830112620006495762000648620004db565b5b81516200065b848260208601620005e6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006918262000664565b9050919050565b620006a38162000684565b8114620006af57600080fd5b50565b600081519050620006c38162000698565b92915050565b6000819050919050565b620006de81620006c9565b8114620006ea57600080fd5b50565b600081519050620006fe81620006d3565b92915050565b60008060008060008060c08789031215620007245762000723620004d1565b5b600087015167ffffffffffffffff811115620007455762000744620004d6565b5b6200075389828a0162000631565b965050602087015167ffffffffffffffff811115620007775762000776620004d6565b5b6200078589828a0162000631565b95505060406200079889828a01620006b2565b9450506060620007ab89828a01620006b2565b9350506080620007be89828a01620006ed565b92505060a0620007d189828a01620006ed565b9150509295509295509295565b600082825260208201905092915050565b7f5a65726f20416464726573730000000000000000000000000000000000000000600082015250565b600062000827600c83620007de565b91506200083482620007ef565b602082019050919050565b600060208201905081810360008301526200085a8162000818565b9050919050565b7f46656520546f6f20486967680000000000000000000000000000000000000000600082015250565b600062000899600c83620007de565b9150620008a68262000861565b602082019050919050565b60006020820190508181036000830152620008cc816200088a565b9050919050565b7f4665652054696d657220546f6f204c6f6e670000000000000000000000000000600082015250565b60006200090b601283620007de565b91506200091882620008d3565b602082019050919050565b600060208201905081810360008301526200093e81620008fc565b9050919050565b600060ff82169050919050565b6200095d8162000945565b81146200096957600080fd5b50565b6000815190506200097d8162000952565b92915050565b6000602082840312156200099c576200099b620004d1565b5b6000620009ac848285016200096c565b91505092915050565b6000819050919050565b6000819050919050565b6000620009ea620009e4620009de84620009b5565b620009bf565b620006c9565b9050919050565b620009fc81620009c9565b82525050565b600060208201905062000a196000830184620009f1565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a6757607f821691505b60208210810362000a7d5762000a7c62000a1f565b5b50919050565b60805160a0516137f162000af6600039600061115f0152600081816107d801528181610a1601528181610f8b015281816110330152818161190a01528181611b6f01528181611b9601528181611c3201528181611d1701528181611e6001528181611fd0015261228f01526137f16000f3fe6080604052600436106101c65760003560e01c806378c84798116100f7578063d348b40911610095578063ec5bfc8c11610064578063ec5bfc8c146106a9578063ed88c68e146106d2578063f0c112c6146106dc578063fc0c546a14610719576101d8565b8063d348b409146105ed578063dd62ed3e14610618578063e086e5ec14610655578063e0a4c2ff1461066c576101d8565b806395d89b41116100d157806395d89b4114610533578063a6f9dae11461055e578063a9059cbb14610587578063b6b55f25146105c4576101d8565b806378c84798146104b4578063893d20e8146104df5780638beceeea1461050a576101d8565b80631fee624811610164578063313ce5671161013e578063313ce567146103f8578063491dd70a1461042357806358d9e6851461044c57806370a0823114610477576101d8565b80631fee62481461035357806323b872dd1461037e5780632e1a7d4d146103bb576101d8565b806318160ddd116101a057806318160ddd146102825780631959a002146102ad5780631ab733a3146102ed5780631fe1bd741461032a576101d8565b806306fdde03146101dd578063095ea7b314610208578063098729db14610245576101d8565b366101d8576101d6346001610744565b005b600080fd5b3480156101e957600080fd5b506101f26108d1565b6040516101ff91906128c0565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a919061297b565b610963565b60405161023c91906129d6565b60405180910390f35b34801561025157600080fd5b5061026c600480360381019061026791906129f1565b6109d5565b6040516102799190612a2d565b60405180910390f35b34801561028e57600080fd5b50610297610a12565b6040516102a49190612a2d565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf9190612a48565b610ab3565b6040516102e49493929190612a75565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190612a48565b610ae3565b6040516103219190612a2d565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c91906129f1565b610be6565b005b34801561035f57600080fd5b50610368610cc4565b6040516103759190612a2d565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190612aba565b610cca565b6040516103b291906129d6565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd91906129f1565b610d15565b6040516103ef9190612a2d565b60405180910390f35b34801561040457600080fd5b5061040d61115b565b60405161041a9190612b29565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190612a48565b611183565b005b34801561045857600080fd5b506104616112c4565b60405161046e9190612a2d565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190612a48565b6112ca565b6040516104ab9190612a2d565b60405180910390f35b3480156104c057600080fd5b506104c961131e565b6040516104d69190612b53565b60405180910390f35b3480156104eb57600080fd5b506104f4611344565b6040516105019190612b53565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c91906129f1565b61136d565b005b34801561053f57600080fd5b50610548611449565b60405161055591906128c0565b60405180910390f35b34801561056a57600080fd5b5061058560048036038101906105809190612a48565b6114db565b005b34801561059357600080fd5b506105ae60048036038101906105a9919061297b565b611626565b6040516105bb91906129d6565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e691906129f1565b611670565b005b3480156105f957600080fd5b5061060261167e565b60405161060f9190612a2d565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190612b6e565b61168d565b60405161064c9190612a2d565b60405180910390f35b34801561066157600080fd5b5061066a611695565b005b34801561067857600080fd5b50610693600480360381019061068e9190612a48565b6117d2565b6040516106a09190612a2d565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190612bec565b61187a565b005b6106da611acf565b005b3480156106e857600080fd5b5061070360048036038101906106fe91906129f1565b611b30565b6040516107109190612a2d565b60405180910390f35b34801561072557600080fd5b5061072e611b6d565b60405161073b9190612c78565b60405180910390f35b600260085403610789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078090612cdf565b60405180910390fd5b6002600881905550600082116107d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cb90612d4b565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161082f9190612b53565b602060405180830381865afa15801561084c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108709190612d80565b90506000826108875761088284611b91565b610891565b61089084611e18565b5b9050600060065414806108a45750600082145b156108b7576108b2816120c6565b6108c3565b6108c2338284612166565b5b505060016008819055505050565b6060600180546108e090612ddc565b80601f016020809104026020016040519081016040528092919081815260200182805461090c90612ddc565b80156109595780601f1061092e57610100808354040283529160200191610959565b820191906000526020600020905b81548152906001019060200180831161093c57829003601f168201915b5050505050905090565b60008273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560006040516109c39190612e48565b60405180910390a36001905092915050565b6000610a0b670de0b6b3a76400006109fd6109ee61228a565b8561235e90919063ffffffff16565b6123d890919063ffffffff16565b9050919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a6d9190612b53565b602060405180830381865afa158015610a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aae9190612d80565b905090565b60036020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b600080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154610b32846112ca565b610b3c9190612e92565b9050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154811115610bdb57600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015481610bd69190612ee8565b610bde565b60005b915050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b90612f68565b60405180910390fd5b62989680811115610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190612fd4565b60405180910390fd5b8060058190555050565b60055481565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d0a57610d0882610d15565b505b600190509392505050565b6000600260085403610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390612cdf565b60405180910390fd5b60026008819055506000610d6f336112ca565b8314610d8357610d7e83611b30565b610dc7565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001545b90506000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154118015610e5d575080600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015410155b8015610e71575082610e6e336112ca565b10155b8015610e7d5750600083115b8015610e895750600081115b610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90613040565b60405180910390fd5b610ed3338285612422565b82600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003016000828254610f259190612e92565b92505081905550600080610f38336117d2565b14610f6b57610f666103e8610f586004548761235e90919063ffffffff16565b6123d890919063ffffffff16565b610f6e565b60645b90506000610f85828661254390919063ffffffff16565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fe29190612b53565b602060405180830381865afa158015610fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110239190612d80565b905080821115611031578091505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b815260040161108c929190613060565b6020604051808303816000875af11580156110ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cf91906130b5565b61110e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111059061312e565b60405180910390fd5b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364338360405161113f929190613060565b60405180910390a1819450505050506001600881905550919050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890612f68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611280576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112779061319a565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b6000611317600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546109d5565b9050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f290612f68565b60405180910390fd5b606481111561143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143690613206565b60405180910390fd5b8060048190555050565b60606002805461145890612ddc565b80601f016020809104026020016040519081016040528092919081815260200182805461148490612ddc565b80156114d15780601f106114a6576101008083540402835291602001916114d1565b820191906000526020600020905b8154815290600101906020018083116114b457829003601f168201915b5050505050905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156090612f68565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73560405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116665761166482610d15565b505b6001905092915050565b61167b816000610744565b50565b600061168861228a565b905090565b600092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a90612f68565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161174990613257565b60006040518083038185875af1925050503d8060008114611786576040519150601f19603f3d011682016040523d82523d6000602084013e61178b565b606091505b50509050806117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c6906132b8565b60405180910390fd5b50565b600043600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154106118705743600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461186b9190612ee8565b611873565b60005b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff90612f68565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90613324565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119ec9190612b53565b602060405180830381865afa158015611a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2d9190612d80565b6040518363ffffffff1660e01b8152600401611a4a929190613060565b6020604051808303816000875af1158015611a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8d91906130b5565b611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390613390565b60405180910390fd5b50565b600260085403611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90612cdf565b60405180910390fd5b6002600881905550611b2547611e18565b506001600881905550565b6000611b66611b3d61228a565b611b58670de0b6b3a76400008561235e90919063ffffffff16565b6123d890919063ffffffff16565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611bed9190612b53565b602060405180830381865afa158015611c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2e9190612d80565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401611c8d939291906133b0565b6020604051808303816000875af1158015611cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd091906130b5565b611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0690613433565b60405180910390fd5b6000611dbd827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d6e9190612b53565b602060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190612d80565b61254390919063ffffffff16565b9050838111158015611dcf5750600081115b611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e059061349f565b60405180910390fd5b8092505050919050565b6000808211611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5390612d4b565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611eb79190612b53565b602060405180830381865afa158015611ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef89190612d80565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051611f4290613257565b60006040518083038185875af1925050503d8060008114611f7f576040519150601f19603f3d011682016040523d82523d6000602084013e611f84565b606091505b5050905080611fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbf9061350b565b60405180910390fd5b6000612076837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120279190612b53565b602060405180830381865afa158015612044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120689190612d80565b61254390919063ffffffff16565b9050600081116120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290613577565b60405180910390fd5b809350505050919050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546121189190612e92565b9250508190555061212a33828361258d565b7fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c338260405161215b929190613060565b60405180910390a150565b60006121a26064612194846121868760065461235e90919063ffffffff16565b6123d890919063ffffffff16565b61254390919063ffffffff16565b9050600081116121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de906135e3565b60405180910390fd5b82600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546122399190612e92565b9250508190555061224b84828561258d565b7fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c848460405161227c929190613060565b60405180910390a150505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016122e69190612b53565b602060405180830381865afa158015612303573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123279190612d80565b905061235860065461234a670de0b6b3a76400008461235e90919063ffffffff16565b6123d890919063ffffffff16565b91505090565b600080830361237057600090506123d2565b6000828461237e9190613603565b905082848261238d919061368c565b146123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c49061372f565b60405180910390fd5b809150505b92915050565b600061241a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612702565b905092915050565b61247782600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461254390919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506124d28260065461254390919063ffffffff16565b600681905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125369190612a2d565b60405180910390a3505050565b600061258583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612765565b905092915050565b6125e282600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546127c990919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061263d826006546127c990919063ffffffff16565b600681905550600554436126519190612e92565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126f59190612a2d565b60405180910390a3505050565b60008083118290612749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274091906128c0565b60405180910390fd5b5060008385612758919061368c565b9050809150509392505050565b60008383111582906127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a491906128c0565b60405180910390fd5b50600083856127bc9190612ee8565b9050809150509392505050565b60008082846127d89190612e92565b90508381101561281d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128149061379b565b60405180910390fd5b8091505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612861578082015181840152602081019050612846565b83811115612870576000848401525b50505050565b6000601f19601f8301169050919050565b600061289282612827565b61289c8185612832565b93506128ac818560208601612843565b6128b581612876565b840191505092915050565b600060208201905081810360008301526128da8184612887565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612912826128e7565b9050919050565b61292281612907565b811461292d57600080fd5b50565b60008135905061293f81612919565b92915050565b6000819050919050565b61295881612945565b811461296357600080fd5b50565b6000813590506129758161294f565b92915050565b60008060408385031215612992576129916128e2565b5b60006129a085828601612930565b92505060206129b185828601612966565b9150509250929050565b60008115159050919050565b6129d0816129bb565b82525050565b60006020820190506129eb60008301846129c7565b92915050565b600060208284031215612a0757612a066128e2565b5b6000612a1584828501612966565b91505092915050565b612a2781612945565b82525050565b6000602082019050612a426000830184612a1e565b92915050565b600060208284031215612a5e57612a5d6128e2565b5b6000612a6c84828501612930565b91505092915050565b6000608082019050612a8a6000830187612a1e565b612a976020830186612a1e565b612aa46040830185612a1e565b612ab16060830184612a1e565b95945050505050565b600080600060608486031215612ad357612ad26128e2565b5b6000612ae186828701612930565b9350506020612af286828701612930565b9250506040612b0386828701612966565b9150509250925092565b600060ff82169050919050565b612b2381612b0d565b82525050565b6000602082019050612b3e6000830184612b1a565b92915050565b612b4d81612907565b82525050565b6000602082019050612b686000830184612b44565b92915050565b60008060408385031215612b8557612b846128e2565b5b6000612b9385828601612930565b9250506020612ba485828601612930565b9150509250929050565b6000612bb982612907565b9050919050565b612bc981612bae565b8114612bd457600080fd5b50565b600081359050612be681612bc0565b92915050565b600060208284031215612c0257612c016128e2565b5b6000612c1084828501612bd7565b91505092915050565b6000819050919050565b6000612c3e612c39612c34846128e7565b612c19565b6128e7565b9050919050565b6000612c5082612c23565b9050919050565b6000612c6282612c45565b9050919050565b612c7281612c57565b82525050565b6000602082019050612c8d6000830184612c69565b92915050565b7f5265656e7472616e63792047756172642063616c6c0000000000000000000000600082015250565b6000612cc9601583612832565b9150612cd482612c93565b602082019050919050565b60006020820190508181036000830152612cf881612cbc565b9050919050565b7f5a65726f20416d6f756e74000000000000000000000000000000000000000000600082015250565b6000612d35600b83612832565b9150612d4082612cff565b602082019050919050565b60006020820190508181036000830152612d6481612d28565b9050919050565b600081519050612d7a8161294f565b92915050565b600060208284031215612d9657612d956128e2565b5b6000612da484828501612d6b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612df457607f821691505b602082108103612e0757612e06612dad565b5b50919050565b6000819050919050565b6000612e32612e2d612e2884612e0d565b612c19565b612945565b9050919050565b612e4281612e17565b82525050565b6000602082019050612e5d6000830184612e39565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e9d82612945565b9150612ea883612945565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612edd57612edc612e63565b5b828201905092915050565b6000612ef382612945565b9150612efe83612945565b925082821015612f1157612f10612e63565b5b828203905092915050565b7f43616c6c6572206973206e6f74206f776e657200000000000000000000000000600082015250565b6000612f52601383612832565b9150612f5d82612f1c565b602082019050919050565b60006020820190508181036000830152612f8181612f45565b9050919050565b7f4665652054696d657220546f6f20486967680000000000000000000000000000600082015250565b6000612fbe601283612832565b9150612fc982612f88565b602082019050919050565b60006020820190508181036000830152612fed81612fb1565b9050919050565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b600061302a601283612832565b915061303582612ff4565b602082019050919050565b600060208201905081810360008301526130598161301d565b9050919050565b60006040820190506130756000830185612b44565b6130826020830184612a1e565b9392505050565b613092816129bb565b811461309d57600080fd5b50565b6000815190506130af81613089565b92915050565b6000602082840312156130cb576130ca6128e2565b5b60006130d9848285016130a0565b91505092915050565b7f4572726f72204f6e20546f6b656e205472616e73666572000000000000000000600082015250565b6000613118601783612832565b9150613123826130e2565b602082019050919050565b600060208201905081810360008301526131478161310b565b9050919050565b7f5a65726f20416464726573730000000000000000000000000000000000000000600082015250565b6000613184600c83612832565b915061318f8261314e565b602082019050919050565b600060208201905081810360008301526131b381613177565b9050919050565b7f4561726c792046656520546f6f20486967680000000000000000000000000000600082015250565b60006131f0601283612832565b91506131fb826131ba565b602082019050919050565b6000602082019050818103600083015261321f816131e3565b9050919050565b600081905092915050565b50565b6000613241600083613226565b915061324c82613231565b600082019050919050565b600061326282613234565b9150819050919050565b7f4572726f72204f6e20455448205769746864726177616c000000000000000000600082015250565b60006132a2601783612832565b91506132ad8261326c565b602082019050919050565b600060208201905081810360008301526132d181613295565b9050919050565b7f43616e6e6f74205769746864726177205374616b696e6720546f6b656e730000600082015250565b600061330e601e83612832565b9150613319826132d8565b602082019050919050565b6000602082019050818103600083015261333d81613301565b9050919050565b7f4572726f72205769746864726177696e6720466f726569676e20546f6b656e00600082015250565b600061337a601f83612832565b915061338582613344565b602082019050919050565b600060208201905081810360008301526133a98161336d565b9050919050565b60006060820190506133c56000830186612b44565b6133d26020830185612b44565b6133df6040830184612a1e565b949350505050565b7f4661696c757265204f6e205472616e7366657246726f6d000000000000000000600082015250565b600061341d601783612832565b9150613428826133e7565b602082019050919050565b6000602082019050818103600083015261344c81613410565b9050919050565b7f4572726f72204f6e205472616e7366657220496e000000000000000000000000600082015250565b6000613489601483612832565b915061349482613453565b602082019050919050565b600060208201905081810360008301526134b88161347c565b9050919050565b7f4661696c757265204f6e20546f6b656e20507572636861736500000000000000600082015250565b60006134f5601983612832565b9150613500826134bf565b602082019050919050565b60006020820190508181036000830152613524816134e8565b9050919050565b7f5a65726f20526563656976656400000000000000000000000000000000000000600082015250565b6000613561600d83612832565b915061356c8261352b565b602082019050919050565b6000602082019050818103600083015261359081613554565b9050919050565b7f5a65726f20546f204d696e740000000000000000000000000000000000000000600082015250565b60006135cd600c83612832565b91506135d882613597565b602082019050919050565b600060208201905081810360008301526135fc816135c0565b9050919050565b600061360e82612945565b915061361983612945565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365257613651612e63565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061369782612945565b91506136a283612945565b9250826136b2576136b161365d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613719602183612832565b9150613724826136bd565b604082019050919050565b600060208201905081810360008301526137488161370c565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613785601b83612832565b91506137908261374f565b602082019050919050565b600060208201905081810360008301526137b481613778565b905091905056fea26469706673582212209ef0e1e029d4e03037672ec74df308ca5e71e2edc81b04712757637ecab2ef8e64736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000b40000000000000000000000000000000000000000000000000000000000000000094b455953204d415849000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054c4b455953000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101c65760003560e01c806378c84798116100f7578063d348b40911610095578063ec5bfc8c11610064578063ec5bfc8c146106a9578063ed88c68e146106d2578063f0c112c6146106dc578063fc0c546a14610719576101d8565b8063d348b409146105ed578063dd62ed3e14610618578063e086e5ec14610655578063e0a4c2ff1461066c576101d8565b806395d89b41116100d157806395d89b4114610533578063a6f9dae11461055e578063a9059cbb14610587578063b6b55f25146105c4576101d8565b806378c84798146104b4578063893d20e8146104df5780638beceeea1461050a576101d8565b80631fee624811610164578063313ce5671161013e578063313ce567146103f8578063491dd70a1461042357806358d9e6851461044c57806370a0823114610477576101d8565b80631fee62481461035357806323b872dd1461037e5780632e1a7d4d146103bb576101d8565b806318160ddd116101a057806318160ddd146102825780631959a002146102ad5780631ab733a3146102ed5780631fe1bd741461032a576101d8565b806306fdde03146101dd578063095ea7b314610208578063098729db14610245576101d8565b366101d8576101d6346001610744565b005b600080fd5b3480156101e957600080fd5b506101f26108d1565b6040516101ff91906128c0565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a919061297b565b610963565b60405161023c91906129d6565b60405180910390f35b34801561025157600080fd5b5061026c600480360381019061026791906129f1565b6109d5565b6040516102799190612a2d565b60405180910390f35b34801561028e57600080fd5b50610297610a12565b6040516102a49190612a2d565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf9190612a48565b610ab3565b6040516102e49493929190612a75565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190612a48565b610ae3565b6040516103219190612a2d565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c91906129f1565b610be6565b005b34801561035f57600080fd5b50610368610cc4565b6040516103759190612a2d565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190612aba565b610cca565b6040516103b291906129d6565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd91906129f1565b610d15565b6040516103ef9190612a2d565b60405180910390f35b34801561040457600080fd5b5061040d61115b565b60405161041a9190612b29565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190612a48565b611183565b005b34801561045857600080fd5b506104616112c4565b60405161046e9190612a2d565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190612a48565b6112ca565b6040516104ab9190612a2d565b60405180910390f35b3480156104c057600080fd5b506104c961131e565b6040516104d69190612b53565b60405180910390f35b3480156104eb57600080fd5b506104f4611344565b6040516105019190612b53565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c91906129f1565b61136d565b005b34801561053f57600080fd5b50610548611449565b60405161055591906128c0565b60405180910390f35b34801561056a57600080fd5b5061058560048036038101906105809190612a48565b6114db565b005b34801561059357600080fd5b506105ae60048036038101906105a9919061297b565b611626565b6040516105bb91906129d6565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e691906129f1565b611670565b005b3480156105f957600080fd5b5061060261167e565b60405161060f9190612a2d565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190612b6e565b61168d565b60405161064c9190612a2d565b60405180910390f35b34801561066157600080fd5b5061066a611695565b005b34801561067857600080fd5b50610693600480360381019061068e9190612a48565b6117d2565b6040516106a09190612a2d565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190612bec565b61187a565b005b6106da611acf565b005b3480156106e857600080fd5b5061070360048036038101906106fe91906129f1565b611b30565b6040516107109190612a2d565b60405180910390f35b34801561072557600080fd5b5061072e611b6d565b60405161073b9190612c78565b60405180910390f35b600260085403610789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078090612cdf565b60405180910390fd5b6002600881905550600082116107d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cb90612d4b565b60405180910390fd5b60007f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161082f9190612b53565b602060405180830381865afa15801561084c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108709190612d80565b90506000826108875761088284611b91565b610891565b61089084611e18565b5b9050600060065414806108a45750600082145b156108b7576108b2816120c6565b6108c3565b6108c2338284612166565b5b505060016008819055505050565b6060600180546108e090612ddc565b80601f016020809104026020016040519081016040528092919081815260200182805461090c90612ddc565b80156109595780601f1061092e57610100808354040283529160200191610959565b820191906000526020600020905b81548152906001019060200180831161093c57829003601f168201915b5050505050905090565b60008273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560006040516109c39190612e48565b60405180910390a36001905092915050565b6000610a0b670de0b6b3a76400006109fd6109ee61228a565b8561235e90919063ffffffff16565b6123d890919063ffffffff16565b9050919050565b60007f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a6d9190612b53565b602060405180830381865afa158015610a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aae9190612d80565b905090565b60036020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b600080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154610b32846112ca565b610b3c9190612e92565b9050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154811115610bdb57600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015481610bd69190612ee8565b610bde565b60005b915050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b90612f68565b60405180910390fd5b62989680811115610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190612fd4565b60405180910390fd5b8060058190555050565b60055481565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d0a57610d0882610d15565b505b600190509392505050565b6000600260085403610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390612cdf565b60405180910390fd5b60026008819055506000610d6f336112ca565b8314610d8357610d7e83611b30565b610dc7565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001545b90506000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154118015610e5d575080600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015410155b8015610e71575082610e6e336112ca565b10155b8015610e7d5750600083115b8015610e895750600081115b610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90613040565b60405180910390fd5b610ed3338285612422565b82600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003016000828254610f259190612e92565b92505081905550600080610f38336117d2565b14610f6b57610f666103e8610f586004548761235e90919063ffffffff16565b6123d890919063ffffffff16565b610f6e565b60645b90506000610f85828661254390919063ffffffff16565b905060007f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fe29190612b53565b602060405180830381865afa158015610fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110239190612d80565b905080821115611031578091505b7f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b815260040161108c929190613060565b6020604051808303816000875af11580156110ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cf91906130b5565b61110e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111059061312e565b60405180910390fd5b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364338360405161113f929190613060565b60405180910390a1819450505050506001600881905550919050565b60007f0000000000000000000000000000000000000000000000000000000000000009905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890612f68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611280576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112779061319a565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b6000611317600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546109d5565b9050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f290612f68565b60405180910390fd5b606481111561143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143690613206565b60405180910390fd5b8060048190555050565b60606002805461145890612ddc565b80601f016020809104026020016040519081016040528092919081815260200182805461148490612ddc565b80156114d15780601f106114a6576101008083540402835291602001916114d1565b820191906000526020600020905b8154815290600101906020018083116114b457829003601f168201915b5050505050905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156090612f68565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73560405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116665761166482610d15565b505b6001905092915050565b61167b816000610744565b50565b600061168861228a565b905090565b600092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a90612f68565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161174990613257565b60006040518083038185875af1925050503d8060008114611786576040519150601f19603f3d011682016040523d82523d6000602084013e61178b565b606091505b50509050806117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c6906132b8565b60405180910390fd5b50565b600043600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154106118705743600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461186b9190612ee8565b611873565b60005b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff90612f68565b60405180910390fd5b7f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90613324565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119ec9190612b53565b602060405180830381865afa158015611a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2d9190612d80565b6040518363ffffffff1660e01b8152600401611a4a929190613060565b6020604051808303816000875af1158015611a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8d91906130b5565b611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390613390565b60405180910390fd5b50565b600260085403611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90612cdf565b60405180910390fd5b6002600881905550611b2547611e18565b506001600881905550565b6000611b66611b3d61228a565b611b58670de0b6b3a76400008561235e90919063ffffffff16565b6123d890919063ffffffff16565b9050919050565b7f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff81565b6000807f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611bed9190612b53565b602060405180830381865afa158015611c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2e9190612d80565b90507f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401611c8d939291906133b0565b6020604051808303816000875af1158015611cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd091906130b5565b611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0690613433565b60405180910390fd5b6000611dbd827f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d6e9190612b53565b602060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190612d80565b61254390919063ffffffff16565b9050838111158015611dcf5750600081115b611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e059061349f565b60405180910390fd5b8092505050919050565b6000808211611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5390612d4b565b60405180910390fd5b60007f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611eb79190612b53565b602060405180830381865afa158015611ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef89190612d80565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051611f4290613257565b60006040518083038185875af1925050503d8060008114611f7f576040519150601f19603f3d011682016040523d82523d6000602084013e611f84565b606091505b5050905080611fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbf9061350b565b60405180910390fd5b6000612076837f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120279190612b53565b602060405180830381865afa158015612044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120689190612d80565b61254390919063ffffffff16565b9050600081116120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290613577565b60405180910390fd5b809350505050919050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546121189190612e92565b9250508190555061212a33828361258d565b7fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c338260405161215b929190613060565b60405180910390a150565b60006121a26064612194846121868760065461235e90919063ffffffff16565b6123d890919063ffffffff16565b61254390919063ffffffff16565b9050600081116121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de906135e3565b60405180910390fd5b82600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546122399190612e92565b9250508190555061224b84828561258d565b7fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c848460405161227c929190613060565b60405180910390a150505050565b6000807f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016122e69190612b53565b602060405180830381865afa158015612303573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123279190612d80565b905061235860065461234a670de0b6b3a76400008461235e90919063ffffffff16565b6123d890919063ffffffff16565b91505090565b600080830361237057600090506123d2565b6000828461237e9190613603565b905082848261238d919061368c565b146123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c49061372f565b60405180910390fd5b809150505b92915050565b600061241a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612702565b905092915050565b61247782600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461254390919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506124d28260065461254390919063ffffffff16565b600681905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125369190612a2d565b60405180910390a3505050565b600061258583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612765565b905092915050565b6125e282600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546127c990919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061263d826006546127c990919063ffffffff16565b600681905550600554436126519190612e92565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126f59190612a2d565b60405180910390a3505050565b60008083118290612749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274091906128c0565b60405180910390fd5b5060008385612758919061368c565b9050809150509392505050565b60008383111582906127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a491906128c0565b60405180910390fd5b50600083856127bc9190612ee8565b9050809150509392505050565b60008082846127d89190612e92565b90508381101561281d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128149061379b565b60405180910390fd5b8091505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612861578082015181840152602081019050612846565b83811115612870576000848401525b50505050565b6000601f19601f8301169050919050565b600061289282612827565b61289c8185612832565b93506128ac818560208601612843565b6128b581612876565b840191505092915050565b600060208201905081810360008301526128da8184612887565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612912826128e7565b9050919050565b61292281612907565b811461292d57600080fd5b50565b60008135905061293f81612919565b92915050565b6000819050919050565b61295881612945565b811461296357600080fd5b50565b6000813590506129758161294f565b92915050565b60008060408385031215612992576129916128e2565b5b60006129a085828601612930565b92505060206129b185828601612966565b9150509250929050565b60008115159050919050565b6129d0816129bb565b82525050565b60006020820190506129eb60008301846129c7565b92915050565b600060208284031215612a0757612a066128e2565b5b6000612a1584828501612966565b91505092915050565b612a2781612945565b82525050565b6000602082019050612a426000830184612a1e565b92915050565b600060208284031215612a5e57612a5d6128e2565b5b6000612a6c84828501612930565b91505092915050565b6000608082019050612a8a6000830187612a1e565b612a976020830186612a1e565b612aa46040830185612a1e565b612ab16060830184612a1e565b95945050505050565b600080600060608486031215612ad357612ad26128e2565b5b6000612ae186828701612930565b9350506020612af286828701612930565b9250506040612b0386828701612966565b9150509250925092565b600060ff82169050919050565b612b2381612b0d565b82525050565b6000602082019050612b3e6000830184612b1a565b92915050565b612b4d81612907565b82525050565b6000602082019050612b686000830184612b44565b92915050565b60008060408385031215612b8557612b846128e2565b5b6000612b9385828601612930565b9250506020612ba485828601612930565b9150509250929050565b6000612bb982612907565b9050919050565b612bc981612bae565b8114612bd457600080fd5b50565b600081359050612be681612bc0565b92915050565b600060208284031215612c0257612c016128e2565b5b6000612c1084828501612bd7565b91505092915050565b6000819050919050565b6000612c3e612c39612c34846128e7565b612c19565b6128e7565b9050919050565b6000612c5082612c23565b9050919050565b6000612c6282612c45565b9050919050565b612c7281612c57565b82525050565b6000602082019050612c8d6000830184612c69565b92915050565b7f5265656e7472616e63792047756172642063616c6c0000000000000000000000600082015250565b6000612cc9601583612832565b9150612cd482612c93565b602082019050919050565b60006020820190508181036000830152612cf881612cbc565b9050919050565b7f5a65726f20416d6f756e74000000000000000000000000000000000000000000600082015250565b6000612d35600b83612832565b9150612d4082612cff565b602082019050919050565b60006020820190508181036000830152612d6481612d28565b9050919050565b600081519050612d7a8161294f565b92915050565b600060208284031215612d9657612d956128e2565b5b6000612da484828501612d6b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612df457607f821691505b602082108103612e0757612e06612dad565b5b50919050565b6000819050919050565b6000612e32612e2d612e2884612e0d565b612c19565b612945565b9050919050565b612e4281612e17565b82525050565b6000602082019050612e5d6000830184612e39565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e9d82612945565b9150612ea883612945565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612edd57612edc612e63565b5b828201905092915050565b6000612ef382612945565b9150612efe83612945565b925082821015612f1157612f10612e63565b5b828203905092915050565b7f43616c6c6572206973206e6f74206f776e657200000000000000000000000000600082015250565b6000612f52601383612832565b9150612f5d82612f1c565b602082019050919050565b60006020820190508181036000830152612f8181612f45565b9050919050565b7f4665652054696d657220546f6f20486967680000000000000000000000000000600082015250565b6000612fbe601283612832565b9150612fc982612f88565b602082019050919050565b60006020820190508181036000830152612fed81612fb1565b9050919050565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b600061302a601283612832565b915061303582612ff4565b602082019050919050565b600060208201905081810360008301526130598161301d565b9050919050565b60006040820190506130756000830185612b44565b6130826020830184612a1e565b9392505050565b613092816129bb565b811461309d57600080fd5b50565b6000815190506130af81613089565b92915050565b6000602082840312156130cb576130ca6128e2565b5b60006130d9848285016130a0565b91505092915050565b7f4572726f72204f6e20546f6b656e205472616e73666572000000000000000000600082015250565b6000613118601783612832565b9150613123826130e2565b602082019050919050565b600060208201905081810360008301526131478161310b565b9050919050565b7f5a65726f20416464726573730000000000000000000000000000000000000000600082015250565b6000613184600c83612832565b915061318f8261314e565b602082019050919050565b600060208201905081810360008301526131b381613177565b9050919050565b7f4561726c792046656520546f6f20486967680000000000000000000000000000600082015250565b60006131f0601283612832565b91506131fb826131ba565b602082019050919050565b6000602082019050818103600083015261321f816131e3565b9050919050565b600081905092915050565b50565b6000613241600083613226565b915061324c82613231565b600082019050919050565b600061326282613234565b9150819050919050565b7f4572726f72204f6e20455448205769746864726177616c000000000000000000600082015250565b60006132a2601783612832565b91506132ad8261326c565b602082019050919050565b600060208201905081810360008301526132d181613295565b9050919050565b7f43616e6e6f74205769746864726177205374616b696e6720546f6b656e730000600082015250565b600061330e601e83612832565b9150613319826132d8565b602082019050919050565b6000602082019050818103600083015261333d81613301565b9050919050565b7f4572726f72205769746864726177696e6720466f726569676e20546f6b656e00600082015250565b600061337a601f83612832565b915061338582613344565b602082019050919050565b600060208201905081810360008301526133a98161336d565b9050919050565b60006060820190506133c56000830186612b44565b6133d26020830185612b44565b6133df6040830184612a1e565b949350505050565b7f4661696c757265204f6e205472616e7366657246726f6d000000000000000000600082015250565b600061341d601783612832565b9150613428826133e7565b602082019050919050565b6000602082019050818103600083015261344c81613410565b9050919050565b7f4572726f72204f6e205472616e7366657220496e000000000000000000000000600082015250565b6000613489601483612832565b915061349482613453565b602082019050919050565b600060208201905081810360008301526134b88161347c565b9050919050565b7f4661696c757265204f6e20546f6b656e20507572636861736500000000000000600082015250565b60006134f5601983612832565b9150613500826134bf565b602082019050919050565b60006020820190508181036000830152613524816134e8565b9050919050565b7f5a65726f20526563656976656400000000000000000000000000000000000000600082015250565b6000613561600d83612832565b915061356c8261352b565b602082019050919050565b6000602082019050818103600083015261359081613554565b9050919050565b7f5a65726f20546f204d696e740000000000000000000000000000000000000000600082015250565b60006135cd600c83612832565b91506135d882613597565b602082019050919050565b600060208201905081810360008301526135fc816135c0565b9050919050565b600061360e82612945565b915061361983612945565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365257613651612e63565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061369782612945565b91506136a283612945565b9250826136b2576136b161365d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613719602183612832565b9150613724826136bd565b604082019050919050565b600060208201905081810360008301526137488161370c565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613785601b83612832565b91506137908261374f565b602082019050919050565b600060208201905081810360008301526137b481613778565b905091905056fea26469706673582212209ef0e1e029d4e03037672ec74df308ca5e71e2edc81b04712757637ecab2ef8e64736f6c634300080e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000b40000000000000000000000000000000000000000000000000000000000000000094b455953204d415849000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054c4b455953000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): KEYS MAXI
Arg [1] : symbol_ (string): LKEYS
Arg [2] : token_ (address): 0xe0a189C975e4928222978A74517442239a0b86ff
Arg [3] : tokenSwapper_ (address): 0xe0a189C975e4928222978A74517442239a0b86ff
Arg [4] : leaveEarlyFee_ (uint256): 44
Arg [5] : leaveEarlyFeeTimer_ (uint256): 46080
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff
Arg [3] : 000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff
Arg [4] : 000000000000000000000000000000000000000000000000000000000000002c
Arg [5] : 000000000000000000000000000000000000000000000000000000000000b400
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [7] : 4b455953204d4158490000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [9] : 4c4b455953000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.