ETH Price: $2,421.10 (+1.71%)

Contract

0xE96009E5d7ac5dd42382D141C883627255751Ed7
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve202644222024-07-08 21:19:5994 days ago1720473599IN
0xE96009E5...255751Ed7
0 ETH0.000173243.72048447
Approve200449532024-06-08 5:14:11125 days ago1717823651IN
0xE96009E5...255751Ed7
0 ETH0.000215144.62017128
Transfer199917852024-05-31 19:04:59132 days ago1717182299IN
0xE96009E5...255751Ed7
0 ETH0.0019389212.27623794
Transfer199917832024-05-31 19:04:35132 days ago1717182275IN
0xE96009E5...255751Ed7
0 ETH0.0018233911.54476116
Transfer199917802024-05-31 19:03:59132 days ago1717182239IN
0xE96009E5...255751Ed7
0 ETH0.0020361212.89169399
Transfer199917782024-05-31 19:03:35132 days ago1717182215IN
0xE96009E5...255751Ed7
0 ETH0.0021519113.62479689
Transfer199917762024-05-31 19:03:11132 days ago1717182191IN
0xE96009E5...255751Ed7
0 ETH0.0021574213.65970139
Transfer199917742024-05-31 19:02:47132 days ago1717182167IN
0xE96009E5...255751Ed7
0 ETH0.0021592813.67252841
Transfer199917722024-05-31 19:02:23132 days ago1717182143IN
0xE96009E5...255751Ed7
0 ETH0.002168513.72984409
Transfer199917702024-05-31 19:01:59132 days ago1717182119IN
0xE96009E5...255751Ed7
0 ETH0.0022341514.14547613
Transfer199917682024-05-31 19:01:35132 days ago1717182095IN
0xE96009E5...255751Ed7
0 ETH0.0021259113.46020623
Transfer199917662024-05-31 19:01:11132 days ago1717182071IN
0xE96009E5...255751Ed7
0 ETH0.0019830412.55563747
Transfer199917642024-05-31 19:00:47132 days ago1717182047IN
0xE96009E5...255751Ed7
0 ETH0.0021058613.33323301
Transfer199917622024-05-31 19:00:23132 days ago1717182023IN
0xE96009E5...255751Ed7
0 ETH0.0021000313.29633539
Transfer199917602024-05-31 18:59:59132 days ago1717181999IN
0xE96009E5...255751Ed7
0 ETH0.0019107312.09774899
Transfer199917582024-05-31 18:59:35132 days ago1717181975IN
0xE96009E5...255751Ed7
0 ETH0.0019462512.32263979
Transfer199917562024-05-31 18:59:11132 days ago1717181951IN
0xE96009E5...255751Ed7
0 ETH0.0019502612.3480622
Transfer199917542024-05-31 18:58:47132 days ago1717181927IN
0xE96009E5...255751Ed7
0 ETH0.0019465812.32477354
Transfer199917522024-05-31 18:58:23132 days ago1717181903IN
0xE96009E5...255751Ed7
0 ETH0.0020292712.8483009
Transfer199917502024-05-31 18:57:59132 days ago1717181879IN
0xE96009E5...255751Ed7
0 ETH0.0018866411.94525729
Transfer199917462024-05-31 18:57:11132 days ago1717181831IN
0xE96009E5...255751Ed7
0 ETH0.0018092411.45606781
Transfer199917442024-05-31 18:56:47132 days ago1717181807IN
0xE96009E5...255751Ed7
0 ETH0.00187211.85256981
Transfer199917422024-05-31 18:56:23132 days ago1717181783IN
0xE96009E5...255751Ed7
0 ETH0.0018966612.00868216
Transfer199917402024-05-31 18:55:59132 days ago1717181759IN
0xE96009E5...255751Ed7
0 ETH0.0018890111.96023319
Transfer199917382024-05-31 18:55:35132 days ago1717181735IN
0xE96009E5...255751Ed7
0 ETH0.0019497312.34472124
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
186856442023-11-30 16:35:35315 days ago1701362135
0xE96009E5...255751Ed7
0.04914449 ETH
186856442023-11-30 16:35:35315 days ago1701362135
0xE96009E5...255751Ed7
0.04914449 ETH
186856222023-11-30 16:31:11315 days ago1701361871
0xE96009E5...255751Ed7
0.04621625 ETH
186856222023-11-30 16:31:11315 days ago1701361871
0xE96009E5...255751Ed7
0.04621625 ETH
186850132023-11-30 14:28:11315 days ago1701354491
0xE96009E5...255751Ed7
0.11833282 ETH
186850132023-11-30 14:28:11315 days ago1701354491
0xE96009E5...255751Ed7
0.11833282 ETH
186832832023-11-30 8:38:23316 days ago1701333503
0xE96009E5...255751Ed7
0.0230624 ETH
186832832023-11-30 8:38:23316 days ago1701333503
0xE96009E5...255751Ed7
0.0230624 ETH
186781272023-11-29 15:21:47316 days ago1701271307
0xE96009E5...255751Ed7
0.04747582 ETH
186781272023-11-29 15:21:47316 days ago1701271307
0xE96009E5...255751Ed7
0.04747582 ETH
186763822023-11-29 9:29:35317 days ago1701250175
0xE96009E5...255751Ed7
0.01311342 ETH
186763822023-11-29 9:29:35317 days ago1701250175
0xE96009E5...255751Ed7
0.01311342 ETH
186726562023-11-28 20:58:35317 days ago1701205115
0xE96009E5...255751Ed7
0.01233501 ETH
186726562023-11-28 20:58:35317 days ago1701205115
0xE96009E5...255751Ed7
0.01233501 ETH
186720502023-11-28 18:57:11317 days ago1701197831
0xE96009E5...255751Ed7
0.02292913 ETH
186720502023-11-28 18:57:11317 days ago1701197831
0xE96009E5...255751Ed7
0.02292913 ETH
186717202023-11-28 17:50:47317 days ago1701193847
0xE96009E5...255751Ed7
0.05960749 ETH
186717202023-11-28 17:50:47317 days ago1701193847
0xE96009E5...255751Ed7
0.05960749 ETH
186715742023-11-28 17:21:23317 days ago1701192083
0xE96009E5...255751Ed7
0.07061276 ETH
186715742023-11-28 17:21:23317 days ago1701192083
0xE96009E5...255751Ed7
0.07061276 ETH
186715102023-11-28 17:08:35317 days ago1701191315
0xE96009E5...255751Ed7
0.05500422 ETH
186715102023-11-28 17:08:35317 days ago1701191315
0xE96009E5...255751Ed7
0.05500422 ETH
186714702023-11-28 17:00:35317 days ago1701190835
0xE96009E5...255751Ed7
0.02808711 ETH
186714702023-11-28 17:00:35317 days ago1701190835
0xE96009E5...255751Ed7
0.02808711 ETH
186714022023-11-28 16:46:59317 days ago1701190019
0xE96009E5...255751Ed7
0.04280656 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Jail

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 4 : Jail.sol
/**

Once you got some $JAIL tokens, you enter the prison.

website: https://0xjail.com/
twitter: https://twitter.com/jailtokenerc20
telegram: https://t.me/jailportal

*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.9;

import '@chainlink/contracts/src/v0.8/interfaces/LinkTokenInterface.sol';
import '@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol';
import '@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol';


abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
    external
    returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
    external
    payable
    returns (
        uint256 amountToken,
        uint256 amountETH,
        uint256 liquidity
    );
}

contract Jail is Context, IERC20, Ownable, VRFConsumerBaseV2 {

    using SafeMath for uint256;

    string private constant _name = "JAIL";
    string private constant _symbol = "JAIL";
    uint8 private constant _decimals = 18;

    VRFCoordinatorV2Interface vrfCoord;
    uint64 private _vrfSubscriptionId;
    bytes32 private _vrfKeyHash;
    uint16 private _vrfNumBlocks = 3;
    uint32 private _vrfCallbackGasLimit = 600000;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _rTotalNT = (MAX - (MAX % _tTotal));
    uint256 private _rTotalX = (MAX - (MAX % _tTotal));
    uint256 private _rTotalY = (MAX - (MAX % _tTotal));
    uint256 private _rTotalZ = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    uint256 private MINUTE = 60;
    uint256 private HOUR = 60 * MINUTE;
    uint256 public teamXTime = 60 * MINUTE;
    uint256 public teamYTime = 480 * MINUTE;
    uint256 public teamZTime = 60 * MINUTE;


    uint256 public _redisFeeOnBuy = 0;
    uint256 public _taxFeeOnBuy = 15;
    uint256 public _redisFeeOnSell = 0;
    uint256 public _taxFeeOnSell = 15;
    uint256 public _taxFeeEscaped = 0;
    uint256 public _taxFeeNotEscaped = 15;

    uint256 public _escapeTaxDuration = 6 * 60 * 60;
    mapping(address => bool) public userTryingEscape;
    mapping(address => uint256) public escapingTimestamp;
    mapping(address => bool) public userEscaped;
    mapping(uint256 => address) public escapeRequests;
    mapping(address => bool) public escapeRequested;


    mapping(address => uint256) public buyTime;
    mapping(address => uint256) public sellTime;
    uint256 topHolderAmount = 0;

    //Original Fee
    uint256 private _redisFee = _redisFeeOnSell;
    uint256 private _taxFee = _taxFeeOnSell;

    uint256 private _previousredisFee = _redisFee;
    uint256 private _previoustaxFee = _taxFee;

    mapping (address => uint256) public _buyMap;
    address payable private _marketingAddress;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private tradingOpen = false;
    bool private inSwap = false;
    bool private swapEnabled = true;

    uint256 public _maxTxAmount = _tTotal * 2 / 100;
    uint256 public _maxWalletSize =  _tTotal * 2 / 100;
    uint256 public _swapTokensAtAmount = 1000000 * 10**_decimals;

    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    enum Team {
        X,
        Y,
        Z,
        NONE
    }

    constructor(
        address _vrfCoordinator,
        uint64 _subscriptionId,
        bytes32 _keyHash) VRFConsumerBaseV2(_vrfCoordinator)  {


        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _marketingAddress = payable(owner());
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(0xdead)] = true;
        _isExcludedFromFee[_marketingAddress] = true;

        vrfCoord = VRFCoordinatorV2Interface(_vrfCoordinator);
        _vrfSubscriptionId = _subscriptionId;
        _vrfKeyHash = _keyHash;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOfNoReflection(address account) public view returns (uint256)  {
        uint256 balanceNR = _rOwned[account].div(_rTotal.div(_tTotal));
        return balanceNR;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return tokenFromReflection(_rOwned[account], account);
    }

    function transfer(address recipient, uint256 amount)
    public
    override
    returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
    public
    view
    override
    returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
    public
    override
    returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function getTeam(address sender) view public returns(Team) {
        if (_isExcludedFromFee[sender] || address(uniswapV2Pair) == sender || address(uniswapV2Router) == sender) {
            return Team.NONE;
        }
        if (balanceOfNoReflection(sender) > topHolderAmount * 80 / 100 &&
            block.timestamp - buyTime[sender] > teamZTime) {
            return Team.Z;
        }
        if (sellTime[sender] == 0 &&
        block.timestamp - buyTime[sender] > teamYTime &&
            balanceOfNoReflection(sender) > totalSupply() * 100 / 100000) {
            return Team.Y;
        }
        if (sellTime[sender] == 0 && block.timestamp - buyTime[sender] > teamXTime && buyTime[sender] > 0) {
            return Team.X;
        }

        return Team.NONE;
    }

    function tokenFromReflection(uint256 rAmount, address account)
    private
    view
    returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate(account);
        return rAmount.div(currentRate);
    }

    function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords)
    internal
    override
    {
        _escape(randomWords[0], escapeRequests[requestId]);
    }

    function escape() public {
        require(balanceOf(msg.sender) > 0, "Balance should be more than 0");
        require(!escapeRequested[msg.sender], "You already requested escape");
        uint256 reqId = vrfCoord.requestRandomWords(
            _vrfKeyHash,
            _vrfSubscriptionId,
            _vrfNumBlocks,
            _vrfCallbackGasLimit,
            uint16(1)
        );
        escapeRequests[reqId] = msg.sender;
        escapeRequested[msg.sender] = true;
    }

    function _escape(uint256 randomNumber, address holder) private returns(bool) {
        bool _escaped = randomNumber % 2 == 0;
        userTryingEscape[holder] = true;
        escapingTimestamp[holder] = block.timestamp;
        userEscaped[holder] = _escaped;
        return _escaped;
    }

    function getEscapeSecondsLeft(address holder) public view returns (uint256) {
        if (escapingTimestamp[holder] == 0) {
            return 0;
        }

        if (block.timestamp - escapingTimestamp[holder] >= _escapeTaxDuration) {
            return 0;
        }
        return _escapeTaxDuration - (block.timestamp - escapingTimestamp[holder]);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (from != owner() && to != owner()) {
            //Trade start check
            if (!tradingOpen) {
                require(from == owner(), "TOKEN: This account cannot send tokens until trading is enabled");
            }
            require(amount <= _maxTxAmount, "TOKEN: Max Transaction Limit");
            if(to != uniswapV2Pair) {
                require(balanceOf(to) + amount <= _maxWalletSize, "TOKEN: Balance exceeds wallet size!");
            }
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;

            if(contractTokenBalance >= _maxTxAmount)
            {
                contractTokenBalance = _maxTxAmount;
            }
            if (canSwap && !inSwap && from != uniswapV2Pair && swapEnabled && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        bool takeFee = true;

        //Transfer Tokens
        address transferAccount = to;
        if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
            takeFee = false;
        } else {
            //Set Fee for Buys
            if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
                if (balanceOfNoReflection(to) + amount > topHolderAmount) {
                    topHolderAmount = balanceOfNoReflection(to) + amount;
                }
                buyTime[to] = block.timestamp;
                transferAccount = to;
            }
            //Set Fee for Sells
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
                if(userTryingEscape[from]) {
                    if(block.timestamp - escapingTimestamp[from] <= _escapeTaxDuration) {
                        if (userEscaped[from]) {
                            _redisFee = _taxFeeEscaped;
                            _taxFee = 0;
                        } else {
                            _redisFee = _taxFeeNotEscaped;
                            _taxFee = 0;
                        }
                    }
                }
                sellTime[from] = block.timestamp;
                transferAccount = from;
            }

        }
        _tokenTransfer(from, to, amount, takeFee, transferAccount);
        if(userTryingEscape[from]) {
            if(block.timestamp - escapingTimestamp[from] > _escapeTaxDuration) {
                userTryingEscape[from] = false;
                escapeRequested[from] = false;
            }
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapTokensForEthForUser(address holder) private lockTheSwap {
        uint256 tokenAmount = balanceOfNoReflection(holder);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(holder, address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            holder,
            block.timestamp
        );
    }

    function sendETHToFee(uint256 amount) private {
        _marketingAddress.transfer(amount);
    }

    function openTrading() public onlyOwner {
        tradingOpen = true;
    }

    function manualswap() external {
        require(_msgSender() == _marketingAddress);
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualsend() external {
        require(_msgSender() == _marketingAddress);
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }


    function removeAllFee() private {
        if (_redisFee == 0 && _taxFee == 0) return;

        _previousredisFee = _redisFee;
        _previoustaxFee = _taxFee;

        _redisFee = 0;
        _taxFee = 0;
    }

    function restoreAllFee() private {
        _redisFee = _previousredisFee;
        _taxFee = _previoustaxFee;
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee,
        address account
    ) private {
        if (!takeFee) removeAllFee();
        _transferStandard(sender, recipient, amount, account);
        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount,
        address account
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tTeam
        ) = _getValues(tAmount, account);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTeam(tTeam, account);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeTeam(uint256 tTeam, address account) private {
        uint256 currentRate = _getRate(account);
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(0);
        _rTotalX = _rTotalX.sub(rFee * 20 / 100);
        _rTotalY = _rTotalY.sub(rFee * 30 / 100);
        _rTotalZ = _rTotalZ.sub(rFee * 50 / 100);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    receive() external payable {}

    function _getValues(uint256 tAmount, address account)
    private
    view
    returns (
        uint256,
        uint256,
        uint256,
        uint256,
        uint256,
        uint256
    )
    {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) =
                        _getTValues(tAmount, _redisFee, _taxFee);
        uint256 currentRate = _getRate(account);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) =
                        _getRValues(tAmount, tFee, tTeam, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(
        uint256 tAmount,
        uint256 redisFee,
        uint256 taxFee
    )
    private
    pure
    returns (
        uint256,
        uint256,
        uint256
    )
    {
        uint256 tFee = tAmount.mul(redisFee).div(100);
        uint256 tTeam = tAmount.mul(taxFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);
        return (tTransferAmount, tFee, tTeam);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tTeam,
        uint256 currentRate
    )
    private
    pure
    returns (
        uint256,
        uint256,
        uint256
    )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate(address account) private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(account);
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply(address account) private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        if (getTeam(account) == Team.X) {
            rSupply = _rTotalX;
        }
        if (getTeam(account) == Team.Y) {
            rSupply = _rTotalY;
        }
        if (getTeam(account ) == Team.Z) {
            rSupply = _rTotalZ;
        }
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal))
            return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function setFee(uint256 redisFeeOnBuy, uint256 redisFeeOnSell, uint256 taxFeeOnBuy, uint256 taxFeeOnSell) public onlyOwner {
        require(redisFeeOnBuy + taxFeeOnBuy < 30);
        require(redisFeeOnSell + taxFeeOnSell < 30);
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;
        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }

    //Set minimum tokens required to swap.
    function setMinSwapTokensThreshold(uint256 swapTokensAtAmount) public onlyOwner {
        _swapTokensAtAmount = swapTokensAtAmount;
    }

    function updateMarketingWallet(address marketingWallet) public onlyOwner {
        _marketingAddress = payable(marketingWallet);
    }


    function updateKeyHash(bytes32 keyHash) public onlyOwner {
        _vrfKeyHash = keyHash;
    }

    //Set minimum tokens required to swap.
    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }

    //Set maximum transaction
    function setMaxTxnAmount(uint256 maxTxAmount) public onlyOwner {
        require(maxTxAmount > 10000000 * 10**_decimals);
        _maxTxAmount = maxTxAmount;
    }

    function setMaxWalletSize(uint256 maxWalletSize) public onlyOwner {
        require(maxWalletSize > 10000000 * 10**_decimals);
        _maxWalletSize = maxWalletSize;
    }

    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
    }

}

File 2 of 4 : VRFConsumerBaseV2.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

/** ****************************************************************************
 * @notice Interface for contracts using VRF randomness
 * *****************************************************************************
 * @dev PURPOSE
 *
 * @dev Reggie the Random Oracle (not his real job) wants to provide randomness
 * @dev to Vera the verifier in such a way that Vera can be sure he's not
 * @dev making his output up to suit himself. Reggie provides Vera a public key
 * @dev to which he knows the secret key. Each time Vera provides a seed to
 * @dev Reggie, he gives back a value which is computed completely
 * @dev deterministically from the seed and the secret key.
 *
 * @dev Reggie provides a proof by which Vera can verify that the output was
 * @dev correctly computed once Reggie tells it to her, but without that proof,
 * @dev the output is indistinguishable to her from a uniform random sample
 * @dev from the output space.
 *
 * @dev The purpose of this contract is to make it easy for unrelated contracts
 * @dev to talk to Vera the verifier about the work Reggie is doing, to provide
 * @dev simple access to a verifiable source of randomness. It ensures 2 things:
 * @dev 1. The fulfillment came from the VRFCoordinator
 * @dev 2. The consumer contract implements fulfillRandomWords.
 * *****************************************************************************
 * @dev USAGE
 *
 * @dev Calling contracts must inherit from VRFConsumerBase, and can
 * @dev initialize VRFConsumerBase's attributes in their constructor as
 * @dev shown:
 *
 * @dev   contract VRFConsumer {
 * @dev     constructor(<other arguments>, address _vrfCoordinator, address _link)
 * @dev       VRFConsumerBase(_vrfCoordinator) public {
 * @dev         <initialization with other arguments goes here>
 * @dev       }
 * @dev   }
 *
 * @dev The oracle will have given you an ID for the VRF keypair they have
 * @dev committed to (let's call it keyHash). Create subscription, fund it
 * @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface
 * @dev subscription management functions).
 * @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations,
 * @dev callbackGasLimit, numWords),
 * @dev see (VRFCoordinatorInterface for a description of the arguments).
 *
 * @dev Once the VRFCoordinator has received and validated the oracle's response
 * @dev to your request, it will call your contract's fulfillRandomWords method.
 *
 * @dev The randomness argument to fulfillRandomWords is a set of random words
 * @dev generated from your requestId and the blockHash of the request.
 *
 * @dev If your contract could have concurrent requests open, you can use the
 * @dev requestId returned from requestRandomWords to track which response is associated
 * @dev with which randomness request.
 * @dev See "SECURITY CONSIDERATIONS" for principles to keep in mind,
 * @dev if your contract could have multiple requests in flight simultaneously.
 *
 * @dev Colliding `requestId`s are cryptographically impossible as long as seeds
 * @dev differ.
 *
 * *****************************************************************************
 * @dev SECURITY CONSIDERATIONS
 *
 * @dev A method with the ability to call your fulfillRandomness method directly
 * @dev could spoof a VRF response with any random value, so it's critical that
 * @dev it cannot be directly called by anything other than this base contract
 * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method).
 *
 * @dev For your users to trust that your contract's random behavior is free
 * @dev from malicious interference, it's best if you can write it so that all
 * @dev behaviors implied by a VRF response are executed *during* your
 * @dev fulfillRandomness method. If your contract must store the response (or
 * @dev anything derived from it) and use it later, you must ensure that any
 * @dev user-significant behavior which depends on that stored value cannot be
 * @dev manipulated by a subsequent VRF request.
 *
 * @dev Similarly, both miners and the VRF oracle itself have some influence
 * @dev over the order in which VRF responses appear on the blockchain, so if
 * @dev your contract could have multiple VRF requests in flight simultaneously,
 * @dev you must ensure that the order in which the VRF responses arrive cannot
 * @dev be used to manipulate your contract's user-significant behavior.
 *
 * @dev Since the block hash of the block which contains the requestRandomness
 * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful
 * @dev miner could, in principle, fork the blockchain to evict the block
 * @dev containing the request, forcing the request to be included in a
 * @dev different block with a different hash, and therefore a different input
 * @dev to the VRF. However, such an attack would incur a substantial economic
 * @dev cost. This cost scales with the number of blocks the VRF oracle waits
 * @dev until it calls responds to a request. It is for this reason that
 * @dev that you can signal to an oracle you'd like them to wait longer before
 * @dev responding to the request (however this is not enforced in the contract
 * @dev and so remains effective only in the case of unmodified oracle software).
 */
abstract contract VRFConsumerBaseV2 {
  error OnlyCoordinatorCanFulfill(address have, address want);
  address private immutable vrfCoordinator;

  /**
   * @param _vrfCoordinator address of VRFCoordinator contract
   */
  constructor(address _vrfCoordinator) {
    vrfCoordinator = _vrfCoordinator;
  }

  /**
   * @notice fulfillRandomness handles the VRF response. Your contract must
   * @notice implement it. See "SECURITY CONSIDERATIONS" above for important
   * @notice principles to keep in mind when implementing your fulfillRandomness
   * @notice method.
   *
   * @dev VRFConsumerBaseV2 expects its subcontracts to have a method with this
   * @dev signature, and will call it once it has verified the proof
   * @dev associated with the randomness. (It is triggered via a call to
   * @dev rawFulfillRandomness, below.)
   *
   * @param requestId The Id initially returned by requestRandomness
   * @param randomWords the VRF output expanded to the requested number of words
   */
  function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual;

  // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF
  // proof. rawFulfillRandomness then calls fulfillRandomness, after validating
  // the origin of the call
  function rawFulfillRandomWords(uint256 requestId, uint256[] memory randomWords) external {
    if (msg.sender != vrfCoordinator) {
      revert OnlyCoordinatorCanFulfill(msg.sender, vrfCoordinator);
    }
    fulfillRandomWords(requestId, randomWords);
  }
}

File 3 of 4 : VRFCoordinatorV2Interface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface VRFCoordinatorV2Interface {
  /**
   * @notice Get configuration relevant for making requests
   * @return minimumRequestConfirmations global min for request confirmations
   * @return maxGasLimit global max for request gas limit
   * @return s_provingKeyHashes list of registered key hashes
   */
  function getRequestConfig() external view returns (uint16, uint32, bytes32[] memory);

  /**
   * @notice Request a set of random words.
   * @param keyHash - Corresponds to a particular oracle job which uses
   * that key for generating the VRF proof. Different keyHash's have different gas price
   * ceilings, so you can select a specific one to bound your maximum per request cost.
   * @param subId  - The ID of the VRF subscription. Must be funded
   * with the minimum subscription balance required for the selected keyHash.
   * @param minimumRequestConfirmations - How many blocks you'd like the
   * oracle to wait before responding to the request. See SECURITY CONSIDERATIONS
   * for why you may want to request more. The acceptable range is
   * [minimumRequestBlockConfirmations, 200].
   * @param callbackGasLimit - How much gas you'd like to receive in your
   * fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords
   * may be slightly less than this amount because of gas used calling the function
   * (argument decoding etc.), so you may need to request slightly more than you expect
   * to have inside fulfillRandomWords. The acceptable range is
   * [0, maxGasLimit]
   * @param numWords - The number of uint256 random values you'd like to receive
   * in your fulfillRandomWords callback. Note these numbers are expanded in a
   * secure way by the VRFCoordinator from a single random value supplied by the oracle.
   * @return requestId - A unique identifier of the request. Can be used to match
   * a request to a response in fulfillRandomWords.
   */
  function requestRandomWords(
    bytes32 keyHash,
    uint64 subId,
    uint16 minimumRequestConfirmations,
    uint32 callbackGasLimit,
    uint32 numWords
  ) external returns (uint256 requestId);

  /**
   * @notice Create a VRF subscription.
   * @return subId - A unique subscription id.
   * @dev You can manage the consumer set dynamically with addConsumer/removeConsumer.
   * @dev Note to fund the subscription, use transferAndCall. For example
   * @dev  LINKTOKEN.transferAndCall(
   * @dev    address(COORDINATOR),
   * @dev    amount,
   * @dev    abi.encode(subId));
   */
  function createSubscription() external returns (uint64 subId);

  /**
   * @notice Get a VRF subscription.
   * @param subId - ID of the subscription
   * @return balance - LINK balance of the subscription in juels.
   * @return reqCount - number of requests for this subscription, determines fee tier.
   * @return owner - owner of the subscription.
   * @return consumers - list of consumer address which are able to use this subscription.
   */
  function getSubscription(
    uint64 subId
  ) external view returns (uint96 balance, uint64 reqCount, address owner, address[] memory consumers);

  /**
   * @notice Request subscription owner transfer.
   * @param subId - ID of the subscription
   * @param newOwner - proposed new owner of the subscription
   */
  function requestSubscriptionOwnerTransfer(uint64 subId, address newOwner) external;

  /**
   * @notice Request subscription owner transfer.
   * @param subId - ID of the subscription
   * @dev will revert if original owner of subId has
   * not requested that msg.sender become the new owner.
   */
  function acceptSubscriptionOwnerTransfer(uint64 subId) external;

  /**
   * @notice Add a consumer to a VRF subscription.
   * @param subId - ID of the subscription
   * @param consumer - New consumer which can use the subscription
   */
  function addConsumer(uint64 subId, address consumer) external;

  /**
   * @notice Remove a consumer from a VRF subscription.
   * @param subId - ID of the subscription
   * @param consumer - Consumer to remove from the subscription
   */
  function removeConsumer(uint64 subId, address consumer) external;

  /**
   * @notice Cancel a subscription
   * @param subId - ID of the subscription
   * @param to - Where to send the remaining LINK to
   */
  function cancelSubscription(uint64 subId, address to) external;

  /*
   * @notice Check to see if there exists a request commitment consumers
   * for all consumers and keyhashes for a given sub.
   * @param subId - ID of the subscription
   * @return true if there exists at least one unfulfilled request for the subscription, false
   * otherwise.
   */
  function pendingRequestExists(uint64 subId) external view returns (bool);
}

File 4 of 4 : LinkTokenInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface LinkTokenInterface {
  function allowance(address owner, address spender) external view returns (uint256 remaining);

  function approve(address spender, uint256 value) external returns (bool success);

  function balanceOf(address owner) external view returns (uint256 balance);

  function decimals() external view returns (uint8 decimalPlaces);

  function decreaseApproval(address spender, uint256 addedValue) external returns (bool success);

  function increaseApproval(address spender, uint256 subtractedValue) external;

  function name() external view returns (string memory tokenName);

  function symbol() external view returns (string memory tokenSymbol);

  function totalSupply() external view returns (uint256 totalTokensIssued);

  function transfer(address to, uint256 value) external returns (bool success);

  function transferAndCall(
    address to,
    uint256 value,
    bytes calldata data
  ) external returns (bool success);

  function transferFrom(
    address from,
    address to,
    uint256 value
  ) external returns (bool success);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_vrfCoordinator","type":"address"},{"internalType":"uint64","name":"_subscriptionId","type":"uint64"},{"internalType":"bytes32","name":"_keyHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"have","type":"address"},{"internalType":"address","name":"want","type":"address"}],"name":"OnlyCoordinatorCanFulfill","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_buyMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_escapeTaxDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_redisFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_redisFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeEscaped","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeNotEscaped","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOfNoReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"escape","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"escapeRequested","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"escapeRequests","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"escapingTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"getEscapeSecondsLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getTeam","outputs":[{"internalType":"enum Jail.Team","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sellTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"teamXTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamYTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamZTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"keyHash","type":"bytes32"}],"name":"updateKeyHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userEscaped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userTryingEscape","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526004805465ffffffffffff1916640927c00003179055620000286012600a620006f9565b6200003890633b9aca0062000711565b620000469060001962000749565b620000549060001962000760565b600955620000656012600a620006f9565b6200007590633b9aca0062000711565b620000839060001962000749565b620000919060001962000760565b600a556012600a620000a49190620006f9565b620000b490633b9aca0062000711565b620000c29060001962000749565b620000d09060001962000760565b600b55620000e16012600a620006f9565b620000f190633b9aca0062000711565b620000ff9060001962000749565b6200010d9060001962000760565b600c556200011e6012600a620006f9565b6200012e90633b9aca0062000711565b6200013c9060001962000749565b6200014a9060001962000760565b600d55603c600f81905562000160908062000711565b601055600f546200017390603c62000711565b601155600f5462000187906101e062000711565b601255600f546200019a90603c62000711565b60135560006014819055600f60158190556016829055601781905560188290556019819055615460601a55602282905560238290556024819055602591909155602655602a805462ffffff60a01b1916600160b01b1790556064620002026012600a620006f9565b6200021290633b9aca0062000711565b6200021f90600262000711565b6200022b91906200077a565b602b5560646200023e6012600a620006f9565b6200024e90633b9aca0062000711565b6200025b90600262000711565b6200026791906200077a565b602c55620002786012600a620006f9565b6200028790620f424062000711565b602d553480156200029757600080fd5b506040516200328e3803806200328e833981016040819052620002ba91620007ae565b600080546001600160a01b031916339081178255604051859282917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b03166080526009543360009081526005602090815260409182902092909255602980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155815163c45a015560e01b815291519092839263c45a01559260048083019392829003018186803b1580156200037e57600080fd5b505afa15801562000393573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b99190620007ff565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040257600080fd5b505afa15801562000417573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043d9190620007ff565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200048657600080fd5b505af11580156200049b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c19190620007ff565b602a80546001600160a01b03199081166001600160a01b039384161790915560008054602880549185169190931681178355815260086020526040808220805460ff19908116600190811790925530845282842080548216831790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342998054821683179055935485168352908220805490931617909155600280549287166001600160e01b031990931692909217600160a01b6001600160401b0387160217909155600383905533907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620005b96012600a620006f9565b620005c990633b9aca0062000711565b60405190815260200160405180910390a3505050506200081d565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200063b5781600019048211156200061f576200061f620005e4565b808516156200062d57918102915b93841c9390800290620005ff565b509250929050565b6000826200065457506001620006f3565b816200066357506000620006f3565b81600181146200067c57600281146200068757620006a7565b6001915050620006f3565b60ff8411156200069b576200069b620005e4565b50506001821b620006f3565b5060208310610133831016604e8410600b8410161715620006cc575081810a620006f3565b620006d88383620005fa565b8060001904821115620006ef57620006ef620005e4565b0290505b92915050565b60006200070a60ff84168362000643565b9392505050565b60008160001904831182151516156200072e576200072e620005e4565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826200075b576200075b62000733565b500690565b600082821015620007755762000775620005e4565b500390565b6000826200078c576200078c62000733565b500490565b80516001600160a01b0381168114620007a957600080fd5b919050565b600080600060608486031215620007c457600080fd5b620007cf8462000791565b60208501519093506001600160401b0381168114620007ed57600080fd5b80925050604084015190509250925092565b6000602082840312156200081257600080fd5b6200070a8262000791565b608051612a4e62000840600039600081816109a901526109eb0152612a4e6000f3fe6080604052600436106102e85760003560e01c80637d1db4a511610190578063aacebbe3116100dc578063d180667d11610095578063e15f98881161006f578063e15f9888146108d6578063e7fa67e514610906578063ea1644d514610926578063f2fde38b1461094657600080fd5b8063d180667d1461084b578063dd62ed3e14610860578063e0d38923146108a657600080fd5b8063aacebbe3146107ab578063bf5976d3146107cb578063c3081242146107e1578063c3c8cd8014610801578063c492f04614610816578063c9567bf91461083657600080fd5b80638da5cb5b1161014957806398a5c3151161012357806398a5c31514610735578063a01abe5c14610755578063a2a957bb1461076b578063a9059cbb1461078b57600080fd5b80638da5cb5b146107015780638f9a55c01461071f57806395d89b411461031d57600080fd5b80637d1db4a51461064f5780637e89c733146106655780637f2feddc1461067b5780638199040e146106a8578063833209b6146106be57806387529f0f146106d457600080fd5b80633d9dbf2b1161024f5780636d8aa8f811610208578063715018a6116101e2578063715018a6146105ce57806374010ece146105e35780637495530714610603578063784696e31461063957600080fd5b80636d8aa8f8146105795780636fc3eaec1461059957806370a08231146105ae57600080fd5b80633d9dbf2b146104b457806344aac963146104ca57806349bd5a5e146104e05780634cbbba001461050057806355b87b5f146105205780636476e3d01461054d57600080fd5b806318160ddd116102a157806318160ddd146104155780631fe543e31461042a57806323b872dd1461044c5780632fd689e31461046c578063313ce5671461048257806331cc43bd1461049e57600080fd5b8063042eab73146102f457806306fdde031461031d578063095ea7b3146103505780630e1b1e221461038057806313a8458b146103ad5780631694505e146103dd57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061030a60185481565b6040519081526020015b60405180910390f35b34801561032957600080fd5b5060408051808201825260048152631290525360e21b602082015290516103149190612404565b34801561035c57600080fd5b5061037061036b36600461246e565b610966565b6040519015158152602001610314565b34801561038c57600080fd5b5061030a61039b36600461249a565b601c6020526000908152604090205481565b3480156103b957600080fd5b506103706103c836600461249a565b601f6020526000908152604090205460ff1681565b3480156103e957600080fd5b506029546103fd906001600160a01b031681565b6040516001600160a01b039091168152602001610314565b34801561042157600080fd5b5061030a61097d565b34801561043657600080fd5b5061044a6104453660046124cd565b61099e565b005b34801561045857600080fd5b50610370610467366004612597565b610a2b565b34801561047857600080fd5b5061030a602d5481565b34801561048e57600080fd5b5060405160128152602001610314565b3480156104aa57600080fd5b5061030a60145481565b3480156104c057600080fd5b5061030a60195481565b3480156104d657600080fd5b5061030a60115481565b3480156104ec57600080fd5b50602a546103fd906001600160a01b031681565b34801561050c57600080fd5b5061030a61051b36600461249a565b610a94565b34801561052c57600080fd5b5061030a61053b36600461249a565b60216020526000908152604090205481565b34801561055957600080fd5b5061030a61056836600461249a565b602080526000908152604090205481565b34801561058557600080fd5b5061044a6105943660046125ed565b610ae6565b3480156105a557600080fd5b5061044a610b2e565b3480156105ba57600080fd5b5061030a6105c936600461249a565b610b5b565b3480156105da57600080fd5b5061044a610b7e565b3480156105ef57600080fd5b5061044a6105fe366004612608565b610bf2565b34801561060f57600080fd5b506103fd61061e366004612608565b601e602052600090815260409020546001600160a01b031681565b34801561064557600080fd5b5061030a601a5481565b34801561065b57600080fd5b5061030a602b5481565b34801561067157600080fd5b5061030a60125481565b34801561068757600080fd5b5061030a61069636600461249a565b60276020526000908152604090205481565b3480156106b457600080fd5b5061030a60175481565b3480156106ca57600080fd5b5061030a60135481565b3480156106e057600080fd5b506106f46106ef36600461249a565b610c45565b6040516103149190612637565b34801561070d57600080fd5b506000546001600160a01b03166103fd565b34801561072b57600080fd5b5061030a602c5481565b34801561074157600080fd5b5061044a610750366004612608565b610e05565b34801561076157600080fd5b5061030a60165481565b34801561077757600080fd5b5061044a61078636600461265f565b610e34565b34801561079757600080fd5b506103706107a636600461246e565b610e9e565b3480156107b757600080fd5b5061044a6107c636600461249a565b610eab565b3480156107d757600080fd5b5061030a60155481565b3480156107ed57600080fd5b5061030a6107fc36600461249a565b610ef7565b34801561080d57600080fd5b5061044a610f7f565b34801561082257600080fd5b5061044a610831366004612691565b610fb5565b34801561084257600080fd5b5061044a611056565b34801561085757600080fd5b5061044a611095565b34801561086c57600080fd5b5061030a61087b366004612715565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b3480156108b257600080fd5b506103706108c136600461249a565b601d6020526000908152604090205460ff1681565b3480156108e257600080fd5b506103706108f136600461249a565b601b6020526000908152604090205460ff1681565b34801561091257600080fd5b5061044a610921366004612608565b611247565b34801561093257600080fd5b5061044a610941366004612608565b611276565b34801561095257600080fd5b5061044a61096136600461249a565b6112c9565b60006109733384846113b3565b5060015b92915050565b600061098b6012600a612848565b61099990633b9aca00612857565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a1d5760405163073e64fd60e21b81523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044015b60405180910390fd5b610a2782826114d7565b5050565b6000610a3884848461151c565b610a8a8433610a85856040518060600160405280602881526020016129f1602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190611b44565b6113b3565b5060019392505050565b600080610adf610ac0610aa96012600a612848565b610ab790633b9aca00612857565b60095490611b7e565b6001600160a01b03851660009081526005602052604090205490611b7e565b9392505050565b6000546001600160a01b03163314610b105760405162461bcd60e51b8152600401610a1490612876565b602a8054911515600160b01b0260ff60b01b19909216919091179055565b6028546001600160a01b0316336001600160a01b031614610b4e57600080fd5b47610b5881611bc0565b50565b6001600160a01b0381166000908152600560205260408120546109779083611bfa565b6000546001600160a01b03163314610ba85760405162461bcd60e51b8152600401610a1490612876565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610c1c5760405162461bcd60e51b8152600401610a1490612876565b610c286012600a612848565b610c359062989680612857565b8111610c4057600080fd5b602b55565b6001600160a01b03811660009081526008602052604081205460ff1680610c795750602a546001600160a01b038381169116145b80610c9157506029546001600160a01b038381169116145b15610c9e57506003919050565b60646022546050610caf9190612857565b610cb991906128c1565b610cc283610a94565b118015610cf157506013546001600160a01b0383166000908152602080526040902054610cef90426128d5565b115b15610cfe57506002919050565b6001600160a01b038216600090815260216020526040902054158015610d4657506012546001600160a01b0383166000908152602080526040902054610d4490426128d5565b115b8015610d795750620186a0610d5961097d565b610d64906064612857565b610d6e91906128c1565b610d7783610a94565b115b15610d8657506001919050565b6001600160a01b038216600090815260216020526040902054158015610dce57506011546001600160a01b0383166000908152602080526040902054610dcc90426128d5565b115b8015610df057506001600160a01b038216600090815260208052604090205415155b15610dfd57506000919050565b506003919050565b6000546001600160a01b03163314610e2f5760405162461bcd60e51b8152600401610a1490612876565b602d55565b6000546001600160a01b03163314610e5e5760405162461bcd60e51b8152600401610a1490612876565b601e610e6a83866128ec565b10610e7457600080fd5b601e610e8082856128ec565b10610e8a57600080fd5b601493909355601691909155601555601755565b600061097333848461151c565b6000546001600160a01b03163314610ed55760405162461bcd60e51b8152600401610a1490612876565b602880546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152601c6020526040812054610f1c57506000919050565b601a546001600160a01b0383166000908152601c6020526040902054610f4290426128d5565b10610f4f57506000919050565b6001600160a01b0382166000908152601c6020526040902054610f7290426128d5565b601a5461097791906128d5565b6028546001600160a01b0316336001600160a01b031614610f9f57600080fd5b6000610faa30610b5b565b9050610b5881611c80565b6000546001600160a01b03163314610fdf5760405162461bcd60e51b8152600401610a1490612876565b60005b8281101561105057816008600086868581811061100157611001612904565b9050602002016020810190611016919061249a565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806110488161291a565b915050610fe2565b50505050565b6000546001600160a01b031633146110805760405162461bcd60e51b8152600401610a1490612876565b602a805460ff60a01b1916600160a01b179055565b60006110a033610b5b565b116110ed5760405162461bcd60e51b815260206004820152601d60248201527f42616c616e63652073686f756c64206265206d6f7265207468616e20300000006044820152606401610a14565b336000908152601f602052604090205460ff161561114d5760405162461bcd60e51b815260206004820152601c60248201527f596f7520616c72656164792072657175657374656420657363617065000000006044820152606401610a14565b600254600354600480546040516305d3b1d360e41b815291820192909252600160a01b830467ffffffffffffffff16602482015261ffff821660448201526201000090910463ffffffff166064820152600160848201526000916001600160a01b031690635d3b1d309060a401602060405180830381600087803b1580156111d457600080fd5b505af11580156111e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120c9190612935565b6000908152601e6020908152604080832080546001600160a01b031916339081179091558352601f9091529020805460ff1916600117905550565b6000546001600160a01b031633146112715760405162461bcd60e51b8152600401610a1490612876565b600355565b6000546001600160a01b031633146112a05760405162461bcd60e51b8152600401610a1490612876565b6112ac6012600a612848565b6112b99062989680612857565b81116112c457600080fd5b602c55565b6000546001600160a01b031633146112f35760405162461bcd60e51b8152600401610a1490612876565b6001600160a01b0381166113585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a14565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166114155760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a14565b6001600160a01b0382166114765760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a14565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611517816000815181106114ed576114ed612904565b6020908102919091018101516000858152601e9092526040909120546001600160a01b0316611e09565b505050565b6001600160a01b0383166115805760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a14565b6001600160a01b0382166115e25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a14565b600081116116445760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a14565b6000546001600160a01b0384811691161480159061167057506000546001600160a01b03838116911614155b156118b857602a54600160a01b900460ff16611709576000546001600160a01b038481169116146117095760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610a14565b602b5481111561175b5760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d6974000000006044820152606401610a14565b602a546001600160a01b038381169116146117e157602c548161177d84610b5b565b61178791906128ec565b11156117e15760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b6064820152608401610a14565b60006117ec30610b5b565b602d54602b5491925082101590821061180557602b5491505b80801561181c5750602a54600160a81b900460ff16155b80156118365750602a546001600160a01b03868116911614155b801561184b5750602a54600160b01b900460ff165b801561187057506001600160a01b03851660009081526008602052604090205460ff16155b801561189557506001600160a01b03841660009081526008602052604090205460ff16155b156118b5576118a382611c80565b4780156118b3576118b347611bc0565b505b50505b6001600160a01b038316600090815260086020526040902054600190839060ff16806118fc57506001600160a01b03841660009081526008602052604090205460ff165b8061192e5750602a546001600160a01b0386811691161480159061192e5750602a546001600160a01b03858116911614155b1561193c5760009150611aad565b602a546001600160a01b03868116911614801561196757506029546001600160a01b03858116911614155b156119ca576014546023556015546024556022548361198586610a94565b61198f91906128ec565b11156119ad578261199f85610a94565b6119a991906128ec565b6022555b506001600160a01b03831660009081526020805260409020429055825b602a546001600160a01b0385811691161480156119f557506029546001600160a01b03868116911614155b15611aad576016546023556017546024556001600160a01b0385166000908152601b602052604090205460ff1615611a8f57601a546001600160a01b0386166000908152601c6020526040902054611a4d90426128d5565b11611a8f576001600160a01b0385166000908152601d602052604090205460ff1615611a83576018546023556000602455611a8f565b60195460235560006024555b506001600160a01b0384166000908152602160205260409020429055835b611aba8585858585611e67565b6001600160a01b0385166000908152601b602052604090205460ff1615611b3d57601a546001600160a01b0386166000908152601c6020526040902054611b0190426128d5565b1115611b3d576001600160a01b0385166000908152601b60209081526040808320805460ff19908116909155601f909252909120805490911690555b5050505050565b60008184841115611b685760405162461bcd60e51b8152600401610a149190612404565b506000611b7584866128d5565b95945050505050565b6000610adf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e96565b6028546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610a27573d6000803e3d6000fd5b6000600954831115611c615760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a14565b6000611c6c83611ec4565b9050611c788482611b7e565b949350505050565b602a805460ff60a81b1916600160a81b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611cc857611cc8612904565b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611d1c57600080fd5b505afa158015611d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d54919061294e565b81600181518110611d6757611d67612904565b6001600160a01b039283166020918202929092010152602954611d8d91309116846113b3565b60295460405163791ac94760e01b81526001600160a01b039091169063791ac94790611dc690859060009086903090429060040161296b565b600060405180830381600087803b158015611de057600080fd5b505af1158015611df4573d6000803e3d6000fd5b5050602a805460ff60a81b1916905550505050565b600080611e176002856129dc565b6001600160a01b0384166000908152601b60209081526040808320805460ff19908116600117909155601c8352818420429055601d90925290912080549091169115918217905591505092915050565b81611e7457611e74611ee1565b611e8085858584611f0f565b81611b3d57611b3d602554602355602654602455565b60008183611eb75760405162461bcd60e51b8152600401610a149190612404565b506000611b7584866128c1565b6000806000611ed28461201b565b9092509050611c788282611b7e565b602354158015611ef15750602454155b15611ef857565b602380546025556024805460265560009182905555565b600080600080600080611f2288886120fd565b955095509550955095509550611f6686600560008d6001600160a01b03166001600160a01b031681526020019081526020016000205461215c90919063ffffffff16565b6001600160a01b03808c1660009081526005602052604080822093909355908b1681522054611f95908661219e565b6001600160a01b038a16600090815260056020526040902055611fb881886121fd565b611fc28483612249565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161200791815260200190565b60405180910390a350505050505050505050565b60095460009081908161202d85610c45565b600381111561203e5761203e612621565b14156120495750600b545b600161205485610c45565b600381111561206557612065612621565b14156120705750600c545b600261207b85610c45565b600381111561208c5761208c612621565b14156120975750600d545b60006120a56012600a612848565b6120b390633b9aca00612857565b90506120c4610aa96012600a612848565b8210156120f3576009546120da6012600a612848565b6120e890633b9aca00612857565b935093505050915091565b9094909350915050565b600080600080600080600080600061211a8b6023546024546122e0565b925092509250600061212b8b611ec4565b9050600080600061213e8f878787612335565b919e509c509a50959850939650919450505050509295509295509295565b6000610adf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b44565b6000806121ab83856128ec565b905083811015610adf5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a14565b600061220882611ec4565b905060006122168483612385565b30600090815260056020526040902054909150612233908261219e565b3060009081526005602052604090205550505050565b60095461225790600061215c565b60095561227d606461226a846014612857565b61227491906128c1565b600b549061215c565b600b556122a3606461229084601e612857565b61229a91906128c1565b600c549061215c565b600c556122c960646122b6846032612857565b6122c091906128c1565b600d549061215c565b600d55600e546122d9908261219e565b600e555050565b60008080806122fa60646122f48989612385565b90611b7e565b9050600061230d60646122f48a89612385565b905060006123258261231f8b8661215c565b9061215c565b9992985090965090945050505050565b60008080806123448886612385565b905060006123528887612385565b905060006123608888612385565b905060006123728261231f868661215c565b939b939a50919850919650505050505050565b60008261239457506000610977565b60006123a08385612857565b9050826123ad85836128c1565b14610adf5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a14565b600060208083528351808285015260005b8181101561243157858101830151858201604001528201612415565b81811115612443576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610b5857600080fd5b6000806040838503121561248157600080fd5b823561248c81612459565b946020939093013593505050565b6000602082840312156124ac57600080fd5b8135610adf81612459565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156124e057600080fd5b8235915060208084013567ffffffffffffffff8082111561250057600080fd5b818601915086601f83011261251457600080fd5b813581811115612526576125266124b7565b8060051b604051601f19603f8301168101818110858211171561254b5761254b6124b7565b60405291825284820192508381018501918983111561256957600080fd5b938501935b828510156125875784358452938501939285019261256e565b8096505050505050509250929050565b6000806000606084860312156125ac57600080fd5b83356125b781612459565b925060208401356125c781612459565b929592945050506040919091013590565b803580151581146125e857600080fd5b919050565b6000602082840312156125ff57600080fd5b610adf826125d8565b60006020828403121561261a57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b602081016004831061265957634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806080858703121561267557600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000604084860312156126a657600080fd5b833567ffffffffffffffff808211156126be57600080fd5b818601915086601f8301126126d257600080fd5b8135818111156126e157600080fd5b8760208260051b85010111156126f657600080fd5b60209283019550935061270c91860190506125d8565b90509250925092565b6000806040838503121561272857600080fd5b823561273381612459565b9150602083013561274381612459565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561279f5781600019048211156127855761278561274e565b8085161561279257918102915b93841c9390800290612769565b509250929050565b6000826127b657506001610977565b816127c357506000610977565b81600181146127d957600281146127e3576127ff565b6001915050610977565b60ff8411156127f4576127f461274e565b50506001821b610977565b5060208310610133831016604e8410600b8410161715612822575081810a610977565b61282c8383612764565b80600019048211156128405761284061274e565b029392505050565b6000610adf60ff8416836127a7565b60008160001904831182151516156128715761287161274e565b500290565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601260045260246000fd5b6000826128d0576128d06128ab565b500490565b6000828210156128e7576128e761274e565b500390565b600082198211156128ff576128ff61274e565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561292e5761292e61274e565b5060010190565b60006020828403121561294757600080fd5b5051919050565b60006020828403121561296057600080fd5b8151610adf81612459565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129bb5784516001600160a01b031683529383019391830191600101612996565b50506001600160a01b03969096166060850152505050608001529392505050565b6000826129eb576129eb6128ab565b50069056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c1f21a6ec659fed94cdc15f0805f8a8d7afba2e1d47c700561ea99f28f56466a64736f6c63430008090033000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909000000000000000000000000000000000000000000000000000000000000036f8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef

Deployed Bytecode

0x6080604052600436106102e85760003560e01c80637d1db4a511610190578063aacebbe3116100dc578063d180667d11610095578063e15f98881161006f578063e15f9888146108d6578063e7fa67e514610906578063ea1644d514610926578063f2fde38b1461094657600080fd5b8063d180667d1461084b578063dd62ed3e14610860578063e0d38923146108a657600080fd5b8063aacebbe3146107ab578063bf5976d3146107cb578063c3081242146107e1578063c3c8cd8014610801578063c492f04614610816578063c9567bf91461083657600080fd5b80638da5cb5b1161014957806398a5c3151161012357806398a5c31514610735578063a01abe5c14610755578063a2a957bb1461076b578063a9059cbb1461078b57600080fd5b80638da5cb5b146107015780638f9a55c01461071f57806395d89b411461031d57600080fd5b80637d1db4a51461064f5780637e89c733146106655780637f2feddc1461067b5780638199040e146106a8578063833209b6146106be57806387529f0f146106d457600080fd5b80633d9dbf2b1161024f5780636d8aa8f811610208578063715018a6116101e2578063715018a6146105ce57806374010ece146105e35780637495530714610603578063784696e31461063957600080fd5b80636d8aa8f8146105795780636fc3eaec1461059957806370a08231146105ae57600080fd5b80633d9dbf2b146104b457806344aac963146104ca57806349bd5a5e146104e05780634cbbba001461050057806355b87b5f146105205780636476e3d01461054d57600080fd5b806318160ddd116102a157806318160ddd146104155780631fe543e31461042a57806323b872dd1461044c5780632fd689e31461046c578063313ce5671461048257806331cc43bd1461049e57600080fd5b8063042eab73146102f457806306fdde031461031d578063095ea7b3146103505780630e1b1e221461038057806313a8458b146103ad5780631694505e146103dd57600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061030a60185481565b6040519081526020015b60405180910390f35b34801561032957600080fd5b5060408051808201825260048152631290525360e21b602082015290516103149190612404565b34801561035c57600080fd5b5061037061036b36600461246e565b610966565b6040519015158152602001610314565b34801561038c57600080fd5b5061030a61039b36600461249a565b601c6020526000908152604090205481565b3480156103b957600080fd5b506103706103c836600461249a565b601f6020526000908152604090205460ff1681565b3480156103e957600080fd5b506029546103fd906001600160a01b031681565b6040516001600160a01b039091168152602001610314565b34801561042157600080fd5b5061030a61097d565b34801561043657600080fd5b5061044a6104453660046124cd565b61099e565b005b34801561045857600080fd5b50610370610467366004612597565b610a2b565b34801561047857600080fd5b5061030a602d5481565b34801561048e57600080fd5b5060405160128152602001610314565b3480156104aa57600080fd5b5061030a60145481565b3480156104c057600080fd5b5061030a60195481565b3480156104d657600080fd5b5061030a60115481565b3480156104ec57600080fd5b50602a546103fd906001600160a01b031681565b34801561050c57600080fd5b5061030a61051b36600461249a565b610a94565b34801561052c57600080fd5b5061030a61053b36600461249a565b60216020526000908152604090205481565b34801561055957600080fd5b5061030a61056836600461249a565b602080526000908152604090205481565b34801561058557600080fd5b5061044a6105943660046125ed565b610ae6565b3480156105a557600080fd5b5061044a610b2e565b3480156105ba57600080fd5b5061030a6105c936600461249a565b610b5b565b3480156105da57600080fd5b5061044a610b7e565b3480156105ef57600080fd5b5061044a6105fe366004612608565b610bf2565b34801561060f57600080fd5b506103fd61061e366004612608565b601e602052600090815260409020546001600160a01b031681565b34801561064557600080fd5b5061030a601a5481565b34801561065b57600080fd5b5061030a602b5481565b34801561067157600080fd5b5061030a60125481565b34801561068757600080fd5b5061030a61069636600461249a565b60276020526000908152604090205481565b3480156106b457600080fd5b5061030a60175481565b3480156106ca57600080fd5b5061030a60135481565b3480156106e057600080fd5b506106f46106ef36600461249a565b610c45565b6040516103149190612637565b34801561070d57600080fd5b506000546001600160a01b03166103fd565b34801561072b57600080fd5b5061030a602c5481565b34801561074157600080fd5b5061044a610750366004612608565b610e05565b34801561076157600080fd5b5061030a60165481565b34801561077757600080fd5b5061044a61078636600461265f565b610e34565b34801561079757600080fd5b506103706107a636600461246e565b610e9e565b3480156107b757600080fd5b5061044a6107c636600461249a565b610eab565b3480156107d757600080fd5b5061030a60155481565b3480156107ed57600080fd5b5061030a6107fc36600461249a565b610ef7565b34801561080d57600080fd5b5061044a610f7f565b34801561082257600080fd5b5061044a610831366004612691565b610fb5565b34801561084257600080fd5b5061044a611056565b34801561085757600080fd5b5061044a611095565b34801561086c57600080fd5b5061030a61087b366004612715565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b3480156108b257600080fd5b506103706108c136600461249a565b601d6020526000908152604090205460ff1681565b3480156108e257600080fd5b506103706108f136600461249a565b601b6020526000908152604090205460ff1681565b34801561091257600080fd5b5061044a610921366004612608565b611247565b34801561093257600080fd5b5061044a610941366004612608565b611276565b34801561095257600080fd5b5061044a61096136600461249a565b6112c9565b60006109733384846113b3565b5060015b92915050565b600061098b6012600a612848565b61099990633b9aca00612857565b905090565b336001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e699091614610a1d5760405163073e64fd60e21b81523360048201526001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e699091660248201526044015b60405180910390fd5b610a2782826114d7565b5050565b6000610a3884848461151c565b610a8a8433610a85856040518060600160405280602881526020016129f1602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190611b44565b6113b3565b5060019392505050565b600080610adf610ac0610aa96012600a612848565b610ab790633b9aca00612857565b60095490611b7e565b6001600160a01b03851660009081526005602052604090205490611b7e565b9392505050565b6000546001600160a01b03163314610b105760405162461bcd60e51b8152600401610a1490612876565b602a8054911515600160b01b0260ff60b01b19909216919091179055565b6028546001600160a01b0316336001600160a01b031614610b4e57600080fd5b47610b5881611bc0565b50565b6001600160a01b0381166000908152600560205260408120546109779083611bfa565b6000546001600160a01b03163314610ba85760405162461bcd60e51b8152600401610a1490612876565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610c1c5760405162461bcd60e51b8152600401610a1490612876565b610c286012600a612848565b610c359062989680612857565b8111610c4057600080fd5b602b55565b6001600160a01b03811660009081526008602052604081205460ff1680610c795750602a546001600160a01b038381169116145b80610c9157506029546001600160a01b038381169116145b15610c9e57506003919050565b60646022546050610caf9190612857565b610cb991906128c1565b610cc283610a94565b118015610cf157506013546001600160a01b0383166000908152602080526040902054610cef90426128d5565b115b15610cfe57506002919050565b6001600160a01b038216600090815260216020526040902054158015610d4657506012546001600160a01b0383166000908152602080526040902054610d4490426128d5565b115b8015610d795750620186a0610d5961097d565b610d64906064612857565b610d6e91906128c1565b610d7783610a94565b115b15610d8657506001919050565b6001600160a01b038216600090815260216020526040902054158015610dce57506011546001600160a01b0383166000908152602080526040902054610dcc90426128d5565b115b8015610df057506001600160a01b038216600090815260208052604090205415155b15610dfd57506000919050565b506003919050565b6000546001600160a01b03163314610e2f5760405162461bcd60e51b8152600401610a1490612876565b602d55565b6000546001600160a01b03163314610e5e5760405162461bcd60e51b8152600401610a1490612876565b601e610e6a83866128ec565b10610e7457600080fd5b601e610e8082856128ec565b10610e8a57600080fd5b601493909355601691909155601555601755565b600061097333848461151c565b6000546001600160a01b03163314610ed55760405162461bcd60e51b8152600401610a1490612876565b602880546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152601c6020526040812054610f1c57506000919050565b601a546001600160a01b0383166000908152601c6020526040902054610f4290426128d5565b10610f4f57506000919050565b6001600160a01b0382166000908152601c6020526040902054610f7290426128d5565b601a5461097791906128d5565b6028546001600160a01b0316336001600160a01b031614610f9f57600080fd5b6000610faa30610b5b565b9050610b5881611c80565b6000546001600160a01b03163314610fdf5760405162461bcd60e51b8152600401610a1490612876565b60005b8281101561105057816008600086868581811061100157611001612904565b9050602002016020810190611016919061249a565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806110488161291a565b915050610fe2565b50505050565b6000546001600160a01b031633146110805760405162461bcd60e51b8152600401610a1490612876565b602a805460ff60a01b1916600160a01b179055565b60006110a033610b5b565b116110ed5760405162461bcd60e51b815260206004820152601d60248201527f42616c616e63652073686f756c64206265206d6f7265207468616e20300000006044820152606401610a14565b336000908152601f602052604090205460ff161561114d5760405162461bcd60e51b815260206004820152601c60248201527f596f7520616c72656164792072657175657374656420657363617065000000006044820152606401610a14565b600254600354600480546040516305d3b1d360e41b815291820192909252600160a01b830467ffffffffffffffff16602482015261ffff821660448201526201000090910463ffffffff166064820152600160848201526000916001600160a01b031690635d3b1d309060a401602060405180830381600087803b1580156111d457600080fd5b505af11580156111e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120c9190612935565b6000908152601e6020908152604080832080546001600160a01b031916339081179091558352601f9091529020805460ff1916600117905550565b6000546001600160a01b031633146112715760405162461bcd60e51b8152600401610a1490612876565b600355565b6000546001600160a01b031633146112a05760405162461bcd60e51b8152600401610a1490612876565b6112ac6012600a612848565b6112b99062989680612857565b81116112c457600080fd5b602c55565b6000546001600160a01b031633146112f35760405162461bcd60e51b8152600401610a1490612876565b6001600160a01b0381166113585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a14565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166114155760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a14565b6001600160a01b0382166114765760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a14565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611517816000815181106114ed576114ed612904565b6020908102919091018101516000858152601e9092526040909120546001600160a01b0316611e09565b505050565b6001600160a01b0383166115805760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a14565b6001600160a01b0382166115e25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a14565b600081116116445760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a14565b6000546001600160a01b0384811691161480159061167057506000546001600160a01b03838116911614155b156118b857602a54600160a01b900460ff16611709576000546001600160a01b038481169116146117095760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610a14565b602b5481111561175b5760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d6974000000006044820152606401610a14565b602a546001600160a01b038381169116146117e157602c548161177d84610b5b565b61178791906128ec565b11156117e15760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b6064820152608401610a14565b60006117ec30610b5b565b602d54602b5491925082101590821061180557602b5491505b80801561181c5750602a54600160a81b900460ff16155b80156118365750602a546001600160a01b03868116911614155b801561184b5750602a54600160b01b900460ff165b801561187057506001600160a01b03851660009081526008602052604090205460ff16155b801561189557506001600160a01b03841660009081526008602052604090205460ff16155b156118b5576118a382611c80565b4780156118b3576118b347611bc0565b505b50505b6001600160a01b038316600090815260086020526040902054600190839060ff16806118fc57506001600160a01b03841660009081526008602052604090205460ff165b8061192e5750602a546001600160a01b0386811691161480159061192e5750602a546001600160a01b03858116911614155b1561193c5760009150611aad565b602a546001600160a01b03868116911614801561196757506029546001600160a01b03858116911614155b156119ca576014546023556015546024556022548361198586610a94565b61198f91906128ec565b11156119ad578261199f85610a94565b6119a991906128ec565b6022555b506001600160a01b03831660009081526020805260409020429055825b602a546001600160a01b0385811691161480156119f557506029546001600160a01b03868116911614155b15611aad576016546023556017546024556001600160a01b0385166000908152601b602052604090205460ff1615611a8f57601a546001600160a01b0386166000908152601c6020526040902054611a4d90426128d5565b11611a8f576001600160a01b0385166000908152601d602052604090205460ff1615611a83576018546023556000602455611a8f565b60195460235560006024555b506001600160a01b0384166000908152602160205260409020429055835b611aba8585858585611e67565b6001600160a01b0385166000908152601b602052604090205460ff1615611b3d57601a546001600160a01b0386166000908152601c6020526040902054611b0190426128d5565b1115611b3d576001600160a01b0385166000908152601b60209081526040808320805460ff19908116909155601f909252909120805490911690555b5050505050565b60008184841115611b685760405162461bcd60e51b8152600401610a149190612404565b506000611b7584866128d5565b95945050505050565b6000610adf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611e96565b6028546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610a27573d6000803e3d6000fd5b6000600954831115611c615760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a14565b6000611c6c83611ec4565b9050611c788482611b7e565b949350505050565b602a805460ff60a81b1916600160a81b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611cc857611cc8612904565b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611d1c57600080fd5b505afa158015611d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d54919061294e565b81600181518110611d6757611d67612904565b6001600160a01b039283166020918202929092010152602954611d8d91309116846113b3565b60295460405163791ac94760e01b81526001600160a01b039091169063791ac94790611dc690859060009086903090429060040161296b565b600060405180830381600087803b158015611de057600080fd5b505af1158015611df4573d6000803e3d6000fd5b5050602a805460ff60a81b1916905550505050565b600080611e176002856129dc565b6001600160a01b0384166000908152601b60209081526040808320805460ff19908116600117909155601c8352818420429055601d90925290912080549091169115918217905591505092915050565b81611e7457611e74611ee1565b611e8085858584611f0f565b81611b3d57611b3d602554602355602654602455565b60008183611eb75760405162461bcd60e51b8152600401610a149190612404565b506000611b7584866128c1565b6000806000611ed28461201b565b9092509050611c788282611b7e565b602354158015611ef15750602454155b15611ef857565b602380546025556024805460265560009182905555565b600080600080600080611f2288886120fd565b955095509550955095509550611f6686600560008d6001600160a01b03166001600160a01b031681526020019081526020016000205461215c90919063ffffffff16565b6001600160a01b03808c1660009081526005602052604080822093909355908b1681522054611f95908661219e565b6001600160a01b038a16600090815260056020526040902055611fb881886121fd565b611fc28483612249565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161200791815260200190565b60405180910390a350505050505050505050565b60095460009081908161202d85610c45565b600381111561203e5761203e612621565b14156120495750600b545b600161205485610c45565b600381111561206557612065612621565b14156120705750600c545b600261207b85610c45565b600381111561208c5761208c612621565b14156120975750600d545b60006120a56012600a612848565b6120b390633b9aca00612857565b90506120c4610aa96012600a612848565b8210156120f3576009546120da6012600a612848565b6120e890633b9aca00612857565b935093505050915091565b9094909350915050565b600080600080600080600080600061211a8b6023546024546122e0565b925092509250600061212b8b611ec4565b9050600080600061213e8f878787612335565b919e509c509a50959850939650919450505050509295509295509295565b6000610adf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b44565b6000806121ab83856128ec565b905083811015610adf5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a14565b600061220882611ec4565b905060006122168483612385565b30600090815260056020526040902054909150612233908261219e565b3060009081526005602052604090205550505050565b60095461225790600061215c565b60095561227d606461226a846014612857565b61227491906128c1565b600b549061215c565b600b556122a3606461229084601e612857565b61229a91906128c1565b600c549061215c565b600c556122c960646122b6846032612857565b6122c091906128c1565b600d549061215c565b600d55600e546122d9908261219e565b600e555050565b60008080806122fa60646122f48989612385565b90611b7e565b9050600061230d60646122f48a89612385565b905060006123258261231f8b8661215c565b9061215c565b9992985090965090945050505050565b60008080806123448886612385565b905060006123528887612385565b905060006123608888612385565b905060006123728261231f868661215c565b939b939a50919850919650505050505050565b60008261239457506000610977565b60006123a08385612857565b9050826123ad85836128c1565b14610adf5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a14565b600060208083528351808285015260005b8181101561243157858101830151858201604001528201612415565b81811115612443576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610b5857600080fd5b6000806040838503121561248157600080fd5b823561248c81612459565b946020939093013593505050565b6000602082840312156124ac57600080fd5b8135610adf81612459565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156124e057600080fd5b8235915060208084013567ffffffffffffffff8082111561250057600080fd5b818601915086601f83011261251457600080fd5b813581811115612526576125266124b7565b8060051b604051601f19603f8301168101818110858211171561254b5761254b6124b7565b60405291825284820192508381018501918983111561256957600080fd5b938501935b828510156125875784358452938501939285019261256e565b8096505050505050509250929050565b6000806000606084860312156125ac57600080fd5b83356125b781612459565b925060208401356125c781612459565b929592945050506040919091013590565b803580151581146125e857600080fd5b919050565b6000602082840312156125ff57600080fd5b610adf826125d8565b60006020828403121561261a57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b602081016004831061265957634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000806080858703121561267557600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000604084860312156126a657600080fd5b833567ffffffffffffffff808211156126be57600080fd5b818601915086601f8301126126d257600080fd5b8135818111156126e157600080fd5b8760208260051b85010111156126f657600080fd5b60209283019550935061270c91860190506125d8565b90509250925092565b6000806040838503121561272857600080fd5b823561273381612459565b9150602083013561274381612459565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561279f5781600019048211156127855761278561274e565b8085161561279257918102915b93841c9390800290612769565b509250929050565b6000826127b657506001610977565b816127c357506000610977565b81600181146127d957600281146127e3576127ff565b6001915050610977565b60ff8411156127f4576127f461274e565b50506001821b610977565b5060208310610133831016604e8410600b8410161715612822575081810a610977565b61282c8383612764565b80600019048211156128405761284061274e565b029392505050565b6000610adf60ff8416836127a7565b60008160001904831182151516156128715761287161274e565b500290565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601260045260246000fd5b6000826128d0576128d06128ab565b500490565b6000828210156128e7576128e761274e565b500390565b600082198211156128ff576128ff61274e565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561292e5761292e61274e565b5060010190565b60006020828403121561294757600080fd5b5051919050565b60006020828403121561296057600080fd5b8151610adf81612459565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129bb5784516001600160a01b031683529383019391830191600101612996565b50506001600160a01b03969096166060850152505050608001529392505050565b6000826129eb576129eb6128ab565b50069056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c1f21a6ec659fed94cdc15f0805f8a8d7afba2e1d47c700561ea99f28f56466a64736f6c63430008090033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909000000000000000000000000000000000000000000000000000000000000036f8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef

-----Decoded View---------------
Arg [0] : _vrfCoordinator (address): 0x271682DEB8C4E0901D1a1550aD2e64D568E69909
Arg [1] : _subscriptionId (uint64): 879
Arg [2] : _keyHash (bytes32): 0x8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
Arg [1] : 000000000000000000000000000000000000000000000000000000000000036f
Arg [2] : 8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.