Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Funded By
N/A
Latest 17 from a total of 17 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Kill | 7265469 | 2559 days ago | IN | 0 ETH | 0.00016717 | ||||
| Settle Bet | 7253946 | 2561 days ago | IN | 0 ETH | 0.00022703 | ||||
| Place Bet | 7253944 | 2561 days ago | IN | 0.01 ETH | 0.00158173 | ||||
| Settle Bet | 7253572 | 2561 days ago | IN | 0 ETH | 0.00079768 | ||||
| Place Bet | 7253570 | 2561 days ago | IN | 0.01 ETH | 0.0017759 | ||||
| Transfer | 7253550 | 2561 days ago | IN | 1 ETH | 0.00029456 | ||||
| Set VIP Library ... | 7253271 | 2562 days ago | IN | 0 ETH | 0.0004353 | ||||
| Set Secret Signe... | 7253271 | 2562 days ago | IN | 0 ETH | 0.00028529 | ||||
| Set Max Profit | 7253263 | 2562 days ago | IN | 0 ETH | 0.00042446 | ||||
| Add Croupier | 7253245 | 2562 days ago | IN | 0 ETH | 0.00044063 | ||||
| Add Croupier | 7253245 | 2562 days ago | IN | 0 ETH | 0.00044063 | ||||
| Add Croupier | 7253244 | 2562 days ago | IN | 0 ETH | 0.00044063 | ||||
| Add Croupier | 7253244 | 2562 days ago | IN | 0 ETH | 0.00044063 | ||||
| Add Croupier | 7253244 | 2562 days ago | IN | 0 ETH | 0.00044063 | ||||
| Add Croupier | 7253242 | 2562 days ago | IN | 0 ETH | 0.00044063 | ||||
| Add Croupier | 7253236 | 2562 days ago | IN | 0 ETH | 0.00044063 | ||||
| Add Croupier | 7253233 | 2562 days ago | IN | 0 ETH | 0.00044063 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Self Destruct called at Txn Hash 0x4069499e27bd87a125e7cfa0d7b3e00bc2f42c395c64d87a451eecec04f04e25
Contract Name:
AceDice
Compiler Version
v0.5.2+commit.1df8f40c
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2019-02-22
*/
// solium-disable linebreak-style
pragma solidity ^0.5.0;
contract CryptoTycoonsVIPLib{
address payable public owner;
// Accumulated jackpot fund.
uint128 public jackpotSize;
uint128 public rankingRewardSize;
mapping (address => uint) userExpPool;
mapping (address => bool) public callerMap;
event RankingRewardPayment(address indexed beneficiary, uint amount);
modifier onlyOwner {
require(msg.sender == owner, "OnlyOwner methods called by non-owner.");
_;
}
modifier onlyCaller {
bool isCaller = callerMap[msg.sender];
require(isCaller, "onlyCaller methods called by non-caller.");
_;
}
constructor() public{
owner = msg.sender;
callerMap[owner] = true;
}
// Fallback function deliberately left empty. It's primary use case
// is to top up the bank roll.
function () external payable {
}
function kill() external onlyOwner {
selfdestruct(owner);
}
function addCaller(address caller) public onlyOwner{
bool isCaller = callerMap[caller];
if (isCaller == false){
callerMap[caller] = true;
}
}
function deleteCaller(address caller) external onlyOwner {
bool isCaller = callerMap[caller];
if (isCaller == true) {
callerMap[caller] = false;
}
}
function addUserExp(address addr, uint256 amount) public onlyCaller{
uint exp = userExpPool[addr];
exp = exp + amount;
userExpPool[addr] = exp;
}
function getUserExp(address addr) public view returns(uint256 exp){
return userExpPool[addr];
}
function getVIPLevel(address user) public view returns (uint256 level) {
uint exp = userExpPool[user];
if(exp >= 25 ether && exp < 125 ether){
level = 1;
} else if(exp >= 125 ether && exp < 250 ether){
level = 2;
} else if(exp >= 250 ether && exp < 1250 ether){
level = 3;
} else if(exp >= 1250 ether && exp < 2500 ether){
level = 4;
} else if(exp >= 2500 ether && exp < 12500 ether){
level = 5;
} else if(exp >= 12500 ether && exp < 25000 ether){
level = 6;
} else if(exp >= 25000 ether && exp < 125000 ether){
level = 7;
} else if(exp >= 125000 ether && exp < 250000 ether){
level = 8;
} else if(exp >= 250000 ether && exp < 1250000 ether){
level = 9;
} else if(exp >= 1250000 ether){
level = 10;
} else{
level = 0;
}
return level;
}
function getVIPBounusRate(address user) public view returns (uint256 rate){
uint level = getVIPLevel(user);
return level;
}
// This function is used to bump up the jackpot fund. Cannot be used to lower it.
function increaseJackpot(uint increaseAmount) external onlyCaller {
require (increaseAmount <= address(this).balance, "Increase amount larger than balance.");
require (jackpotSize + increaseAmount <= address(this).balance, "Not enough funds.");
jackpotSize += uint128(increaseAmount);
}
function payJackpotReward(address payable to) external onlyCaller{
to.transfer(jackpotSize);
jackpotSize = 0;
}
function getJackpotSize() external view returns (uint256){
return jackpotSize;
}
function increaseRankingReward(uint amount) public onlyCaller{
require (amount <= address(this).balance, "Increase amount larger than balance.");
require (rankingRewardSize + amount <= address(this).balance, "Not enough funds.");
rankingRewardSize += uint128(amount);
}
function payRankingReward(address payable to) external onlyCaller {
uint128 prize = rankingRewardSize / 2;
rankingRewardSize = rankingRewardSize - prize;
if(to.send(prize)){
emit RankingRewardPayment(to, prize);
}
}
function getRankingRewardSize() external view returns (uint128){
return rankingRewardSize;
}
}
contract AceDice {
/// *** Constants section
// Each bet is deducted 1% in favour of the house, but no less than some minimum.
// The lower bound is dictated by gas costs of the settleBet transaction, providing
// headroom for up to 10 Gwei prices.
uint constant HOUSE_EDGE_PERCENT = 1;
uint constant HOUSE_EDGE_MINIMUM_AMOUNT = 0.0004 ether;
// Bets lower than this amount do not participate in jackpot rolls (and are
// not deducted JACKPOT_FEE).
uint constant MIN_JACKPOT_BET = 0.1 ether;
// Chance to win jackpot (currently 0.1%) and fee deducted into jackpot fund.
uint constant JACKPOT_MODULO = 1000;
uint constant JACKPOT_FEE = 0.001 ether;
// There is minimum and maximum bets.
uint constant MIN_BET = 0.01 ether;
uint constant MAX_AMOUNT = 300000 ether;
// Modulo is a number of equiprobable outcomes in a game:
// - 2 for coin flip
// - 6 for dice
// - 6*6 = 36 for double dice
// - 100 for etheroll
// - 37 for roulette
// etc.
// It's called so because 256-bit entropy is treated like a huge integer and
// the remainder of its division by modulo is considered bet outcome.
// uint constant MAX_MODULO = 100;
// For modulos below this threshold rolls are checked against a bit mask,
// thus allowing betting on any combination of outcomes. For example, given
// modulo 6 for dice, 101000 mask (base-2, big endian) means betting on
// 4 and 6; for games with modulos higher than threshold (Etheroll), a simple
// limit is used, allowing betting on any outcome in [0, N) range.
//
// The specific value is dictated by the fact that 256-bit intermediate
// multiplication result allows implementing population count efficiently
// for numbers that are up to 42 bits, and 40 is the highest multiple of
// eight below 42.
uint constant MAX_MASK_MODULO = 40;
// This is a check on bet mask overflow.
uint constant MAX_BET_MASK = 2 ** MAX_MASK_MODULO;
// EVM BLOCKHASH opcode can query no further than 256 blocks into the
// past. Given that settleBet uses block hash of placeBet as one of
// complementary entropy sources, we cannot process bets older than this
// threshold. On rare occasions AceDice croupier may fail to invoke
// settleBet in this timespan due to technical issues or extreme Ethereum
// congestion; such bets can be refunded via invoking refundBet.
uint constant BET_EXPIRATION_BLOCKS = 250;
// Some deliberately invalid address to initialize the secret signer with.
// Forces maintainers to invoke setSecretSigner before processing any bets.
address constant DUMMY_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
// Standard contract ownership transfer.
address payable public owner;
address payable private nextOwner;
// Adjustable max bet profit. Used to cap bets against dynamic odds.
uint public maxProfit;
// The address corresponding to a private key used to sign placeBet commits.
address public secretSigner;
// Funds that are locked in potentially winning bets. Prevents contract from
// committing to bets it cannot pay out.
uint128 public lockedInBets;
// A structure representing a single bet.
struct Bet {
// Wager amount in wei.
uint amount;
// Modulo of a game.
// uint8 modulo;
// Number of winning outcomes, used to compute winning payment (* modulo/rollUnder),
// and used instead of mask for games with modulo > MAX_MASK_MODULO.
uint8 rollUnder;
// Block number of placeBet tx.
uint40 placeBlockNumber;
// Bit mask representing winning bet outcomes (see MAX_MASK_MODULO comment).
uint40 mask;
// Address of a gambler, used to pay out winning bets.
address payable gambler;
// Address of inviter
address payable inviter;
}
struct Profile{
// picture index of profile avatar
uint avatarIndex;
// nickname of user
bytes32 nickName;
}
// Mapping from commits to all currently active & processed bets.
mapping (uint => Bet) bets;
mapping (address => Profile) profiles;
// Croupier account.
mapping (address => bool ) croupierMap;
address payable public VIPLibraryAddress;
// Events that are issued to make statistic recovery easier.
event FailedPayment(address indexed beneficiary, uint amount);
event Payment(address indexed beneficiary, uint amount, uint dice, uint rollUnder, uint betAmount);
event JackpotPayment(address indexed beneficiary, uint amount, uint dice, uint rollUnder, uint betAmount);
event VIPPayback(address indexed beneficiary, uint amount);
// This event is emitted in placeBet to record commit in the logs.
event Commit(uint commit);
// Constructor. Deliberately does not take any parameters.
constructor () public {
owner = msg.sender;
secretSigner = DUMMY_ADDRESS;
}
// Standard modifier on methods invokable only by contract owner.
modifier onlyOwner {
require (msg.sender == owner, "OnlyOwner methods called by non-owner.");
_;
}
// Standard modifier on methods invokable only by contract owner.
modifier onlyCroupier {
bool isCroupier = croupierMap[msg.sender];
require(isCroupier, "OnlyCroupier methods called by non-croupier.");
_;
}
// Standard contract ownership transfer implementation,
function approveNextOwner(address payable _nextOwner) external onlyOwner {
require (_nextOwner != owner, "Cannot approve current owner.");
nextOwner = _nextOwner;
}
function acceptNextOwner() external {
require (msg.sender == nextOwner, "Can only accept preapproved new owner.");
owner = nextOwner;
}
// Fallback function deliberately left empty. It's primary use case
// is to top up the bank roll.
function () external payable {
}
// See comment for "secretSigner" variable.
function setSecretSigner(address newSecretSigner) external onlyOwner {
secretSigner = newSecretSigner;
}
function getSecretSigner() external onlyOwner view returns(address){
return secretSigner;
}
function addCroupier(address newCroupier) external onlyOwner {
bool isCroupier = croupierMap[newCroupier];
if (isCroupier == false) {
croupierMap[newCroupier] = true;
}
}
function deleteCroupier(address newCroupier) external onlyOwner {
bool isCroupier = croupierMap[newCroupier];
if (isCroupier == true) {
croupierMap[newCroupier] = false;
}
}
function setVIPLibraryAddress(address payable addr) external onlyOwner{
VIPLibraryAddress = addr;
}
// Change max bet reward. Setting this to zero effectively disables betting.
function setMaxProfit(uint _maxProfit) public onlyOwner {
require (_maxProfit < MAX_AMOUNT, "maxProfit should be a sane number.");
maxProfit = _maxProfit;
}
// Funds withdrawal to cover costs of AceDice operation.
function withdrawFunds(address payable beneficiary, uint withdrawAmount) external onlyOwner {
require (withdrawAmount <= address(this).balance, "Increase amount larger than balance.");
require (lockedInBets + withdrawAmount <= address(this).balance, "Not enough funds.");
sendFunds(beneficiary, withdrawAmount, withdrawAmount, 0, 0, 0);
}
function kill() external onlyOwner {
require (lockedInBets == 0, "All bets should be processed (settled or refunded) before self-destruct.");
selfdestruct(owner);
}
function encodePacketCommit(uint commitLastBlock, uint commit) private pure returns(bytes memory){
return abi.encodePacked(uint40(commitLastBlock), commit);
}
function verifyCommit(uint commitLastBlock, uint commit, uint8 v, bytes32 r, bytes32 s) private view {
// Check that commit is valid - it has not expired and its signature is valid.
require (block.number <= commitLastBlock, "Commit has expired.");
//bytes32 signatureHash = keccak256(abi.encodePacked(commitLastBlock, commit));
bytes memory prefix = "\x19Ethereum Signed Message:\n32";
bytes memory message = encodePacketCommit(commitLastBlock, commit);
bytes32 messageHash = keccak256(abi.encodePacked(prefix, keccak256(message)));
require (secretSigner == ecrecover(messageHash, v, r, s), "ECDSA signature is not valid.");
}
function placeBet(uint betMask, uint commitLastBlock, uint commit, uint8 v, bytes32 r, bytes32 s) external payable {
// Check that the bet is in 'clean' state.
Bet storage bet = bets[commit];
require (bet.gambler == address(0), "Bet should be in a 'clean' state.");
// Validate input data ranges.
uint amount = msg.value;
//require (modulo > 1 && modulo <= MAX_MODULO, "Modulo should be within range.");
require (amount >= MIN_BET && amount <= MAX_AMOUNT, "Amount should be within range.");
require (betMask > 0 && betMask < MAX_BET_MASK, "Mask should be within range.");
verifyCommit(commitLastBlock, commit, v, r, s);
// uint rollUnder;
uint mask;
// if (modulo <= MAX_MASK_MODULO) {
// // Small modulo games specify bet outcomes via bit mask.
// // rollUnder is a number of 1 bits in this mask (population count).
// // This magic looking formula is an efficient way to compute population
// // count on EVM for numbers below 2**40. For detailed proof consult
// // the AceDice whitepaper.
// rollUnder = ((betMask * POPCNT_MULT) & POPCNT_MASK) % POPCNT_MODULO;
// mask = betMask;
// } else {
// Larger modulos specify the right edge of half-open interval of
// winning bet outcomes.
require (betMask > 0 && betMask <= 100, "High modulo range, betMask larger than modulo.");
// rollUnder = betMask;
// }
// Winning amount and jackpot increase.
uint possibleWinAmount;
uint jackpotFee;
(possibleWinAmount, jackpotFee) = getDiceWinAmount(amount, betMask);
// Enforce max profit limit.
require (possibleWinAmount <= amount + maxProfit, "maxProfit limit violation. ");
// Lock funds.
lockedInBets += uint128(possibleWinAmount);
// Check whether contract has enough funds to process this bet.
require (jackpotFee + lockedInBets <= address(this).balance, "Cannot afford to lose this bet.");
// Record commit in logs.
emit Commit(commit);
// Store bet parameters on blockchain.
bet.amount = amount;
// bet.modulo = uint8(modulo);
bet.rollUnder = uint8(betMask);
bet.placeBlockNumber = uint40(block.number);
bet.mask = uint40(mask);
bet.gambler = msg.sender;
CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress);
vipLib.addUserExp(msg.sender, amount);
}
function placeBetWithInviter(uint betMask, uint commitLastBlock, uint commit, uint8 v, bytes32 r, bytes32 s, address payable inviter) external payable {
// Check that the bet is in 'clean' state.
Bet storage bet = bets[commit];
require (bet.gambler == address(0), "Bet should be in a 'clean' state.");
// Validate input data ranges.
uint amount = msg.value;
// require (modulo > 1 && modulo <= MAX_MODULO, "Modulo should be within range.");
require (amount >= MIN_BET && amount <= MAX_AMOUNT, "Amount should be within range.");
require (betMask > 0 && betMask < MAX_BET_MASK, "Mask should be within range.");
require (address(this) != inviter && inviter != address(0), "cannot invite mysql");
verifyCommit(commitLastBlock, commit, v, r, s);
// uint rollUnder;
uint mask;
// if (modulo <= MAX_MASK_MODULO) {
// // Small modulo games specify bet outcomes via bit mask.
// // rollUnder is a number of 1 bits in this mask (population count).
// // This magic looking formula is an efficient way to compute population
// // count on EVM for numbers below 2**40. For detailed proof consult
// // the AceDice whitepaper.
// rollUnder = ((betMask * POPCNT_MULT) & POPCNT_MASK) % POPCNT_MODULO;
// mask = betMask;
// } else {
// Larger modulos specify the right edge of half-open interval of
// winning bet outcomes.
require (betMask > 0 && betMask <= 100, "High modulo range, betMask larger than modulo.");
// rollUnder = betMask;
// }
// Winning amount and jackpot increase.
uint possibleWinAmount;
uint jackpotFee;
(possibleWinAmount, jackpotFee) = getDiceWinAmount(amount, betMask);
// Enforce max profit limit.
require (possibleWinAmount <= amount + maxProfit, "maxProfit limit violation. ");
// Lock funds.
lockedInBets += uint128(possibleWinAmount);
// jackpotSize += uint128(jackpotFee);
// Check whether contract has enough funds to process this bet.
require (jackpotFee + lockedInBets <= address(this).balance, "Cannot afford to lose this bet.");
// Record commit in logs.
emit Commit(commit);
// Store bet parameters on blockchain.
bet.amount = amount;
// bet.modulo = uint8(modulo);
bet.rollUnder = uint8(betMask);
bet.placeBlockNumber = uint40(block.number);
bet.mask = uint40(mask);
bet.gambler = msg.sender;
bet.inviter = inviter;
CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress);
vipLib.addUserExp(msg.sender, amount);
}
function applyVIPLevel(address payable gambler, uint amount) private {
CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress);
uint rate = vipLib.getVIPBounusRate(gambler);
if (rate <= 0)
return;
uint vipPayback = amount * rate / 10000;
if(gambler.send(vipPayback)){
emit VIPPayback(gambler, vipPayback);
}
}
function getMyAccuAmount() external view returns (uint){
CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress);
return vipLib.getUserExp(msg.sender);
}
function getJackpotSize() external view returns (uint){
CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress);
return vipLib.getJackpotSize();
}
// This is the method used to settle 99% of bets. To process a bet with a specific
// "commit", settleBet should supply a "reveal" number that would Keccak256-hash to
// "commit". "blockHash" is the block hash of placeBet block as seen by croupier; it
// is additionally asserted to prevent changing the bet outcomes on Ethereum reorgs.
function settleBet(uint reveal, bytes32 blockHash) external onlyCroupier {
uint commit = uint(keccak256(abi.encodePacked(reveal)));
Bet storage bet = bets[commit];
uint placeBlockNumber = bet.placeBlockNumber;
// Check that bet has not expired yet (see comment to BET_EXPIRATION_BLOCKS).
require (block.number > placeBlockNumber, "settleBet in the same block as placeBet, or before.");
require (block.number <= placeBlockNumber + BET_EXPIRATION_BLOCKS, "Blockhash can't be queried by EVM.");
require (blockhash(placeBlockNumber) == blockHash);
// Settle bet using reveal and blockHash as entropy sources.
settleBetCommon(bet, reveal, blockHash);
}
// Common settlement code for settleBet & settleBetUncleMerkleProof.
function settleBetCommon(Bet storage bet, uint reveal, bytes32 entropyBlockHash) private {
// Fetch bet parameters into local variables (to save gas).
uint amount = bet.amount;
// uint modulo = bet.modulo;
uint rollUnder = bet.rollUnder;
address payable gambler = bet.gambler;
// Check that bet is in 'active' state.
require (amount != 0, "Bet should be in an 'active' state");
applyVIPLevel(gambler, amount);
// Move bet into 'processed' state already.
bet.amount = 0;
// The RNG - combine "reveal" and blockhash of placeBet using Keccak256. Miners
// are not aware of "reveal" and cannot deduce it from "commit" (as Keccak256
// preimage is intractable), and house is unable to alter the "reveal" after
// placeBet have been mined (as Keccak256 collision finding is also intractable).
bytes32 entropy = keccak256(abi.encodePacked(reveal, entropyBlockHash));
// Do a roll by taking a modulo of entropy. Compute winning amount.
uint dice = uint(entropy) % 100;
uint diceWinAmount;
uint _jackpotFee;
(diceWinAmount, _jackpotFee) = getDiceWinAmount(amount, rollUnder);
uint diceWin = 0;
uint jackpotWin = 0;
if (dice < rollUnder) {
diceWin = diceWinAmount;
}
// Unlock the bet amount, regardless of the outcome.
lockedInBets -= uint128(diceWinAmount);
CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress);
// Roll for a jackpot (if eligible).
if (amount >= MIN_JACKPOT_BET) {
VIPLibraryAddress.transfer(_jackpotFee);
vipLib.increaseJackpot(_jackpotFee);
// The second modulo, statistically independent from the "main" dice roll.
// Effectively you are playing two games at once!
// uint jackpotRng = (uint(entropy) / modulo) % JACKPOT_MODULO;
// Bingo!
if ((uint(entropy) / 100) % JACKPOT_MODULO == 0) {
jackpotWin = vipLib.getJackpotSize();
vipLib.payJackpotReward(gambler);
}
}
// Log jackpot win.
if (jackpotWin > 0) {
emit JackpotPayment(gambler, jackpotWin, dice, rollUnder, amount);
}
if(bet.inviter != address(0)){
// pay 10% of house edge to inviter
bet.inviter.transfer(amount * HOUSE_EDGE_PERCENT / 100 * 7 /100);
}
// uint128 rankingRewardFee = uint128(amount * HOUSE_EDGE_PERCENT / 100 * 9 /100);
VIPLibraryAddress.transfer(uint128(amount * HOUSE_EDGE_PERCENT / 100 * 7 /100));
vipLib.increaseRankingReward(uint128(amount * HOUSE_EDGE_PERCENT / 100 * 7 /100));
// Send the funds to gambler.
sendFunds(gambler, diceWin == 0 ? 1 wei : diceWin, diceWin, dice, rollUnder, amount);
}
// Refund transaction - return the bet amount of a roll that was not processed in a
// due timeframe. Processing such blocks is not possible due to EVM limitations (see
// BET_EXPIRATION_BLOCKS comment above for details). In case you ever find yourself
// in a situation like this, just contact the AceDice support, however nothing
// precludes you from invoking this method yourself.
function refundBet(uint commit) external {
// Check that bet is in 'active' state.
Bet storage bet = bets[commit];
uint amount = bet.amount;
require (amount != 0, "Bet should be in an 'active' state");
// Check that bet has already expired.
require (block.number > bet.placeBlockNumber + BET_EXPIRATION_BLOCKS, "Blockhash can't be queried by EVM.");
// Move bet into 'processed' state, release funds.
bet.amount = 0;
uint diceWinAmount;
uint jackpotFee;
(diceWinAmount, jackpotFee) = getDiceWinAmount(amount, bet.rollUnder);
lockedInBets -= uint128(diceWinAmount);
// jackpotSize -= uint128(jackpotFee);
CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress);
vipLib.increaseJackpot(-jackpotFee);
// Send the refund.
sendFunds(bet.gambler, amount, amount, 0, 0, 0);
}
// Get the expected win amount after house edge is subtracted.
function getDiceWinAmount(uint amount, uint rollUnder) private pure returns (uint winAmount, uint jackpotFee) {
require (0 < rollUnder && rollUnder <= 100, "Win probability out of range.");
jackpotFee = amount >= MIN_JACKPOT_BET ? JACKPOT_FEE : 0;
uint houseEdge = amount * HOUSE_EDGE_PERCENT / 100;
if (houseEdge < HOUSE_EDGE_MINIMUM_AMOUNT) {
houseEdge = HOUSE_EDGE_MINIMUM_AMOUNT;
}
require (houseEdge + jackpotFee <= amount, "Bet doesn't even cover house edge.");
winAmount = (amount - houseEdge - jackpotFee) * 100 / rollUnder;
}
// Helper routine to process the payment.
function sendFunds(address payable beneficiary, uint amount, uint successLogAmount, uint dice, uint rollUnder, uint betAmount) private {
if (beneficiary.send(amount)) {
emit Payment(beneficiary, successLogAmount, dice, rollUnder, betAmount);
} else {
emit FailedPayment(beneficiary, amount);
}
}
function thisBalance() public view returns(uint) {
return address(this).balance;
}
function setAvatarIndex(uint index) external{
require (index >=0 && index <= 100, "avatar index should be in range");
Profile storage profile = profiles[msg.sender];
profile.avatarIndex = index;
}
function setNickName(bytes32 nickName) external{
Profile storage profile = profiles[msg.sender];
profile.nickName = nickName;
}
function getProfile() external view returns(uint, bytes32){
Profile storage profile = profiles[msg.sender];
return (profile.avatarIndex, profile.nickName);
}
function payTodayReward(address payable to) external onlyOwner {
CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress);
vipLib.payRankingReward(to);
}
function getRankingRewardSize() external view returns (uint128) {
CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress);
return vipLib.getRankingRewardSize();
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"thisBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"payTodayReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setVIPLibraryAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"index","type":"uint256"}],"name":"setAvatarIndex","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newCroupier","type":"address"}],"name":"addCroupier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secretSigner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"nickName","type":"bytes32"}],"name":"setNickName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getRankingRewardSize","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMyAccuAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getSecretSigner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"VIPLibraryAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxProfit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"betMask","type":"uint256"},{"name":"commitLastBlock","type":"uint256"},{"name":"commit","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"placeBet","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"withdrawAmount","type":"uint256"}],"name":"withdrawFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"reveal","type":"uint256"},{"name":"blockHash","type":"bytes32"}],"name":"settleBet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptNextOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newCroupier","type":"address"}],"name":"deleteCroupier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nextOwner","type":"address"}],"name":"approveNextOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getProfile","outputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newSecretSigner","type":"address"}],"name":"setSecretSigner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lockedInBets","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"betMask","type":"uint256"},{"name":"commitLastBlock","type":"uint256"},{"name":"commit","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"},{"name":"inviter","type":"address"}],"name":"placeBetWithInviter","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"commit","type":"uint256"}],"name":"refundBet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getJackpotSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_maxProfit","type":"uint256"}],"name":"setMaxProfit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"FailedPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"dice","type":"uint256"},{"indexed":false,"name":"rollUnder","type":"uint256"},{"indexed":false,"name":"betAmount","type":"uint256"}],"name":"Payment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"dice","type":"uint256"},{"indexed":false,"name":"rollUnder","type":"uint256"},{"indexed":false,"name":"betAmount","type":"uint256"}],"name":"JackpotPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"VIPPayback","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"commit","type":"uint256"}],"name":"Commit","type":"event"}]Contract Creation Code
608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613d2d806100b56000396000f3fe6080604052600436106101b9576000357c010000000000000000000000000000000000000000000000000000000090048063b539cd5511610109578063d6afc9b1116100a7578063dfea6ec211610081578063dfea6ec2146107f5578063e1fdb4b414610878578063e78e0362146108b3578063fbd668a9146108de576101b9565b8063d6afc9b114610723578063d702087f14610755578063df88126f146107a6576101b9565b8063ca722cdc116100e3578063ca722cdc14610625578063d06c54fb1461066a578063d3d1996514610681578063d579fd44146106d2576101b9565b8063b539cd551461053c578063bb5a4f4c14610567578063c1075329146105ca576101b9565b80634d61537f116101765780638da5cb5b116101505780638da5cb5b1461040c5780639efedc9114610463578063a43796ce1461048e578063a9c1685b146104e5576101b9565b80634d61537f1461032b57806362246c411461038257806377e24446146103bd576101b9565b806327f3a72a146101bb5780632d7243ef146101e65780633afd716f14610237578063412648bf1461028857806341c0e1b5146102c357806344268655146102da575b005b3480156101c757600080fd5b506101d0610919565b6040518082815260200191505060405180910390f35b3480156101f257600080fd5b506102356004803603602081101561020957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610938565b005b34801561024357600080fd5b506102866004803603602081101561025a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610abd565b005b34801561029457600080fd5b506102c1600480360360208110156102ab57600080fd5b8101908080359060200190929190505050610ba8565b005b3480156102cf57600080fd5b506102d8610c7e565b005b3480156102e657600080fd5b50610329600480360360208110156102fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dea565b005b34801561033757600080fd5b50610340610f4c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038e57600080fd5b506103bb600480360360208110156103a557600080fd5b8101908080359060200190929190505050610f72565b005b3480156103c957600080fd5b506103d2610fc2565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041857600080fd5b5061042161108d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561046f57600080fd5b506104786110b2565b6040518082815260200191505060405180910390f35b34801561049a57600080fd5b506104a36111b4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f157600080fd5b506104fa611285565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561054857600080fd5b506105516112ab565b6040518082815260200191505060405180910390f35b6105c8600480360360c081101561057d57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506112b1565b005b3480156105d657600080fd5b50610623600480360360408110156105ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611890565b005b34801561063157600080fd5b506106686004803603604081101561064857600080fd5b810190808035906020019092919080359060200190929190505050611a7e565b005b34801561067657600080fd5b5061067f611c68565b005b34801561068d57600080fd5b506106d0600480360360208110156106a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d74565b005b3480156106de57600080fd5b50610721600480360360208110156106f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ed6565b005b34801561072f57600080fd5b50610738612086565b604051808381526020018281526020019250505060405180910390f35b34801561076157600080fd5b506107a46004803603602081101561077857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120df565b005b3480156107b257600080fd5b506107bb6121ca565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610876600480360360e081101561080b57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121ec565b005b34801561088457600080fd5b506108b16004803603602081101561089b57600080fd5b81019080803590602001909291905050506128ec565b005b3480156108bf57600080fd5b506108c8612b5b565b6040518082815260200191505060405180910390f35b3480156108ea57600080fd5b506109176004803603602081101561090157600080fd5b8101908080359060200190929190505050612c26565b005b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663bab46bd3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610aa157600080fd5b505af1158015610ab5573d6000803e3d6000fd5b505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008110158015610bba575060648111155b1515610c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f61766174617220696e6465782073686f756c6420626520696e2072616e67650081525060200191505060405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600001819055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b6000600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16141515610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526048815260200180613c446048913960600191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600015158115151415610f48576001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600101819055505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166377e244466040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561104c57600080fd5b505afa158015611060573d6000803e3d6000fd5b505050506040513d602081101561107657600080fd5b810190808051906020019092919050505091505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663b98f5932336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561117357600080fd5b505afa158015611187573d6000803e3d6000fd5b505050506040513d602081101561119d57600080fd5b810190808051906020019092919050505091505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561125d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b6000600560008681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff1681600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611373576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613ba06021913960400191505060405180910390fd5b6000349050662386f26fc1000081101580156113995750693f870857a3e0e38000008111155b151561140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f416d6f756e742073686f756c642062652077697468696e2072616e67652e000081525060200191505060405180910390fd5b6000881180156114205750602860020a88105b1515611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d61736b2073686f756c642062652077697468696e2072616e67652e0000000081525060200191505060405180910390fd5b6114a18787878787612d3b565b600080891180156114b3575060648911155b151561150a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cb2602e913960400191505060405180910390fd5b600080611517848c612fb7565b80925081935050506002548401821115151561159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d617850726f666974206c696d69742076696f6c6174696f6e2e20000000000081525060200191505060405180910390fd5b81600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff1631600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168201111515156116b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e0081525060200191505060405180910390fd5b7f5bdd2fc99022530157777690475b670d3872f32262eb1d47d9ba8000dad58f87896040518082815260200191505060405180910390a18385600001819055508a8560010160006101000a81548160ff021916908360ff160217905550438560010160016101000a81548164ffffffffff021916908364ffffffffff160217905550828560010160066101000a81548164ffffffffff021916908364ffffffffff1602179055503385600101600b6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16639232fdb533876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611937576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff163181111515156119a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613c206024913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff163181600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff160111151515611a6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6f7420656e6f7567682066756e64732e00000000000000000000000000000081525060200191505060405180910390fd5b611a7a8282836000806000613109565b5050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050801515611b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613bf4602c913960400191505060405180910390fd5b6000836040516020018082815260200191505060405160208183030381529060405280519060200120600190049050600060056000838152602001908152602001600020905060008160010160019054906101000a900464ffffffffff1664ffffffffff1690508043111515611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180613bc16033913960400191505060405180910390fd5b60fa81014311151515611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ce06022913960400191505060405180910390fd5b848140141515611c5557600080fd5b611c60828787613205565b505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613b146026913960400191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600115158115151415611ed2576000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616e6e6f7420617070726f76652063757272656e74206f776e65722e00000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000154816001015492509250509091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612186576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a90046fffffffffffffffffffffffffffffffff1681565b6000600560008781526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff1681600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156122ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613ba06021913960400191505060405180910390fd5b6000349050662386f26fc1000081101580156122d45750693f870857a3e0e38000008111155b1515612348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f416d6f756e742073686f756c642062652077697468696e2072616e67652e000081525060200191505060405180910390fd5b60008911801561235b5750602860020a89105b15156123cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d61736b2073686f756c642062652077697468696e2072616e67652e0000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16141580156124385750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15156124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f63616e6e6f7420696e76697465206d7973716c0000000000000000000000000081525060200191505060405180910390fd5b6124b98888888888612d3b565b6000808a1180156124cb575060648a11155b1515612522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cb2602e913960400191505060405180910390fd5b60008061252f848d612fb7565b8092508193505050600254840182111515156125b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d617850726f666974206c696d69742076696f6c6174696f6e2e20000000000081525060200191505060405180910390fd5b81600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff1631600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168201111515156126ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e0081525060200191505060405180910390fd5b7f5bdd2fc99022530157777690475b670d3872f32262eb1d47d9ba8000dad58f878a6040518082815260200191505060405180910390a18385600001819055508b8560010160006101000a81548160ff021916908360ff160217905550438560010160016101000a81548164ffffffffff021916908364ffffffffff160217905550828560010160066101000a81548164ffffffffff021916908364ffffffffff1602179055503385600101600b6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550858560020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16639232fdb533876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156128c557600080fd5b505af11580156128d9573d6000803e3d6000fd5b5050505050505050505050505050505050565b600060056000838152602001908152602001600020905060008160000154905060008114151515612968576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613b7e6022913960400191505060405180910390fd5b60fa8260010160019054906101000a900464ffffffffff1664ffffffffff1601431115156129e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ce06022913960400191505060405180910390fd5b60008260000181905550600080612a0c838560010160009054906101000a900460ff1660ff16612fb7565b809250819350505081600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663d6d30a51836000036040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b158015612b0757600080fd5b505af1158015612b1b573d6000803e3d6000fd5b50505050612b5385600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685866000806000613109565b505050505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663e78e03626040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015612be557600080fd5b505afa158015612bf9573d6000803e3d6000fd5b505050506040513d6020811015612c0f57600080fd5b810190808051906020019092919050505091505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b693f870857a3e0e380000081101515612d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613b3a6022913960400191505060405180910390fd5b8060028190555050565b844311151515612db3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f436f6d6d69742068617320657870697265642e0000000000000000000000000081525060200191505060405180910390fd5b60606040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525090506060612df98787613900565b905060008282805190602001206040516020018083805190602001908083835b602083101515612e3e5780518252602082019150602081019050602083039250612e19565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019250505060405160208183030381529060405280519060200120905060018187878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612edf573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612fad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4543445341207369676e6174757265206973206e6f742076616c69642e00000081525060200191505060405180910390fd5b5050505050505050565b600080826000108015612fcb575060648311155b151561303f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f57696e2070726f626162696c697479206f7574206f662072616e67652e00000081525060200191505060405180910390fd5b67016345785d8a000084101561305657600061305f565b66038d7ea4c680005b9050600060646001860281151561307257fe5b04905066016bcc41e9000081101561308f5766016bcc41e9000090505b84828201111515156130ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613b5c6022913960400191505060405180910390fd5b8360648383880303028115156130fe57fe5b049250509250929050565b8573ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050156131ae578573ffffffffffffffffffffffffffffffffffffffff167f9620cef3a3d39af2426e8362381d59ca9ea0f5ae59621986a897d764f66f953e858585856040518085815260200184815260200183815260200182815260200194505050505060405180910390a26131fd565b8573ffffffffffffffffffffffffffffffffffffffff167fac464fe4d3a86b9121261ac0a01dd981bfe0777c7c9d9c8f4473d31a9c0f9d2d866040518082815260200191505060405180910390a25b505050505050565b60008360000154905060008460010160009054906101000a900460ff1660ff169050600085600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600083141515156132ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613b7e6022913960400191505060405180910390fd5b6132b6818461395e565b6000866000018190555060008585604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905060006064826001900481151561330557fe5b0690506000806133158787612fb7565b80925081935050506000809050600080905087851015613333578391505b83600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905067016345785d8a00008a10151561362f57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505015801561342d573d6000803e3d6000fd5b508073ffffffffffffffffffffffffffffffffffffffff1663d6d30a51856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561349d57600080fd5b505af11580156134b1573d6000803e3d6000fd5b5050505060006103e8606489600190048115156134ca57fe5b048115156134d457fe5b06141561362e578073ffffffffffffffffffffffffffffffffffffffff1663e78e03626040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561353d57600080fd5b505afa158015613551573d6000803e3d6000fd5b505050506040513d602081101561356757600080fd5b810190808051906020019092919050505091508073ffffffffffffffffffffffffffffffffffffffff166362b686fc896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561361557600080fd5b505af1158015613629573d6000803e3d6000fd5b505050505b5b600082111561369f578773ffffffffffffffffffffffffffffffffffffffff167f1bb05166a98fd97ba6a9f1f04f57b119557528458c1378d421b97451e195fd2c83888c8e6040518085815260200184815260200183815260200182815260200194505050505060405180910390a25b600073ffffffffffffffffffffffffffffffffffffffff168d60020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515613783578c60020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646007606460018f0281151561374a57fe5b040281151561375557fe5b049081150290604051600060405180830381858888f19350505050158015613781573d6000803e3d6000fd5b505b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646007606460018f028115156137d257fe5b04028115156137dd57fe5b046fffffffffffffffffffffffffffffffff169081150290604051600060405180830381858888f1935050505015801561381b573d6000803e3d6000fd5b508073ffffffffffffffffffffffffffffffffffffffff1663040448c660646007606460018f0281151561384b57fe5b040281151561385657fe5b046040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826fffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156138bb57600080fd5b505af11580156138cf573d6000803e3d6000fd5b505050506138f188600085146138e557846138e8565b60015b85898d8f613109565b50505050505050505050505050565b60608282604051602001808364ffffffffff1664ffffffffff167b0100000000000000000000000000000000000000000000000000000002815260050182815260200192505050604051602081830303815290604052905092915050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663772c658b856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613a2057600080fd5b505afa158015613a34573d6000803e3d6000fd5b505050506040513d6020811015613a4a57600080fd5b81019080805190602001909291905050509050600081111515613a6e575050613b0f565b6000612710828502811515613a7f57fe5b0490508473ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015613b0b578473ffffffffffffffffffffffffffffffffffffffff167f63c4a815575db8089483aeea967a8e1205c076ec5ff1eefca70ddb8d93be7eff826040518082815260200191505060405180910390a25b5050505b505056fe43616e206f6e6c792061636365707420707265617070726f766564206e6577206f776e65722e6d617850726f6669742073686f756c6420626520612073616e65206e756d6265722e42657420646f65736e2774206576656e20636f76657220686f75736520656467652e4265742073686f756c6420626520696e20616e2027616374697665272073746174654265742073686f756c6420626520696e20612027636c65616e272073746174652e736574746c6542657420696e207468652073616d6520626c6f636b20617320706c6163654265742c206f72206265666f72652e4f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e6f6e2d63726f75706965722e496e63726561736520616d6f756e74206c6172676572207468616e2062616c616e63652e416c6c20626574732073686f756c642062652070726f6365737365642028736574746c6564206f7220726566756e64656429206265666f72652073656c662d64657374727563742e4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d6f776e65722e48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676572207468616e206d6f64756c6f2e426c6f636b686173682063616e277420626520717565726965642062792045564d2ea165627a7a72305820349f6f99a34e35f887108d5741d2d053c045d032409d99be3be14a5ef02c00ef0029
Deployed Bytecode
0x6080604052600436106101b9576000357c010000000000000000000000000000000000000000000000000000000090048063b539cd5511610109578063d6afc9b1116100a7578063dfea6ec211610081578063dfea6ec2146107f5578063e1fdb4b414610878578063e78e0362146108b3578063fbd668a9146108de576101b9565b8063d6afc9b114610723578063d702087f14610755578063df88126f146107a6576101b9565b8063ca722cdc116100e3578063ca722cdc14610625578063d06c54fb1461066a578063d3d1996514610681578063d579fd44146106d2576101b9565b8063b539cd551461053c578063bb5a4f4c14610567578063c1075329146105ca576101b9565b80634d61537f116101765780638da5cb5b116101505780638da5cb5b1461040c5780639efedc9114610463578063a43796ce1461048e578063a9c1685b146104e5576101b9565b80634d61537f1461032b57806362246c411461038257806377e24446146103bd576101b9565b806327f3a72a146101bb5780632d7243ef146101e65780633afd716f14610237578063412648bf1461028857806341c0e1b5146102c357806344268655146102da575b005b3480156101c757600080fd5b506101d0610919565b6040518082815260200191505060405180910390f35b3480156101f257600080fd5b506102356004803603602081101561020957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610938565b005b34801561024357600080fd5b506102866004803603602081101561025a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610abd565b005b34801561029457600080fd5b506102c1600480360360208110156102ab57600080fd5b8101908080359060200190929190505050610ba8565b005b3480156102cf57600080fd5b506102d8610c7e565b005b3480156102e657600080fd5b50610329600480360360208110156102fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dea565b005b34801561033757600080fd5b50610340610f4c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038e57600080fd5b506103bb600480360360208110156103a557600080fd5b8101908080359060200190929190505050610f72565b005b3480156103c957600080fd5b506103d2610fc2565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041857600080fd5b5061042161108d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561046f57600080fd5b506104786110b2565b6040518082815260200191505060405180910390f35b34801561049a57600080fd5b506104a36111b4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f157600080fd5b506104fa611285565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561054857600080fd5b506105516112ab565b6040518082815260200191505060405180910390f35b6105c8600480360360c081101561057d57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506112b1565b005b3480156105d657600080fd5b50610623600480360360408110156105ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611890565b005b34801561063157600080fd5b506106686004803603604081101561064857600080fd5b810190808035906020019092919080359060200190929190505050611a7e565b005b34801561067657600080fd5b5061067f611c68565b005b34801561068d57600080fd5b506106d0600480360360208110156106a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d74565b005b3480156106de57600080fd5b50610721600480360360208110156106f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ed6565b005b34801561072f57600080fd5b50610738612086565b604051808381526020018281526020019250505060405180910390f35b34801561076157600080fd5b506107a46004803603602081101561077857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120df565b005b3480156107b257600080fd5b506107bb6121ca565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610876600480360360e081101561080b57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121ec565b005b34801561088457600080fd5b506108b16004803603602081101561089b57600080fd5b81019080803590602001909291905050506128ec565b005b3480156108bf57600080fd5b506108c8612b5b565b6040518082815260200191505060405180910390f35b3480156108ea57600080fd5b506109176004803603602081101561090157600080fd5b8101908080359060200190929190505050612c26565b005b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663bab46bd3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610aa157600080fd5b505af1158015610ab5573d6000803e3d6000fd5b505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008110158015610bba575060648111155b1515610c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f61766174617220696e6465782073686f756c6420626520696e2072616e67650081525060200191505060405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600001819055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b6000600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16141515610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526048815260200180613c446048913960600191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600015158115151415610f48576001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600101819055505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166377e244466040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561104c57600080fd5b505afa158015611060573d6000803e3d6000fd5b505050506040513d602081101561107657600080fd5b810190808051906020019092919050505091505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663b98f5932336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561117357600080fd5b505afa158015611187573d6000803e3d6000fd5b505050506040513d602081101561119d57600080fd5b810190808051906020019092919050505091505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561125d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b6000600560008681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff1681600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611373576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613ba06021913960400191505060405180910390fd5b6000349050662386f26fc1000081101580156113995750693f870857a3e0e38000008111155b151561140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f416d6f756e742073686f756c642062652077697468696e2072616e67652e000081525060200191505060405180910390fd5b6000881180156114205750602860020a88105b1515611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d61736b2073686f756c642062652077697468696e2072616e67652e0000000081525060200191505060405180910390fd5b6114a18787878787612d3b565b600080891180156114b3575060648911155b151561150a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cb2602e913960400191505060405180910390fd5b600080611517848c612fb7565b80925081935050506002548401821115151561159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d617850726f666974206c696d69742076696f6c6174696f6e2e20000000000081525060200191505060405180910390fd5b81600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff1631600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168201111515156116b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e0081525060200191505060405180910390fd5b7f5bdd2fc99022530157777690475b670d3872f32262eb1d47d9ba8000dad58f87896040518082815260200191505060405180910390a18385600001819055508a8560010160006101000a81548160ff021916908360ff160217905550438560010160016101000a81548164ffffffffff021916908364ffffffffff160217905550828560010160066101000a81548164ffffffffff021916908364ffffffffff1602179055503385600101600b6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16639232fdb533876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611937576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff163181111515156119a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613c206024913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff163181600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff160111151515611a6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6f7420656e6f7567682066756e64732e00000000000000000000000000000081525060200191505060405180910390fd5b611a7a8282836000806000613109565b5050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050801515611b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613bf4602c913960400191505060405180910390fd5b6000836040516020018082815260200191505060405160208183030381529060405280519060200120600190049050600060056000838152602001908152602001600020905060008160010160019054906101000a900464ffffffffff1664ffffffffff1690508043111515611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180613bc16033913960400191505060405180910390fd5b60fa81014311151515611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ce06022913960400191505060405180910390fd5b848140141515611c5557600080fd5b611c60828787613205565b505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613b146026913960400191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600115158115151415611ed2576000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616e6e6f7420617070726f76652063757272656e74206f776e65722e00000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000154816001015492509250509091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612186576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a90046fffffffffffffffffffffffffffffffff1681565b6000600560008781526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff1681600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156122ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613ba06021913960400191505060405180910390fd5b6000349050662386f26fc1000081101580156122d45750693f870857a3e0e38000008111155b1515612348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f416d6f756e742073686f756c642062652077697468696e2072616e67652e000081525060200191505060405180910390fd5b60008911801561235b5750602860020a89105b15156123cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d61736b2073686f756c642062652077697468696e2072616e67652e0000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16141580156124385750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15156124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f63616e6e6f7420696e76697465206d7973716c0000000000000000000000000081525060200191505060405180910390fd5b6124b98888888888612d3b565b6000808a1180156124cb575060648a11155b1515612522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613cb2602e913960400191505060405180910390fd5b60008061252f848d612fb7565b8092508193505050600254840182111515156125b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d617850726f666974206c696d69742076696f6c6174696f6e2e20000000000081525060200191505060405180910390fd5b81600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff1631600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168201111515156126ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e0081525060200191505060405180910390fd5b7f5bdd2fc99022530157777690475b670d3872f32262eb1d47d9ba8000dad58f878a6040518082815260200191505060405180910390a18385600001819055508b8560010160006101000a81548160ff021916908360ff160217905550438560010160016101000a81548164ffffffffff021916908364ffffffffff160217905550828560010160066101000a81548164ffffffffff021916908364ffffffffff1602179055503385600101600b6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550858560020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16639232fdb533876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156128c557600080fd5b505af11580156128d9573d6000803e3d6000fd5b5050505050505050505050505050505050565b600060056000838152602001908152602001600020905060008160000154905060008114151515612968576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613b7e6022913960400191505060405180910390fd5b60fa8260010160019054906101000a900464ffffffffff1664ffffffffff1601431115156129e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ce06022913960400191505060405180910390fd5b60008260000181905550600080612a0c838560010160009054906101000a900460ff1660ff16612fb7565b809250819350505081600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663d6d30a51836000036040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b158015612b0757600080fd5b505af1158015612b1b573d6000803e3d6000fd5b50505050612b5385600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685866000806000613109565b505050505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663e78e03626040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015612be557600080fd5b505afa158015612bf9573d6000803e3d6000fd5b505050506040513d6020811015612c0f57600080fd5b810190808051906020019092919050505091505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c8c6026913960400191505060405180910390fd5b693f870857a3e0e380000081101515612d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613b3a6022913960400191505060405180910390fd5b8060028190555050565b844311151515612db3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f436f6d6d69742068617320657870697265642e0000000000000000000000000081525060200191505060405180910390fd5b60606040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525090506060612df98787613900565b905060008282805190602001206040516020018083805190602001908083835b602083101515612e3e5780518252602082019150602081019050602083039250612e19565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019250505060405160208183030381529060405280519060200120905060018187878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612edf573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612fad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4543445341207369676e6174757265206973206e6f742076616c69642e00000081525060200191505060405180910390fd5b5050505050505050565b600080826000108015612fcb575060648311155b151561303f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f57696e2070726f626162696c697479206f7574206f662072616e67652e00000081525060200191505060405180910390fd5b67016345785d8a000084101561305657600061305f565b66038d7ea4c680005b9050600060646001860281151561307257fe5b04905066016bcc41e9000081101561308f5766016bcc41e9000090505b84828201111515156130ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613b5c6022913960400191505060405180910390fd5b8360648383880303028115156130fe57fe5b049250509250929050565b8573ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050156131ae578573ffffffffffffffffffffffffffffffffffffffff167f9620cef3a3d39af2426e8362381d59ca9ea0f5ae59621986a897d764f66f953e858585856040518085815260200184815260200183815260200182815260200194505050505060405180910390a26131fd565b8573ffffffffffffffffffffffffffffffffffffffff167fac464fe4d3a86b9121261ac0a01dd981bfe0777c7c9d9c8f4473d31a9c0f9d2d866040518082815260200191505060405180910390a25b505050505050565b60008360000154905060008460010160009054906101000a900460ff1660ff169050600085600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600083141515156132ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613b7e6022913960400191505060405180910390fd5b6132b6818461395e565b6000866000018190555060008585604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905060006064826001900481151561330557fe5b0690506000806133158787612fb7565b80925081935050506000809050600080905087851015613333578391505b83600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905067016345785d8a00008a10151561362f57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505015801561342d573d6000803e3d6000fd5b508073ffffffffffffffffffffffffffffffffffffffff1663d6d30a51856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561349d57600080fd5b505af11580156134b1573d6000803e3d6000fd5b5050505060006103e8606489600190048115156134ca57fe5b048115156134d457fe5b06141561362e578073ffffffffffffffffffffffffffffffffffffffff1663e78e03626040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561353d57600080fd5b505afa158015613551573d6000803e3d6000fd5b505050506040513d602081101561356757600080fd5b810190808051906020019092919050505091508073ffffffffffffffffffffffffffffffffffffffff166362b686fc896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561361557600080fd5b505af1158015613629573d6000803e3d6000fd5b505050505b5b600082111561369f578773ffffffffffffffffffffffffffffffffffffffff167f1bb05166a98fd97ba6a9f1f04f57b119557528458c1378d421b97451e195fd2c83888c8e6040518085815260200184815260200183815260200182815260200194505050505060405180910390a25b600073ffffffffffffffffffffffffffffffffffffffff168d60020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515613783578c60020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646007606460018f0281151561374a57fe5b040281151561375557fe5b049081150290604051600060405180830381858888f19350505050158015613781573d6000803e3d6000fd5b505b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646007606460018f028115156137d257fe5b04028115156137dd57fe5b046fffffffffffffffffffffffffffffffff169081150290604051600060405180830381858888f1935050505015801561381b573d6000803e3d6000fd5b508073ffffffffffffffffffffffffffffffffffffffff1663040448c660646007606460018f0281151561384b57fe5b040281151561385657fe5b046040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826fffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156138bb57600080fd5b505af11580156138cf573d6000803e3d6000fd5b505050506138f188600085146138e557846138e8565b60015b85898d8f613109565b50505050505050505050505050565b60608282604051602001808364ffffffffff1664ffffffffff167b0100000000000000000000000000000000000000000000000000000002815260050182815260200192505050604051602081830303815290604052905092915050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663772c658b856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613a2057600080fd5b505afa158015613a34573d6000803e3d6000fd5b505050506040513d6020811015613a4a57600080fd5b81019080805190602001909291905050509050600081111515613a6e575050613b0f565b6000612710828502811515613a7f57fe5b0490508473ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015613b0b578473ffffffffffffffffffffffffffffffffffffffff167f63c4a815575db8089483aeea967a8e1205c076ec5ff1eefca70ddb8d93be7eff826040518082815260200191505060405180910390a25b5050505b505056fe43616e206f6e6c792061636365707420707265617070726f766564206e6577206f776e65722e6d617850726f6669742073686f756c6420626520612073616e65206e756d6265722e42657420646f65736e2774206576656e20636f76657220686f75736520656467652e4265742073686f756c6420626520696e20616e2027616374697665272073746174654265742073686f756c6420626520696e20612027636c65616e272073746174652e736574746c6542657420696e207468652073616d6520626c6f636b20617320706c6163654265742c206f72206265666f72652e4f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e6f6e2d63726f75706965722e496e63726561736520616d6f756e74206c6172676572207468616e2062616c616e63652e416c6c20626574732073686f756c642062652070726f6365737365642028736574746c6564206f7220726566756e64656429206265666f72652073656c662d64657374727563742e4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d6f776e65722e48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676572207468616e206d6f64756c6f2e426c6f636b686173682063616e277420626520717565726965642062792045564d2ea165627a7a72305820349f6f99a34e35f887108d5741d2d053c045d032409d99be3be14a5ef02c00ef0029
Swarm Source
bzzr://349f6f99a34e35f887108d5741d2d053c045d032409d99be3be14a5ef02c00ef
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.