Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 16,945 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| End Game | 18031313 | 906 days ago | IN | 0 ETH | 0.00135017 | ||||
| New Game | 18031312 | 906 days ago | IN | 0 ETH | 0.00286441 | ||||
| End Game | 18031150 | 906 days ago | IN | 0 ETH | 0.00167707 | ||||
| New Game | 18031147 | 906 days ago | IN | 0 ETH | 0.00355314 | ||||
| End Game | 18031133 | 906 days ago | IN | 0 ETH | 0.0013903 | ||||
| New Game | 18031132 | 906 days ago | IN | 0 ETH | 0.00265789 | ||||
| End Game | 18031122 | 906 days ago | IN | 0 ETH | 0.00138833 | ||||
| New Game | 18031119 | 906 days ago | IN | 0 ETH | 0.00260963 | ||||
| End Game | 18031109 | 906 days ago | IN | 0 ETH | 0.00147177 | ||||
| New Game | 18031107 | 906 days ago | IN | 0 ETH | 0.00272641 | ||||
| End Game | 18030089 | 906 days ago | IN | 0 ETH | 0.0023637 | ||||
| New Game | 18030087 | 906 days ago | IN | 0 ETH | 0.00406141 | ||||
| End Game | 18030081 | 906 days ago | IN | 0 ETH | 0.00250555 | ||||
| New Game | 18030078 | 906 days ago | IN | 0 ETH | 0.00474996 | ||||
| End Game | 18030069 | 906 days ago | IN | 0 ETH | 0.00262431 | ||||
| New Game | 18030067 | 906 days ago | IN | 0 ETH | 0.00449093 | ||||
| End Game | 18030061 | 906 days ago | IN | 0 ETH | 0.00268424 | ||||
| New Game | 18030059 | 906 days ago | IN | 0 ETH | 0.00483813 | ||||
| End Game | 18030055 | 906 days ago | IN | 0 ETH | 0.00244721 | ||||
| New Game | 18030053 | 906 days ago | IN | 0 ETH | 0.00438602 | ||||
| End Game | 18030034 | 906 days ago | IN | 0 ETH | 0.00329111 | ||||
| New Game | 18030031 | 906 days ago | IN | 0 ETH | 0.00526275 | ||||
| End Game | 18030015 | 906 days ago | IN | 0 ETH | 0.00324849 | ||||
| New Game | 18030013 | 906 days ago | IN | 0 ETH | 0.01227864 | ||||
| End Game | 18029997 | 906 days ago | IN | 0 ETH | 0.00325204 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
|||
|---|---|---|---|---|---|---|---|---|
| Transfer | 18031313 | 906 days ago | 0 ETH | |||||
| Burn | 18031313 | 906 days ago | 0 ETH | |||||
| Transfer | 18031313 | 906 days ago | 0 ETH | |||||
| Transfer From | 18031312 | 906 days ago | 0 ETH | |||||
| Allowance | 18031312 | 906 days ago | 0 ETH | |||||
| Transfer From | 18031312 | 906 days ago | 0 ETH | |||||
| Allowance | 18031312 | 906 days ago | 0 ETH | |||||
| Transfer | 18031150 | 906 days ago | 0 ETH | |||||
| Burn | 18031150 | 906 days ago | 0 ETH | |||||
| Transfer | 18031150 | 906 days ago | 0 ETH | |||||
| Transfer From | 18031147 | 906 days ago | 0 ETH | |||||
| Allowance | 18031147 | 906 days ago | 0 ETH | |||||
| Transfer From | 18031147 | 906 days ago | 0 ETH | |||||
| Allowance | 18031147 | 906 days ago | 0 ETH | |||||
| Transfer | 18031133 | 906 days ago | 0 ETH | |||||
| Burn | 18031133 | 906 days ago | 0 ETH | |||||
| Transfer | 18031133 | 906 days ago | 0 ETH | |||||
| Transfer From | 18031132 | 906 days ago | 0 ETH | |||||
| Allowance | 18031132 | 906 days ago | 0 ETH | |||||
| Transfer From | 18031132 | 906 days ago | 0 ETH | |||||
| Allowance | 18031132 | 906 days ago | 0 ETH | |||||
| Transfer | 18031122 | 906 days ago | 0 ETH | |||||
| Burn | 18031122 | 906 days ago | 0 ETH | |||||
| Transfer | 18031122 | 906 days ago | 0 ETH | |||||
| Transfer From | 18031119 | 906 days ago | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TelegramRussianRoulette
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-08-02
*/
/*
Bullet Game - Play Russian Roulette directly in Telegram
,___________________________________________/7_
|-_______------. `\ |
_,/ | _______) |___\____________________________|
.__/`(( | _______ | (/))_______________=.
`~) \ | _______) | /----------------_/
`__y|______________| /
/ ________ __________/
/ /#####\( \ / ))
/ /#######|\ \( //
/ /########|.\______ad/`
/ /###(\)###||`------``
/ /##########||
/ /###########||
( (############||
\ \####(/)####))
\ \#########//
\ \#######//
`---|_|--`
((_))
`-`
Telegram: https://t.me/BulletGameDarkPortal
Twitter/X: https://twitter.com/BulletGameERC
Docs: https://bullet-game.gitbook.io/bullet-game
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
/*//////////////////////////////////////////////////////////////
EVENTS
//////////////////////////////////////////////////////////////*/
event Transfer(address indexed from, address indexed to, uint256 amount);
event Approval(address indexed owner, address indexed spender, uint256 amount);
/*//////////////////////////////////////////////////////////////
METADATA STORAGE
//////////////////////////////////////////////////////////////*/
string public name;
string public symbol;
uint8 public immutable decimals;
/*//////////////////////////////////////////////////////////////
ERC20 STORAGE
//////////////////////////////////////////////////////////////*/
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
/*//////////////////////////////////////////////////////////////
EIP-2612 STORAGE
//////////////////////////////////////////////////////////////*/
uint256 internal immutable INITIAL_CHAIN_ID;
bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;
mapping(address => uint256) public nonces;
/*//////////////////////////////////////////////////////////////
CONSTRUCTOR
//////////////////////////////////////////////////////////////*/
constructor(
string memory _name,
string memory _symbol,
uint8 _decimals
) {
name = _name;
symbol = _symbol;
decimals = _decimals;
INITIAL_CHAIN_ID = block.chainid;
INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
}
/*//////////////////////////////////////////////////////////////
ERC20 LOGIC
//////////////////////////////////////////////////////////////*/
function approve(address spender, uint256 amount) public virtual returns (bool) {
allowance[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transfer(address to, uint256 amount) public virtual returns (bool) {
balanceOf[msg.sender] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(msg.sender, to, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 amount
) public virtual returns (bool) {
uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.
if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;
balanceOf[from] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(from, to, amount);
return true;
}
/*//////////////////////////////////////////////////////////////
EIP-2612 LOGIC
//////////////////////////////////////////////////////////////*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) public virtual {
require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");
// Unchecked because the only math done is incrementing
// the owner's nonce which cannot realistically overflow.
unchecked {
address recoveredAddress = ecrecover(
keccak256(
abi.encodePacked(
"\x19\x01",
DOMAIN_SEPARATOR(),
keccak256(
abi.encode(
keccak256(
"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
),
owner,
spender,
value,
nonces[owner]++,
deadline
)
)
)
),
v,
r,
s
);
require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");
allowance[recoveredAddress][spender] = value;
}
emit Approval(owner, spender, value);
}
function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
}
function computeDomainSeparator() internal view virtual returns (bytes32) {
return
keccak256(
abi.encode(
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
keccak256(bytes(name)),
keccak256("1"),
block.chainid,
address(this)
)
);
}
/*//////////////////////////////////////////////////////////////
INTERNAL MINT/BURN LOGIC
//////////////////////////////////////////////////////////////*/
function _mint(address to, uint256 amount) internal virtual {
totalSupply += amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
balanceOf[to] += amount;
}
emit Transfer(address(0), to, amount);
}
function _burn(address from, uint256 amount) internal virtual {
balanceOf[from] -= amount;
// Cannot underflow because a user's balance
// will never be larger than the total supply.
unchecked {
totalSupply -= amount;
}
emit Transfer(from, address(0), amount);
}
}
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
/**
* @title BulletGame
* @dev Betting token for Bullet Game
*/
contract BulletGame is Ownable, ERC20 {
IUniswapV2Router02 public router;
IUniswapV2Factory public factory;
IUniswapV2Pair public pair;
uint private constant INITIAL_SUPPLY = 10_000_000 * 10**8;
// Percent of the initial supply that will go to the LP
uint constant LP_BPS = 9000;
// Percent of the initial supply that will go to marketing
uint constant MARKETING_BPS = 10_000 - LP_BPS;
//
// The tax to deduct, in basis points
//
uint public buyTaxBps = 500;
uint public sellTaxBps = 500;
//
bool isSellingCollectedTaxes;
event AntiBotEngaged();
event AntiBotDisengaged();
event StealthLaunchEngaged();
address public rouletteContract;
bool public isLaunched;
address public myWallet;
address public marketingWallet;
address public revenueWallet;
bool public engagedOnce;
bool public disengagedOnce;
constructor() ERC20("Bullet Game Betting Token", "BULLET", 8) {
if (isGoerli()) {
router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
} else if (isSepolia()) {
router = IUniswapV2Router02(0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008);
} else {
require(block.chainid == 1, "expected mainnet");
router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
}
factory = IUniswapV2Factory(router.factory());
// Approve infinite spending by DEX, to sell tokens collected via tax.
allowance[address(this)][address(router)] = type(uint).max;
emit Approval(address(this), address(router), type(uint).max);
isLaunched = false;
}
modifier lockTheSwap() {
isSellingCollectedTaxes = true;
_;
isSellingCollectedTaxes = false;
}
modifier onlyTestnet() {
require(isTestnet(), "not testnet");
_;
}
receive() external payable {}
fallback() external payable {}
function burn(uint amount) external {
_burn(msg.sender, amount);
}
/**
* @dev Allow minting on testnet so I don't have to deal with
* buying from Uniswap.
* @param amount the number of tokens to mint
*/
function mint(uint amount) external onlyTestnet {
_mint(address(msg.sender), amount);
}
function getMinSwapAmount() internal view returns (uint) {
return (totalSupply * 2) / 10000; // 0.02%
}
function isGoerli() public view returns (bool) {
return block.chainid == 5;
}
function isSepolia() public view returns (bool) {
return block.chainid == 11155111;
}
function isTestnet() public view returns (bool) {
return isGoerli() || isSepolia();
}
function enableAntiBotMode() public onlyOwner {
require(!engagedOnce, "this is a one shot function");
engagedOnce = true;
buyTaxBps = 1000;
sellTaxBps = 1000;
emit AntiBotEngaged();
}
function disableAntiBotMode() public onlyOwner {
require(!disengagedOnce, "this is a one shot function");
disengagedOnce = true;
buyTaxBps = 500;
sellTaxBps = 500;
emit AntiBotDisengaged();
}
/**
* @dev Does the same thing as a max approve for the roulette
* contract, but takes as input a secret that the bot uses to
* verify ownership by a Telegram user.
* @param secret The secret that the bot is expecting.
* @return true
*/
function connectAndApprove(uint32 secret) external returns (bool) {
address pwner = _msgSender();
allowance[pwner][rouletteContract] = type(uint).max;
emit Approval(pwner, rouletteContract, type(uint).max);
return true;
}
function setRouletteContract(address a) public onlyOwner {
require(a != address(0), "null address");
rouletteContract = a;
}
function setMyWallet(address wallet) public onlyOwner {
require(wallet != address(0), "null address");
myWallet = wallet;
}
function setMarketingWallet(address wallet) public onlyOwner {
require(wallet != address(0), "null address");
marketingWallet = wallet;
}
function setRevenueWallet(address wallet) public onlyOwner {
require(wallet != address(0), "null address");
revenueWallet = wallet;
}
function stealthLaunch() external payable onlyOwner {
require(!isLaunched, "already launched");
require(myWallet != address(0), "null address");
require(marketingWallet != address(0), "null address");
require(revenueWallet != address(0), "null address");
require(rouletteContract != address(0), "null address");
isLaunched = true;
_mint(address(this), INITIAL_SUPPLY * LP_BPS / 10_000);
router.addLiquidityETH{ value: msg.value }(
address(this),
balanceOf[address(this)],
0,
0,
owner(),
block.timestamp);
pair = IUniswapV2Pair(factory.getPair(address(this), router.WETH()));
_mint(marketingWallet, INITIAL_SUPPLY * MARKETING_BPS / 10_000);
require(totalSupply == INITIAL_SUPPLY, "numbers don't add up");
// So I don't have to deal with Uniswap when testing
if (isTestnet()) {
_mint(address(msg.sender), 10_000 * 10**decimals);
}
emit StealthLaunchEngaged();
}
/**
* @dev Calculate the amount of tax to apply to a transaction.
* @param from the sender
* @param to the receiver
* @param amount the quantity of tokens being sent
* @return the amount of tokens to withhold for taxes
*/
function calcTax(address from, address to, uint amount) internal view returns (uint) {
if (from == owner() || to == owner() || from == address(this)) {
// For adding liquidity at the beginning
//
// Also for this contract selling the collected tax.
return 0;
} else if (from == address(pair)) {
// Buy from DEX, or adding liquidity.
return amount * buyTaxBps / 10_000;
} else if (to == address(pair)) {
// Sell from DEX, or removing liquidity.
return amount * sellTaxBps / 10_000;
} else {
// Sending to other wallets (e.g. OTC) is tax-free.
return 0;
}
}
/**
* @dev Sell the balance accumulated from taxes.
*/
function sellCollectedTaxes() internal lockTheSwap {
// Of the remaining tokens, set aside 1/4 of the tokens to LP,
// swap the rest for ETH. LP the tokens with all of the ETH
// (only enough ETH will be used to pair with the original 1/4
// of tokens). Send the remaining ETH (about half the original
// balance) to my wallet.
uint tokensForLiq = balanceOf[address(this)] / 4;
uint tokensToSwap = balanceOf[address(this)] - tokensForLiq;
// Sell
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = router.WETH();
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokensToSwap,
0,
path,
address(this),
block.timestamp
);
router.addLiquidityETH{ value: address(this).balance }(
address(this),
tokensForLiq,
0,
0,
owner(),
block.timestamp);
myWallet.call{value: address(this).balance}("");
}
/**
* @dev Transfer tokens from the caller to another address.
* @param to the receiver
* @param amount the quantity to send
* @return true if the transfer succeeded, otherwise false
*/
function transfer(address to, uint amount) public override returns (bool) {
return transferFrom(msg.sender, to, amount);
}
/**
* @dev Transfer tokens from one address to another. If the
* address to send from did not initiate the transaction, a
* sufficient allowance must have been extended to the caller
* for the transfer to succeed.
* @param from the sender
* @param to the receiver
* @param amount the quantity to send
* @return true if the transfer succeeded, otherwise false
*/
function transferFrom(
address from,
address to,
uint amount
) public override returns (bool) {
if (from != msg.sender) {
// This is a typical transferFrom
uint allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.
if (allowed != type(uint).max) allowance[from][msg.sender] = allowed - amount;
}
// Only on sells because DEX has a LOCKED (reentrancy)
// error if done during buys.
//
// isSellingCollectedTaxes prevents an infinite loop.
if (balanceOf[address(this)] > getMinSwapAmount() && !isSellingCollectedTaxes && from != address(pair) && from != address(this)) {
sellCollectedTaxes();
}
uint tax = calcTax(from, to, amount);
uint afterTaxAmount = amount - tax;
balanceOf[from] -= amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint value.
unchecked {
balanceOf[to] += afterTaxAmount;
}
emit Transfer(from, to, afterTaxAmount);
if (tax > 0) {
// Use 1/5 of tax for revenue
uint revenue = tax / 5;
tax -= revenue;
unchecked {
balanceOf[address(this)] += tax;
balanceOf[revenueWallet] += revenue;
}
// Any transfer to the contract can be viewed as tax
emit Transfer(from, address(this), tax);
emit Transfer(from, revenueWallet, revenue);
}
return true;
}
}
/**
* @title TelegramRussianRoulette
* @dev Store funds for Russian Roulette and distribute the winnings as games finish.
*/
contract TelegramRussianRoulette is Ownable {
address public revenueWallet;
BulletGame public immutable bettingToken;
uint256 public immutable minimumBet;
// The amount to take as revenue, in basis points.
uint256 public immutable revenueBps;
// The amount to burn forever, in basis points.
uint256 public immutable burnBps;
// Map Telegram chat IDs to their games.
mapping(int64 => Game) public games;
// The Telegram chat IDs for each active game. Mainly used to
// abort all active games in the event of a catastrophe.
int64[] public activeTgGroups;
// Stores the amount each player has bet for a game.
event Bet(int64 tgChatId, address player, uint16 playerIndex, uint256 amount);
// Stores the amount each player wins for a game.
event Win(int64 tgChatId, address player, uint16 playerIndex, uint256 amount);
// Stores the amount the loser lost.
event Loss(int64 tgChatId, address player, uint16 playerIndex, uint256 amount);
// Stores the amount collected by the protocol.
event Revenue(int64 tgChatId, uint256 amount);
// Stores the amount burned by the protocol.
event Burn(int64 tgChatId, uint256 amount);
constructor(address payable _bettingToken, uint256 _minimumBet, uint256 _revenueBps, uint256 _burnBps, address _revenueWallet) {
revenueWallet = _revenueWallet;
revenueBps = _revenueBps;
burnBps = _burnBps;
bettingToken = BulletGame(_bettingToken);
minimumBet = _minimumBet;
}
struct Game {
uint256 revolverSize;
uint256 minBet;
// This is a SHA-256 hash of the random number generated by the bot.
bytes32 hashedBulletChamberIndex;
address[] players;
uint256[] bets;
bool inProgress;
uint16 loser;
}
/**
* @dev Check if there is a game in progress for a Telegram group.
* @param _tgChatId Telegram group to check
* @return true if there is a game in progress, otherwise false
*/
function isGameInProgress(int64 _tgChatId) public view returns (bool) {
return games[_tgChatId].inProgress;
}
/**
* @dev Remove a Telegram chat ID from the array.
* @param _tgChatId Telegram chat ID to remove
*/
function removeTgId(int64 _tgChatId) internal {
for (uint256 i = 0; i < activeTgGroups.length; i++) {
if (activeTgGroups[i] == _tgChatId) {
activeTgGroups[i] = activeTgGroups[activeTgGroups.length - 1];
activeTgGroups.pop();
}
}
}
/**
* @dev Create a new game. Transfer funds into escrow.
* @param _tgChatId Telegram group of this game
* @param _revolverSize number of chambers in the revolver
* @param _minBet minimum bet to play
* @param _hashedBulletChamberIndex which chamber the bullet is in
* @param _players participating players
* @param _bets each player's bet
* @return The updated list of bets.
*/
function newGame(
int64 _tgChatId,
uint256 _revolverSize,
uint256 _minBet,
bytes32 _hashedBulletChamberIndex,
address[] memory _players,
uint256[] memory _bets) public onlyOwner returns (uint256[] memory) {
require(_revolverSize >= 2, "Revolver size too small");
require(_players.length <= _revolverSize, "Too many players for this size revolver");
require(_minBet >= minimumBet, "Minimum bet too small");
require(_players.length == _bets.length, "Players/bets length mismatch");
require(_players.length > 1, "Not enough players");
require(!isGameInProgress(_tgChatId), "There is already a game in progress");
// The bets will be capped so you can only lose what other
// players bet. The updated bets will be returned to the
// caller.
//
// O(N) by doing a prepass to sum all the bets in the
// array. Use the sum to modify one bet at a time. Replace
// each bet with its updated value.
uint256 betTotal = 0;
for (uint16 i = 0; i < _bets.length; i++) {
require(_bets[i] >= _minBet, "Bet is smaller than the minimum");
betTotal += _bets[i];
}
for (uint16 i = 0; i < _bets.length; i++) {
betTotal -= _bets[i];
if (_bets[i] > betTotal) {
_bets[i] = betTotal;
}
betTotal += _bets[i];
require(bettingToken.allowance(_players[i], address(this)) >= _bets[i], "Not enough allowance");
bool isSent = bettingToken.transferFrom(_players[i], address(this), _bets[i]);
require(isSent, "Funds transfer failed");
emit Bet(_tgChatId, _players[i], i, _bets[i]);
}
Game memory g;
g.revolverSize = _revolverSize;
g.minBet = _minBet;
g.hashedBulletChamberIndex = _hashedBulletChamberIndex;
g.players = _players;
g.bets = _bets;
g.inProgress = true;
games[_tgChatId] = g;
activeTgGroups.push(_tgChatId);
return _bets;
}
/**
* @dev Declare a loser of the game and pay out the winnings.
* @param _tgChatId Telegram group of this game
* @param _loser index of the loser
*
* There is also a string array that will be passed in by the bot
* containing labeled strings, for historical/auditing purposes:
*
* beta: The randomly generated number in hex.
*
* salt: The salt to append to beta for hashing, in hex.
*
* publickey: The VRF public key in hex.
*
* proof: The generated proof in hex.
*
* alpha: The input message to the VRF.
*/
function endGame(
int64 _tgChatId,
uint16 _loser,
string[] calldata) public onlyOwner {
require(_loser != type(uint16).max, "Loser index shouldn't be the sentinel value");
require(isGameInProgress(_tgChatId), "No game in progress for this Telegram chat ID");
Game storage g = games[_tgChatId];
require(_loser < g.players.length, "Loser index out of range");
require(g.players.length > 1, "Not enough players");
g.loser = _loser;
g.inProgress = false;
removeTgId(_tgChatId);
// Parallel arrays
address[] memory winners = new address[](g.players.length - 1);
uint16[] memory winnersPlayerIndex = new uint16[](g.players.length - 1);
// The total bets of the winners.
uint256 winningBetTotal = 0;
// Filter out the loser and calc the total winning bets.
{
uint16 numWinners = 0;
for (uint16 i = 0; i < g.players.length; i++) {
if (i != _loser) {
winners[numWinners] = g.players[i];
winnersPlayerIndex[numWinners] = i;
winningBetTotal += g.bets[i];
numWinners++;
}
}
}
uint256 totalPaidWinnings = 0;
require(burnBps + revenueBps < 10_1000, "Total fees must be < 100%");
// The share of tokens to burn.
uint256 burnShare = g.bets[_loser] * burnBps / 10_000;
// The share left for the contract. This is an approximate
// value. The real value will be whatever is leftover after
// each winner is paid their share.
uint256 approxRevenueShare = g.bets[_loser] * revenueBps / 10_000;
bool isSent;
{
uint256 totalWinnings = g.bets[_loser] - burnShare - approxRevenueShare;
for (uint16 i = 0; i < winners.length; i++) {
uint256 winnings = totalWinnings * g.bets[winnersPlayerIndex[i]] / winningBetTotal;
isSent = bettingToken.transfer(winners[i], g.bets[winnersPlayerIndex[i]] + winnings);
require(isSent, "Funds transfer failed");
emit Win(_tgChatId, winners[i], winnersPlayerIndex[i], winnings);
totalPaidWinnings += winnings;
}
}
bettingToken.burn(burnShare);
emit Burn(_tgChatId, burnShare);
uint256 realRevenueShare = g.bets[_loser] - totalPaidWinnings - burnShare;
isSent = bettingToken.transfer(revenueWallet, realRevenueShare);
require(isSent, "Revenue transfer failed");
emit Revenue(_tgChatId, realRevenueShare);
require((totalPaidWinnings + burnShare + realRevenueShare) == g.bets[_loser], "Calculated winnings do not add up");
}
/**
* @dev Abort a game and refund the bets. Use in emergencies
* e.g. bot crash.
* @param _tgChatId Telegram group of this game
*/
function abortGame(int64 _tgChatId) public onlyOwner {
require(isGameInProgress(_tgChatId), "No game in progress for this Telegram chat ID");
Game storage g = games[_tgChatId];
for (uint16 i = 0; i < g.players.length; i++) {
bool isSent = bettingToken.transfer(g.players[i], g.bets[i]);
require(isSent, "Funds transfer failed");
}
g.inProgress = false;
removeTgId(_tgChatId);
}
/**
* @dev Abort all in progress games.
*/
function abortAllGames() public onlyOwner {
// abortGame modifies activeTgGroups with each call, so
// iterate over a copy
int64[] memory _activeTgGroups = activeTgGroups;
for (uint256 i = 0; i < _activeTgGroups.length; i++) {
abortGame(_activeTgGroups[i]);
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address payable","name":"_bettingToken","type":"address"},{"internalType":"uint256","name":"_minimumBet","type":"uint256"},{"internalType":"uint256","name":"_revenueBps","type":"uint256"},{"internalType":"uint256","name":"_burnBps","type":"uint256"},{"internalType":"address","name":"_revenueWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"int64","name":"tgChatId","type":"int64"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint16","name":"playerIndex","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Bet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"int64","name":"tgChatId","type":"int64"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"int64","name":"tgChatId","type":"int64"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint16","name":"playerIndex","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Loss","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"int64","name":"tgChatId","type":"int64"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Revenue","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"int64","name":"tgChatId","type":"int64"},{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint16","name":"playerIndex","type":"uint16"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Win","type":"event"},{"inputs":[],"name":"abortAllGames","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int64","name":"_tgChatId","type":"int64"}],"name":"abortGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"activeTgGroups","outputs":[{"internalType":"int64","name":"","type":"int64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bettingToken","outputs":[{"internalType":"contract BulletGame","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int64","name":"_tgChatId","type":"int64"},{"internalType":"uint16","name":"_loser","type":"uint16"},{"internalType":"string[]","name":"","type":"string[]"}],"name":"endGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int64","name":"","type":"int64"}],"name":"games","outputs":[{"internalType":"uint256","name":"revolverSize","type":"uint256"},{"internalType":"uint256","name":"minBet","type":"uint256"},{"internalType":"bytes32","name":"hashedBulletChamberIndex","type":"bytes32"},{"internalType":"bool","name":"inProgress","type":"bool"},{"internalType":"uint16","name":"loser","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int64","name":"_tgChatId","type":"int64"}],"name":"isGameInProgress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumBet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int64","name":"_tgChatId","type":"int64"},{"internalType":"uint256","name":"_revolverSize","type":"uint256"},{"internalType":"uint256","name":"_minBet","type":"uint256"},{"internalType":"bytes32","name":"_hashedBulletChamberIndex","type":"bytes32"},{"internalType":"address[]","name":"_players","type":"address[]"},{"internalType":"uint256[]","name":"_bets","type":"uint256[]"}],"name":"newGame","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revenueBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revenueWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6101006040523480156200001257600080fd5b506040516200286c3803806200286c8339810160408190526200003591620000de565b620000403362000075565b600180546001600160a01b0319166001600160a01b0392831617905560c09290925260e0529190911660805260a0526200013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000db57600080fd5b50565b600080600080600060a08688031215620000f757600080fd5b85516200010481620000c5565b8095505060208601519350604086015192506060860151915060808601516200012d81620000c5565b809150509295509295909350565b60805160a05160c05160e0516126ab620001c160003960008181610170015281816108f40152610986015260008181610327015281816108d301526109e6015260008181610221015261147f01526000818160ff01528181610aeb01528181610d8901528181610ecf015281816111950152818161182e015261198801526126ab6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063d057fc1f11610066578063d057fc1f14610276578063f2fde38b1461029c578063f3619716146102af578063ff08aa491461032257600080fd5b80638da5cb5b146101fe578063c38a8afd1461021c578063cb99e91f14610243578063ceb7ec041461025657600080fd5b806363c42460116100d357806363c42460146101a057806365816731146101d9578063715018a6146101e357806388b7904d146101eb57600080fd5b806343425e88146100fa578063444784251461014b57806353deb3d61461016b575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6001546101219073ffffffffffffffffffffffffffffffffffffffff1681565b6101927f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610142565b6101c96101ae366004612183565b60070b60009081526002602052604090206005015460ff1690565b6040519015158152602001610142565b6101e1610349565b005b6101e161040d565b6101e16101f93660046121a5565b610421565b60005473ffffffffffffffffffffffffffffffffffffffff16610121565b6101927f000000000000000000000000000000000000000000000000000000000000000081565b6101e1610251366004612183565b6110b9565b610269610264366004612370565b611377565b604051610142919061245e565b6102896102843660046124a2565b611d5c565b60405160079190910b8152602001610142565b6101e16102aa3660046124bb565b611d93565b6102f46102bd366004612183565b600260208190526000918252604090912080546001820154928201546005909201549092919060ff811690610100900461ffff1685565b604080519586526020860194909452928401919091521515606083015261ffff16608082015260a001610142565b6101927f000000000000000000000000000000000000000000000000000000000000000081565b610351611e4a565b600060038054806020026020016040519081016040528092919081815260200182805480156103c257602002820191906000526020600020906000905b825461010083900a900460070b81526020600f830181900493840193600103600890930192909202910180841161038e5790505b5050505050905060005b8151811015610409576103f78282815181106103ea576103ea6124d6565b60200260200101516110b9565b8061040181612534565b9150506103cc565b5050565b610415611e4a565b61041f6000611ecb565b565b610429611e4a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000161ffff8416016104e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c6f73657220696e6465782073686f756c646e2774206265207468652073656e60448201527f74696e656c2076616c756500000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105008460070b60009081526002602052604090206005015460ff1690565b61058c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e6f2067616d6520696e2070726f677265737320666f7220746869732054656c60448201527f656772616d20636861742049440000000000000000000000000000000000000060648201526084016104d8565b600784900b6000908152600260205260409020600381015461ffff851610610610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4c6f73657220696e646578206f7574206f662072616e6765000000000000000060448201526064016104d8565b600381015460011061067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f7420656e6f75676820706c6179657273000000000000000000000000000060448201526064016104d8565b6005810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000001661010061ffff8716027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00161790556106dd85611f40565b60038101546000906106f19060019061256c565b67ffffffffffffffff8111156107095761070961223f565b604051908082528060200260200182016040528015610732578160200160208202803683370190505b50600383015490915060009061074a9060019061256c565b67ffffffffffffffff8111156107625761076261223f565b60405190808252806020026020018201604052801561078b578160200160208202803683370190505b50905060008060005b600386015461ffff821610156108c5578861ffff168161ffff16146108b357856003018161ffff16815481106107cc576107cc6124d6565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858361ffff168151811061080d5761080d6124d6565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080848361ffff168151811061085e5761085e6124d6565b602002602001019061ffff16908161ffff1681525050856004018161ffff168154811061088d5761088d6124d6565b9060005260206000200154836108a39190612585565b9250816108af81612598565b9250505b806108bd81612598565b915050610794565b506000905062018a886109187f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612585565b1061097f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f546f74616c2066656573206d757374206265203c20313030250000000000000060448201526064016104d8565b60006127107f0000000000000000000000000000000000000000000000000000000000000000876004018b61ffff16815481106109be576109be6124d6565b90600052602060002001546109d391906125b9565b6109dd91906125d0565b905060006127107f0000000000000000000000000000000000000000000000000000000000000000886004018c61ffff1681548110610a1e57610a1e6124d6565b9060005260206000200154610a3391906125b9565b610a3d91906125d0565b905060008082848a6004018e61ffff1681548110610a5d57610a5d6124d6565b9060005260206000200154610a72919061256c565b610a7c919061256c565b905060005b88518161ffff161015610d58576000878b6004018a8461ffff1681518110610aab57610aab6124d6565b602002602001015161ffff1681548110610ac757610ac76124d6565b906000526020600020015484610add91906125b9565b610ae791906125d0565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8b8461ffff1681518110610b3b57610b3b6124d6565b6020026020010151838e6004018d8761ffff1681518110610b5e57610b5e6124d6565b602002602001015161ffff1681548110610b7a57610b7a6124d6565b9060005260206000200154610b8f9190612585565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015610bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c23919061260b565b935083610c8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f46756e6473207472616e73666572206661696c6564000000000000000000000060448201526064016104d8565b7f6b5ed972057bb3f9c6b7b2ea6350bf7abde0e0c5f8a765c5dde8402bb2b6efd38f8b8461ffff1681518110610cc457610cc46124d6565b60200260200101518b8561ffff1681518110610ce257610ce26124d6565b602002602001015184604051610d30949392919060079490940b845273ffffffffffffffffffffffffffffffffffffffff92909216602084015261ffff166040830152606082015260800190565b60405180910390a1610d428188612585565b9650508080610d5090612598565b915050610a81565b50506040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342966c6890602401600060405180830381600087803b158015610de257600080fd5b505af1158015610df6573d6000803e3d6000fd5b505050507fbc03807cbae975b0551ce6caa7b86a1ff549b347e16440847a8c03140f59c27c8c84604051610e3992919060079290920b8252602082015260400190565b60405180910390a1600083858a6004018e61ffff1681548110610e5e57610e5e6124d6565b9060005260206000200154610e73919061256c565b610e7d919061256c565b6001546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3c919061260b565b915081610fa5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f526576656e7565207472616e73666572206661696c656400000000000000000060448201526064016104d8565b6040805160078f900b8152602081018390527f0f771b5d5a6b02378d0d1a6b6b371ac1e69759fb677e46109ae1bb55167ea7ad910160405180910390a1886004018c61ffff1681548110610ffb57610ffb6124d6565b90600052602060002001548185876110139190612585565b61101d9190612585565b146110aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f43616c63756c617465642077696e6e696e677320646f206e6f7420616464207560448201527f700000000000000000000000000000000000000000000000000000000000000060648201526084016104d8565b50505050505050505050505050565b6110c1611e4a565b6110e08160070b60009081526002602052604090206005015460ff1690565b61116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e6f2067616d6520696e2070726f677265737320666f7220746869732054656c60448201527f656772616d20636861742049440000000000000000000000000000000000000060648201526084016104d8565b600781900b6000908152600260205260408120905b600382015461ffff821610156113435760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb846003018461ffff16815481106111e8576111e86124d6565b60009182526020909120015460048601805473ffffffffffffffffffffffffffffffffffffffff9092169161ffff8716908110611227576112276124d6565b6000918252602090912001546040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156112a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c7919061260b565b905080611330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f46756e6473207472616e73666572206661696c6564000000000000000000000060448201526064016104d8565b508061133b81612598565b915050611181565b506005810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905561040982611f40565b6060611381611e4a565b60028610156113ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5265766f6c7665722073697a6520746f6f20736d616c6c00000000000000000060448201526064016104d8565b858351111561147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6f206d616e7920706c617965727320666f7220746869732073697a65207260448201527f65766f6c7665720000000000000000000000000000000000000000000000000060648201526084016104d8565b7f0000000000000000000000000000000000000000000000000000000000000000851015611507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d696e696d756d2062657420746f6f20736d616c6c000000000000000000000060448201526064016104d8565b8151835114611572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f506c61796572732f62657473206c656e677468206d69736d617463680000000060448201526064016104d8565b60018351116115dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f7420656e6f75676820706c6179657273000000000000000000000000000060448201526064016104d8565b6115fc8760070b60009081526002602052604090206005015460ff1690565b15611689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f546865726520697320616c726561647920612067616d6520696e2070726f677260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016104d8565b6000805b83518161ffff16101561175e5786848261ffff16815181106116b1576116b16124d6565b60200260200101511015611721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f42657420697320736d616c6c6572207468616e20746865206d696e696d756d0060448201526064016104d8565b838161ffff1681518110611737576117376124d6565b60200260200101518261174a9190612585565b91508061175681612598565b91505061168d565b5060005b83518161ffff161015611bc757838161ffff1681518110611785576117856124d6565b602002602001015182611798919061256c565b915081848261ffff16815181106117b1576117b16124d6565b602002602001015111156117e35781848261ffff16815181106117d6576117d66124d6565b6020026020010181815250505b838161ffff16815181106117f9576117f96124d6565b60200260200101518261180c9190612585565b9150838161ffff1681518110611824576118246124d6565b60200260200101517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e878461ffff168151811061187e5761187e6124d6565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152306024820152604401602060405180830381865afa1580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c919061262d565b1015611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f7420656e6f75676820616c6c6f77616e636500000000000000000000000060448201526064016104d8565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd878461ffff16815181106119d8576119d86124d6565b602002602001015130888661ffff16815181106119f7576119f76124d6565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015611a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9f919061260b565b905080611b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f46756e6473207472616e73666572206661696c6564000000000000000000000060448201526064016104d8565b7f4ca2b6f8214bfec8b3a7c06707618645a8e77d171b22a4eba1d8811fdc30bfdb8a878461ffff1681518110611b4057611b406124d6565b602002602001015184888661ffff1681518110611b5f57611b5f6124d6565b6020026020010151604051611bac949392919060079490940b845273ffffffffffffffffffffffffffffffffffffffff92909216602084015261ffff166040830152606082015260800190565b60405180910390a15080611bbf81612598565b915050611762565b506040805160e0810182526000808252602082018190529181018290526060808201819052608082015260a0810182905260c0810191909152878152602080820188815260408084018981526060850189815260808601899052600160a0870181905260078f900b60009081526002808852949020875181559451908501559051918301919091555180518493611c65926003850192910190612092565b5060808201518051611c8191600484019160209091019061211c565b5060a0820151600591909101805460c0909301517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009093169115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff169190911761010061ffff90931683021790556003805460018101825560008290527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b600482040180549190921660080290920a67ffffffffffffffff818102199093169b909216919091029990991790985550909695505050505050565b60038181548110611d6c57600080fd5b9060005260206000209060049182820401919006600802915054906101000a900460070b81565b611d9b611e4a565b73ffffffffffffffffffffffffffffffffffffffff8116611e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104d8565b611e4781611ecb565b50565b60005473ffffffffffffffffffffffffffffffffffffffff16331461041f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d8565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b600354811015610409578160070b60038281548110611f6457611f646124d6565b6000918252602090912060048204015460039091166008026101000a900460070b036120805760038054611f9a9060019061256c565b81548110611faa57611faa6124d6565b90600052602060002090600491828204019190066008029054906101000a900460070b60038281548110611fe057611fe06124d6565b90600052602060002090600491828204019190066008026101000a81548167ffffffffffffffff021916908360070b67ffffffffffffffff160217905550600380548061202f5761202f612646565b60008281526020902060047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191820401805467ffffffffffffffff600860038516026101000a021916905590555b8061208a81612534565b915050611f43565b82805482825590600052602060002090810192821561210c579160200282015b8281111561210c57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906120b2565b50612118929150612157565b5090565b82805482825590600052602060002090810192821561210c579160200282015b8281111561210c57825182559160200191906001019061213c565b5b808211156121185760008155600101612158565b8035600781900b811461217e57600080fd5b919050565b60006020828403121561219557600080fd5b61219e8261216c565b9392505050565b600080600080606085870312156121bb57600080fd5b6121c48561216c565b9350602085013561ffff811681146121db57600080fd5b9250604085013567ffffffffffffffff808211156121f857600080fd5b818701915087601f83011261220c57600080fd5b81358181111561221b57600080fd5b8860208260051b850101111561223057600080fd5b95989497505060200194505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156122b5576122b561223f565b604052919050565b600067ffffffffffffffff8211156122d7576122d761223f565b5060051b60200190565b803573ffffffffffffffffffffffffffffffffffffffff8116811461217e57600080fd5b600082601f83011261231657600080fd5b8135602061232b612326836122bd565b61226e565b82815260059290921b8401810191818101908684111561234a57600080fd5b8286015b84811015612365578035835291830191830161234e565b509695505050505050565b60008060008060008060c0878903121561238957600080fd5b6123928761216c565b955060208088013595506040880135945060608801359350608088013567ffffffffffffffff808211156123c557600080fd5b818a0191508a601f8301126123d957600080fd5b81356123e7612326826122bd565b81815260059190911b8301840190848101908d83111561240657600080fd5b938501935b8285101561242b5761241c856122e1565b8252938501939085019061240b565b9650505060a08a013592508083111561244357600080fd5b505061245189828a01612305565b9150509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156124965783518352928401929184019160010161247a565b50909695505050505050565b6000602082840312156124b457600080fd5b5035919050565b6000602082840312156124cd57600080fd5b61219e826122e1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361256557612565612505565b5060010190565b8181038181111561257f5761257f612505565b92915050565b8082018082111561257f5761257f612505565b600061ffff8083168181036125af576125af612505565b6001019392505050565b808202811582820484141761257f5761257f612505565b600082612606577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561261d57600080fd5b8151801515811461219e57600080fd5b60006020828403121561263f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212205fe85b77960dbe97919455e79a7b56b1d2790fdd99d360327108a4ca22b9cdec64736f6c634300081300330000000000000000000000008ef32a03784c8fd63bbf027251b9620865bd54b600000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003840000000000000000000000000000000000000000000000000000000000000064000000000000000000000000171d311eacd2206d21cb462d661c33f0eddadc03
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063d057fc1f11610066578063d057fc1f14610276578063f2fde38b1461029c578063f3619716146102af578063ff08aa491461032257600080fd5b80638da5cb5b146101fe578063c38a8afd1461021c578063cb99e91f14610243578063ceb7ec041461025657600080fd5b806363c42460116100d357806363c42460146101a057806365816731146101d9578063715018a6146101e357806388b7904d146101eb57600080fd5b806343425e88146100fa578063444784251461014b57806353deb3d61461016b575b600080fd5b6101217f0000000000000000000000008ef32a03784c8fd63bbf027251b9620865bd54b681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6001546101219073ffffffffffffffffffffffffffffffffffffffff1681565b6101927f000000000000000000000000000000000000000000000000000000000000006481565b604051908152602001610142565b6101c96101ae366004612183565b60070b60009081526002602052604090206005015460ff1690565b6040519015158152602001610142565b6101e1610349565b005b6101e161040d565b6101e16101f93660046121a5565b610421565b60005473ffffffffffffffffffffffffffffffffffffffff16610121565b6101927f00000000000000000000000000000000000000000000000000000000000003e881565b6101e1610251366004612183565b6110b9565b610269610264366004612370565b611377565b604051610142919061245e565b6102896102843660046124a2565b611d5c565b60405160079190910b8152602001610142565b6101e16102aa3660046124bb565b611d93565b6102f46102bd366004612183565b600260208190526000918252604090912080546001820154928201546005909201549092919060ff811690610100900461ffff1685565b604080519586526020860194909452928401919091521515606083015261ffff16608082015260a001610142565b6101927f000000000000000000000000000000000000000000000000000000000000038481565b610351611e4a565b600060038054806020026020016040519081016040528092919081815260200182805480156103c257602002820191906000526020600020906000905b825461010083900a900460070b81526020600f830181900493840193600103600890930192909202910180841161038e5790505b5050505050905060005b8151811015610409576103f78282815181106103ea576103ea6124d6565b60200260200101516110b9565b8061040181612534565b9150506103cc565b5050565b610415611e4a565b61041f6000611ecb565b565b610429611e4a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000161ffff8416016104e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c6f73657220696e6465782073686f756c646e2774206265207468652073656e60448201527f74696e656c2076616c756500000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105008460070b60009081526002602052604090206005015460ff1690565b61058c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e6f2067616d6520696e2070726f677265737320666f7220746869732054656c60448201527f656772616d20636861742049440000000000000000000000000000000000000060648201526084016104d8565b600784900b6000908152600260205260409020600381015461ffff851610610610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4c6f73657220696e646578206f7574206f662072616e6765000000000000000060448201526064016104d8565b600381015460011061067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f7420656e6f75676820706c6179657273000000000000000000000000000060448201526064016104d8565b6005810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000001661010061ffff8716027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00161790556106dd85611f40565b60038101546000906106f19060019061256c565b67ffffffffffffffff8111156107095761070961223f565b604051908082528060200260200182016040528015610732578160200160208202803683370190505b50600383015490915060009061074a9060019061256c565b67ffffffffffffffff8111156107625761076261223f565b60405190808252806020026020018201604052801561078b578160200160208202803683370190505b50905060008060005b600386015461ffff821610156108c5578861ffff168161ffff16146108b357856003018161ffff16815481106107cc576107cc6124d6565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858361ffff168151811061080d5761080d6124d6565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080848361ffff168151811061085e5761085e6124d6565b602002602001019061ffff16908161ffff1681525050856004018161ffff168154811061088d5761088d6124d6565b9060005260206000200154836108a39190612585565b9250816108af81612598565b9250505b806108bd81612598565b915050610794565b506000905062018a886109187f00000000000000000000000000000000000000000000000000000000000003847f0000000000000000000000000000000000000000000000000000000000000064612585565b1061097f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f546f74616c2066656573206d757374206265203c20313030250000000000000060448201526064016104d8565b60006127107f0000000000000000000000000000000000000000000000000000000000000064876004018b61ffff16815481106109be576109be6124d6565b90600052602060002001546109d391906125b9565b6109dd91906125d0565b905060006127107f0000000000000000000000000000000000000000000000000000000000000384886004018c61ffff1681548110610a1e57610a1e6124d6565b9060005260206000200154610a3391906125b9565b610a3d91906125d0565b905060008082848a6004018e61ffff1681548110610a5d57610a5d6124d6565b9060005260206000200154610a72919061256c565b610a7c919061256c565b905060005b88518161ffff161015610d58576000878b6004018a8461ffff1681518110610aab57610aab6124d6565b602002602001015161ffff1681548110610ac757610ac76124d6565b906000526020600020015484610add91906125b9565b610ae791906125d0565b90507f0000000000000000000000008ef32a03784c8fd63bbf027251b9620865bd54b673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8b8461ffff1681518110610b3b57610b3b6124d6565b6020026020010151838e6004018d8761ffff1681518110610b5e57610b5e6124d6565b602002602001015161ffff1681548110610b7a57610b7a6124d6565b9060005260206000200154610b8f9190612585565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015610bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c23919061260b565b935083610c8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f46756e6473207472616e73666572206661696c6564000000000000000000000060448201526064016104d8565b7f6b5ed972057bb3f9c6b7b2ea6350bf7abde0e0c5f8a765c5dde8402bb2b6efd38f8b8461ffff1681518110610cc457610cc46124d6565b60200260200101518b8561ffff1681518110610ce257610ce26124d6565b602002602001015184604051610d30949392919060079490940b845273ffffffffffffffffffffffffffffffffffffffff92909216602084015261ffff166040830152606082015260800190565b60405180910390a1610d428188612585565b9650508080610d5090612598565b915050610a81565b50506040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018490527f0000000000000000000000008ef32a03784c8fd63bbf027251b9620865bd54b673ffffffffffffffffffffffffffffffffffffffff16906342966c6890602401600060405180830381600087803b158015610de257600080fd5b505af1158015610df6573d6000803e3d6000fd5b505050507fbc03807cbae975b0551ce6caa7b86a1ff549b347e16440847a8c03140f59c27c8c84604051610e3992919060079290920b8252602082015260400190565b60405180910390a1600083858a6004018e61ffff1681548110610e5e57610e5e6124d6565b9060005260206000200154610e73919061256c565b610e7d919061256c565b6001546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018390529192507f0000000000000000000000008ef32a03784c8fd63bbf027251b9620865bd54b6169063a9059cbb906044016020604051808303816000875af1158015610f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3c919061260b565b915081610fa5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f526576656e7565207472616e73666572206661696c656400000000000000000060448201526064016104d8565b6040805160078f900b8152602081018390527f0f771b5d5a6b02378d0d1a6b6b371ac1e69759fb677e46109ae1bb55167ea7ad910160405180910390a1886004018c61ffff1681548110610ffb57610ffb6124d6565b90600052602060002001548185876110139190612585565b61101d9190612585565b146110aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f43616c63756c617465642077696e6e696e677320646f206e6f7420616464207560448201527f700000000000000000000000000000000000000000000000000000000000000060648201526084016104d8565b50505050505050505050505050565b6110c1611e4a565b6110e08160070b60009081526002602052604090206005015460ff1690565b61116c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4e6f2067616d6520696e2070726f677265737320666f7220746869732054656c60448201527f656772616d20636861742049440000000000000000000000000000000000000060648201526084016104d8565b600781900b6000908152600260205260408120905b600382015461ffff821610156113435760007f0000000000000000000000008ef32a03784c8fd63bbf027251b9620865bd54b673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb846003018461ffff16815481106111e8576111e86124d6565b60009182526020909120015460048601805473ffffffffffffffffffffffffffffffffffffffff9092169161ffff8716908110611227576112276124d6565b6000918252602090912001546040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156112a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c7919061260b565b905080611330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f46756e6473207472616e73666572206661696c6564000000000000000000000060448201526064016104d8565b508061133b81612598565b915050611181565b506005810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905561040982611f40565b6060611381611e4a565b60028610156113ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5265766f6c7665722073697a6520746f6f20736d616c6c00000000000000000060448201526064016104d8565b858351111561147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f546f6f206d616e7920706c617965727320666f7220746869732073697a65207260448201527f65766f6c7665720000000000000000000000000000000000000000000000000060648201526084016104d8565b7f00000000000000000000000000000000000000000000000000000000000003e8851015611507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d696e696d756d2062657420746f6f20736d616c6c000000000000000000000060448201526064016104d8565b8151835114611572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f506c61796572732f62657473206c656e677468206d69736d617463680000000060448201526064016104d8565b60018351116115dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f7420656e6f75676820706c6179657273000000000000000000000000000060448201526064016104d8565b6115fc8760070b60009081526002602052604090206005015460ff1690565b15611689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f546865726520697320616c726561647920612067616d6520696e2070726f677260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016104d8565b6000805b83518161ffff16101561175e5786848261ffff16815181106116b1576116b16124d6565b60200260200101511015611721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f42657420697320736d616c6c6572207468616e20746865206d696e696d756d0060448201526064016104d8565b838161ffff1681518110611737576117376124d6565b60200260200101518261174a9190612585565b91508061175681612598565b91505061168d565b5060005b83518161ffff161015611bc757838161ffff1681518110611785576117856124d6565b602002602001015182611798919061256c565b915081848261ffff16815181106117b1576117b16124d6565b602002602001015111156117e35781848261ffff16815181106117d6576117d66124d6565b6020026020010181815250505b838161ffff16815181106117f9576117f96124d6565b60200260200101518261180c9190612585565b9150838161ffff1681518110611824576118246124d6565b60200260200101517f0000000000000000000000008ef32a03784c8fd63bbf027251b9620865bd54b673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e878461ffff168151811061187e5761187e6124d6565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152306024820152604401602060405180830381865afa1580156118f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191c919061262d565b1015611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f7420656e6f75676820616c6c6f77616e636500000000000000000000000060448201526064016104d8565b60007f0000000000000000000000008ef32a03784c8fd63bbf027251b9620865bd54b673ffffffffffffffffffffffffffffffffffffffff166323b872dd878461ffff16815181106119d8576119d86124d6565b602002602001015130888661ffff16815181106119f7576119f76124d6565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064016020604051808303816000875af1158015611a7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9f919061260b565b905080611b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f46756e6473207472616e73666572206661696c6564000000000000000000000060448201526064016104d8565b7f4ca2b6f8214bfec8b3a7c06707618645a8e77d171b22a4eba1d8811fdc30bfdb8a878461ffff1681518110611b4057611b406124d6565b602002602001015184888661ffff1681518110611b5f57611b5f6124d6565b6020026020010151604051611bac949392919060079490940b845273ffffffffffffffffffffffffffffffffffffffff92909216602084015261ffff166040830152606082015260800190565b60405180910390a15080611bbf81612598565b915050611762565b506040805160e0810182526000808252602082018190529181018290526060808201819052608082015260a0810182905260c0810191909152878152602080820188815260408084018981526060850189815260808601899052600160a0870181905260078f900b60009081526002808852949020875181559451908501559051918301919091555180518493611c65926003850192910190612092565b5060808201518051611c8191600484019160209091019061211c565b5060a0820151600591909101805460c0909301517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009093169115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff169190911761010061ffff90931683021790556003805460018101825560008290527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b600482040180549190921660080290920a67ffffffffffffffff818102199093169b909216919091029990991790985550909695505050505050565b60038181548110611d6c57600080fd5b9060005260206000209060049182820401919006600802915054906101000a900460070b81565b611d9b611e4a565b73ffffffffffffffffffffffffffffffffffffffff8116611e3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104d8565b611e4781611ecb565b50565b60005473ffffffffffffffffffffffffffffffffffffffff16331461041f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d8565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b600354811015610409578160070b60038281548110611f6457611f646124d6565b6000918252602090912060048204015460039091166008026101000a900460070b036120805760038054611f9a9060019061256c565b81548110611faa57611faa6124d6565b90600052602060002090600491828204019190066008029054906101000a900460070b60038281548110611fe057611fe06124d6565b90600052602060002090600491828204019190066008026101000a81548167ffffffffffffffff021916908360070b67ffffffffffffffff160217905550600380548061202f5761202f612646565b60008281526020902060047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191820401805467ffffffffffffffff600860038516026101000a021916905590555b8061208a81612534565b915050611f43565b82805482825590600052602060002090810192821561210c579160200282015b8281111561210c57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161782556020909201916001909101906120b2565b50612118929150612157565b5090565b82805482825590600052602060002090810192821561210c579160200282015b8281111561210c57825182559160200191906001019061213c565b5b808211156121185760008155600101612158565b8035600781900b811461217e57600080fd5b919050565b60006020828403121561219557600080fd5b61219e8261216c565b9392505050565b600080600080606085870312156121bb57600080fd5b6121c48561216c565b9350602085013561ffff811681146121db57600080fd5b9250604085013567ffffffffffffffff808211156121f857600080fd5b818701915087601f83011261220c57600080fd5b81358181111561221b57600080fd5b8860208260051b850101111561223057600080fd5b95989497505060200194505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156122b5576122b561223f565b604052919050565b600067ffffffffffffffff8211156122d7576122d761223f565b5060051b60200190565b803573ffffffffffffffffffffffffffffffffffffffff8116811461217e57600080fd5b600082601f83011261231657600080fd5b8135602061232b612326836122bd565b61226e565b82815260059290921b8401810191818101908684111561234a57600080fd5b8286015b84811015612365578035835291830191830161234e565b509695505050505050565b60008060008060008060c0878903121561238957600080fd5b6123928761216c565b955060208088013595506040880135945060608801359350608088013567ffffffffffffffff808211156123c557600080fd5b818a0191508a601f8301126123d957600080fd5b81356123e7612326826122bd565b81815260059190911b8301840190848101908d83111561240657600080fd5b938501935b8285101561242b5761241c856122e1565b8252938501939085019061240b565b9650505060a08a013592508083111561244357600080fd5b505061245189828a01612305565b9150509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156124965783518352928401929184019160010161247a565b50909695505050505050565b6000602082840312156124b457600080fd5b5035919050565b6000602082840312156124cd57600080fd5b61219e826122e1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361256557612565612505565b5060010190565b8181038181111561257f5761257f612505565b92915050565b8082018082111561257f5761257f612505565b600061ffff8083168181036125af576125af612505565b6001019392505050565b808202811582820484141761257f5761257f612505565b600082612606577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561261d57600080fd5b8151801515811461219e57600080fd5b60006020828403121561263f57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212205fe85b77960dbe97919455e79a7b56b1d2790fdd99d360327108a4ca22b9cdec64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008ef32a03784c8fd63bbf027251b9620865bd54b600000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003840000000000000000000000000000000000000000000000000000000000000064000000000000000000000000171d311eacd2206d21cb462d661c33f0eddadc03
-----Decoded View---------------
Arg [0] : _bettingToken (address): 0x8ef32a03784c8Fd63bBf027251b9620865bD54B6
Arg [1] : _minimumBet (uint256): 1000
Arg [2] : _revenueBps (uint256): 900
Arg [3] : _burnBps (uint256): 100
Arg [4] : _revenueWallet (address): 0x171d311eAcd2206d21Cb462d661C33F0eddadC03
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000008ef32a03784c8fd63bbf027251b9620865bd54b6
Arg [1] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000384
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [4] : 000000000000000000000000171d311eacd2206d21cb462d661c33f0eddadc03
Deployed Bytecode Sourcemap
32616:9835:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32706:40;;;;;;;;217:42:1;205:55;;;187:74;;175:2;160:18;32706:40:0;;;;;;;;32669:28;;;;;;;;;32952:32;;;;;;;;649:25:1;;;637:2;622:18;32952:32:0;503:177:1;34727:123:0;;;;;;:::i;:::-;34815:16;;34791:4;34815:16;;;:5;:16;;;;;:27;;;;;;34727:123;;;;1202:14:1;;1195:22;1177:41;;1165:2;1150:18;34727:123:0;1037:187:1;42124:324:0;;;:::i;:::-;;3581:103;;;:::i;38535:2881::-;;;;;;:::i;:::-;;:::i;2933:87::-;2979:7;3006:6;;;2933:87;;32755:35;;;;;41590:466;;;;;;:::i;:::-;;:::i;35741:2170::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33212:29::-;;;;;;:::i;:::-;;:::i;:::-;;;6094:1:1;6083:21;;;;6065:40;;6053:2;6038:18;33212:29:0;5923:188:1;3839:201:0;;;;;;:::i;:::-;;:::i;33039:35::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6558:25:1;;;6614:2;6599:18;;6592:34;;;;6642:18;;;6635:34;;;;6712:14;6705:22;6700:2;6685:18;;6678:50;6777:6;6765:19;6759:3;6744:19;;6737:48;6545:3;6530:19;33039:35:0;6307:484:1;32855:35:0;;;;;42124:324;2819:13;:11;:13::i;:::-;42274:30:::1;42307:14;42274:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;::::1;::::0;::::1;;;::::0;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;::::1;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;;;;;;;;;;;;;42337:9;42332:109;42356:15;:22;42352:1;:26;42332:109;;;42400:29;42410:15;42426:1;42410:18;;;;;;;;:::i;:::-;;;;;;;42400:9;:29::i;:::-;42380:3:::0;::::1;::::0;::::1;:::i;:::-;;;;42332:109;;;;42166:282;42124:324::o:0;3581:103::-;2819:13;:11;:13::i;:::-;3646:30:::1;3673:1;3646:18;:30::i;:::-;3581:103::o:0;38535:2881::-;2819:13;:11;:13::i;:::-;38667:26;38677:16:::1;38667:26:::0;::::1;::::0;38659:82:::1;;;::::0;::::1;::::0;;7576:2:1;38659:82:0::1;::::0;::::1;7558:21:1::0;7615:2;7595:18;;;7588:30;7654:34;7634:18;;;7627:62;7725:13;7705:18;;;7698:41;7756:19;;38659:82:0::1;;;;;;;;;38760:27;38777:9;34815:16:::0;;34791:4;34815:16;;;:5;:16;;;;;:27;;;;;;34727:123;38760:27:::1;38752:85;;;::::0;::::1;::::0;;7988:2:1;38752:85:0::1;::::0;::::1;7970:21:1::0;8027:2;8007:18;;;8000:30;8066:34;8046:18;;;8039:62;8137:15;8117:18;;;8110:43;8170:19;;38752:85:0::1;7786:409:1::0;38752:85:0::1;38867:16;::::0;;::::1;38850:14;38867:16:::0;;;:5:::1;:16;::::0;;;;38913:9:::1;::::0;::::1;:16:::0;38904:25:::1;::::0;::::1;;38896:62;;;::::0;::::1;::::0;;8402:2:1;38896:62:0::1;::::0;::::1;8384:21:1::0;8441:2;8421:18;;;8414:30;8480:26;8460:18;;;8453:54;8524:18;;38896:62:0::1;8200:348:1::0;38896:62:0::1;38977:9;::::0;::::1;:16:::0;38996:1:::1;-1:-1:-1::0;38969:51:0::1;;;::::0;::::1;::::0;;8755:2:1;38969:51:0::1;::::0;::::1;8737:21:1::0;8794:2;8774:18;;;8767:30;8833:20;8813:18;;;8806:48;8871:18;;38969:51:0::1;8553:342:1::0;38969:51:0::1;39033:7;::::0;::::1;:16:::0;;39060:20;;39033:16:::1;;::::0;::::1;;39060:20:::0;;;;;39091:21:::1;39102:9:::0;39091:10:::1;:21::i;:::-;39194:9;::::0;::::1;:16:::0;39153:24:::1;::::0;39194:20:::1;::::0;39213:1:::1;::::0;39194:20:::1;:::i;:::-;39180:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;39180:35:0::1;-1:-1:-1::0;39276:9:0::1;::::0;::::1;:16:::0;39153:62;;-1:-1:-1;39226:34:0::1;::::0;39276:20:::1;::::0;39295:1:::1;::::0;39276:20:::1;:::i;:::-;39263:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;39263:34:0::1;;39226:71;;39353:23;39474:17:::0;39515:8:::1;39510:317;39533:9;::::0;::::1;:16:::0;39529:20:::1;::::0;::::1;;39510:317;;;39584:6;39579:11;;:1;:11;;;39575:237;;39637:1;:9;;39647:1;39637:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39615:7;39623:10;39615:19;;;;;;;;;;:::i;:::-;;;;;;:34;;;;;;;;;::::0;::::1;39705:1;39672:18;39691:10;39672:30;;;;;;;;;;:::i;:::-;;;;;;:34;;;;;;;;;::::0;::::1;39748:1;:6;;39755:1;39748:9;;;;;;;;;;:::i;:::-;;;;;;;;;39729:28;;;;;:::i;:::-;::::0;-1:-1:-1;39780:12:0;::::1;::::0;::::1;:::i;:::-;;;;39575:237;39551:3:::0;::::1;::::0;::::1;:::i;:::-;;;;39510:317;;;-1:-1:-1::0;39850:25:0::1;::::0;-1:-1:-1;39921:7:0::1;39898:20;39908:10;39898:7;:20;:::i;:::-;:30;39890:68;;;::::0;::::1;::::0;;9567:2:1;39890:68:0::1;::::0;::::1;9549:21:1::0;9606:2;9586:18;;;9579:30;9645:27;9625:18;;;9618:55;9690:18;;39890:68:0::1;9365:349:1::0;39890:68:0::1;40012:17;40059:6;40049:7;40032:1;:6;;40039;40032:14;;;;;;;;;;:::i;:::-;;;;;;;;;:24;;;;:::i;:::-;:33;;;;:::i;:::-;40012:53;;40260:26;40319:6;40306:10;40289:1;:6;;40296;40289:14;;;;;;;;;;:::i;:::-;;;;;;;;;:27;;;;:::i;:::-;:36;;;;:::i;:::-;40260:65;;40338:11;40375:21:::0;40428:18:::1;40416:9;40399:1;:6;;40406;40399:14;;;;;;;;;;:::i;:::-;;;;;;;;;:26;;;;:::i;:::-;:47;;;;:::i;:::-;40375:71;;40468:8;40463:460;40486:7;:14;40482:1;:18;;;40463:460;;;40526:16;40593:15;40561:1;:6;;40568:18;40587:1;40568:21;;;;;;;;;;:::i;:::-;;;;;;;40561:29;;;;;;;;;;:::i;:::-;;;;;;;;;40545:13;:45;;;;:::i;:::-;:63;;;;:::i;:::-;40526:82;;40638:12;:21;;;40660:7;40668:1;40660:10;;;;;;;;;;:::i;:::-;;;;;;;40704:8;40672:1;:6;;40679:18;40698:1;40679:21;;;;;;;;;;:::i;:::-;;;;;;;40672:29;;;;;;;;;;:::i;:::-;;;;;;;;;:40;;;;:::i;:::-;40638:75;::::0;;::::1;::::0;;;;;;10375:42:1;10363:55;;;40638:75:0::1;::::0;::::1;10345:74:1::0;10435:18;;;10428:34;10318:18;;40638:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40629:84;;40740:6;40732:40;;;::::0;::::1;::::0;;10957:2:1;40732:40:0::1;::::0;::::1;10939:21:1::0;10996:2;10976:18;;;10969:30;11035:23;11015:18;;;11008:51;11076:18;;40732:40:0::1;10755:345:1::0;40732:40:0::1;40798:59;40802:9;40813:7;40821:1;40813:10;;;;;;;;;;:::i;:::-;;;;;;;40825:18;40844:1;40825:21;;;;;;;;;;:::i;:::-;;;;;;;40848:8;40798:59;;;;;;;;11359:1:1::0;11348:21;;;;11330:40;;11418:42;11406:55;;;;11401:2;11386:18;;11379:83;11510:6;11498:19;11493:2;11478:18;;11471:47;11549:2;11534:18;;11527:34;11317:3;11302:19;;11105:462;40798:59:0::1;;;;;;;;40878:29;40899:8:::0;40878:29;::::1;:::i;:::-;;;40507:416;40502:3;;;;;:::i;:::-;;;;40463:460;;;-1:-1:-1::0;;40946:28:0::1;::::0;;;;::::1;::::0;::::1;649:25:1::0;;;40946:12:0::1;:17;;::::0;::::1;::::0;622:18:1;;40946:28:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40990:26;40995:9;41006;40990:26;;;;;;11771:1:1::0;11760:21;;;;11742:40;;11813:2;11798:18;;11791:34;11730:2;11715:18;;11572:259;40990:26:0::1;;;;;;;;41029:24;41093:9;41073:17;41056:1;:6;;41063;41056:14;;;;;;;;;;:::i;:::-;;;;;;;;;:34;;;;:::i;:::-;:46;;;;:::i;:::-;41144:13;::::0;41122:54:::1;::::0;;;;:21:::1;41144:13:::0;;::::1;41122:54;::::0;::::1;10345:74:1::0;10435:18;;;10428:34;;;41029:73:0;;-1:-1:-1;41122:12:0::1;:21;::::0;::::1;::::0;10318:18:1;;41122:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41113:63;;41195:6;41187:42;;;::::0;::::1;::::0;;12038:2:1;41187:42:0::1;::::0;::::1;12020:21:1::0;12077:2;12057:18;;;12050:30;12116:25;12096:18;;;12089:53;12159:18;;41187:42:0::1;11836:347:1::0;41187:42:0::1;41245:36;::::0;;11771:1:1;11760:21;;;11742:40;;11813:2;11798:18;;11791:34;;;41245:36:0::1;::::0;11715:18:1;41245:36:0::1;;;;;;;41356:1;:6;;41363;41356:14;;;;;;;;;;:::i;:::-;;;;;;;;;41335:16;41323:9;41303:17;:29;;;;:::i;:::-;:48;;;;:::i;:::-;41302:68;41294:114;;;::::0;::::1;::::0;;12390:2:1;41294:114:0::1;::::0;::::1;12372:21:1::0;12429:2;12409:18;;;12402:30;12468:34;12448:18;;;12441:62;12539:3;12519:18;;;12512:31;12560:19;;41294:114:0::1;12188:397:1::0;41294:114:0::1;38648:2768;;;;;;;;;38535:2881:::0;;;;:::o;41590:466::-;2819:13;:11;:13::i;:::-;41662:27:::1;41679:9;34815:16:::0;;34791:4;34815:16;;;:5;:16;;;;;:27;;;;;;34727:123;41662:27:::1;41654:85;;;::::0;::::1;::::0;;7988:2:1;41654:85:0::1;::::0;::::1;7970:21:1::0;8027:2;8007:18;;;8000:30;8066:34;8046:18;;;8039:62;8137:15;8117:18;;;8110:43;8170:19;;41654:85:0::1;7786:409:1::0;41654:85:0::1;41767:16;::::0;;::::1;41750:14;41767:16:::0;;;:5:::1;:16;::::0;;;;;41796:188:::1;41819:9;::::0;::::1;:16:::0;41815:20:::1;::::0;::::1;;41796:188;;;41857:11;41871:12;:21;;;41893:1;:9;;41903:1;41893:12;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;41907:6:::1;::::0;::::1;:9:::0;;41893:12:::1;::::0;;::::1;::::0;41907:9:::1;::::0;::::1;::::0;;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;41871:46:::1;::::0;;::::1;::::0;;;;;;10375:42:1;10363:55;;;41871:46:0::1;::::0;::::1;10345:74:1::0;10435:18;;;10428:34;10318:18;;41871:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41857:60;;41940:6;41932:40;;;::::0;::::1;::::0;;10957:2:1;41932:40:0::1;::::0;::::1;10939:21:1::0;10996:2;10976:18;;;10969:30;11035:23;11015:18;;;11008:51;11076:18;;41932:40:0::1;10755:345:1::0;41932:40:0::1;-1:-1:-1::0;41837:3:0;::::1;::::0;::::1;:::i;:::-;;;;41796:188;;;-1:-1:-1::0;41996:12:0::1;::::0;::::1;:20:::0;;;::::1;::::0;;42027:21:::1;42038:9:::0;42027:10:::1;:21::i;35741:2170::-:0;35982:16;2819:13;:11;:13::i;:::-;36036:1:::1;36019:13;:18;;36011:54;;;::::0;::::1;::::0;;12792:2:1;36011:54:0::1;::::0;::::1;12774:21:1::0;12831:2;12811:18;;;12804:30;12870:25;12850:18;;;12843:53;12913:18;;36011:54:0::1;12590:347:1::0;36011:54:0::1;36103:13;36084:8;:15;:32;;36076:84;;;::::0;::::1;::::0;;13144:2:1;36076:84:0::1;::::0;::::1;13126:21:1::0;13183:2;13163:18;;;13156:30;13222:34;13202:18;;;13195:62;13293:9;13273:18;;;13266:37;13320:19;;36076:84:0::1;12942:403:1::0;36076:84:0::1;36190:10;36179:7;:21;;36171:55;;;::::0;::::1;::::0;;13552:2:1;36171:55:0::1;::::0;::::1;13534:21:1::0;13591:2;13571:18;;;13564:30;13630:23;13610:18;;;13603:51;13671:18;;36171:55:0::1;13350:345:1::0;36171:55:0::1;36264:5;:12;36245:8;:15;:31;36237:72;;;::::0;::::1;::::0;;13902:2:1;36237:72:0::1;::::0;::::1;13884:21:1::0;13941:2;13921:18;;;13914:30;13980;13960:18;;;13953:58;14028:18;;36237:72:0::1;13700:352:1::0;36237:72:0::1;36346:1;36328:8;:15;:19;36320:50;;;::::0;::::1;::::0;;8755:2:1;36320:50:0::1;::::0;::::1;8737:21:1::0;8794:2;8774:18;;;8767:30;8833:20;8813:18;;;8806:48;8871:18;;36320:50:0::1;8553:342:1::0;36320:50:0::1;36390:27;36407:9;34815:16:::0;;34791:4;34815:16;;;:5;:16;;;;;:27;;;;;;34727:123;36390:27:::1;36389:28;36381:76;;;::::0;::::1;::::0;;14259:2:1;36381:76:0::1;::::0;::::1;14241:21:1::0;14298:2;14278:18;;;14271:30;14337:34;14317:18;;;14310:62;14408:5;14388:18;;;14381:33;14431:19;;36381:76:0::1;14057:399:1::0;36381:76:0::1;36812:16;36848:8:::0;36843:167:::1;36866:5;:12;36862:1;:16;;;36843:167;;;36920:7;36908:5;36914:1;36908:8;;;;;;;;;;:::i;:::-;;;;;;;:19;;36900:63;;;::::0;::::1;::::0;;14663:2:1;36900:63:0::1;::::0;::::1;14645:21:1::0;14702:2;14682:18;;;14675:30;14741:33;14721:18;;;14714:61;14792:18;;36900:63:0::1;14461:355:1::0;36900:63:0::1;36990:5;36996:1;36990:8;;;;;;;;;;:::i;:::-;;;;;;;36978:20;;;;;:::i;:::-;::::0;-1:-1:-1;36880:3:0;::::1;::::0;::::1;:::i;:::-;;;;36843:167;;;;37025:8;37020:538;37043:5;:12;37039:1;:16;;;37020:538;;;37089:5;37095:1;37089:8;;;;;;;;;;:::i;:::-;;;;;;;37077:20;;;;;:::i;:::-;;;37127:8;37116:5;37122:1;37116:8;;;;;;;;;;:::i;:::-;;;;;;;:19;37112:79;;;37167:8;37156:5;37162:1;37156:8;;;;;;;;;;:::i;:::-;;;;;;:19;;;::::0;::::1;37112:79;37217:5;37223:1;37217:8;;;;;;;;;;:::i;:::-;;;;;;;37205:20;;;;;:::i;:::-;;;37304:5;37310:1;37304:8;;;;;;;;;;:::i;:::-;;;;;;;37250:12;:22;;;37273:8;37282:1;37273:11;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;37250:50:::1;::::0;;::::1;::::0;;;;;;15005:42:1;15074:15;;;37250:50:0::1;::::0;::::1;15056:34:1::0;37294:4:0::1;15106:18:1::0;;;15099:43;14968:18;;37250:50:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;37242:95;;;::::0;::::1;::::0;;15544:2:1;37242:95:0::1;::::0;::::1;15526:21:1::0;15583:2;15563:18;;;15556:30;15622:22;15602:18;;;15595:50;15662:18;;37242:95:0::1;15342:344:1::0;37242:95:0::1;37352:11;37366:12;:25;;;37392:8;37401:1;37392:11;;;;;;;;;;:::i;:::-;;;;;;;37413:4;37420:5;37426:1;37420:8;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;37366:63:::1;::::0;;::::1;::::0;;;;;;15903:42:1;15972:15;;;37366:63:0::1;::::0;::::1;15954:34:1::0;16024:15;;;;16004:18;;;15997:43;16056:18;;;16049:34;15866:18;;37366:63:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37352:77;;37452:6;37444:40;;;::::0;::::1;::::0;;10957:2:1;37444:40:0::1;::::0;::::1;10939:21:1::0;10996:2;10976:18;;;10969:30;11035:23;11015:18;;;11008:51;11076:18;;37444:40:0::1;10755:345:1::0;37444:40:0::1;37506;37510:9;37521:8;37530:1;37521:11;;;;;;;;;;:::i;:::-;;;;;;;37534:1;37537:5;37543:1;37537:8;;;;;;;;;;:::i;:::-;;;;;;;37506:40;;;;;;;;11359:1:1::0;11348:21;;;;11330:40;;11418:42;11406:55;;;;11401:2;11386:18;;11379:83;11510:6;11498:19;11493:2;11478:18;;11471:47;11549:2;11534:18;;11527:34;11317:3;11302:19;;11105:462;37506:40:0::1;;;;;;;;-1:-1:-1::0;37057:3:0;::::1;::::0;::::1;:::i;:::-;;;;37020:538;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37594:30:0;;;37635:8:::1;::::0;;::::1;:18:::0;;;37664:26:::1;::::0;;::::1;:54:::0;;;37729:9:::1;::::0;::::1;:20:::0;;;37760:6:::1;::::0;::::1;:14:::0;;;37800:4:::1;37785:12;::::0;::::1;:19:::0;;;37817:16:::1;::::0;;::::1;37594:14;37817:16:::0;;;:5:::1;:16:::0;;;;;;:20;;;;;;;;::::1;::::0;;;;;::::1;::::0;;;;;;;37594:1;;37817:20:::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;37817:20:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;37817:20:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;::::1;;::::0;;;;;;::::1;;::::0;;::::1;::::0;::::1;;::::0;;37848:14:::1;:30:::0;;-1:-1:-1;37848:30:0;::::1;::::0;;-1:-1:-1;37848:30:0;;;;::::1;::::0;::::1;;::::0;;;;;;::::1;;::::0;;::::1;;::::0;;::::1;;::::0;;::::1;::::0;;;;;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;37898:5:0;;35741:2170;-1:-1:-1;;;;;;35741:2170:0:o;33212:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3839:201::-;2819:13;:11;:13::i;:::-;3928:22:::1;::::0;::::1;3920:73;;;::::0;::::1;::::0;;16296:2:1;3920:73:0::1;::::0;::::1;16278:21:1::0;16335:2;16315:18;;;16308:30;16374:34;16354:18;;;16347:62;16445:8;16425:18;;;16418:36;16471:19;;3920:73:0::1;16094:402:1::0;3920:73:0::1;4004:28;4023:8;4004:18;:28::i;:::-;3839:201:::0;:::o;3098:132::-;2979:7;3006:6;3162:23;3006:6;1722:10;3162:23;3154:68;;;;;;;16703:2:1;3154:68:0;;;16685:21:1;;;16722:18;;;16715:30;16781:34;16761:18;;;16754:62;16833:18;;3154:68:0;16501:356:1;4200:191:0;4274:16;4293:6;;;4310:17;;;;;;;;;;4343:40;;4293:6;;;;;;;4343:40;;4274:16;4343:40;4263:128;4200:191;:::o;34983:313::-;35045:9;35040:249;35064:14;:21;35060:25;;35040:249;;;35132:9;35111:30;;:14;35126:1;35111:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:30;35107:171;;35182:14;35197:21;;:25;;35221:1;;35197:25;:::i;:::-;35182:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;35162:14;35177:1;35162:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:61;;;;;;;;;;;;;;;;;;;;35242:14;:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35107:171;35087:3;;;;:::i;:::-;;;;35040:249;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;685:160:1;751:20;;811:1;800:20;;;790:31;;780:59;;835:1;832;825:12;780:59;685:160;;;:::o;850:182::-;907:6;960:2;948:9;939:7;935:23;931:32;928:52;;;976:1;973;966:12;928:52;999:27;1016:9;999:27;:::i;:::-;989:37;850:182;-1:-1:-1;;;850:182:1:o;1229:857::-;1342:6;1350;1358;1366;1419:2;1407:9;1398:7;1394:23;1390:32;1387:52;;;1435:1;1432;1425:12;1387:52;1458:27;1475:9;1458:27;:::i;:::-;1448:37;;1535:2;1524:9;1520:18;1507:32;1579:6;1572:5;1568:18;1561:5;1558:29;1548:57;;1601:1;1598;1591:12;1548:57;1624:5;-1:-1:-1;1680:2:1;1665:18;;1652:32;1703:18;1733:14;;;1730:34;;;1760:1;1757;1750:12;1730:34;1798:6;1787:9;1783:22;1773:32;;1843:7;1836:4;1832:2;1828:13;1824:27;1814:55;;1865:1;1862;1855:12;1814:55;1905:2;1892:16;1931:2;1923:6;1920:14;1917:34;;;1947:1;1944;1937:12;1917:34;2000:7;1995:2;1985:6;1982:1;1978:14;1974:2;1970:23;1966:32;1963:45;1960:65;;;2021:1;2018;2011:12;1960:65;1229:857;;;;-1:-1:-1;;2052:2:1;2044:11;;-1:-1:-1;;;1229:857:1:o;2091:184::-;2143:77;2140:1;2133:88;2240:4;2237:1;2230:15;2264:4;2261:1;2254:15;2280:334;2351:2;2345:9;2407:2;2397:13;;2412:66;2393:86;2381:99;;2510:18;2495:34;;2531:22;;;2492:62;2489:88;;;2557:18;;:::i;:::-;2593:2;2586:22;2280:334;;-1:-1:-1;2280:334:1:o;2619:183::-;2679:4;2712:18;2704:6;2701:30;2698:56;;;2734:18;;:::i;:::-;-1:-1:-1;2779:1:1;2775:14;2791:4;2771:25;;2619:183::o;2807:196::-;2875:20;;2935:42;2924:54;;2914:65;;2904:93;;2993:1;2990;2983:12;3008:662;3062:5;3115:3;3108:4;3100:6;3096:17;3092:27;3082:55;;3133:1;3130;3123:12;3082:55;3169:6;3156:20;3195:4;3219:60;3235:43;3275:2;3235:43;:::i;:::-;3219:60;:::i;:::-;3313:15;;;3399:1;3395:10;;;;3383:23;;3379:32;;;3344:12;;;;3423:15;;;3420:35;;;3451:1;3448;3441:12;3420:35;3487:2;3479:6;3475:15;3499:142;3515:6;3510:3;3507:15;3499:142;;;3581:17;;3569:30;;3619:12;;;;3532;;3499:142;;;-1:-1:-1;3659:5:1;3008:662;-1:-1:-1;;;;;;3008:662:1:o;3675:1421::-;3827:6;3835;3843;3851;3859;3867;3920:3;3908:9;3899:7;3895:23;3891:33;3888:53;;;3937:1;3934;3927:12;3888:53;3960:27;3977:9;3960:27;:::i;:::-;3950:37;;4006:2;4055;4044:9;4040:18;4027:32;4017:42;;4106:2;4095:9;4091:18;4078:32;4068:42;;4157:2;4146:9;4142:18;4129:32;4119:42;;4212:3;4201:9;4197:19;4184:33;4236:18;4277:2;4269:6;4266:14;4263:34;;;4293:1;4290;4283:12;4263:34;4331:6;4320:9;4316:22;4306:32;;4376:7;4369:4;4365:2;4361:13;4357:27;4347:55;;4398:1;4395;4388:12;4347:55;4434:2;4421:16;4457:60;4473:43;4513:2;4473:43;:::i;4457:60::-;4551:15;;;4633:1;4629:10;;;;4621:19;;4617:28;;;4582:12;;;;4657:19;;;4654:39;;;4689:1;4686;4679:12;4654:39;4713:11;;;;4733:148;4749:6;4744:3;4741:15;4733:148;;;4815:23;4834:3;4815:23;:::i;:::-;4803:36;;4766:12;;;;4859;;;;4733:148;;;4900:5;-1:-1:-1;;;4958:3:1;4943:19;;4930:33;;-1:-1:-1;4975:16:1;;;4972:36;;;5004:1;5001;4994:12;4972:36;;;5027:63;5082:7;5071:8;5060:9;5056:24;5027:63;:::i;:::-;5017:73;;;3675:1421;;;;;;;;:::o;5101:632::-;5272:2;5324:21;;;5394:13;;5297:18;;;5416:22;;;5243:4;;5272:2;5495:15;;;;5469:2;5454:18;;;5243:4;5538:169;5552:6;5549:1;5546:13;5538:169;;;5613:13;;5601:26;;5682:15;;;;5647:12;;;;5574:1;5567:9;5538:169;;;-1:-1:-1;5724:3:1;;5101:632;-1:-1:-1;;;;;;5101:632:1:o;5738:180::-;5797:6;5850:2;5838:9;5829:7;5825:23;5821:32;5818:52;;;5866:1;5863;5856:12;5818:52;-1:-1:-1;5889:23:1;;5738:180;-1:-1:-1;5738:180:1:o;6116:186::-;6175:6;6228:2;6216:9;6207:7;6203:23;6199:32;6196:52;;;6244:1;6241;6234:12;6196:52;6267:29;6286:9;6267:29;:::i;6796:184::-;6848:77;6845:1;6838:88;6945:4;6942:1;6935:15;6969:4;6966:1;6959:15;6985:184;7037:77;7034:1;7027:88;7134:4;7131:1;7124:15;7158:4;7155:1;7148:15;7174:195;7213:3;7244:66;7237:5;7234:77;7231:103;;7314:18;;:::i;:::-;-1:-1:-1;7361:1:1;7350:13;;7174:195::o;8900:128::-;8967:9;;;8988:11;;;8985:37;;;9002:18;;:::i;:::-;8900:128;;;;:::o;9033:125::-;9098:9;;;9119:10;;;9116:36;;;9132:18;;:::i;9163:197::-;9201:3;9229:6;9270:2;9263:5;9259:14;9297:2;9288:7;9285:15;9282:41;;9303:18;;:::i;:::-;9352:1;9339:15;;9163:197;-1:-1:-1;;;9163:197:1:o;9719:168::-;9792:9;;;9823;;9840:15;;;9834:22;;9820:37;9810:71;;9861:18;;:::i;9892:274::-;9932:1;9958;9948:189;;9993:77;9990:1;9983:88;10094:4;10091:1;10084:15;10122:4;10119:1;10112:15;9948:189;-1:-1:-1;10151:9:1;;9892:274::o;10473:277::-;10540:6;10593:2;10581:9;10572:7;10568:23;10564:32;10561:52;;;10609:1;10606;10599:12;10561:52;10641:9;10635:16;10694:5;10687:13;10680:21;10673:5;10670:32;10660:60;;10716:1;10713;10706:12;15153:184;15223:6;15276:2;15264:9;15255:7;15251:23;15247:32;15244:52;;;15292:1;15289;15282:12;15244:52;-1:-1:-1;15315:16:1;;15153:184;-1:-1:-1;15153:184:1:o;16862:::-;16914:77;16911:1;16904:88;17011:4;17008:1;17001:15;17035:4;17032:1;17025:15
Swarm Source
ipfs://5fe85b77960dbe97919455e79a7b56b1d2790fdd99d360327108a4ca22b9cdec
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.