Contract Address Details

0x1e6e8D1CA1527Ef54dAE9b51c0B9Fc6b73D3c62C

ETCHODL Last Balance Update: Block #14070160
Created by 0x504927–4125e2 at 0x1d35e5–195e5d

Balance

0 ETC

(@ /ETC)

Fetching tokens...

Contract name:
ETCHODL




Optimization enabled
false
Compiler version
v0.5.10+commit.5a6ea5b1




EVM Version
default




Verified at
2021-05-13 17:59:41.158249Z

Constructor Arguments

00000000000000000000000050492711c39cda016774ed0ebb3125633e4125e2000000000000000000000000339dc9172939dfb65def723a89478f7e929cd92a000000000000000000000000000000000000000000000000000001796b9b33a0

Arg [0] (address) : 0x50492711c39cda016774ed0ebb3125633e4125e2
Arg [1] (address) : 0x339dc9172939dfb65def723a89478f7e929cd92a
Arg [2] (uint256) : 1621008004000

              

Contract source code

/*1621008004000
*
* [USAGE INSTRUCTION]
*
* 1) Connect browser extension Metamask
* 2) Choose one of the tariff plans, enter the ETC amount (0.1 ETC minimum) using our website "Stake ETC" button
* 3) Wait for your earnings
* 4) Withdraw earnings any time using our website "Withdraw" button
*
* [INVESTMENT CONDITIONS]
*
* - Basic interest rate: +0.2% every 24 hours (~0.008% hourly) - only for new deposits
* - Minimal deposit: 0.1 ETC, no maximal limit
* - Total income: based on your tarrif plan (from 1% to 4% daily!!!) + Basic interest rate !!!
* - Earnings every moment, withdraw any time (if you use capitalization of interest you can withdraw only after end of your deposit or you can terminate their stakes and get 75% of their fund back while the remaining goes into the pool. (plan 1,2,3,4 are not allowed to terminate after withdrawing interest)
*
* [AFFILIATE PROGRAM]
*
* - 3-level referral commission: 4% - 2% - 1%
*/
pragma solidity >=0.4.22 <0.9.0;
contract ETCHODL {
using SafeMath for uint256;
uint256 constant public INVEST_MIN_AMOUNT = 0.1 ether;
uint256[] public REFERRAL_PERCENTS = [40, 20, 10];
uint256 constant public PERCENT_STEP = 1;
uint256 constant public PERCENTS_DIVIDER = 1000;
uint256 constant public TIME_STEP = 1 days;
uint256 public constant PENALTY_STEP = 250;
uint256 public totalStaked;
uint256 public totalRefBonus;
struct Plan {
uint256 time;
uint256 percent;
}
Plan[] internal plans;
struct Deposit {
uint8 plan;
uint256 percent;
uint256 amount;
uint256 profit;
uint256 start;
uint256 finish;
}
struct User {
Deposit[] deposits;
uint256 checkpoint;
address referrer;
uint256[3] levels;
uint256 bonus;
uint256 totalBonus;
}
mapping (address => User) internal users;
uint256 public startUNIX;
address payable public dev;
address payable public pro;
event Newbie(address user);
event NewDeposit(address indexed user, uint8 plan, uint256 percent, uint256 amount, uint256 profit, uint256 start, uint256 finish);
event Withdrawn(address indexed user, uint256 amount);
event ForceWithdrawn(address indexed user, uint256 amount, uint256 penaltyAmount);
event RefBonus(address indexed referrer, address indexed referral, uint256 indexed level, uint256 amount);
event FeePayed(address indexed user, uint256 totalAmount);
constructor(address payable _dev, address payable _pro, uint256 startDate) public {
require(!isContract(_dev));
require(startDate > 0);
dev = _dev;
pro = _pro;
startUNIX = startDate;
plans.push(Plan(40, 35));
plans.push(Plan(80, 25));
plans.push(Plan(150, 18));
plans.push(Plan(250, 13));
plans.push(Plan(40, 35));
plans.push(Plan(80, 25));
plans.push(Plan(150, 18));
plans.push(Plan(250, 13));
}
function invest(address referrer, uint8 plan) public payable {
require(msg.value >= INVEST_MIN_AMOUNT);
require(plan < 8, "Invalid plan");
dev.transfer(msg.value.mul(6).div(100));
pro.transfer(msg.value.mul(6).div(100));
User storage user = users[msg.sender];
if (user.referrer == address(0)) {
if (users[referrer].deposits.length > 0 && referrer != msg.sender) {
user.referrer = referrer;
}
address upline = user.referrer;
for (uint256 i = 0; i < 3; i++) {
if (upline != address(0)) {
users[upline].levels[i] = users[upline].levels[i].add(1);
upline = users[upline].referrer;
} else break;
}
}
if (user.referrer != address(0)) {
address upline = user.referrer;
for (uint256 i = 0; i < 3; i++) {
if (upline != address(0)) {
uint256 amount = msg.value.mul(REFERRAL_PERCENTS[i]).div(PERCENTS_DIVIDER);
users[upline].bonus = users[upline].bonus.add(amount);
users[upline].totalBonus = users[upline].totalBonus.add(amount);
emit RefBonus(upline, msg.sender, i, amount);
upline = users[upline].referrer;
} else break;
}
}
if (user.deposits.length == 0) {
user.checkpoint = block.timestamp;
emit Newbie(msg.sender);
}
(uint256 percent, uint256 profit, uint256 finish) = getResult(plan, msg.value);
user.deposits.push(Deposit(plan, percent, msg.value, profit, block.timestamp, finish));
totalStaked = totalStaked.add(msg.value);
emit NewDeposit(msg.sender, plan, percent, msg.value, profit, block.timestamp, finish);
}
function withdraw() public {
User storage user = users[msg.sender];
uint256 totalAmount = getUserDividends(msg.sender);
uint256 referralBonus = getUserReferralBonus(msg.sender);
if (referralBonus > 0) {
user.bonus = 0;
totalAmount = totalAmount.add(referralBonus);
}
require(totalAmount > 0, "User has no dividends");
uint256 contractBalance = address(this).balance;
if (contractBalance < totalAmount) {
totalAmount = contractBalance;
}
user.checkpoint = block.timestamp;
msg.sender.transfer(totalAmount);
emit Withdrawn(msg.sender, totalAmount);
}
function forceWithdraw(uint256 index) public {
User storage user = users[msg.sender];
require(index < user.deposits.length, "Invalid index");
require(user.deposits[index].plan >= 4 && user.deposits[index].plan < 8, 'force withdraw not valid');
require(user.deposits[index].finish > block.timestamp, 'you can not force withdraw');
uint256 depositAmount = user.deposits[index].amount;
uint256 penaltyAmount =
depositAmount.mul(PENALTY_STEP).div(PERCENTS_DIVIDER);
msg.sender.transfer(depositAmount.sub(penaltyAmount));
user.deposits[index] = user.deposits[user.deposits.length - 1];
user.deposits.pop();
emit ForceWithdrawn(
msg.sender,
depositAmount,
penaltyAmount
);
}
function getContractBalance() public view returns (uint256) {
return address(this).balance;
}
function getPlanInfo(uint8 plan) public view returns(uint256 time, uint256 percent) {
time = plans[plan].time;
percent = plans[plan].percent;
}
function getPercent(uint8 plan) public view returns (uint256) {
if (block.timestamp > startUNIX) {
return plans[plan].percent.add(PERCENT_STEP.mul(block.timestamp.sub(startUNIX)).div(TIME_STEP));
} else {
return plans[plan].percent;
}
}
function getResult(uint8 plan, uint256 deposit) public view returns (uint256 percent, uint256 profit, uint256 finish) {
percent = getPercent(plan);
if (plan < 4) {
profit = deposit.mul(percent).div(PERCENTS_DIVIDER).mul(plans[plan].time);
} else if (plan < 8) {
for (uint256 i = 0; i < plans[plan].time; i++) {
profit = profit.add((deposit.add(profit)).mul(percent).div(PERCENTS_DIVIDER));
}
}
finish = block.timestamp.add(plans[plan].time.mul(TIME_STEP));
}
function getUserDividends(address userAddress) public view returns (uint256) {
User storage user = users[userAddress];
uint256 totalAmount;
for (uint256 i = 0; i < user.deposits.length; i++) {
if (user.checkpoint < user.deposits[i].finish) {
if (user.deposits[i].plan < 4) {
uint256 share = user.deposits[i].amount.mul(user.deposits[i].percent).div(PERCENTS_DIVIDER);
uint256 from = user.deposits[i].start > user.checkpoint ? user.deposits[i].start : user.checkpoint;
uint256 to = user.deposits[i].finish < block.timestamp ? user.deposits[i].finish : block.timestamp;
if (from < to) {
totalAmount = totalAmount.add(share.mul(to.sub(from)).div(TIME_STEP));
}
} else if (block.timestamp > user.deposits[i].finish) {
totalAmount = totalAmount.add(user.deposits[i].profit);
}
}
}
return totalAmount;
}
function getUserCheckpoint(address userAddress) public view returns(uint256) {
return users[userAddress].checkpoint;
}
function getUserReferrer(address userAddress) public view returns(address) {
return users[userAddress].referrer;
}
function getUserDownlineCount(address userAddress) public view returns(uint256, uint256, uint256) {
return (users[userAddress].levels[0], users[userAddress].levels[1], users[userAddress].levels[2]);
}
function getUserReferralBonus(address userAddress) public view returns(uint256) {
return users[userAddress].bonus;
}
function getUserReferralTotalBonus(address userAddress) public view returns(uint256) {
return users[userAddress].totalBonus;
}
function getUserReferralWithdrawn(address userAddress) public view returns(uint256) {
return users[userAddress].totalBonus.sub(users[userAddress].bonus);
}
function getUserAvailable(address userAddress) public view returns(uint256) {
return getUserReferralBonus(userAddress).add(getUserDividends(userAddress));
}
function getUserAmountOfDeposits(address userAddress) public view returns(uint256) {
return users[userAddress].deposits.length;
}
function getUserTotalDeposits(address userAddress) public view returns(uint256 amount) {
for (uint256 i = 0; i < users[userAddress].deposits.length; i++) {
amount = amount.add(users[userAddress].deposits[i].amount);
}
}
function getUserDepositInfo(address userAddress, uint256 index) public view returns(uint8 plan, uint256 percent, uint256 amount, uint256 profit, uint256 start, uint256 finish) {
User storage user = users[userAddress];
plan = user.deposits[index].plan;
percent = user.deposits[index].percent;
amount = user.deposits[index].amount;
profit = user.deposits[index].profit;
start = user.deposits[index].start;
finish = user.deposits[index].finish;
}
function isContract(address addr) internal view returns (bool) {
uint size;
assembly { size := extcodesize(addr) }
return size > 0;
}
}
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) {
require(b <= a, "SafeMath: subtraction overflow");
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
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) {
require(b > 0, "SafeMath: division by zero");
uint256 c = a / b;
return c;
}
}

Contract ABI

[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"PERCENTS_DIVIDER","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""},{"type":"uint256","name":""},{"type":"uint256","name":""}],"name":"getUserDownlineCount","inputs":[{"type":"address","name":"userAddress"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"getUserDividends","inputs":[{"type":"address","name":"userAddress"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"forceWithdraw","inputs":[{"type":"uint256","name":"index"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"getUserAvailable","inputs":[{"type":"address","name":"userAddress"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"TIME_STEP","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"getUserReferrer","inputs":[{"type":"address","name":"userAddress"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"withdraw","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"getUserReferralTotalBonus","inputs":[{"type":"address","name":"userAddress"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"PERCENT_STEP","inputs":[],"constant":true},{"type":"function","stateMutability":"payable","payable":true,"outputs":[],"name":"invest","inputs":[{"type":"address","name":"referrer"},{"type":"uint8","name":"plan"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"percent"},{"type":"uint256","name":"profit"},{"type":"uint256","name":"finish"}],"name":"getResult","inputs":[{"type":"uint8","name":"plan"},{"type":"uint256","name":"deposit"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"REFERRAL_PERCENTS","inputs":[{"type":"uint256","name":""}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"totalRefBonus","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"getUserReferralWithdrawn","inputs":[{"type":"address","name":"userAddress"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"getContractBalance","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"amount"}],"name":"getUserTotalDeposits","inputs":[{"type":"address","name":"userAddress"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"totalStaked","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"dev","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"getPercent","inputs":[{"type":"uint8","name":"plan"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"getUserAmountOfDeposits","inputs":[{"type":"address","name":"userAddress"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"time"},{"type":"uint256","name":"percent"}],"name":"getPlanInfo","inputs":[{"type":"uint8","name":"plan"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint8","name":"plan"},{"type":"uint256","name":"percent"},{"type":"uint256","name":"amount"},{"type":"uint256","name":"profit"},{"type":"uint256","name":"start"},{"type":"uint256","name":"finish"}],"name":"getUserDepositInfo","inputs":[{"type":"address","name":"userAddress"},{"type":"uint256","name":"index"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"startUNIX","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"pro","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"getUserCheckpoint","inputs":[{"type":"address","name":"userAddress"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"INVEST_MIN_AMOUNT","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"getUserReferralBonus","inputs":[{"type":"address","name":"userAddress"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"PENALTY_STEP","inputs":[],"constant":true},{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[{"type":"address","name":"_dev"},{"type":"address","name":"_pro"},{"type":"uint256","name":"startDate"}]},{"type":"event","name":"Newbie","inputs":[{"type":"address","name":"user","indexed":false}],"anonymous":false},{"type":"event","name":"NewDeposit","inputs":[{"type":"address","name":"user","indexed":true},{"type":"uint8","name":"plan","indexed":false},{"type":"uint256","name":"percent","indexed":false},{"type":"uint256","name":"amount","indexed":false},{"type":"uint256","name":"profit","indexed":false},{"type":"uint256","name":"start","indexed":false},{"type":"uint256","name":"finish","indexed":false}],"anonymous":false},{"type":"event","name":"Withdrawn","inputs":[{"type":"address","name":"user","indexed":true},{"type":"uint256","name":"amount","indexed":false}],"anonymous":false},{"type":"event","name":"ForceWithdrawn","inputs":[{"type":"address","name":"user","indexed":true},{"type":"uint256","name":"amount","indexed":false},{"type":"uint256","name":"penaltyAmount","indexed":false}],"anonymous":false},{"type":"event","name":"RefBonus","inputs":[{"type":"address","name":"referrer","indexed":true},{"type":"address","name":"referral","indexed":true},{"type":"uint256","name":"level","indexed":true},{"type":"uint256","name":"amount","indexed":false}],"anonymous":false},{"type":"event","name":"FeePayed","inputs":[{"type":"address","name":"user","indexed":true},{"type":"uint256","name":"totalAmount","indexed":false}],"anonymous":false}]
            

Deployed ByteCode

0x6080604052600436106101c25760003560e01c80636bb18556116100f7578063aecaa63411610095578063d7ffca9111610064578063d7ffca91146109a3578063e262113e14610a08578063e85abe0914610a33578063f596474214610a98576101c2565b8063aecaa63414610830578063c0806b0314610889578063c234123814610921578063d7c31a691461094c576101c2565b8063817b1cd2116100d1578063817b1cd2146106f757806391cca3db14610722578063a51b953314610779578063a8aeb6c2146107cb576101c2565b80636bb18556146106025780636f9fb98a146106675780637e3abeea14610692576101c2565b80633ccfd60b11610164578063581c5ae61161013e578063581c5ae6146104cd5780635936cf611461051e578063600d20ce1461058857806369b11dd5146105d7576101c2565b80633ccfd60b1461042657806348c372031461043d57806357fc86b4146104a2576101c2565b80630fcc56f7116101a05780630fcc56f7146102ca578063153ab9df1461030557806332bc298c1461036a57806336144c9a14610395576101c2565b806301c234a8146101c757806303a93c0c146101f2578063040a772e14610265575b600080fd5b3480156101d357600080fd5b506101dc610ac3565b6040518082815260200191505060405180910390f35b3480156101fe57600080fd5b506102416004803603602081101561021557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ac9565b60405180848152602001838152602001828152602001935050505060405180910390f35b34801561027157600080fd5b506102b46004803603602081101561028857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bcb565b6040518082815260200191505060405180910390f35b3480156102d657600080fd5b50610303600480360360208110156102ed57600080fd5b8101908080359060200190929190505050610e7b565b005b34801561031157600080fd5b506103546004803603602081101561032857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112c1565b6040518082815260200191505060405180910390f35b34801561037657600080fd5b5061037f6112ed565b6040518082815260200191505060405180910390f35b3480156103a157600080fd5b506103e4600480360360208110156103b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112f4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561043257600080fd5b5061043b611360565b005b34801561044957600080fd5b5061048c6004803603602081101561046057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611528565b6040518082815260200191505060405180910390f35b3480156104ae57600080fd5b506104b7611574565b6040518082815260200191505060405180910390f35b61051c600480360360408110156104e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050611579565b005b34801561052a57600080fd5b506105646004803603604081101561054157600080fd5b81019080803560ff16906020019092919080359060200190929190505050611f32565b60405180848152602001838152602001828152602001935050505060405180910390f35b34801561059457600080fd5b506105c1600480360360208110156105ab57600080fd5b8101908080359060200190929190505050612099565b6040518082815260200191505060405180910390f35b3480156105e357600080fd5b506105ec6120ba565b6040518082815260200191505060405180910390f35b34801561060e57600080fd5b506106516004803603602081101561062557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120c0565b6040518082815260200191505060405180910390f35b34801561067357600080fd5b5061067c612160565b6040518082815260200191505060405180910390f35b34801561069e57600080fd5b506106e1600480360360208110156106b557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061217f565b6040518082815260200191505060405180910390f35b34801561070357600080fd5b5061070c61225a565b6040518082815260200191505060405180910390f35b34801561072e57600080fd5b50610737612260565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561078557600080fd5b506107b56004803603602081101561079c57600080fd5b81019080803560ff169060200190929190505050612286565b6040518082815260200191505060405180910390f35b3480156107d757600080fd5b5061081a600480360360208110156107ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612333565b6040518082815260200191505060405180910390f35b34801561083c57600080fd5b5061086c6004803603602081101561085357600080fd5b81019080803560ff169060200190929190505050612382565b604051808381526020018281526020019250505060405180910390f35b34801561089557600080fd5b506108e2600480360360408110156108ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123d2565b604051808760ff1660ff168152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b34801561092d57600080fd5b50610936612508565b6040518082815260200191505060405180910390f35b34801561095857600080fd5b5061096161250e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109af57600080fd5b506109f2600480360360208110156109c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612534565b6040518082815260200191505060405180910390f35b348015610a1457600080fd5b50610a1d612580565b6040518082815260200191505060405180910390f35b348015610a3f57600080fd5b50610a8260048036036020811015610a5657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061258c565b6040518082815260200191505060405180910390f35b348015610aa457600080fd5b50610aad6125d8565b6040518082815260200191505060405180910390f35b6103e881565b6000806000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600060038110610b1c57fe5b0154600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600160038110610b6c57fe5b0154600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600260038110610bbc57fe5b01549250925092509193909250565b600080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600080600090505b8260000180549050811015610e7057826000018181548110610c3557fe5b90600052602060002090600602016005015483600101541015610e63576004836000018281548110610c6357fe5b906000526020600020906006020160000160009054906101000a900460ff1660ff161015610e03576000610cf46103e8610ce6866000018581548110610ca557fe5b906000526020600020906006020160010154876000018681548110610cc657fe5b9060005260206000209060060201600201546125dd90919063ffffffff16565b61266390919063ffffffff16565b905060008460010154856000018481548110610d0c57fe5b90600052602060002090600602016004015411610d2d578460010154610d4f565b846000018381548110610d3c57fe5b9060005260206000209060060201600401545b9050600042866000018581548110610d6357fe5b90600052602060002090600602016005015410610d805742610da2565b856000018481548110610d8f57fe5b9060005260206000209060060201600501545b905080821015610dfb57610df8610de962015180610ddb610dcc86866126f290919063ffffffff16565b876125dd90919063ffffffff16565b61266390919063ffffffff16565b8661277b90919063ffffffff16565b94505b505050610e62565b826000018181548110610e1257fe5b906000526020600020906006020160050154421115610e6157610e5e836000018281548110610e3d57fe5b9060005260206000209060060201600301548361277b90919063ffffffff16565b91505b5b5b8080600101915050610c17565b508092505050919050565b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001805490508210610f3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c696420696e6465780000000000000000000000000000000000000081525060200191505060405180910390fd5b6004816000018381548110610f4b57fe5b906000526020600020906006020160000160009054906101000a900460ff1660ff1610158015610fab57506008816000018381548110610f8757fe5b906000526020600020906006020160000160009054906101000a900460ff1660ff16105b61101d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f666f726365207769746864726177206e6f742076616c6964000000000000000081525060200191505060405180910390fd5b4281600001838154811061102d57fe5b906000526020600020906006020160050154116110b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f796f752063616e206e6f7420666f72636520776974686472617700000000000081525060200191505060405180910390fd5b60008160000183815481106110c357fe5b906000526020600020906006020160020154905060006111016103e86110f360fa856125dd90919063ffffffff16565b61266390919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc61113083856126f290919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561115b573d6000803e3d6000fd5b508260000160018460000180549050038154811061117557fe5b906000526020600020906006020183600001858154811061119257fe5b90600052602060002090600602016000820160009054906101000a900460ff168160000160006101000a81548160ff021916908360ff16021790555060018201548160010155600282015481600201556003820154816003015560048201548160040155600582015481600501559050508260000180548061121057fe5b6001900381819060005260206000209060060201600080820160006101000a81549060ff021916905560018201600090556002820160009055600382016000905560048201600090556005820160009055505090553373ffffffffffffffffffffffffffffffffffffffff167fcdfcb42da3d2bfa789d590635d26c132b5bba67cbafb3d49922ac006fbaf6b8e8383604051808381526020018281526020019250505060405180910390a250505050565b60006112e66112cf83610bcb565b6112d88461258c565b61277b90919063ffffffff16565b9050919050565b6201518081565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006113ae33610bcb565b905060006113bb3361258c565b905060008111156113e657600083600601819055506113e3818361277b90919063ffffffff16565b91505b6000821161145c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5573657220686173206e6f206469766964656e6473000000000000000000000081525060200191505060405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff1631905082811015611484578092505b4284600101819055503373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156114d3573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040518082815260200191505060405180910390a250505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701549050919050565b600181565b67016345785d8a000034101561158e57600080fd5b60088160ff1610611607576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f496e76616c696420706c616e000000000000000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61166a606461165c6006346125dd90919063ffffffff16565b61266390919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611695573d6000803e3d6000fd5b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6116f960646116eb6006346125dd90919063ffffffff16565b61266390919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015611724573d6000803e3d6000fd5b506000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611a2a576000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905011801561184257503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561188b57828160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60008160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008090505b6003811015611a2757600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611a15576119596001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301836003811061194957fe5b015461277b90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030182600381106119a657fe5b0181905550600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150611a1a565b611a27565b80806001019150506118ba565b50505b600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d4c5760008160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008090505b6003811015611d4957600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611d37576000611b2e6103e8611b2060008581548110611b0657fe5b9060005260206000200154346125dd90919063ffffffff16565b61266390919063ffffffff16565b9050611b8581600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006015461277b90919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060181905550611c2081600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015461277b90919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070181905550813373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd41f7e766eebcc7ff42b11ac8691bdf864db4afc0c55e71d629d54edce460d98846040518082815260200191505060405180910390a4600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925050611d3c565b611d49565b8080600101915050611ab1565b50505b600081600001805490501415611dc9574281600101819055507f9fd565cd14c3c391679eb0cad12a14dcf7534e9d3462bcb9b67a098a9bbbc24a33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15b6000806000611dd88534611f32565b925092509250836000016040518060c001604052808760ff168152602001858152602001348152602001848152602001428152602001838152509080600181540180825580915050906001820390600052602060002090600602016000909192909190915060008201518160000160006101000a81548160ff021916908360ff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050155505050611ea83460015461277b90919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167f84e02daa69bdb087c9fe8d3041abca495512cb14e723070f6d1d4efface82e5d868534864287604051808760ff1660ff168152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a2505050505050565b6000806000611f4085612286565b925060048560ff161015611faf57611fa860038660ff1681548110611f6157fe5b906000526020600020906002020160000154611f9a6103e8611f8c87896125dd90919063ffffffff16565b61266390919063ffffffff16565b6125dd90919063ffffffff16565b9150612047565b60088560ff1610156120465760008090505b60038660ff1681548110611fd157fe5b906000526020600020906002020160000154811015612044576120356120266103e86120188761200a888b61277b90919063ffffffff16565b6125dd90919063ffffffff16565b61266390919063ffffffff16565b8461277b90919063ffffffff16565b92508080600101915050611fc1565b505b5b6120906120816201518060038860ff168154811061206157fe5b9060005260206000209060020201600001546125dd90919063ffffffff16565b4261277b90919063ffffffff16565b90509250925092565b600081815481106120a657fe5b906000526020600020016000915090505481565b60025481565b6000612159600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701546126f290919063ffffffff16565b9050919050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600080600090505b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905081101561225457612245600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001828154811061222457fe5b9060005260206000209060060201600201548361277b90919063ffffffff16565b91508080600101915050612187565b50919050565b60015481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600554421115612309576123026122d2620151806122c46122b4600554426126f290919063ffffffff16565b60016125dd90919063ffffffff16565b61266390919063ffffffff16565b60038460ff16815481106122e257fe5b90600052602060002090600202016001015461277b90919063ffffffff16565b905061232e565b60038260ff168154811061231957fe5b90600052602060002090600202016001015490505b919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805490509050919050565b60008060038360ff168154811061239557fe5b906000526020600020906002020160000154915060038360ff16815481106123b957fe5b9060005260206000209060020201600101549050915091565b6000806000806000806000600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001888154811061242d57fe5b906000526020600020906006020160000160009054906101000a900460ff16965080600001888154811061245d57fe5b906000526020600020906006020160010154955080600001888154811061248057fe5b90600052602060002090600602016002015494508060000188815481106124a357fe5b90600052602060002090600602016003015493508060000188815481106124c657fe5b90600052602060002090600602016004015492508060000188815481106124e957fe5b9060005260206000209060060201600501549150509295509295509295565b60055481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b67016345785d8a000081565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601549050919050565b60fa81565b6000808314156125f0576000905061265d565b600082840290508284828161260157fe5b0414612658576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806128046021913960400191505060405180910390fd5b809150505b92915050565b60008082116126da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b60008284816126e557fe5b0490508091505092915050565b60008282111561276a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b6000808284019050838110156127f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72305820ffaeedc56d3b1fa19064f04576a1e65517b574d7820f05118e9b535cb8e6701264736f6c634300050a0032