ETH Price: $2,617.10 (-2.17%)

Contract

0xc3dBD99da846ea38d34430D852795684a211428B
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Lillian Token (LYF) (@$0.0169)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve208585142024-09-29 19:53:236 hrs ago1727639603IN
0xc3dBD99d...4a211428B
0 ETH0.000337937.29432241
Approve208239842024-09-25 0:16:475 days ago1727223407IN
0xc3dBD99d...4a211428B
0 ETH0.0012499626.98769641
Approve207400742024-09-13 7:02:2316 days ago1726210943IN
0xc3dBD99d...4a211428B
0 ETH0.000086641.8708229
Approve207012402024-09-07 20:52:5922 days ago1725742379IN
0xc3dBD99d...4a211428B
0 ETH0.000076811.65842356
Transfer206334592024-08-29 9:50:5931 days ago1724925059IN
0xc3dBD99d...4a211428B
0 ETH0.000064061.57072685
Approve205970562024-08-24 7:46:1136 days ago1724485571IN
0xc3dBD99d...4a211428B
0 ETH0.000080811.73641983
Approve205575562024-08-18 19:18:4742 days ago1724008727IN
0xc3dBD99d...4a211428B
0 ETH0.000048671.05083064
Approve205241682024-08-14 3:25:1146 days ago1723605911IN
0xc3dBD99d...4a211428B
0 ETH0.000031831.2053134
Approve205241522024-08-14 3:21:5946 days ago1723605719IN
0xc3dBD99d...4a211428B
0 ETH0.000051931.12123345
Approve204797892024-08-07 22:49:2353 days ago1723070963IN
0xc3dBD99d...4a211428B
0 ETH0.000079891.72462088
Transfer204319862024-08-01 6:44:2359 days ago1722494663IN
0xc3dBD99d...4a211428B
0 ETH0.000203554.99095466
Transfer204299212024-07-31 23:49:3560 days ago1722469775IN
0xc3dBD99d...4a211428B
0 ETH0.000183294.98278187
Withdraw Stuck E...203643472024-07-22 20:06:4769 days ago1721678807IN
0xc3dBD99d...4a211428B
0 ETH0.000246798.12433042
Approve203569752024-07-21 19:22:5970 days ago1721589779IN
0xc3dBD99d...4a211428B
0 ETH0.000174127.17740069
Approve203568992024-07-21 19:07:4770 days ago1721588867IN
0xc3dBD99d...4a211428B
0 ETH0.0006059213.0182345
Approve203483922024-07-20 14:38:4771 days ago1721486327IN
0xc3dBD99d...4a211428B
0 ETH0.000239745.15093258
Transfer202913082024-07-12 15:26:1179 days ago1720797971IN
0xc3dBD99d...4a211428B
0 ETH0.000265786.40050185
Approve202912952024-07-12 15:23:3579 days ago1720797815IN
0xc3dBD99d...4a211428B
0 ETH0.000146386.0191854
Approve202766882024-07-10 14:26:1181 days ago1720621571IN
0xc3dBD99d...4a211428B
0 ETH0.0005594212.07534145
Transfer202366192024-07-05 0:07:4787 days ago1720138067IN
0xc3dBD99d...4a211428B
0 ETH0.0009505923.30056086
Transfer202366162024-07-05 0:07:1187 days ago1720138031IN
0xc3dBD99d...4a211428B
0 ETH0.000906122.21001434
Approve202089052024-07-01 3:12:3590 days ago1719803555IN
0xc3dBD99d...4a211428B
0 ETH0.000103312.23059875
Approve201736262024-06-26 4:58:5995 days ago1719377939IN
0xc3dBD99d...4a211428B
0 ETH0.000076411.64986054
Approve201005372024-06-15 23:41:47106 days ago1718494907IN
0xc3dBD99d...4a211428B
0 ETH0.000109892.37145464
Approve199493182024-05-25 20:36:23127 days ago1716669383IN
0xc3dBD99d...4a211428B
0 ETH0.000114174.69482378
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
203643472024-07-22 20:06:4769 days ago1721678807
0xc3dBD99d...4a211428B
0.57540901 ETH
190101432024-01-15 5:17:47258 days ago1705295867
0xc3dBD99d...4a211428B
0.00748127 ETH
190101432024-01-15 5:17:47258 days ago1705295867
0xc3dBD99d...4a211428B
0.01384036 ETH
190101432024-01-15 5:17:47258 days ago1705295867
0xc3dBD99d...4a211428B
0.01047378 ETH
190101432024-01-15 5:17:47258 days ago1705295867
0xc3dBD99d...4a211428B
0.01683287 ETH
190101432024-01-15 5:17:47258 days ago1705295867
0xc3dBD99d...4a211428B
0.00187031 ETH
190101432024-01-15 5:17:47258 days ago1705295867
0xc3dBD99d...4a211428B
0.05236894 ETH
190093992024-01-15 2:47:35258 days ago1705286855
0xc3dBD99d...4a211428B
0.00233995 ETH
190093992024-01-15 2:47:35258 days ago1705286855
0xc3dBD99d...4a211428B
0.00432891 ETH
190093992024-01-15 2:47:35258 days ago1705286855
0xc3dBD99d...4a211428B
0.00327593 ETH
190093992024-01-15 2:47:35258 days ago1705286855
0xc3dBD99d...4a211428B
0.0052649 ETH
190093992024-01-15 2:47:35258 days ago1705286855
0xc3dBD99d...4a211428B
0.00058498 ETH
190093992024-01-15 2:47:35258 days ago1705286855
0xc3dBD99d...4a211428B
0.01637969 ETH
190077642024-01-14 21:19:35259 days ago1705267175
0xc3dBD99d...4a211428B
0.01708415 ETH
190077642024-01-14 21:19:35259 days ago1705267175
0xc3dBD99d...4a211428B
0.03160567 ETH
190077642024-01-14 21:19:35259 days ago1705267175
0xc3dBD99d...4a211428B
0.02391781 ETH
190077642024-01-14 21:19:35259 days ago1705267175
0xc3dBD99d...4a211428B
0.03843933 ETH
190077642024-01-14 21:19:35259 days ago1705267175
0xc3dBD99d...4a211428B
0.00427103 ETH
190077642024-01-14 21:19:35259 days ago1705267175
0xc3dBD99d...4a211428B
0.11958905 ETH
189959362024-01-13 5:38:23260 days ago1705124303
0xc3dBD99d...4a211428B
0.00686044 ETH
189959362024-01-13 5:38:23260 days ago1705124303
0xc3dBD99d...4a211428B
0.01269181 ETH
189959362024-01-13 5:38:23260 days ago1705124303
0xc3dBD99d...4a211428B
0.00960461 ETH
189959362024-01-13 5:38:23260 days ago1705124303
0xc3dBD99d...4a211428B
0.01543599 ETH
189959362024-01-13 5:38:23260 days ago1705124303
0xc3dBD99d...4a211428B
0.00171511 ETH
189959362024-01-13 5:38:23260 days ago1705124303
0xc3dBD99d...4a211428B
0.04802308 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LYF

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-26
*/

//SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

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);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _setOwner(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

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

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

interface DexRouter {
    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);

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

contract LYF is ERC20, Ownable {
    using SafeMath for uint256;


    uint256 private constant _totalSupply = 120_000_000 * 1e18;

    //Router
    DexRouter public immutable uniswapRouter;
    address public immutable pairAddress;

    //Buy Taxes
    uint256 public BuyFinanceTax = 20;
    uint256 public BuyTreasury = 13;
    uint256 public BuyFoundation = 17;
    uint256 public BuyRewards = 10;
    uint256 public BuyAutoLiquidity = 0;

    uint256 public buyTaxes = BuyFinanceTax + BuyTreasury + BuyFoundation+ BuyRewards + BuyAutoLiquidity;

    //Sell Taxes
    uint256 public SellFinanceTax = 25;
    uint256 public SellTreasury = 15;
    uint256 public SellFoundation = 20;
    uint256 public SellRewards = 10;
    uint256 public SellAutoLiquidity = 10;

    uint256 public sellTaxes = SellFinanceTax + SellTreasury + SellFoundation + SellRewards + SellAutoLiquidity;

    //Transfer Taxes
    uint256 public transferTaxes = 0;

    //Whitelisting from taxes and trading limits
    mapping(address => bool) private whitelisted;

    //Blacklist wallets
    mapping(address => bool) private blacklisted;

    //Swapping
    uint256 public swapTokensAtAmount = _totalSupply / 100000; //Collect 0.001% of total supply to swap to taxes
    bool public swapAndLiquifyEnabled = true;
    bool public isSwapping = false;
    bool public tradingEnabled = false;
    uint256 public startTradingBlock;

    //Wallets

    address payable public FinanceAddress = payable(0x313DF74b4C441c1aD253D89Bb172141B8bA213b1);
    address payable public TreasuryAddress = payable(0x92C2a076680c0B47f717ac587bf0b895Dde3B252);
    address payable public FoundationAddress = payable(0xE4752A7EBC1948Cb8E01234df49e6e576e1931e3);
    address payable public RewardsAddress = payable(0x16dDbD8D5C7E11Fb7a819B55D6A78E03A909d828);

    //Events
    event FinanceAddressChanged(address indexed _trWallet); 
    event TreasuryAddressChanged(address indexed _trWallet);
    event FoundationAddressChanged(address indexed _trWallet);
    event RewardsAddressChanged(address indexed _trWallet);
    event BuyFeesUpdated(uint256 indexed newBuyFinanceTax, uint256 newBuyTreasury, uint256 newBuyFoundation, uint256 newBuyRewards, uint256 newBuyAutoLiquidity);
    event SellFeesUpdated(uint256 indexed newSellFinanceTax, uint256 newSellTreasury, uint256 newSellFoundation, uint256 newSellRewards, uint256 newSellAutoLiquidity);
    event SwapThresholdUpdated(uint256 indexed _newThreshold);
    event InternalSwapStatusUpdated(bool indexed _status);
    event Whitelist(address indexed _target, bool indexed _status);
    event Blacklist(address indexed _target, bool indexed _status);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    constructor() ERC20("Lillian Token", "LYF") {

        uniswapRouter = DexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pairAddress = DexFactory(uniswapRouter.factory()).createPair(
            address(this),
            uniswapRouter.WETH()
        );
        whitelisted[msg.sender] = true;
        whitelisted[address(uniswapRouter)] = true;
        whitelisted[FoundationAddress] = true;
        whitelisted[TreasuryAddress] = true;
        whitelisted[FinanceAddress] = true;
        whitelisted[RewardsAddress] = true;
        whitelisted[address(this)] = true;       
        _mint(0xeCe1129c4518dA93C802648d5220D34Bcc7e9AC0, _totalSupply);

    }

    function setFinanceAddress(address _newaddress) external onlyOwner {
        require(_newaddress != address(0), "can not set marketing to dead wallet");
        FinanceAddress = payable(_newaddress);
        emit FinanceAddressChanged(_newaddress);
    }

    function setTreasuryAddress(address _newaddress) external onlyOwner {
        require(_newaddress != address(0), "can not set marketing to dead wallet");
        TreasuryAddress = payable(_newaddress);
        emit TreasuryAddressChanged(_newaddress);
    }

    function setFoundationAddress(address _newaddress) external onlyOwner {
        require(_newaddress != address(0), "can not set marketing to dead wallet");
        FoundationAddress = payable(_newaddress);
        emit FoundationAddressChanged(_newaddress);
    }

    function setRewardsAddress(address _newaddress) external onlyOwner {
        require(_newaddress != address(0), "can not set marketing to dead wallet");
        RewardsAddress = payable(_newaddress);
        emit RewardsAddressChanged(_newaddress);
    }

    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Trading is already enabled");
        tradingEnabled = true;
        startTradingBlock = block.number;
    }

    function disableTrading() external onlyOwner {
        require(tradingEnabled, "Trading is already disabled");
        tradingEnabled = false;
    }

    function setBuyTaxes(uint256 _newBuyFinanceTax, uint256 _newBuyTreasury, uint256 _newBuyFoundation, uint256 _newBuyRewards, uint256 _newBuyAutoLiquidity) external onlyOwner {
        BuyFinanceTax = _newBuyFinanceTax;
        BuyTreasury = _newBuyTreasury;
        BuyFoundation = _newBuyFoundation;
        BuyRewards = _newBuyRewards;
        BuyAutoLiquidity = _newBuyAutoLiquidity;
        buyTaxes = BuyFinanceTax.add(BuyTreasury).add(BuyFoundation).add(BuyRewards).add(BuyAutoLiquidity);
        emit BuyFeesUpdated(BuyFinanceTax, BuyTreasury, BuyFoundation, BuyRewards, BuyAutoLiquidity);
    }

    function setSellTaxes(uint256 _newSellFinanceTax, uint256 _newSellTreasury, uint256 _newSellFoundation, uint256 _newSellRewards, uint256 _newSellAutoLiquidity) external onlyOwner {
        SellFinanceTax = _newSellFinanceTax;
        SellTreasury = _newSellTreasury;
        SellFoundation = _newSellFoundation;
        SellRewards = _newSellRewards;
        SellAutoLiquidity = _newSellAutoLiquidity;
        sellTaxes = SellFinanceTax.add(SellTreasury).add(SellFoundation).add(SellRewards).add(SellAutoLiquidity);
        emit SellFeesUpdated(SellFinanceTax, SellTreasury, SellFoundation, SellRewards, SellAutoLiquidity);
    }

    function setSwapTokensAtAmount(uint256 _newAmount) external onlyOwner {
        require(_newAmount > 0 && _newAmount <= (_totalSupply * 5) / 1000, "Minimum swap amount must be greater than 0 and less than 0.5% of total supply!");
        swapTokensAtAmount = _newAmount;
        emit SwapThresholdUpdated(swapTokensAtAmount);
    }

    function toggleSwapping() external onlyOwner {
        swapAndLiquifyEnabled = (swapAndLiquifyEnabled) ? false : true;
    }

    function setWhitelistStatus(address _wallet, bool _status) external onlyOwner {
        whitelisted[_wallet] = _status;
        emit Whitelist(_wallet, _status);
    }

    function setBlacklist(address _address, bool _isBlacklisted) external onlyOwner {
        blacklisted[_address] = _isBlacklisted;
        emit Blacklist(_address, _isBlacklisted);
    }

    function checkWhitelist(address _wallet) external view returns (bool) {
        return whitelisted[_wallet];
    }

    function checkBlacklist(address _address) external view returns (bool) {
        return blacklisted[_address];
    }

    // this function is reponsible for managing tax, if _from or _to is whitelisted, we simply return _amount and skip all the limitations
    function _takeTax(
        address _from,
        address _to,
        uint256 _amount
    ) internal returns (uint256) {
        if (whitelisted[_from] || whitelisted[_to]) {
            return _amount;
        }
        uint256 totalTax = transferTaxes;

        if (_to == pairAddress) {
            totalTax = sellTaxes;
        } else if (_from == pairAddress) {
            totalTax = buyTaxes;
        }

        uint256 tax = 0;
        if (totalTax > 0) {
            tax = (_amount * totalTax) / 1000;
            super._transfer(_from, address(this), tax);
        }
        return (_amount - tax);
    }

function _transfer(
    address _from,
    address _to,
    uint256 _amount
) internal virtual override {
    require(_from != address(0), "transfer from address zero");
    require(_to != address(0), "transfer to address zero");
    require(_amount > 0, "Transfer amount must be greater than zero");
    require(!blacklisted[_from], "Transfer from blacklisted address");
    require(!blacklisted[_to], "Transfer to blacklisted address");
    uint256 toTransfer = _takeTax(_from, _to, _amount);

    bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;
    if (
        !whitelisted[_from] &&
        !whitelisted[_to] &&
        !blacklisted[_from] &&
        !blacklisted[_to] 
    ) {
        require(tradingEnabled, "Trading not active");
        if (
            pairAddress == _to &&
            swapAndLiquifyEnabled &&
            canSwap &&
            !isSwapping
        ) {
            internalSwap();
        }
    }
    super._transfer(_from, _to, toTransfer);
}

    function internalSwap() internal {
    isSwapping = true;
    uint256 taxAmount = balanceOf(address(this)); 
    if (taxAmount == 0) {
        return;
    }

    uint256 totalFee = (buyTaxes).add(sellTaxes);

    uint256 FinanceShare =(BuyFinanceTax).add(SellFinanceTax);
    uint256 TreasuryShare = (BuyTreasury).add(SellTreasury);
    uint256 FoundationShare =(BuyFoundation).add(SellFoundation);
    uint256 RewardsShare =(BuyRewards).add(SellRewards);
    uint256 LiquidityShare =(BuyAutoLiquidity).add(SellAutoLiquidity);

    if (LiquidityShare == 0) {
        totalFee = FinanceShare.add(TreasuryShare).add(FoundationShare).add(RewardsShare);
    }

    uint256 halfLPTokens = 0;
    if (totalFee > 0) {
        halfLPTokens = taxAmount.mul(LiquidityShare).div(totalFee).div(2);
    }
    uint256 swapTokens = taxAmount.sub(halfLPTokens);
    uint256 initialBalance = address(this).balance;
    swapToETH(swapTokens);
    uint256 newBalance = address(this).balance.sub(initialBalance);

    uint256 ethForLiquidity = 0;
    if (LiquidityShare > 0) {
        ethForLiquidity = newBalance.mul(LiquidityShare).div(totalFee).div(2);
    
    addLiquidity(halfLPTokens, ethForLiquidity);
    emit SwapAndLiquify(halfLPTokens, ethForLiquidity, halfLPTokens);
    }
    uint256 ethForFinance = newBalance.mul(FinanceShare).div(totalFee);
    uint256 ethForTreasury = newBalance.mul(TreasuryShare).div(totalFee);
    uint256 ethForFoundation = newBalance.mul(FoundationShare).div(totalFee);
    uint256 ethForRewards = newBalance.mul(RewardsShare).div(totalFee);

    transferToAddressETH(FinanceAddress, ethForFinance);
    transferToAddressETH(TreasuryAddress, ethForTreasury);
    transferToAddressETH(FoundationAddress, ethForFoundation);
    transferToAddressETH(RewardsAddress, ethForRewards);

    isSwapping = false;
}

    function transferToAddressETH(address payable recipient, uint256 amount) private 
    {
        recipient.transfer(amount);
    }    

    function swapToETH(uint256 _amount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();
        _approve(address(this), address(uniswapRouter), _amount);
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            _amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapRouter), tokenAmount);

        // add the liquidity
        uniswapRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function withdrawStuckETH() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "No ETH available to withdraw");

        (bool success, ) = address(msg.sender).call{value: balance}("");
        require(success, "transferring ETH failed");
    }

    function withdrawStuckTokens(address ERC20_token) external onlyOwner {
        require(ERC20_token != address(this), "Owner cannot claim native tokens");

        uint256 tokenBalance = IERC20(ERC20_token).balanceOf(address(this));
        require(tokenBalance > 0, "No tokens available to withdraw");

        bool success = IERC20(ERC20_token).transfer(msg.sender, tokenBalance);
        require(success, "transferring tokens failed!");
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_target","type":"address"},{"indexed":true,"internalType":"bool","name":"_status","type":"bool"}],"name":"Blacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newBuyFinanceTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyTreasury","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyFoundation","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyRewards","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyAutoLiquidity","type":"uint256"}],"name":"BuyFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_trWallet","type":"address"}],"name":"FinanceAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_trWallet","type":"address"}],"name":"FoundationAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"_status","type":"bool"}],"name":"InternalSwapStatusUpdated","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":"_trWallet","type":"address"}],"name":"RewardsAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newSellFinanceTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellTreasury","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellFoundation","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellRewards","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellAutoLiquidity","type":"uint256"}],"name":"SellFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_newThreshold","type":"uint256"}],"name":"SwapThresholdUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_trWallet","type":"address"}],"name":"TreasuryAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_target","type":"address"},{"indexed":true,"internalType":"bool","name":"_status","type":"bool"}],"name":"Whitelist","type":"event"},{"inputs":[],"name":"BuyAutoLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyFinanceTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyFoundation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FinanceAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FoundationAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RewardsAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellAutoLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellFinanceTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellFoundation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TreasuryAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":[],"name":"buyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"checkBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"checkWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisted","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newBuyFinanceTax","type":"uint256"},{"internalType":"uint256","name":"_newBuyTreasury","type":"uint256"},{"internalType":"uint256","name":"_newBuyFoundation","type":"uint256"},{"internalType":"uint256","name":"_newBuyRewards","type":"uint256"},{"internalType":"uint256","name":"_newBuyAutoLiquidity","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newaddress","type":"address"}],"name":"setFinanceAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newaddress","type":"address"}],"name":"setFoundationAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newaddress","type":"address"}],"name":"setRewardsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSellFinanceTax","type":"uint256"},{"internalType":"uint256","name":"_newSellTreasury","type":"uint256"},{"internalType":"uint256","name":"_newSellFoundation","type":"uint256"},{"internalType":"uint256","name":"_newSellRewards","type":"uint256"},{"internalType":"uint256","name":"_newSellAutoLiquidity","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newaddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSwapping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"transferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract DexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ERC20_token","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526014600655600d6007556011600855600a6009556000600a55600a546009546008546007546006546200003891906200056b565b6200004491906200056b565b6200005091906200056b565b6200005c91906200056b565b600b556019600c55600f600d556014600e55600a600f55600a601055601054600f54600e54600d54600c546200009391906200056b565b6200009f91906200056b565b620000ab91906200056b565b620000b791906200056b565b6011556000601255620000d9620186a06a6342fd08f00f637800000062000593565b6015556016805462ffffff19166001179055601880546001600160a01b031990811673313df74b4c441c1ad253d89bb172141b8ba213b1179091556019805482167392c2a076680c0b47f717ac587bf0b895dde3b252179055601a8054821673e4752a7ebc1948cb8e01234df49e6e576e1931e3179055601b80549091167316ddbd8d5c7e11fb7a819b55d6a78e03a909d8281790553480156200017c57600080fd5b506040518060400160405280600d81526020016c2634b63634b0b7102a37b5b2b760991b81525060405180604001604052806003815260200162262ca360e91b8152508160039081620001d091906200065a565b506004620001df82826200065a565b505050620001fc620001f66200042860201b60201c565b6200042c565b737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000252573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000278919062000726565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ee919062000726565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200033c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000362919062000726565b6001600160a01b0390811660a052336000908152601360205260408082208054600160ff199182168117909255608051851684528284208054821683179055601a54851684528284208054821683179055601954851684528284208054821683179055601854851684528284208054821683179055601b5490941683528183208054851682179055308352912080549092161790556200042273ece1129c4518da93c802648d5220d34bcc7e9ac06a6342fd08f00f63780000006200047e565b62000758565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620004d95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620004ed91906200056b565b90915550506001600160a01b038216600090815260208190526040812080548392906200051c9084906200056b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b808201808211156200058d57634e487b7160e01b600052601160045260246000fd5b92915050565b600082620005b157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005e157607f821691505b6020821081036200060257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200056657600081815260208120601f850160051c81016020861015620006315750805b601f850160051c820191505b8181101562000652578281556001016200063d565b505050505050565b81516001600160401b03811115620006765762000676620005b6565b6200068e81620006878454620005cc565b8462000608565b602080601f831160018114620006c65760008415620006ad5750858301515b600019600386901b1c1916600185901b17855562000652565b600085815260208120601f198616915b82811015620006f757888601518255948401946001909101908401620006d6565b5085821015620007165787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200073957600080fd5b81516001600160a01b03811681146200075157600080fd5b9392505050565b60805160a0516128cd620007b66000396000818161074601528181611b9a01528181611cc30152611cf701526000818161063201528181612213015281816122cc015281816123080152818161238201526123a901526128cd6000f3fe6080604052600436106103395760003560e01c80638da5cb5b116101ab578063cb963728116100f7578063e7d08c0711610095578063f41377ca1161006f578063f41377ca14610989578063f5648a4f146109a9578063f66895a3146109be578063fa5a8792146109d457600080fd5b8063e7d08c071461093e578063ef586f7114610954578063f2fde38b1461096957600080fd5b8063dd6c7689116100d1578063dd6c7689146108c3578063de5e7f86146108d9578063e2f45605146108ef578063e6807ca91461090557600080fd5b8063cb9637281461083d578063ce7ca6151461085d578063dd62ed3e1461087d57600080fd5b8063a9059cbb11610164578063b88631151161013e578063b8863115146107be578063c054f2f4146107dd578063c2dd47a8146107fd578063c791fc541461081d57600080fd5b8063a9059cbb14610768578063ac4cf0c014610788578063afa4f3b21461079e57600080fd5b80638da5cb5b146106b557806395d89b41146106d3578063a44ae040146106e8578063a457c2d7146106fe578063a4744d731461071e578063a8b089821461073457600080fd5b80634ada218b1161028557806370a082311161022357806376be96f3116101fd57806376be96f314610654578063864701a51461066a5780638906758d146106805780638a8c523c146106a057600080fd5b806370a08231146105d5578063715018a61461060b578063735de9f71461062057600080fd5b80635b5c251f1161025f5780635b5c251f146105515780636605bfda1461058957806368831a80146105a9578063707b51f6146105bf57600080fd5b80634ada218b146104fb5780634e5df7501461051b5780635331803c1461053b57600080fd5b80631950c218116102f2578063313ce567116102cc578063313ce5671461048557806339509351146104a157806340ac48d3146104c15780634a74bb02146104e157600080fd5b80631950c21814610416578063232272ff1461044f57806323b872dd1461046557600080fd5b806306fdde0314610345578063095ea7b3146103705780630c424284146103a0578063153b0d1e146103c257806317700f01146103e257806318160ddd146103f757600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109ea565b60405161036791906124b1565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612514565b610a7c565b6040519015158152602001610367565b3480156103ac57600080fd5b506103c06103bb36600461254e565b610a93565b005b3480156103ce57600080fd5b506103c06103dd36600461254e565b610b1a565b3480156103ee57600080fd5b506103c0610b98565b34801561040357600080fd5b506002545b604051908152602001610367565b34801561042257600080fd5b50610390610431366004612587565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561045b57600080fd5b5061040860085481565b34801561047157600080fd5b506103906104803660046125a4565b610c28565b34801561049157600080fd5b5060405160128152602001610367565b3480156104ad57600080fd5b506103906104bc366004612514565b610cd4565b3480156104cd57600080fd5b506103c06104dc3660046125e5565b610d10565b3480156104ed57600080fd5b506016546103909060ff1681565b34801561050757600080fd5b506016546103909062010000900460ff1681565b34801561052757600080fd5b506103c0610536366004612587565b610dca565b34801561054757600080fd5b5061040860125481565b34801561055d57600080fd5b50601954610571906001600160a01b031681565b6040516001600160a01b039091168152602001610367565b34801561059557600080fd5b506103c06105a4366004612587565b610e64565b3480156105b557600080fd5b50610408600a5481565b3480156105cb57600080fd5b5061040860095481565b3480156105e157600080fd5b506104086105f0366004612587565b6001600160a01b031660009081526020819052604090205490565b34801561061757600080fd5b506103c0610efe565b34801561062c57600080fd5b506105717f000000000000000000000000000000000000000000000000000000000000000081565b34801561066057600080fd5b5061040860175481565b34801561067657600080fd5b50610408600b5481565b34801561068c57600080fd5b506103c061069b366004612587565b610f34565b3480156106ac57600080fd5b506103c0610fce565b3480156106c157600080fd5b506005546001600160a01b0316610571565b3480156106df57600080fd5b5061035a611068565b3480156106f457600080fd5b5061040860075481565b34801561070a57600080fd5b50610390610719366004612514565b611077565b34801561072a57600080fd5b5061040860065481565b34801561074057600080fd5b506105717f000000000000000000000000000000000000000000000000000000000000000081565b34801561077457600080fd5b50610390610783366004612514565b611110565b34801561079457600080fd5b50610408600d5481565b3480156107aa57600080fd5b506103c06107b9366004612620565b61111d565b3480156107ca57600080fd5b5060165461039090610100900460ff1681565b3480156107e957600080fd5b50601b54610571906001600160a01b031681565b34801561080957600080fd5b50601854610571906001600160a01b031681565b34801561082957600080fd5b506103c06108383660046125e5565b611235565b34801561084957600080fd5b506103c0610858366004612587565b6112de565b34801561086957600080fd5b50601a54610571906001600160a01b031681565b34801561088957600080fd5b50610408610898366004612639565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108cf57600080fd5b50610408600f5481565b3480156108e557600080fd5b5061040860105481565b3480156108fb57600080fd5b5061040860155481565b34801561091157600080fd5b50610390610920366004612587565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561094a57600080fd5b50610408600c5481565b34801561096057600080fd5b506103c06114e5565b34801561097557600080fd5b506103c0610984366004612587565b611536565b34801561099557600080fd5b506103c06109a4366004612587565b6115d1565b3480156109b557600080fd5b506103c061166b565b3480156109ca57600080fd5b5061040860115481565b3480156109e057600080fd5b50610408600e5481565b6060600380546109f990612667565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2590612667565b8015610a725780601f10610a4757610100808354040283529160200191610a72565b820191906000526020600020905b815481529060010190602001808311610a5557829003601f168201915b5050505050905090565b6000610a8933848461177f565b5060015b92915050565b6005546001600160a01b03163314610ac65760405162461bcd60e51b8152600401610abd906126a1565b60405180910390fd5b6001600160a01b038216600081815260136020526040808220805460ff191685151590811790915590519092917f5a25e09a5dba33161281055e015f1279b6b10204d8f90dd56a8ce2b82322d43d91a35050565b6005546001600160a01b03163314610b445760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038216600081815260146020526040808220805460ff191685151590811790915590519092917ff7e58a63a036e3a7ef7921f83b6ae47930cf5c293dd3bfe7a857c6863409046d91a35050565b6005546001600160a01b03163314610bc25760405162461bcd60e51b8152600401610abd906126a1565b60165462010000900460ff16610c1a5760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c72656164792064697361626c656400000000006044820152606401610abd565b6016805462ff000019169055565b6000610c358484846118a3565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cba5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610abd565b610cc7853385840361177f565b60019150505b9392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a89918590610d0b9086906126ec565b61177f565b6005546001600160a01b03163314610d3a5760405162461bcd60e51b8152600401610abd906126a1565b6006859055600784905560088390556009829055600a819055610d6b81610d65848187818b8b611c0d565b90611c0d565b600b55600654600754600854600954600a546040805194855260208501939093529183015260608201527f733eb8db6a5cd6df046e76030e911fe8600da82fc87cd448268aa418efcad5f9906080015b60405180910390a25050505050565b6005546001600160a01b03163314610df45760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038116610e1a5760405162461bcd60e51b8152600401610abd906126ff565b601880546001600160a01b0319166001600160a01b0383169081179091556040517f64d07b7b0d48d6c3b5e1005826e76097aaee8adef5bea0f66f453ee05f0f896790600090a250565b6005546001600160a01b03163314610e8e5760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038116610eb45760405162461bcd60e51b8152600401610abd906126ff565b601980546001600160a01b0319166001600160a01b0383169081179091556040517f9073dfac663173e64aa95665faedae52e2246f9bcdd3890fbfaf6733b46bba1390600090a250565b6005546001600160a01b03163314610f285760405162461bcd60e51b8152600401610abd906126a1565b610f326000611c19565b565b6005546001600160a01b03163314610f5e5760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038116610f845760405162461bcd60e51b8152600401610abd906126ff565b601b80546001600160a01b0319166001600160a01b0383169081179091556040517f251a2e4478aadd97db6528862f79a28a6813b79f35d6760c60b67be5e84bba5190600090a250565b6005546001600160a01b03163314610ff85760405162461bcd60e51b8152600401610abd906126a1565b60165462010000900460ff16156110515760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610abd565b6016805462ff000019166201000017905543601755565b6060600480546109f990612667565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110f95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610abd565b611106338585840361177f565b5060019392505050565b6000610a893384846118a3565b6005546001600160a01b031633146111475760405162461bcd60e51b8152600401610abd906126a1565b60008111801561117957506103e861116b6a6342fd08f00f63780000006005612743565b611175919061275a565b8111155b6112025760405162461bcd60e51b815260206004820152604e60248201527f4d696e696d756d207377617020616d6f756e74206d757374206265206772656160448201527f746572207468616e203020616e64206c657373207468616e20302e3525206f6660648201526d20746f74616c20737570706c792160901b608482015260a401610abd565b601581905560405181907f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd0647690600090a250565b6005546001600160a01b0316331461125f5760405162461bcd60e51b8152600401610abd906126a1565b600c859055600d849055600e839055600f829055601081905561128a81610d65848187818b8b611c0d565b601155600c54600d54600e54600f546010546040805194855260208501939093529183015260608201527fa52bd0cf705f42201d4097dc2e9c2b39d0a1b7529e8d121faed89fd30bcf236f90608001610dbb565b6005546001600160a01b031633146113085760405162461bcd60e51b8152600401610abd906126a1565b306001600160a01b038216036113605760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610abd565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156113a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cb919061277c565b90506000811161141d5760405162461bcd60e51b815260206004820152601f60248201527f4e6f20746f6b656e7320617661696c61626c6520746f207769746864726177006044820152606401610abd565b60405163a9059cbb60e01b8152336004820152602481018290526000906001600160a01b0384169063a9059cbb906044016020604051808303816000875af115801561146d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114919190612795565b9050806114e05760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657272696e6720746f6b656e73206661696c65642100000000006044820152606401610abd565b505050565b6005546001600160a01b0316331461150f5760405162461bcd60e51b8152600401610abd906126a1565b60165460ff16611520576001611523565b60005b6016805460ff1916911515919091179055565b6005546001600160a01b031633146115605760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b0381166115c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abd565b6115ce81611c19565b50565b6005546001600160a01b031633146115fb5760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b0381166116215760405162461bcd60e51b8152600401610abd906126ff565b601a80546001600160a01b0319166001600160a01b0383169081179091556040517f95203be801b3b4835c73e166c564816fba4ae2f167907273eb1c85263ec9882d90600090a250565b6005546001600160a01b031633146116955760405162461bcd60e51b8152600401610abd906126a1565b47806116e35760405162461bcd60e51b815260206004820152601c60248201527f4e6f2045544820617661696c61626c6520746f207769746864726177000000006044820152606401610abd565b604051600090339083908381818185875af1925050503d8060008114611725576040519150601f19603f3d011682016040523d82523d6000602084013e61172a565b606091505b505090508061177b5760405162461bcd60e51b815260206004820152601760248201527f7472616e7366657272696e6720455448206661696c65640000000000000000006044820152606401610abd565b5050565b6001600160a01b0383166117e15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610abd565b6001600160a01b0382166118425760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610abd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118f95760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066726f6d2061646472657373207a65726f0000000000006044820152606401610abd565b6001600160a01b03821661194f5760405162461bcd60e51b815260206004820152601860248201527f7472616e7366657220746f2061646472657373207a65726f00000000000000006044820152606401610abd565b600081116119b15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610abd565b6001600160a01b03831660009081526014602052604090205460ff1615611a245760405162461bcd60e51b815260206004820152602160248201527f5472616e736665722066726f6d20626c61636b6c6973746564206164647265736044820152607360f81b6064820152608401610abd565b6001600160a01b03821660009081526014602052604090205460ff1615611a8d5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220746f20626c61636b6c69737465642061646472657373006044820152606401610abd565b6000611a9a848484611c6b565b60155430600090815260208181526040808320546001600160a01b038a16845260139092529091205492935010159060ff16158015611af257506001600160a01b03841660009081526013602052604090205460ff16155b8015611b1757506001600160a01b03851660009081526014602052604090205460ff16155b8015611b3c57506001600160a01b03841660009081526014602052604090205460ff16155b15611bfb5760165462010000900460ff16611b8e5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610abd565b836001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316148015611bd1575060165460ff165b8015611bda5750805b8015611bee5750601654610100900460ff16155b15611bfb57611bfb611d73565b611c06858584611fc9565b5050505050565b6000610ccd82846126ec565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831660009081526013602052604081205460ff1680611caa57506001600160a01b03831660009081526013602052604090205460ff165b15611cb6575080610ccd565b6012546001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690851603611cf55750601154611d33565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031603611d335750600b545b60008115611d5f576103e8611d488386612743565b611d52919061275a565b9050611d5f863083611fc9565b611d6981856127b2565b9695505050505050565b6016805461ff00191661010017905530600090815260208190526040812054905080600003611d9f5750565b6000611db8601154600b54611c0d90919063ffffffff16565b90506000611dd3600c54600654611c0d90919063ffffffff16565b90506000611dee600d54600754611c0d90919063ffffffff16565b90506000611e09600e54600854611c0d90919063ffffffff16565b90506000611e24600f54600954611c0d90919063ffffffff16565b90506000611e3f601054600a54611c0d90919063ffffffff16565b905080600003611e5c57611e5982610d6585818989611c0d565b95505b60008615611e7e57611e7b6002611e7589818c87612198565b906121a4565b90505b6000611e8a89836121b0565b905047611e96826121bc565b6000611ea247836121b0565b905060008515611f0b57611ebd6002611e758d81868b612198565b9050611ec9858261237c565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6000611f1b8c611e75858e612198565b90506000611f2d8d611e75868e612198565b90506000611f3f8e611e75878e612198565b90506000611f518f611e75888e612198565b601854909150611f6a906001600160a01b03168561247b565b601954611f80906001600160a01b03168461247b565b601a54611f96906001600160a01b03168361247b565b601b54611fac906001600160a01b03168261247b565b50506016805461ff00191690555050505050505050505050505050565b6001600160a01b03831661202d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610abd565b6001600160a01b03821661208f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610abd565b6001600160a01b038316600090815260208190526040902054818110156121075760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610abd565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061213e9084906126ec565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161218a91815260200190565b60405180910390a350505050565b6000610ccd8284612743565b6000610ccd828461275a565b6000610ccd82846127b2565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121f1576121f16127c5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561226f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229391906127db565b816001815181106122a6576122a66127c5565b60200260200101906001600160a01b031690816001600160a01b0316815250506122f1307f00000000000000000000000000000000000000000000000000000000000000008461177f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906123469085906000908690309042906004016127f8565b600060405180830381600087803b15801561236057600080fd5b505af1158015612374573d6000803e3d6000fd5b505050505050565b6123a7307f00000000000000000000000000000000000000000000000000000000000000008461177f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806123ee6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612456573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c069190612869565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156114e0573d6000803e3d6000fd5b600060208083528351808285015260005b818110156124de578581018301518582016040015282016124c2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146115ce57600080fd5b6000806040838503121561252757600080fd5b8235612532816124ff565b946020939093013593505050565b80151581146115ce57600080fd5b6000806040838503121561256157600080fd5b823561256c816124ff565b9150602083013561257c81612540565b809150509250929050565b60006020828403121561259957600080fd5b8135610ccd816124ff565b6000806000606084860312156125b957600080fd5b83356125c4816124ff565b925060208401356125d4816124ff565b929592945050506040919091013590565b600080600080600060a086880312156125fd57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60006020828403121561263257600080fd5b5035919050565b6000806040838503121561264c57600080fd5b8235612657816124ff565b9150602083013561257c816124ff565b600181811c9082168061267b57607f821691505b60208210810361269b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a8d57610a8d6126d6565b60208082526024908201527f63616e206e6f7420736574206d61726b6574696e6720746f20646561642077616040820152631b1b195d60e21b606082015260800190565b8082028115828204841417610a8d57610a8d6126d6565b60008261277757634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561278e57600080fd5b5051919050565b6000602082840312156127a757600080fd5b8151610ccd81612540565b81810381811115610a8d57610a8d6126d6565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156127ed57600080fd5b8151610ccd816124ff565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128485784516001600160a01b031683529383019391830191600101612823565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561287e57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d5059759ec8cb10bd5bcf37fbf0908978c51512d6118ed04673e3007e28f279d64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103395760003560e01c80638da5cb5b116101ab578063cb963728116100f7578063e7d08c0711610095578063f41377ca1161006f578063f41377ca14610989578063f5648a4f146109a9578063f66895a3146109be578063fa5a8792146109d457600080fd5b8063e7d08c071461093e578063ef586f7114610954578063f2fde38b1461096957600080fd5b8063dd6c7689116100d1578063dd6c7689146108c3578063de5e7f86146108d9578063e2f45605146108ef578063e6807ca91461090557600080fd5b8063cb9637281461083d578063ce7ca6151461085d578063dd62ed3e1461087d57600080fd5b8063a9059cbb11610164578063b88631151161013e578063b8863115146107be578063c054f2f4146107dd578063c2dd47a8146107fd578063c791fc541461081d57600080fd5b8063a9059cbb14610768578063ac4cf0c014610788578063afa4f3b21461079e57600080fd5b80638da5cb5b146106b557806395d89b41146106d3578063a44ae040146106e8578063a457c2d7146106fe578063a4744d731461071e578063a8b089821461073457600080fd5b80634ada218b1161028557806370a082311161022357806376be96f3116101fd57806376be96f314610654578063864701a51461066a5780638906758d146106805780638a8c523c146106a057600080fd5b806370a08231146105d5578063715018a61461060b578063735de9f71461062057600080fd5b80635b5c251f1161025f5780635b5c251f146105515780636605bfda1461058957806368831a80146105a9578063707b51f6146105bf57600080fd5b80634ada218b146104fb5780634e5df7501461051b5780635331803c1461053b57600080fd5b80631950c218116102f2578063313ce567116102cc578063313ce5671461048557806339509351146104a157806340ac48d3146104c15780634a74bb02146104e157600080fd5b80631950c21814610416578063232272ff1461044f57806323b872dd1461046557600080fd5b806306fdde0314610345578063095ea7b3146103705780630c424284146103a0578063153b0d1e146103c257806317700f01146103e257806318160ddd146103f757600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109ea565b60405161036791906124b1565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612514565b610a7c565b6040519015158152602001610367565b3480156103ac57600080fd5b506103c06103bb36600461254e565b610a93565b005b3480156103ce57600080fd5b506103c06103dd36600461254e565b610b1a565b3480156103ee57600080fd5b506103c0610b98565b34801561040357600080fd5b506002545b604051908152602001610367565b34801561042257600080fd5b50610390610431366004612587565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561045b57600080fd5b5061040860085481565b34801561047157600080fd5b506103906104803660046125a4565b610c28565b34801561049157600080fd5b5060405160128152602001610367565b3480156104ad57600080fd5b506103906104bc366004612514565b610cd4565b3480156104cd57600080fd5b506103c06104dc3660046125e5565b610d10565b3480156104ed57600080fd5b506016546103909060ff1681565b34801561050757600080fd5b506016546103909062010000900460ff1681565b34801561052757600080fd5b506103c0610536366004612587565b610dca565b34801561054757600080fd5b5061040860125481565b34801561055d57600080fd5b50601954610571906001600160a01b031681565b6040516001600160a01b039091168152602001610367565b34801561059557600080fd5b506103c06105a4366004612587565b610e64565b3480156105b557600080fd5b50610408600a5481565b3480156105cb57600080fd5b5061040860095481565b3480156105e157600080fd5b506104086105f0366004612587565b6001600160a01b031660009081526020819052604090205490565b34801561061757600080fd5b506103c0610efe565b34801561062c57600080fd5b506105717f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561066057600080fd5b5061040860175481565b34801561067657600080fd5b50610408600b5481565b34801561068c57600080fd5b506103c061069b366004612587565b610f34565b3480156106ac57600080fd5b506103c0610fce565b3480156106c157600080fd5b506005546001600160a01b0316610571565b3480156106df57600080fd5b5061035a611068565b3480156106f457600080fd5b5061040860075481565b34801561070a57600080fd5b50610390610719366004612514565b611077565b34801561072a57600080fd5b5061040860065481565b34801561074057600080fd5b506105717f000000000000000000000000c587312213e1cb20b8dff891ca593d896dae240a81565b34801561077457600080fd5b50610390610783366004612514565b611110565b34801561079457600080fd5b50610408600d5481565b3480156107aa57600080fd5b506103c06107b9366004612620565b61111d565b3480156107ca57600080fd5b5060165461039090610100900460ff1681565b3480156107e957600080fd5b50601b54610571906001600160a01b031681565b34801561080957600080fd5b50601854610571906001600160a01b031681565b34801561082957600080fd5b506103c06108383660046125e5565b611235565b34801561084957600080fd5b506103c0610858366004612587565b6112de565b34801561086957600080fd5b50601a54610571906001600160a01b031681565b34801561088957600080fd5b50610408610898366004612639565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108cf57600080fd5b50610408600f5481565b3480156108e557600080fd5b5061040860105481565b3480156108fb57600080fd5b5061040860155481565b34801561091157600080fd5b50610390610920366004612587565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561094a57600080fd5b50610408600c5481565b34801561096057600080fd5b506103c06114e5565b34801561097557600080fd5b506103c0610984366004612587565b611536565b34801561099557600080fd5b506103c06109a4366004612587565b6115d1565b3480156109b557600080fd5b506103c061166b565b3480156109ca57600080fd5b5061040860115481565b3480156109e057600080fd5b50610408600e5481565b6060600380546109f990612667565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2590612667565b8015610a725780601f10610a4757610100808354040283529160200191610a72565b820191906000526020600020905b815481529060010190602001808311610a5557829003601f168201915b5050505050905090565b6000610a8933848461177f565b5060015b92915050565b6005546001600160a01b03163314610ac65760405162461bcd60e51b8152600401610abd906126a1565b60405180910390fd5b6001600160a01b038216600081815260136020526040808220805460ff191685151590811790915590519092917f5a25e09a5dba33161281055e015f1279b6b10204d8f90dd56a8ce2b82322d43d91a35050565b6005546001600160a01b03163314610b445760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038216600081815260146020526040808220805460ff191685151590811790915590519092917ff7e58a63a036e3a7ef7921f83b6ae47930cf5c293dd3bfe7a857c6863409046d91a35050565b6005546001600160a01b03163314610bc25760405162461bcd60e51b8152600401610abd906126a1565b60165462010000900460ff16610c1a5760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c72656164792064697361626c656400000000006044820152606401610abd565b6016805462ff000019169055565b6000610c358484846118a3565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cba5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610abd565b610cc7853385840361177f565b60019150505b9392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a89918590610d0b9086906126ec565b61177f565b6005546001600160a01b03163314610d3a5760405162461bcd60e51b8152600401610abd906126a1565b6006859055600784905560088390556009829055600a819055610d6b81610d65848187818b8b611c0d565b90611c0d565b600b55600654600754600854600954600a546040805194855260208501939093529183015260608201527f733eb8db6a5cd6df046e76030e911fe8600da82fc87cd448268aa418efcad5f9906080015b60405180910390a25050505050565b6005546001600160a01b03163314610df45760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038116610e1a5760405162461bcd60e51b8152600401610abd906126ff565b601880546001600160a01b0319166001600160a01b0383169081179091556040517f64d07b7b0d48d6c3b5e1005826e76097aaee8adef5bea0f66f453ee05f0f896790600090a250565b6005546001600160a01b03163314610e8e5760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038116610eb45760405162461bcd60e51b8152600401610abd906126ff565b601980546001600160a01b0319166001600160a01b0383169081179091556040517f9073dfac663173e64aa95665faedae52e2246f9bcdd3890fbfaf6733b46bba1390600090a250565b6005546001600160a01b03163314610f285760405162461bcd60e51b8152600401610abd906126a1565b610f326000611c19565b565b6005546001600160a01b03163314610f5e5760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038116610f845760405162461bcd60e51b8152600401610abd906126ff565b601b80546001600160a01b0319166001600160a01b0383169081179091556040517f251a2e4478aadd97db6528862f79a28a6813b79f35d6760c60b67be5e84bba5190600090a250565b6005546001600160a01b03163314610ff85760405162461bcd60e51b8152600401610abd906126a1565b60165462010000900460ff16156110515760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610abd565b6016805462ff000019166201000017905543601755565b6060600480546109f990612667565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110f95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610abd565b611106338585840361177f565b5060019392505050565b6000610a893384846118a3565b6005546001600160a01b031633146111475760405162461bcd60e51b8152600401610abd906126a1565b60008111801561117957506103e861116b6a6342fd08f00f63780000006005612743565b611175919061275a565b8111155b6112025760405162461bcd60e51b815260206004820152604e60248201527f4d696e696d756d207377617020616d6f756e74206d757374206265206772656160448201527f746572207468616e203020616e64206c657373207468616e20302e3525206f6660648201526d20746f74616c20737570706c792160901b608482015260a401610abd565b601581905560405181907f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd0647690600090a250565b6005546001600160a01b0316331461125f5760405162461bcd60e51b8152600401610abd906126a1565b600c859055600d849055600e839055600f829055601081905561128a81610d65848187818b8b611c0d565b601155600c54600d54600e54600f546010546040805194855260208501939093529183015260608201527fa52bd0cf705f42201d4097dc2e9c2b39d0a1b7529e8d121faed89fd30bcf236f90608001610dbb565b6005546001600160a01b031633146113085760405162461bcd60e51b8152600401610abd906126a1565b306001600160a01b038216036113605760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610abd565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156113a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cb919061277c565b90506000811161141d5760405162461bcd60e51b815260206004820152601f60248201527f4e6f20746f6b656e7320617661696c61626c6520746f207769746864726177006044820152606401610abd565b60405163a9059cbb60e01b8152336004820152602481018290526000906001600160a01b0384169063a9059cbb906044016020604051808303816000875af115801561146d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114919190612795565b9050806114e05760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657272696e6720746f6b656e73206661696c65642100000000006044820152606401610abd565b505050565b6005546001600160a01b0316331461150f5760405162461bcd60e51b8152600401610abd906126a1565b60165460ff16611520576001611523565b60005b6016805460ff1916911515919091179055565b6005546001600160a01b031633146115605760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b0381166115c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abd565b6115ce81611c19565b50565b6005546001600160a01b031633146115fb5760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b0381166116215760405162461bcd60e51b8152600401610abd906126ff565b601a80546001600160a01b0319166001600160a01b0383169081179091556040517f95203be801b3b4835c73e166c564816fba4ae2f167907273eb1c85263ec9882d90600090a250565b6005546001600160a01b031633146116955760405162461bcd60e51b8152600401610abd906126a1565b47806116e35760405162461bcd60e51b815260206004820152601c60248201527f4e6f2045544820617661696c61626c6520746f207769746864726177000000006044820152606401610abd565b604051600090339083908381818185875af1925050503d8060008114611725576040519150601f19603f3d011682016040523d82523d6000602084013e61172a565b606091505b505090508061177b5760405162461bcd60e51b815260206004820152601760248201527f7472616e7366657272696e6720455448206661696c65640000000000000000006044820152606401610abd565b5050565b6001600160a01b0383166117e15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610abd565b6001600160a01b0382166118425760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610abd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118f95760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066726f6d2061646472657373207a65726f0000000000006044820152606401610abd565b6001600160a01b03821661194f5760405162461bcd60e51b815260206004820152601860248201527f7472616e7366657220746f2061646472657373207a65726f00000000000000006044820152606401610abd565b600081116119b15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610abd565b6001600160a01b03831660009081526014602052604090205460ff1615611a245760405162461bcd60e51b815260206004820152602160248201527f5472616e736665722066726f6d20626c61636b6c6973746564206164647265736044820152607360f81b6064820152608401610abd565b6001600160a01b03821660009081526014602052604090205460ff1615611a8d5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220746f20626c61636b6c69737465642061646472657373006044820152606401610abd565b6000611a9a848484611c6b565b60155430600090815260208181526040808320546001600160a01b038a16845260139092529091205492935010159060ff16158015611af257506001600160a01b03841660009081526013602052604090205460ff16155b8015611b1757506001600160a01b03851660009081526014602052604090205460ff16155b8015611b3c57506001600160a01b03841660009081526014602052604090205460ff16155b15611bfb5760165462010000900460ff16611b8e5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610abd565b836001600160a01b03167f000000000000000000000000c587312213e1cb20b8dff891ca593d896dae240a6001600160a01b0316148015611bd1575060165460ff165b8015611bda5750805b8015611bee5750601654610100900460ff16155b15611bfb57611bfb611d73565b611c06858584611fc9565b5050505050565b6000610ccd82846126ec565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831660009081526013602052604081205460ff1680611caa57506001600160a01b03831660009081526013602052604090205460ff165b15611cb6575080610ccd565b6012546001600160a01b037f000000000000000000000000c587312213e1cb20b8dff891ca593d896dae240a811690851603611cf55750601154611d33565b7f000000000000000000000000c587312213e1cb20b8dff891ca593d896dae240a6001600160a01b0316856001600160a01b031603611d335750600b545b60008115611d5f576103e8611d488386612743565b611d52919061275a565b9050611d5f863083611fc9565b611d6981856127b2565b9695505050505050565b6016805461ff00191661010017905530600090815260208190526040812054905080600003611d9f5750565b6000611db8601154600b54611c0d90919063ffffffff16565b90506000611dd3600c54600654611c0d90919063ffffffff16565b90506000611dee600d54600754611c0d90919063ffffffff16565b90506000611e09600e54600854611c0d90919063ffffffff16565b90506000611e24600f54600954611c0d90919063ffffffff16565b90506000611e3f601054600a54611c0d90919063ffffffff16565b905080600003611e5c57611e5982610d6585818989611c0d565b95505b60008615611e7e57611e7b6002611e7589818c87612198565b906121a4565b90505b6000611e8a89836121b0565b905047611e96826121bc565b6000611ea247836121b0565b905060008515611f0b57611ebd6002611e758d81868b612198565b9050611ec9858261237c565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6000611f1b8c611e75858e612198565b90506000611f2d8d611e75868e612198565b90506000611f3f8e611e75878e612198565b90506000611f518f611e75888e612198565b601854909150611f6a906001600160a01b03168561247b565b601954611f80906001600160a01b03168461247b565b601a54611f96906001600160a01b03168361247b565b601b54611fac906001600160a01b03168261247b565b50506016805461ff00191690555050505050505050505050505050565b6001600160a01b03831661202d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610abd565b6001600160a01b03821661208f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610abd565b6001600160a01b038316600090815260208190526040902054818110156121075760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610abd565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061213e9084906126ec565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161218a91815260200190565b60405180910390a350505050565b6000610ccd8284612743565b6000610ccd828461275a565b6000610ccd82846127b2565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121f1576121f16127c5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561226f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229391906127db565b816001815181106122a6576122a66127c5565b60200260200101906001600160a01b031690816001600160a01b0316815250506122f1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461177f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906123469085906000908690309042906004016127f8565b600060405180830381600087803b15801561236057600080fd5b505af1158015612374573d6000803e3d6000fd5b505050505050565b6123a7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461177f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806123ee6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612456573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c069190612869565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156114e0573d6000803e3d6000fd5b600060208083528351808285015260005b818110156124de578581018301518582016040015282016124c2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146115ce57600080fd5b6000806040838503121561252757600080fd5b8235612532816124ff565b946020939093013593505050565b80151581146115ce57600080fd5b6000806040838503121561256157600080fd5b823561256c816124ff565b9150602083013561257c81612540565b809150509250929050565b60006020828403121561259957600080fd5b8135610ccd816124ff565b6000806000606084860312156125b957600080fd5b83356125c4816124ff565b925060208401356125d4816124ff565b929592945050506040919091013590565b600080600080600060a086880312156125fd57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60006020828403121561263257600080fd5b5035919050565b6000806040838503121561264c57600080fd5b8235612657816124ff565b9150602083013561257c816124ff565b600181811c9082168061267b57607f821691505b60208210810361269b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a8d57610a8d6126d6565b60208082526024908201527f63616e206e6f7420736574206d61726b6574696e6720746f20646561642077616040820152631b1b195d60e21b606082015260800190565b8082028115828204841417610a8d57610a8d6126d6565b60008261277757634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561278e57600080fd5b5051919050565b6000602082840312156127a757600080fd5b8151610ccd81612540565b81810381811115610a8d57610a8d6126d6565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156127ed57600080fd5b8151610ccd816124ff565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128485784516001600160a01b031683529383019391830191600101612823565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561287e57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d5059759ec8cb10bd5bcf37fbf0908978c51512d6118ed04673e3007e28f279d64736f6c63430008130033

Deployed Bytecode Sourcemap

10788:12951:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1610:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2524:169;;;;;;;;;;-1:-1:-1;2524:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;2524:169:0;1023:187:1;17513:170:0;;;;;;;;;;-1:-1:-1;17513:170:0;;;;;:::i;:::-;;:::i;:::-;;17691:188;;;;;;;;;;-1:-1:-1;17691:188:0;;;;;:::i;:::-;;:::i;15615:151::-;;;;;;;;;;;;;:::i;1931:108::-;;;;;;;;;;-1:-1:-1;2019:12:0;;1931:108;;;1871:25:1;;;1859:2;1844:18;1931:108:0;1725:177:1;17887:116:0;;;;;;;;;;-1:-1:-1;17887:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;17975:20:0;17951:4;17975:20;;;:11;:20;;;;;;;;;17887:116;11131:33;;;;;;;;;;;;;;;;2701:490;;;;;;;;;;-1:-1:-1;2701:490:0;;;;;:::i;:::-;;:::i;1830:93::-;;;;;;;;;;-1:-1:-1;1830:93:0;;1913:2;2762:36:1;;2750:2;2735:18;1830:93:0;2620:184:1;3199:215:0;;;;;;;;;;-1:-1:-1;3199:215:0;;;;;:::i;:::-;;:::i;15774:609::-;;;;;;;;;;-1:-1:-1;15774:609:0;;;;;:::i;:::-;;:::i;12074:40::-;;;;;;;;;;-1:-1:-1;12074:40:0;;;;;;;;12158:34;;;;;;;;;;-1:-1:-1;12158:34:0;;;;;;;;;;;14339:258;;;;;;;;;;-1:-1:-1;14339:258:0;;;;;:::i;:::-;;:::i;11722:32::-;;;;;;;;;;;;;;;;12355:92;;;;;;;;;;-1:-1:-1;12355:92:0;;;;-1:-1:-1;;;;;12355:92:0;;;;;;-1:-1:-1;;;;;3448:32:1;;;3430:51;;3418:2;3403:18;12355:92:0;3268:219:1;14605:261:0;;;;;;;;;;-1:-1:-1;14605:261:0;;;;;:::i;:::-;;:::i;11208:35::-;;;;;;;;;;;;;;;;11171:30;;;;;;;;;;;;;;;;2047:127;;;;;;;;;;-1:-1:-1;2047:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;2148:18:0;2121:7;2148:18;;;;;;;;;;;;2047:127;6694:94;;;;;;;;;;;;;:::i;10944:40::-;;;;;;;;;;;;;;;12199:32;;;;;;;;;;;;;;;;11252:100;;;;;;;;;;;;;;;;15149:258;;;;;;;;;;-1:-1:-1;15149:258:0;;;;;:::i;:::-;;:::i;15415:192::-;;;;;;;;;;;;;:::i;6471:87::-;;;;;;;;;;-1:-1:-1;6544:6:0;;-1:-1:-1;;;;;6544:6:0;6471:87;;1718:104;;;;;;;;;;;;;:::i;11093:31::-;;;;;;;;;;;;;;;;3422:411;;;;;;;;;;-1:-1:-1;3422:411:0;;;;;:::i;:::-;;:::i;11053:33::-;;;;;;;;;;;;;;;;10991:36;;;;;;;;;;;;;;;2182:175;;;;;;;;;;-1:-1:-1;2182:175:0;;;;;:::i;:::-;;:::i;11420:32::-;;;;;;;;;;;;;;;;17036:335;;;;;;;;;;-1:-1:-1;17036:335:0;;;;;:::i;:::-;;:::i;12121:30::-;;;;;;;;;;-1:-1:-1;12121:30:0;;;;;;;;;;;12555:91;;;;;;;;;;-1:-1:-1;12555:91:0;;;;-1:-1:-1;;;;;12555:91:0;;;12257;;;;;;;;;;-1:-1:-1;12257:91:0;;;;-1:-1:-1;;;;;12257:91:0;;;16391:637;;;;;;;;;;-1:-1:-1;16391:637:0;;;;;:::i;:::-;;:::i;23247:452::-;;;;;;;;;;-1:-1:-1;23247:452:0;;;;;:::i;:::-;;:::i;12454:94::-;;;;;;;;;;-1:-1:-1;12454:94:0;;;;-1:-1:-1;;;;;12454:94:0;;;2365:151;;;;;;;;;;-1:-1:-1;2365:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;2481:18:0;;;2454:7;2481:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2365:151;11500:31;;;;;;;;;;;;;;;;11538:37;;;;;;;;;;;;;;;;11960:57;;;;;;;;;;;;;;;;18011:118;;;;;;;;;;-1:-1:-1;18011:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;18100:21:0;18076:4;18100:21;;;:11;:21;;;;;;;;;18011:118;11379:34;;;;;;;;;;;;;;;;17379:126;;;;;;;;;;;;;:::i;6796:192::-;;;;;;;;;;-1:-1:-1;6796:192:0;;;;;:::i;:::-;;:::i;14874:267::-;;;;;;;;;;-1:-1:-1;14874:267:0;;;;;:::i;:::-;;:::i;22941:298::-;;;;;;;;;;;;;:::i;11584:107::-;;;;;;;;;;;;;;;;11459:34;;;;;;;;;;;;;;;;1610:100;1664:13;1697:5;1690:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1610:100;:::o;2524:169::-;2607:4;2624:39;1072:10;2647:7;2656:6;2624:8;:39::i;:::-;-1:-1:-1;2681:4:0;2524:169;;;;;:::o;17513:170::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;17602:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;:30;;-1:-1:-1;;17602:30:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17648:27;;17602:30;;:20;17648:27:::1;::::0;::::1;17513:170:::0;;:::o;17691:188::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17782:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;:38;;-1:-1:-1;;17782:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17836:35;;17782:38;;:21;17836:35:::1;::::0;::::1;17691:188:::0;;:::o;15615:151::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;15679:14:::1;::::0;;;::::1;;;15671:54;;;::::0;-1:-1:-1;;;15671:54:0;;5452:2:1;15671:54:0::1;::::0;::::1;5434:21:1::0;5491:2;5471:18;;;5464:30;5530:29;5510:18;;;5503:57;5577:18;;15671:54:0::1;5250:351:1::0;15671:54:0::1;15736:14;:22:::0;;-1:-1:-1;;15736:22:0::1;::::0;;15615:151::o;2701:490::-;2841:4;2858:36;2868:6;2876:9;2887:6;2858:9;:36::i;:::-;-1:-1:-1;;;;;2934:19:0;;2907:24;2934:19;;;:11;:19;;;;;;;;1072:10;2934:33;;;;;;;;2986:26;;;;2978:79;;;;-1:-1:-1;;;2978:79:0;;5808:2:1;2978:79:0;;;5790:21:1;5847:2;5827:18;;;5820:30;5886:34;5866:18;;;5859:62;-1:-1:-1;;;5937:18:1;;;5930:38;5985:19;;2978:79:0;5606:404:1;2978:79:0;3093:57;3102:6;1072:10;3143:6;3124:16;:25;3093:8;:57::i;:::-;3179:4;3172:11;;;2701:490;;;;;;:::o;3199:215::-;1072:10;3287:4;3336:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3336:34:0;;;;;;;;;;3287:4;;3304:80;;3327:7;;3336:47;;3373:10;;3336:47;:::i;:::-;3304:8;:80::i;15774:609::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;15958:13:::1;:33:::0;;;16002:11:::1;:29:::0;;;16042:13:::1;:33:::0;;;16086:10:::1;:27:::0;;;16124:16:::1;:39:::0;;;16185:87:::1;16143:20:::0;16185:65:::1;16099:14:::0;16185:65;16058:17;16185:65;15974:17;16016:15;16185:17:::1;:30::i;:::-;:34:::0;::::1;:49::i;:87::-;16174:8;:98:::0;16303:13:::1;::::0;16318:11:::1;::::0;16331:13:::1;::::0;16346:10:::1;::::0;16358:16:::1;::::0;16288:87:::1;::::0;;6508:25:1;;;6564:2;6549:18;;6542:34;;;;6592:18;;;6585:34;6650:2;6635:18;;6628:34;16288:87:0::1;::::0;6495:3:1;6480:19;16288:87:0::1;;;;;;;;15774:609:::0;;;;;:::o;14339:258::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14425:25:0;::::1;14417:74;;;;-1:-1:-1::0;;;14417:74:0::1;;;;;;;:::i;:::-;14502:14;:37:::0;;-1:-1:-1;;;;;;14502:37:0::1;-1:-1:-1::0;;;;;14502:37:0;::::1;::::0;;::::1;::::0;;;14555:34:::1;::::0;::::1;::::0;-1:-1:-1;;14555:34:0::1;14339:258:::0;:::o;14605:261::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14692:25:0;::::1;14684:74;;;;-1:-1:-1::0;;;14684:74:0::1;;;;;;;:::i;:::-;14769:15;:38:::0;;-1:-1:-1;;;;;;14769:38:0::1;-1:-1:-1::0;;;;;14769:38:0;::::1;::::0;;::::1;::::0;;;14823:35:::1;::::0;::::1;::::0;-1:-1:-1;;14823:35:0::1;14605:261:::0;:::o;6694:94::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;6759:21:::1;6777:1;6759:9;:21::i;:::-;6694:94::o:0;15149:258::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15235:25:0;::::1;15227:74;;;;-1:-1:-1::0;;;15227:74:0::1;;;;;;;:::i;:::-;15312:14;:37:::0;;-1:-1:-1;;;;;;15312:37:0::1;-1:-1:-1::0;;;;;15312:37:0;::::1;::::0;;::::1;::::0;;;15365:34:::1;::::0;::::1;::::0;-1:-1:-1;;15365:34:0::1;15149:258:::0;:::o;15415:192::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;15479:14:::1;::::0;;;::::1;;;15478:15;15470:54;;;::::0;-1:-1:-1;;;15470:54:0;;7280:2:1;15470:54:0::1;::::0;::::1;7262:21:1::0;7319:2;7299:18;;;7292:30;7358:28;7338:18;;;7331:56;7404:18;;15470:54:0::1;7078:350:1::0;15470:54:0::1;15535:14;:21:::0;;-1:-1:-1;;15535:21:0::1;::::0;::::1;::::0;;15587:12:::1;15567:17;:32:::0;15415:192::o;1718:104::-;1774:13;1807:7;1800:14;;;;;:::i;3422:411::-;1072:10;3515:4;3559:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3559:34:0;;;;;;;;;;3612:35;;;;3604:85;;;;-1:-1:-1;;;3604:85:0;;7635:2:1;3604:85:0;;;7617:21:1;7674:2;7654:18;;;7647:30;7713:34;7693:18;;;7686:62;-1:-1:-1;;;7764:18:1;;;7757:35;7809:19;;3604:85:0;7433:401:1;3604:85:0;3725:67;1072:10;3748:7;3776:15;3757:16;:34;3725:8;:67::i;:::-;-1:-1:-1;3821:4:0;;3422:411;-1:-1:-1;;;3422:411:0:o;2182:175::-;2268:4;2285:42;1072:10;2309:9;2320:6;2285:9;:42::i;17036:335::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;17138:1:::1;17125:10;:14;:57;;;;-1:-1:-1::0;17178:4:0::1;17158:16;10903:18;17173:1;17158:16;:::i;:::-;17157:25;;;;:::i;:::-;17143:10;:39;;17125:57;17117:148;;;::::0;-1:-1:-1;;;17117:148:0;;8436:2:1;17117:148:0::1;::::0;::::1;8418:21:1::0;8475:2;8455:18;;;8448:30;8514:34;8494:18;;;8487:62;8585:34;8565:18;;;8558:62;-1:-1:-1;;;8636:19:1;;;8629:45;8691:19;;17117:148:0::1;8234:482:1::0;17117:148:0::1;17276:18;:31:::0;;;17323:40:::1;::::0;17297:10;;17323:40:::1;::::0;;;::::1;17036:335:::0;:::o;16391:637::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;16581:14:::1;:35:::0;;;16627:12:::1;:31:::0;;;16669:14:::1;:35:::0;;;16715:11:::1;:29:::0;;;16755:17:::1;:41:::0;;;16819:92:::1;16775:21:::0;16819:69:::1;16729:15:::0;16819:69;16686:18;16819:69;16598:18;16642:16;16819:18:::1;:32::i;:92::-;16807:9;:104:::0;16943:14:::1;::::0;16959:12:::1;::::0;16973:14:::1;::::0;16989:11:::1;::::0;17002:17:::1;::::0;16927:93:::1;::::0;;6508:25:1;;;6564:2;6549:18;;6542:34;;;;6592:18;;;6585:34;6650:2;6635:18;;6628:34;16927:93:0::1;::::0;6495:3:1;6480:19;16927:93:0::1;6277:391:1::0;23247:452:0;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;23358:4:::1;-1:-1:-1::0;;;;;23335:28:0;::::1;::::0;23327:73:::1;;;::::0;-1:-1:-1;;;23327:73:0;;8923:2:1;23327:73:0::1;::::0;::::1;8905:21:1::0;;;8942:18;;;8935:30;9001:34;8981:18;;;8974:62;9053:18;;23327:73:0::1;8721:356:1::0;23327:73:0::1;23436:44;::::0;-1:-1:-1;;;23436:44:0;;23474:4:::1;23436:44;::::0;::::1;3430:51:1::0;23413:20:0::1;::::0;-1:-1:-1;;;;;23436:29:0;::::1;::::0;::::1;::::0;3403:18:1;;23436:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23413:67;;23514:1;23499:12;:16;23491:60;;;::::0;-1:-1:-1;;;23491:60:0;;9473:2:1;23491:60:0::1;::::0;::::1;9455:21:1::0;9512:2;9492:18;;;9485:30;9551:33;9531:18;;;9524:61;9602:18;;23491:60:0::1;9271:355:1::0;23491:60:0::1;23579:54;::::0;-1:-1:-1;;;23579:54:0;;23608:10:::1;23579:54;::::0;::::1;9805:51:1::0;9872:18;;;9865:34;;;23564:12:0::1;::::0;-1:-1:-1;;;;;23579:28:0;::::1;::::0;::::1;::::0;9778:18:1;;23579:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23564:69;;23652:7;23644:47;;;::::0;-1:-1:-1;;;23644:47:0;;10362:2:1;23644:47:0::1;::::0;::::1;10344:21:1::0;10401:2;10381:18;;;10374:30;10440:29;10420:18;;;10413:57;10487:18;;23644:47:0::1;10160:351:1::0;23644:47:0::1;23316:383;;23247:452:::0;:::o;17379:126::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;17460:21:::1;::::0;::::1;;17459:38;;17493:4;17459:38;;;17485:5;17459:38;17435:21;:62:::0;;-1:-1:-1;;17435:62:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17379:126::o;6796:192::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6885:22:0;::::1;6877:73;;;::::0;-1:-1:-1;;;6877:73:0;;10718:2:1;6877:73:0::1;::::0;::::1;10700:21:1::0;10757:2;10737:18;;;10730:30;10796:34;10776:18;;;10769:62;-1:-1:-1;;;10847:18:1;;;10840:36;10893:19;;6877:73:0::1;10516:402:1::0;6877:73:0::1;6961:19;6971:8;6961:9;:19::i;:::-;6796:192:::0;:::o;14874:267::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14963:25:0;::::1;14955:74;;;;-1:-1:-1::0;;;14955:74:0::1;;;;;;;:::i;:::-;15040:17;:40:::0;;-1:-1:-1;;;;;;15040:40:0::1;-1:-1:-1::0;;;;;15040:40:0;::::1;::::0;;::::1;::::0;;;15096:37:::1;::::0;::::1;::::0;-1:-1:-1;;15096:37:0::1;14874:267:::0;:::o;22941:298::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;23017:21:::1;23057:11:::0;23049:52:::1;;;::::0;-1:-1:-1;;;23049:52:0;;11125:2:1;23049:52:0::1;::::0;::::1;11107:21:1::0;11164:2;11144:18;;;11137:30;11203;11183:18;;;11176:58;11251:18;;23049:52:0::1;10923:352:1::0;23049:52:0::1;23133:44;::::0;23115:12:::1;::::0;23141:10:::1;::::0;23165:7;;23115:12;23133:44;23115:12;23133:44;23165:7;23141:10;23133:44:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23114:63;;;23196:7;23188:43;;;::::0;-1:-1:-1;;;23188:43:0;;11692:2:1;23188:43:0::1;::::0;::::1;11674:21:1::0;11731:2;11711:18;;;11704:30;11770:25;11750:18;;;11743:53;11813:18;;23188:43:0::1;11490:347:1::0;23188:43:0::1;22988:251;;22941:298::o:0;5588:380::-;-1:-1:-1;;;;;5724:19:0;;5716:68;;;;-1:-1:-1;;;5716:68:0;;12044:2:1;5716:68:0;;;12026:21:1;12083:2;12063:18;;;12056:30;12122:34;12102:18;;;12095:62;-1:-1:-1;;;12173:18:1;;;12166:34;12217:19;;5716:68:0;11842:400:1;5716:68:0;-1:-1:-1;;;;;5803:21:0;;5795:68;;;;-1:-1:-1;;;5795:68:0;;12449:2:1;5795:68:0;;;12431:21:1;12488:2;12468:18;;;12461:30;12527:34;12507:18;;;12500:62;-1:-1:-1;;;12578:18:1;;;12571:32;12620:19;;5795:68:0;12247:398:1;5795:68:0;-1:-1:-1;;;;;5876:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5928:32;;1871:25:1;;;5928:32:0;;1844:18:1;5928:32:0;;;;;;;5588:380;;;:::o;18918:1016::-;-1:-1:-1;;;;;19041:19:0;;19033:58;;;;-1:-1:-1;;;19033:58:0;;12852:2:1;19033:58:0;;;12834:21:1;12891:2;12871:18;;;12864:30;12930:28;12910:18;;;12903:56;12976:18;;19033:58:0;12650:350:1;19033:58:0;-1:-1:-1;;;;;19106:17:0;;19098:54;;;;-1:-1:-1;;;19098:54:0;;13207:2:1;19098:54:0;;;13189:21:1;13246:2;13226:18;;;13219:30;13285:26;13265:18;;;13258:54;13329:18;;19098:54:0;13005:348:1;19098:54:0;19177:1;19167:7;:11;19159:65;;;;-1:-1:-1;;;19159:65:0;;13560:2:1;19159:65:0;;;13542:21:1;13599:2;13579:18;;;13572:30;13638:34;13618:18;;;13611:62;-1:-1:-1;;;13689:18:1;;;13682:39;13738:19;;19159:65:0;13358:405:1;19159:65:0;-1:-1:-1;;;;;19240:18:0;;;;;;:11;:18;;;;;;;;19239:19;19231:65;;;;-1:-1:-1;;;19231:65:0;;13970:2:1;19231:65:0;;;13952:21:1;14009:2;13989:18;;;13982:30;14048:34;14028:18;;;14021:62;-1:-1:-1;;;14099:18:1;;;14092:31;14140:19;;19231:65:0;13768:397:1;19231:65:0;-1:-1:-1;;;;;19312:16:0;;;;;;:11;:16;;;;;;;;19311:17;19303:61;;;;-1:-1:-1;;;19303:61:0;;14372:2:1;19303:61:0;;;14354:21:1;14411:2;14391:18;;;14384:30;14450:33;14430:18;;;14423:61;14501:18;;19303:61:0;14170:355:1;19303:61:0;19371:18;19392:29;19401:5;19408:3;19413:7;19392:8;:29::i;:::-;19473:18;;19463:4;19430:12;2148:18;;;;;;;;;;;;-1:-1:-1;;;;;19513:18:0;;;;:11;:18;;;;;;;19371:50;;-1:-1:-1;;19445:46:0;;19513:18;;19512:19;:49;;;;-1:-1:-1;;;;;;19545:16:0;;;;;;:11;:16;;;;;;;;19544:17;19512:49;:81;;;;-1:-1:-1;;;;;;19575:18:0;;;;;;:11;:18;;;;;;;;19574:19;19512:81;:111;;;;-1:-1:-1;;;;;;19607:16:0;;;;;;:11;:16;;;;;;;;19606:17;19512:111;19498:387;;;19651:14;;;;;;;19643:45;;;;-1:-1:-1;;;19643:45:0;;14732:2:1;19643:45:0;;;14714:21:1;14771:2;14751:18;;;14744:30;-1:-1:-1;;;14790:18:1;;;14783:48;14848:18;;19643:45:0;14530:342:1;19643:45:0;19732:3;-1:-1:-1;;;;;19717:18:0;:11;-1:-1:-1;;;;;19717:18:0;;:56;;;;-1:-1:-1;19752:21:0;;;;19717:56;:80;;;;;19790:7;19717:80;:108;;;;-1:-1:-1;19815:10:0;;;;;;;19814:11;19717:108;19699:179;;;19852:14;:12;:14::i;:::-;19891:39;19907:5;19914:3;19919:10;19891:15;:39::i;:::-;19026:908;;18918:1016;;;:::o;8708:98::-;8766:7;8793:5;8797:1;8793;:5;:::i;6996:173::-;7071:6;;;-1:-1:-1;;;;;7088:17:0;;;-1:-1:-1;;;;;;7088:17:0;;;;;;;7121:40;;7071:6;;;7088:17;7071:6;;7121:40;;7052:16;;7121:40;7041:128;6996:173;:::o;18277:637::-;-1:-1:-1;;;;;18416:18:0;;18392:7;18416:18;;;:11;:18;;;;;;;;;:38;;-1:-1:-1;;;;;;18438:16:0;;;;;;:11;:16;;;;;;;;18416:38;18412:85;;;-1:-1:-1;18478:7:0;18471:14;;18412:85;18526:13;;-1:-1:-1;;;;;18563:11:0;18556:18;;;;;;18552:149;;-1:-1:-1;18602:9:0;;18552:149;;;18642:11;-1:-1:-1;;;;;18633:20:0;:5;-1:-1:-1;;;;;18633:20:0;;18629:72;;-1:-1:-1;18681:8:0;;18629:72;18713:11;18743:12;;18739:135;;18801:4;18779:18;18789:8;18779:7;:18;:::i;:::-;18778:27;;;;:::i;:::-;18772:33;;18820:42;18836:5;18851:4;18858:3;18820:15;:42::i;:::-;18892:13;18902:3;18892:7;:13;:::i;:::-;18884:22;18277:637;-1:-1:-1;;;;;;18277:637:0:o;19942:1871::-;19982:10;:17;;-1:-1:-1;;19982:17:0;;;;;20044:4;-1:-1:-1;2148:18:0;;;;;;;;;;;20006:44;;20062:9;20075:1;20062:14;20058:45;;20089:7;19942:1871::o;20058:45::-;20111:16;20130:25;20145:9;;20131:8;;20130:14;;:25;;;;:::i;:::-;20111:44;;20164:20;20186:35;20206:14;;20187:13;;20186:19;;:35;;;;:::i;:::-;20164:57;;20228:21;20252:31;20270:12;;20253:11;;20252:17;;:31;;;;:::i;:::-;20228:55;;20290:23;20315:35;20335:14;;20316:13;;20315:19;;:35;;;;:::i;:::-;20290:60;;20357:20;20379:29;20396:11;;20380:10;;20379:16;;:29;;;;:::i;:::-;20357:51;;20415:22;20439:41;20462:17;;20440:16;;20439:22;;:41;;;;:::i;:::-;20415:65;;20493:14;20511:1;20493:19;20489:125;;20536:70;20593:12;20536:52;20572:15;20536:52;:12;20553:13;20536:16;:31::i;:70::-;20525:81;;20489:125;20622:20;20657:12;;20653:102;;20697:50;20745:1;20697:43;20731:8;20697:43;:9;20711:14;20697:13;:29::i;:::-;:33;;:43::i;:50::-;20682:65;;20653:102;20761:18;20782:27;:9;20796:12;20782:13;:27::i;:::-;20761:48;-1:-1:-1;20841:21:0;20869;20761:48;20869:9;:21::i;:::-;20897:18;20918:41;:21;20944:14;20918:25;:41::i;:::-;20897:62;-1:-1:-1;20968:23:0;21006:18;;21002:239;;21055:51;21104:1;21055:44;21090:8;21055:44;:10;21070:14;21055;:30::i;:51::-;21037:69;;21119:43;21132:12;21146:15;21119:12;:43::i;:::-;21174:59;;;15212:25:1;;;15268:2;15253:18;;15246:34;;;15296:18;;;15289:34;;;21174:59:0;;15200:2:1;15185:18;21174:59:0;;;;;;;21002:239;21247:21;21271:42;21304:8;21271:28;:10;21286:12;21271:14;:28::i;:42::-;21247:66;-1:-1:-1;21320:22:0;21345:43;21379:8;21345:29;:10;21360:13;21345:14;:29::i;:43::-;21320:68;-1:-1:-1;21395:24:0;21422:45;21458:8;21422:31;:10;21437:15;21422:14;:31::i;:45::-;21395:72;-1:-1:-1;21474:21:0;21498:42;21531:8;21498:28;:10;21513:12;21498:14;:28::i;:42::-;21570:14;;21474:66;;-1:-1:-1;21549:51:0;;-1:-1:-1;;;;;21570:14:0;21586:13;21549:20;:51::i;:::-;21628:15;;21607:53;;-1:-1:-1;;;;;21628:15:0;21645:14;21607:20;:53::i;:::-;21688:17;;21667:57;;-1:-1:-1;;;;;21688:17:0;21707:16;21667:20;:57::i;:::-;21752:14;;21731:51;;-1:-1:-1;;;;;21752:14:0;21768:13;21731:20;:51::i;:::-;-1:-1:-1;;21791:10:0;:18;;-1:-1:-1;;21791:18:0;;;-1:-1:-1;;;;;;;;;;;;;;19942:1871:0:o;3841:733::-;-1:-1:-1;;;;;3981:20:0;;3973:70;;;;-1:-1:-1;;;3973:70:0;;15536:2:1;3973:70:0;;;15518:21:1;15575:2;15555:18;;;15548:30;15614:34;15594:18;;;15587:62;-1:-1:-1;;;15665:18:1;;;15658:35;15710:19;;3973:70:0;15334:401:1;3973:70:0;-1:-1:-1;;;;;4062:23:0;;4054:71;;;;-1:-1:-1;;;4054:71:0;;15942:2:1;4054:71:0;;;15924:21:1;15981:2;15961:18;;;15954:30;16020:34;16000:18;;;15993:62;-1:-1:-1;;;16071:18:1;;;16064:33;16114:19;;4054:71:0;15740:399:1;4054:71:0;-1:-1:-1;;;;;4222:17:0;;4198:21;4222:17;;;;;;;;;;;4258:23;;;;4250:74;;;;-1:-1:-1;;;4250:74:0;;16346:2:1;4250:74:0;;;16328:21:1;16385:2;16365:18;;;16358:30;16424:34;16404:18;;;16397:62;-1:-1:-1;;;16475:18:1;;;16468:36;16521:19;;4250:74:0;16144:402:1;4250:74:0;-1:-1:-1;;;;;4360:17:0;;;:9;:17;;;;;;;;;;;4380:22;;;4360:42;;4424:20;;;;;;;;:30;;4396:6;;4360:9;4424:30;;4396:6;;4424:30;:::i;:::-;;;;;;;;4489:9;-1:-1:-1;;;;;4472:35:0;4481:6;-1:-1:-1;;;;;4472:35:0;;4500:6;4472:35;;;;1871:25:1;;1859:2;1844:18;;1725:177;4472:35:0;;;;;;;;3962:612;3841:733;;;:::o;8920:98::-;8978:7;9005:5;9009:1;9005;:5;:::i;9026:98::-;9084:7;9111:5;9115:1;9111;:5;:::i;8814:98::-;8872:7;8899:5;8903:1;8899;:5;:::i;21965:447::-;22045:16;;;22059:1;22045:16;;;;;;;;22021:21;;22045:16;;;;;;;;;;-1:-1:-1;22045:16:0;22021:40;;22090:4;22072;22077:1;22072:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;22072:23:0;;;-1:-1:-1;;;;;22072:23:0;;;;;22116:13;-1:-1:-1;;;;;22116:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22106:4;22111:1;22106:7;;;;;;;;:::i;:::-;;;;;;:30;-1:-1:-1;;;;;22106:30:0;;;-1:-1:-1;;;;;22106:30:0;;;;;22147:56;22164:4;22179:13;22195:7;22147:8;:56::i;:::-;22214:190;;-1:-1:-1;;;22214:190:0;;-1:-1:-1;;;;;22214:13:0;:64;;;;:190;;22293:7;;22315:1;;22331:4;;22358;;22378:15;;22214:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22010:402;21965:447;:::o;22424:509::-;22572:60;22589:4;22604:13;22620:11;22572:8;:60::i;:::-;22675:13;-1:-1:-1;;;;;22675:29:0;;22712:9;22745:4;22765:11;22791:1;22834;22877:7;6544:6;;-1:-1:-1;;;;;6544:6:0;;6471:87;22877:7;22675:250;;;;;;-1:-1:-1;;;;;;22675:250:0;;;-1:-1:-1;;;;;18415:15:1;;;22675:250:0;;;18397:34:1;18447:18;;;18440:34;;;;18490:18;;;18483:34;;;;18533:18;;;18526:34;18597:15;;;18576:19;;;18569:44;22899:15:0;18629:19:1;;;18622:35;18331:19;;22675:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21821:132::-;21919:26;;-1:-1:-1;;;;;21919:18:0;;;:26;;;;;21938:6;;21919:26;;;;21938:6;21919:18;:26;;;;;;;;;;;;;;;;;;;14:548:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:118::-;1301:5;1294:13;1287:21;1280:5;1277:32;1267:60;;1323:1;1320;1313:12;1338:382;1403:6;1411;1464:2;1452:9;1443:7;1439:23;1435:32;1432:52;;;1480:1;1477;1470:12;1432:52;1519:9;1506:23;1538:31;1563:5;1538:31;:::i;:::-;1588:5;-1:-1:-1;1645:2:1;1630:18;;1617:32;1658:30;1617:32;1658:30;:::i;:::-;1707:7;1697:17;;;1338:382;;;;;:::o;1907:247::-;1966:6;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2074:9;2061:23;2093:31;2118:5;2093:31;:::i;2159:456::-;2236:6;2244;2252;2305:2;2293:9;2284:7;2280:23;2276:32;2273:52;;;2321:1;2318;2311:12;2273:52;2360:9;2347:23;2379:31;2404:5;2379:31;:::i;:::-;2429:5;-1:-1:-1;2486:2:1;2471:18;;2458:32;2499:33;2458:32;2499:33;:::i;:::-;2159:456;;2551:7;;-1:-1:-1;;;2605:2:1;2590:18;;;;2577:32;;2159:456::o;2809:454::-;2904:6;2912;2920;2928;2936;2989:3;2977:9;2968:7;2964:23;2960:33;2957:53;;;3006:1;3003;2996:12;2957:53;-1:-1:-1;;3029:23:1;;;3099:2;3084:18;;3071:32;;-1:-1:-1;3150:2:1;3135:18;;3122:32;;3201:2;3186:18;;3173:32;;-1:-1:-1;3252:3:1;3237:19;3224:33;;-1:-1:-1;2809:454:1;-1:-1:-1;2809:454:1:o;3926:180::-;3985:6;4038:2;4026:9;4017:7;4013:23;4009:32;4006:52;;;4054:1;4051;4044:12;4006:52;-1:-1:-1;4077:23:1;;3926:180;-1:-1:-1;3926:180:1:o;4111:388::-;4179:6;4187;4240:2;4228:9;4219:7;4215:23;4211:32;4208:52;;;4256:1;4253;4246:12;4208:52;4295:9;4282:23;4314:31;4339:5;4314:31;:::i;:::-;4364:5;-1:-1:-1;4421:2:1;4406:18;;4393:32;4434:33;4393:32;4434:33;:::i;4504:380::-;4583:1;4579:12;;;;4626;;;4647:61;;4701:4;4693:6;4689:17;4679:27;;4647:61;4754:2;4746:6;4743:14;4723:18;4720:38;4717:161;;4800:10;4795:3;4791:20;4788:1;4781:31;4835:4;4832:1;4825:15;4863:4;4860:1;4853:15;4717:161;;4504:380;;;:::o;4889:356::-;5091:2;5073:21;;;5110:18;;;5103:30;5169:34;5164:2;5149:18;;5142:62;5236:2;5221:18;;4889:356::o;6015:127::-;6076:10;6071:3;6067:20;6064:1;6057:31;6107:4;6104:1;6097:15;6131:4;6128:1;6121:15;6147:125;6212:9;;;6233:10;;;6230:36;;;6246:18;;:::i;6673:400::-;6875:2;6857:21;;;6914:2;6894:18;;;6887:30;6953:34;6948:2;6933:18;;6926:62;-1:-1:-1;;;7019:2:1;7004:18;;6997:34;7063:3;7048:19;;6673:400::o;7839:168::-;7912:9;;;7943;;7960:15;;;7954:22;;7940:37;7930:71;;7981:18;;:::i;8012:217::-;8052:1;8078;8068:132;;8122:10;8117:3;8113:20;8110:1;8103:31;8157:4;8154:1;8147:15;8185:4;8182:1;8175:15;8068:132;-1:-1:-1;8214:9:1;;8012:217::o;9082:184::-;9152:6;9205:2;9193:9;9184:7;9180:23;9176:32;9173:52;;;9221:1;9218;9211:12;9173:52;-1:-1:-1;9244:16:1;;9082:184;-1:-1:-1;9082:184:1:o;9910:245::-;9977:6;10030:2;10018:9;10009:7;10005:23;10001:32;9998:52;;;10046:1;10043;10036:12;9998:52;10078:9;10072:16;10097:28;10119:5;10097:28;:::i;14877:128::-;14944:9;;;14965:11;;;14962:37;;;14979:18;;:::i;16683:127::-;16744:10;16739:3;16735:20;16732:1;16725:31;16775:4;16772:1;16765:15;16799:4;16796:1;16789:15;16815:251;16885:6;16938:2;16926:9;16917:7;16913:23;16909:32;16906:52;;;16954:1;16951;16944:12;16906:52;16986:9;16980:16;17005:31;17030:5;17005:31;:::i;17071:980::-;17333:4;17381:3;17370:9;17366:19;17412:6;17401:9;17394:25;17438:2;17476:6;17471:2;17460:9;17456:18;17449:34;17519:3;17514:2;17503:9;17499:18;17492:31;17543:6;17578;17572:13;17609:6;17601;17594:22;17647:3;17636:9;17632:19;17625:26;;17686:2;17678:6;17674:15;17660:29;;17707:1;17717:195;17731:6;17728:1;17725:13;17717:195;;;17796:13;;-1:-1:-1;;;;;17792:39:1;17780:52;;17887:15;;;;17852:12;;;;17828:1;17746:9;17717:195;;;-1:-1:-1;;;;;;;17968:32:1;;;;17963:2;17948:18;;17941:60;-1:-1:-1;;;18032:3:1;18017:19;18010:35;17929:3;17071:980;-1:-1:-1;;;17071:980:1:o;18668:306::-;18756:6;18764;18772;18825:2;18813:9;18804:7;18800:23;18796:32;18793:52;;;18841:1;18838;18831:12;18793:52;18870:9;18864:16;18854:26;;18920:2;18909:9;18905:18;18899:25;18889:35;;18964:2;18953:9;18949:18;18943:25;18933:35;;18668:306;;;;;:::o

Swarm Source

ipfs://d5059759ec8cb10bd5bcf37fbf0908978c51512d6118ed04673e3007e28f279d

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.