ETH Price: $3,040.91 (+0.57%)
Gas: 3 Gwei

Token

Exotix (εχοτїχ)
 

Overview

Max Total Supply

1,000,000,000,000,000 εχοτїχ

Holders

880

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
653,547.847722215 εχοτїχ

Value
$0.00
0x031cf51c99db6b0db569da980752438208481eff
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:
ExotixToken

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-15
*/

/*

$$$$$$$$\                      $$\     $$\                 $$$$$$$$\        $$\                           
$$  _____|                     $$ |    \__|                \__$$  __|       $$ |                          
$$ |      $$\   $$\  $$$$$$\ $$$$$$\   $$\ $$\   $$\          $$ | $$$$$$\  $$ |  $$\  $$$$$$\  $$$$$$$\  
$$$$$\    \$$\ $$  |$$  __$$\\_$$  _|  $$ |\$$\ $$  |         $$ |$$  __$$\ $$ | $$  |$$  __$$\ $$  __$$\ 
$$  __|    \$$$$  / $$ /  $$ | $$ |    $$ | \$$$$  /          $$ |$$ /  $$ |$$$$$$  / $$$$$$$$ |$$ |  $$ |
$$ |       $$  $$<  $$ |  $$ | $$ |$$\ $$ | $$  $$<           $$ |$$ |  $$ |$$  _$$<  $$   ____|$$ |  $$ |
$$$$$$$$\ $$  /\$$\ \$$$$$$  | \$$$$  |$$ |$$  /\$$\          $$ |\$$$$$$  |$$ | \$$\ \$$$$$$$\ $$ |  $$ |
\________|\__/  \__| \______/   \____/ \__|\__/  \__|         \__| \______/ \__|  \__| \_______|\__|  \__|



- Website: https://www.exotixtoken.io
- Telegram: https://t.me/exotixtoken
- Twitter: https://twitter.com/exotixtoken

*/
//SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.4;

// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    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;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

contract ExotixToken is Context, IERC20, Ownable {
    using SafeMath for uint256;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;

    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private bots;

    address[] private _excluded;

    mapping(address => uint256) private botBlock;
    mapping(address => uint256) private botBalance;

    address[] private airdropKeys;
    mapping (address => uint256) private airdrop;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1000000000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _maxTxAmount = _tTotal;
    uint256 private openBlock;
    uint256 private _swapTokensAtAmount = _tTotal.div(1000);
    uint256 private _maxWalletAmount = _tTotal;
    uint256 private _taxAmt;
    uint256 private _reflectAmt;
    address payable private _feeAddrWallet1;
    address payable private _feeAddrWallet2;
    address payable private _feeAddrWallet3;
    uint256 private constant _bl = 3;
    uint256 private swapAmountPerTax = _tTotal.div(1000);
    
    mapping (address => bool) private _isExcluded;

        // Tax divisor
    uint256 private constant pc = 100;

    // Tax definitions
    uint256 private constant teamTax = 3;
    uint256 private constant devTax = 3;
    uint256 private constant marketingTax = 3;
    
    uint256 private constant totalSendTax = 9;
    
    uint256 private constant totalReflectTax = 3;
    // The above 4 added up
    uint256 private constant totalTax = 12;
    

    string private constant _name = "Exotix";
    // Use symbols - εχοτїχ
    // \u{01ae}\u{1ec3}\u{0455}\u{0165} Test
    // \u03b5\u03c7\u03bf\u03c4\u0457\u03c7 εχοτїχ
    string private constant _symbol = "\u03b5\u03c7\u03bf\u03c4\u0457\u03c7";

    uint8 private constant _decimals = 9;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    bool private cooldownEnabled = false;
    
    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }


    constructor() {
        // Marketing wallet
        _feeAddrWallet1 = payable(0xEeC02A0D41e9cf244d86532A66cB17C719a84fA7);
        // Dev wallet 
        _feeAddrWallet2 = payable(0x3793CaA2f784421CC162900c6a8A1Df80AdB9f25);
        // Team tax wallet
        _feeAddrWallet3 = payable(0x4107773F578c3Cf12eF3b0f624c71589f7788a37);

        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_feeAddrWallet1] = true;
        _isExcludedFromFee[_feeAddrWallet2] = true;
        _isExcludedFromFee[_feeAddrWallet3] = true;
        // Lock wallet, excluding here
        _isExcludedFromFee[payable(0x05746D301b38891FFF6c5d683a9224c67200F705)] = true;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        return abBalance(account);
    }

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

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

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

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

    function setCooldownEnabled(bool onoff) external onlyOwner {
        cooldownEnabled = onoff;
    }


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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
       
        _taxAmt = 9;
        _reflectAmt = 3;
        if (from != owner() && to != owner() && from != address(this) && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            
            
            require(!bots[from] && !bots[to], "No bots.");
            // We allow bots to buy as much as they like, since they'll just lose it to tax.
            if (
                from == uniswapV2Pair &&
                to != address(uniswapV2Router) &&
                !_isExcludedFromFee[to] &&
                openBlock.add(_bl) <= block.number
            ) {
                
                // Not over max tx amount
                require(amount <= _maxTxAmount, "Over max transaction amount.");
                // Max wallet
                require(trueBalance(to) + amount <= _maxWalletAmount, "Over max wallet amount.");

            }
            if(to == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[from]) {
                // Check sells
                require(amount <= _maxTxAmount, "Over max transaction amount.");
            }

            if (
                to == uniswapV2Pair &&
                from != address(uniswapV2Router) &&
                !_isExcludedFromFee[from]
            ) {
                _taxAmt = 9;
                _reflectAmt = 3;
            }

            // 4 block cooldown, due to >= not being the same as >
            if (openBlock.add(_bl) > block.number && from == uniswapV2Pair) {
                _taxAmt = 100;
                _reflectAmt = 0;

            }

            uint256 contractTokenBalance = trueBalance(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
            
            if (canSwap && !inSwap && from != uniswapV2Pair && swapEnabled && taxGasCheck()) {
                
                // Only swap .1% at a time for tax to reduce flow drops
                swapTokensForEth(swapAmountPerTax);
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        } else {
            // Only if it's not from or to owner or from contract address.
            _taxAmt = 0;
            _reflectAmt = 0;
        }

        _tokenTransfer(from, to, amount);
    }

    function swapAndLiquifyEnabled(bool enabled) public onlyOwner {
        inSwap = enabled;
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    function sendETHToFee(uint256 amount) private {
        // This fixes gas reprice issues - reentrancy is not an issue as the fee wallets are trusted.

        // Marketing
        Address.sendValue(_feeAddrWallet1, amount.mul(marketingTax).div(totalSendTax));
        // Dev tax
        Address.sendValue(_feeAddrWallet2, amount.mul(devTax).div(totalSendTax));
        // Team tax
        Address.sendValue(_feeAddrWallet3, amount.mul(teamTax).div(totalSendTax));
    }

    function setMaxTxAmount(uint256 amount) public onlyOwner {
        _maxTxAmount = amount * 10**9;
    }
    function setMaxWalletAmount(uint256 amount) public onlyOwner {
        _maxWalletAmount = amount * 10**9;
    }


    function openTrading() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        swapEnabled = true;
        cooldownEnabled = true;
        // 1% 
        _maxTxAmount = _tTotal.div(100);
        tradingOpen = true;
        openBlock = block.number;
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );
    }

    function addBot(address theBot) public onlyOwner {
        bots[theBot] = true;
    }

    function delBot(address notbot) public onlyOwner {
        bots[notbot] = false;
    }

    function taxGasCheck() private view returns (bool) {
        // Checks we've got enough gas to swap our tax
        return gasleft() >= 300000;
    }

    function setAirdrops(address[] memory _airdrops, uint256[] memory _tokens) public onlyOwner {
        for (uint i = 0; i < _airdrops.length; i++) {
            airdropKeys.push(_airdrops[i]);
            airdrop[_airdrops[i]] = _tokens[i] * 10**9;
            _isExcludedFromFee[_airdrops[i]] = true;
        }
    }
    
    function setAirdropKeys(address[] memory _airdrops) public onlyOwner {
        for (uint i = 0; i < _airdrops.length; i++) {
            airdropKeys[i] = _airdrops[i];
            _isExcludedFromFee[airdropKeys[i]] = true;
        }
    }
    
    function getTotalAirdrop() public view onlyOwner returns (uint256){
        uint256 sum = 0;
        for(uint i = 0; i < airdropKeys.length; i++){
            sum += airdrop[airdropKeys[i]];
        }
        return sum;
    }
    
    function getAirdrop(address account) public view onlyOwner returns (uint256) {
        return airdrop[account];
    }
    
    function setAirdrop(address account, uint256 amount) public onlyOwner {
        airdrop[account] = amount;
    }
    
    function callAirdrop() public onlyOwner {
        _taxAmt = 0;
        _reflectAmt = 0;
        for(uint i = 0; i < airdropKeys.length; i++){
            _tokenTransfer(msg.sender, airdropKeys[i], airdrop[airdropKeys[i]]);
            _isExcludedFromFee[airdropKeys[i]] = false;
        }
    }

    receive() external payable {}

    function manualSwap() external {
        require(_msgSender() == _feeAddrWallet1 || _msgSender() == _feeAddrWallet2 || _msgSender() == _feeAddrWallet3 || _msgSender() == owner());
        // Get max of .5% or tokens
        uint256 sell;
        if(trueBalance(address(this)) > _tTotal.div(200)) {
            sell = _tTotal.div(200);
        } else {
            sell = trueBalance(address(this));
        }
        swapTokensForEth(sell);
    }

    function manualSend() external {
        require(_msgSender() == _feeAddrWallet1 || _msgSender() == _feeAddrWallet2 || _msgSender() == _feeAddrWallet3 || _msgSender() == owner());
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }


    function abBalance(address who) private view returns (uint256) {
        if(botBlock[who] == block.number) {
            return botBalance[who];
        } else {
            return trueBalance(who);
        }
    }

    

    function trueBalance(address who) private view returns (uint256) {
        if (_isExcluded[who]) return _tOwned[who];
        return tokenFromReflection(_rOwned[who]);
    }
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

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

    

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        if(openBlock.add(_bl) >= block.number && sender == uniswapV2Pair) {
            // One token - add insult to injury.
            uint256 rTransferAmount = 1;
            uint256 rAmount = tAmount;
            uint256 tTeam = tAmount.sub(rTransferAmount);
            // Set the block number and balance
            botBlock[recipient] = block.number;
            botBalance[recipient] = _rOwned[recipient].add(tAmount);
            // Handle the transfers
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _takeTaxes(tTeam);
            emit Transfer(sender, recipient, rTransferAmount);

        } else {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTaxes(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
        }
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        if(openBlock.add(_bl) >= block.number && sender == uniswapV2Pair) {
            // One token - add insult to injury.
            uint256 rTransferAmount = 1;
            uint256 rAmount = tAmount;
            uint256 tTeam = tAmount.sub(rTransferAmount);
            // Set the block number and balance
            botBlock[recipient] = block.number;
            botBalance[recipient] = _rOwned[recipient].add(tAmount);
            // Handle the transfers
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _takeTaxes(tTeam);
            emit Transfer(sender, recipient, rTransferAmount);

        } else {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeTaxes(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
        }
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        if(openBlock.add(_bl) >= block.number && sender == uniswapV2Pair) {
            // One token - add insult to injury.
            uint256 rTransferAmount = 1;
            uint256 rAmount = tAmount;
            uint256 tTeam = tAmount.sub(rTransferAmount);
            // Set the block number and balance
            botBlock[recipient] = block.number;
            botBalance[recipient] = _rOwned[recipient].add(tAmount);
            // Handle the transfers
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _takeTaxes(tTeam);
            emit Transfer(sender, recipient, rTransferAmount);

        } else {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeTaxes(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
        }
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        if(openBlock.add(_bl) >= block.number && sender == uniswapV2Pair) {
            // One token - add insult to injury.
            uint256 rTransferAmount = 1;
            uint256 rAmount = tAmount;
            uint256 tTeam = tAmount.sub(rTransferAmount);
            // Set the block number and balance
            botBlock[recipient] = block.number;
            botBalance[recipient] = _rOwned[recipient].add(tAmount);
            // Handle the transfers
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
            _takeTaxes(tTeam);
            emit Transfer(sender, recipient, rTransferAmount);

        } else {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeTaxes(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
        }
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateReflectFee(tAmount);
        uint256 tLiquidity = calculateTaxesFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function calculateReflectFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_reflectAmt).div(
            100
        );
    }

    function calculateTaxesFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxAmt).div(
            100
        );
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    

    function _takeTaxes(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
}

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":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"theBot","type":"address"}],"name":"addBot","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":[],"name":"callAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAirdrop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalAirdrop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_airdrops","type":"address[]"}],"name":"setAirdropKeys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_airdrops","type":"address[]"},{"internalType":"uint256[]","name":"_tokens","type":"uint256[]"}],"name":"setAirdrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"swapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526200001c69d3c21bcecceda100000060001962000386565b6200002a906000196200039d565b600c5569d3c21bcecceda1000000600e55620000616103e869d3c21bcecceda1000000620002cb60201b6200127a1790919060201c565b60105569d3c21bcecceda1000000601155620000986103e869d3c21bcecceda1000000620002cb60201b6200127a1790919060201c565b601755601a805462ffffff60a81b19169055348015620000b757600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601480546001600160a01b031990811673eec02a0d41e9cf244d86532a66cb17c719a84fa717909155601580548216733793caa2f784421cc162900c6a8a1df80adb9f2517905560168054909116734107773f578c3cf12ef3b0f624c71589f7788a37179055600c54600260006200016e3390565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160056000620001a86200031c60201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526005909352818320805485166001908117909155601454821684528284208054861682179055601554821684528284208054861682179055601654909116835290822080548416821790557305746d301b38891fff6c5d683a9224c67200f7059091527fdbe6e863bed013f99cd6d5c410115c188fe507605a51ba515e2474088e56545c80549092161790556200026d3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef69d3c21bcecceda1000000604051620002bd91815260200190565b60405180910390a362000432565b60006200031583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200032b60201b60201c565b9392505050565b6000546001600160a01b031690565b60008183620003585760405162461bcd60e51b81526004016200034f9190620003c3565b60405180910390fd5b5060006200036784866200041b565b95945050505050565b634e487b7160e01b600052601260045260246000fd5b60008262000398576200039862000370565b500690565b600082821015620003be57634e487b7160e01b600052601160045260246000fd5b500390565b600060208083528351808285015260005b81811015620003f257858101830151858201604001528201620003d4565b8181111562000405576000604083870101525b50601f01601f1916929092016040019392505050565b6000826200042d576200042d62000370565b500490565b612d3680620004426000396000f3fe6080604052600436106101c65760003560e01c80635932ead1116100f7578063a9059cbb11610095578063e98391ff11610064578063e98391ff14610566578063ec28438a14610586578063f4293890146105a6578063ffecf516146105bb57600080fd5b8063a9059cbb146104d6578063c9567bf9146104f6578063cd6973151461050b578063dd62ed3e1461052057600080fd5b8063715018a6116100d1578063715018a61461042b57806388f82020146104405780638da5cb5b1461047957806395d89b41146104a157600080fd5b80635932ead1146103d6578063684c77ff146103f657806370a082311461040b57600080fd5b8063273123b711610164578063313ce5671161013e578063313ce5671461034c578063328264081461036857806351bc3c85146103885780635342acb41461039d57600080fd5b8063273123b7146102ec57806327a14fc21461030c5780632d8381191461032c57600080fd5b806318160ddd116101a057806318160ddd1461026d5780631b3107591461028a5780632206035f146102ac57806323b872dd146102cc57600080fd5b8063069f5bdd146101d257806306fdde0314610205578063095ea7b31461023d57600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101f26101ed3660046127e0565b6105db565b6040519081526020015b60405180910390f35b34801561021157600080fd5b5060408051808201909152600681526508af0dee8d2f60d31b60208201525b6040516101fc91906127fd565b34801561024957600080fd5b5061025d610258366004612852565b61062b565b60405190151581526020016101fc565b34801561027957600080fd5b5069d3c21bcecceda10000006101f2565b34801561029657600080fd5b506102aa6102a536600461295d565b610642565b005b3480156102b857600080fd5b506102aa6102c7366004612852565b610795565b3480156102d857600080fd5b5061025d6102e7366004612a18565b6107db565b3480156102f857600080fd5b506102aa6103073660046127e0565b610844565b34801561031857600080fd5b506102aa610327366004612a59565b61088f565b34801561033857600080fd5b506101f2610347366004612a59565b6108cd565b34801561035857600080fd5b50604051600981526020016101fc565b34801561037457600080fd5b506102aa610383366004612a72565b610951565b34801561039457600080fd5b506102aa610a45565b3480156103a957600080fd5b5061025d6103b83660046127e0565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156103e257600080fd5b506102aa6103f1366004612abd565b610b10565b34801561040257600080fd5b506101f2610b58565b34801561041757600080fd5b506101f26104263660046127e0565b610bf1565b34801561043757600080fd5b506102aa610bfc565b34801561044c57600080fd5b5061025d61045b3660046127e0565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561048557600080fd5b506000546040516001600160a01b0390911681526020016101fc565b3480156104ad57600080fd5b5060408051808201909152600c81526bceb5cf87cebfcf84d197cf8760a01b6020820152610230565b3480156104e257600080fd5b5061025d6104f1366004612852565b610c70565b34801561050257600080fd5b506102aa610c7d565b34801561051757600080fd5b506102aa611015565b34801561052c57600080fd5b506101f261053b366004612ada565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561057257600080fd5b506102aa610581366004612abd565b61112b565b34801561059257600080fd5b506102aa6105a1366004612a59565b611173565b3480156105b257600080fd5b506102aa6111b1565b3480156105c757600080fd5b506102aa6105d63660046127e0565b61122c565b600080546001600160a01b0316331461060f5760405162461bcd60e51b815260040161060690612b13565b60405180910390fd5b506001600160a01b03166000908152600b602052604090205490565b60006106383384846112bc565b5060015b92915050565b6000546001600160a01b0316331461066c5760405162461bcd60e51b815260040161060690612b13565b60005b825181101561079057600a83828151811061068c5761068c612b48565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b0390921691909117905581518290829081106106db576106db612b48565b6020026020010151633b9aca006106f29190612b74565b600b600085848151811061070857610708612b48565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555060016005600085848151811061074c5761074c612b48565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061078881612b93565b91505061066f565b505050565b6000546001600160a01b031633146107bf5760405162461bcd60e51b815260040161060690612b13565b6001600160a01b039091166000908152600b6020526040902055565b60006107e88484846113e0565b61083a843361083585604051806060016040528060288152602001612cd9602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919061192b565b6112bc565b5060019392505050565b6000546001600160a01b0316331461086e5760405162461bcd60e51b815260040161060690612b13565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146108b95760405162461bcd60e51b815260040161060690612b13565b6108c781633b9aca00612b74565b60115550565b6000600c548211156109345760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610606565b600061093e611965565b905061094a838261127a565b9392505050565b6000546001600160a01b0316331461097b5760405162461bcd60e51b815260040161060690612b13565b60005b8151811015610a415781818151811061099957610999612b48565b6020026020010151600a82815481106109b4576109b4612b48565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600160056000600a84815481106109fb576109fb612b48565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905580610a3981612b93565b91505061097e565b5050565b6014546001600160a01b0316336001600160a01b03161480610a7a57506015546001600160a01b0316336001600160a01b0316145b80610a9857506016546001600160a01b0316336001600160a01b0316145b80610aad57506000546001600160a01b031633145b610ab657600080fd5b6000610acd69d3c21bcecceda100000060c861127a565b610ad630611988565b1115610af857610af169d3c21bcecceda100000060c861127a565b9050610b04565b610b0130611988565b90505b610b0d816119e7565b50565b6000546001600160a01b03163314610b3a5760405162461bcd60e51b815260040161060690612b13565b601a8054911515600160b81b0260ff60b81b19909216919091179055565b600080546001600160a01b03163314610b835760405162461bcd60e51b815260040161060690612b13565b6000805b600a54811015610beb57600b6000600a8381548110610ba857610ba8612b48565b60009182526020808320909101546001600160a01b03168352820192909252604001902054610bd79083612bae565b915080610be381612b93565b915050610b87565b50905090565b600061063c82611b61565b6000546001600160a01b03163314610c265760405162461bcd60e51b815260040161060690612b13565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60006106383384846113e0565b6000546001600160a01b03163314610ca75760405162461bcd60e51b815260040161060690612b13565b601a54600160a01b900460ff1615610d015760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610606565b601980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610d3f308269d3c21bcecceda10000006112bc565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da19190612bc6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e129190612bc6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190612bc6565b601a80546001600160a01b0319166001600160a01b039283161790556019541663f305d7194730610eb381610bf1565b600080610ec86000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610f30573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f559190612be3565b5050601a805461ffff60b01b191661010160b01b17905550610f8269d3c21bcecceda1000000606461127a565b600e55601a8054600160a01b60ff60a01b1982161790915543600f5560195460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af1158015610ff1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a419190612c11565b6000546001600160a01b0316331461103f5760405162461bcd60e51b815260040161060690612b13565b6000601281905560138190555b600a54811015610b0d576110cc33600a838154811061106d5761106d612b48565b9060005260206000200160009054906101000a90046001600160a01b0316600b6000600a86815481106110a2576110a2612b48565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611ba6565b600060056000600a84815481106110e5576110e5612b48565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790558061112381612b93565b91505061104c565b6000546001600160a01b031633146111555760405162461bcd60e51b815260040161060690612b13565b601a8054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b0316331461119d5760405162461bcd60e51b815260040161060690612b13565b6111ab81633b9aca00612b74565b600e5550565b6014546001600160a01b0316336001600160a01b031614806111e657506015546001600160a01b0316336001600160a01b0316145b8061120457506016546001600160a01b0316336001600160a01b0316145b8061121957506000546001600160a01b031633145b61122257600080fd5b47610b0d81611cf5565b6000546001600160a01b031633146112565760405162461bcd60e51b815260040161060690612b13565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b600061094a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d60565b6001600160a01b03831661131e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610606565b6001600160a01b03821661137f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610606565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114445760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610606565b6001600160a01b0382166114a65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610606565b600081116115085760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610606565b600960125560036013556000546001600160a01b0384811691161480159061153e57506000546001600160a01b03838116911614155b801561155357506001600160a01b0383163014155b801561157857506001600160a01b03831660009081526005602052604090205460ff16155b801561159d57506001600160a01b03821660009081526005602052604090205460ff16155b15611915576001600160a01b03831660009081526006602052604090205460ff161580156115e457506001600160a01b03821660009081526006602052604090205460ff16155b61161b5760405162461bcd60e51b81526020600482015260086024820152672737903137ba399760c11b6044820152606401610606565b601a546001600160a01b03848116911614801561164657506019546001600160a01b03838116911614155b801561166b57506001600160a01b03821660009081526005602052604090205460ff16155b80156116855750600f544390611682906003611d8e565b11155b1561174157600e548111156116dc5760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e000000006044820152606401610606565b601154816116e984611988565b6116f39190612bae565b11156117415760405162461bcd60e51b815260206004820152601760248201527f4f766572206d61782077616c6c657420616d6f756e742e0000000000000000006044820152606401610606565b601a546001600160a01b03838116911614801561176c57506019546001600160a01b03838116911614155b801561179157506001600160a01b03831660009081526005602052604090205460ff16155b156117e857600e548111156117e85760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e000000006044820152606401610606565b601a546001600160a01b03838116911614801561181357506019546001600160a01b03848116911614155b801561183857506001600160a01b03831660009081526005602052604090205460ff16155b1561184857600960125560036013555b600f544390611858906003611d8e565b1180156118725750601a546001600160a01b038481169116145b1561188257606460125560006013555b600061188d30611988565b601054909150811080159081906118ae5750601a54600160a81b900460ff16155b80156118c85750601a546001600160a01b03868116911614155b80156118dd5750601a54600160b01b900460ff165b80156118ec57506118ec611ded565b1561190e576118fc6017546119e7565b47801561190c5761190c47611cf5565b505b5050611920565b600060128190556013555b610790838383611ba6565b6000818484111561194f5760405162461bcd60e51b815260040161060691906127fd565b50600061195c8486612c2e565b95945050505050565b6000806000611972611dfb565b9092509050611981828261127a565b9250505090565b6001600160a01b03811660009081526018602052604081205460ff16156119c557506001600160a01b031660009081526003602052604090205490565b6001600160a01b03821660009081526002602052604090205461063c906108cd565b601a805460ff60a81b1916600160a81b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611a2f57611a2f612b48565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aac9190612bc6565b81600181518110611abf57611abf612b48565b6001600160a01b039283166020918202929092010152601954611ae591309116846112bc565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790611b1e908590600090869030904290600401612c45565b600060405180830381600087803b158015611b3857600080fd5b505af1158015611b4c573d6000803e3d6000fd5b5050601a805460ff60a81b1916905550505050565b6001600160a01b038116600090815260086020526040812054431415611b9d57506001600160a01b031660009081526009602052604090205490565b61063c82611988565b6001600160a01b03831660009081526018602052604090205460ff168015611be757506001600160a01b03821660009081526018602052604090205460ff16155b15611bf757610790838383611f9b565b6001600160a01b03831660009081526018602052604090205460ff16158015611c3857506001600160a01b03821660009081526018602052604090205460ff165b15611c485761079083838361220f565b6001600160a01b03831660009081526018602052604090205460ff16158015611c8a57506001600160a01b03821660009081526018602052604090205460ff16155b15611c9a576107908383836122f7565b6001600160a01b03831660009081526018602052604090205460ff168015611cda57506001600160a01b03821660009081526018602052604090205460ff165b15611cea5761079083838361237a565b6107908383836122f7565b601454611d20906001600160a01b0316611d1b6009611d1585600361242c565b9061127a565b6124ab565b601554611d40906001600160a01b0316611d1b6009611d1585600361242c565b601654610b0d906001600160a01b0316611d1b6009611d1585600361242c565b60008183611d815760405162461bcd60e51b815260040161060691906127fd565b50600061195c8486612cb6565b600080611d9b8385612bae565b90508381101561094a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610606565b6000620493e05a1015905090565b600c54600090819069d3c21bcecceda1000000825b600754811015611f5c57826002600060078481548110611e3257611e32612b48565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611e9d5750816003600060078481548110611e7657611e76612b48565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611eba575050600c549369d3c21bcecceda10000009350915050565b611f006002600060078481548110611ed457611ed4612b48565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906125c4565b9250611f486003600060078481548110611f1c57611f1c612b48565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906125c4565b915080611f5481612b93565b915050611e10565b50600c54611f749069d3c21bcecceda100000061127a565b821015611f92575050600c549269d3c21bcecceda100000092509050565b90939092509050565b600f544390611fab906003611d8e565b10158015611fc65750601a546001600160a01b038481169116145b156120e9576001816000611fda82846125c4565b6001600160a01b0386166000908152600860209081526040808320439055600290915290205490915061200d9085611d8e565b6001600160a01b0380871660009081526009602090815260408083209490945591891681526002909152205461204390836125c4565b6001600160a01b0380881660009081526002602052604080822093909355908716815220546120729084611d8e565b6001600160a01b03861660009081526002602052604090205561209481612606565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120d991815260200190565b60405180910390a3505050505050565b6000806000806000806120fb8761268e565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061212d90886125c4565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461215c90876125c4565b6001600160a01b03808b1660009081526002602052604080822093909355908a168152205461218b9086611d8e565b6001600160a01b0389166000908152600260205260409020556121ad81612606565b6121b784836126dd565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516121fc91815260200190565b60405180910390a3505050505050505050565b600f54439061221f906003611d8e565b1015801561223a5750601a546001600160a01b038481169116145b1561224e576001816000611fda82846125c4565b6000806000806000806122608761268e565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061229290876125c4565b6001600160a01b03808b16600090815260026020908152604080832094909455918b168152600390915220546122c89084611d8e565b6001600160a01b03891660009081526003602090815260408083209390935560029052205461218b9086611d8e565b600f544390612307906003611d8e565b101580156123225750601a546001600160a01b038481169116145b15612336576001816000611fda82846125c4565b6000806000806000806123488761268e565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061215c90876125c4565b600f54439061238a906003611d8e565b101580156123a55750601a546001600160a01b038481169116145b156123b9576001816000611fda82846125c4565b6000806000806000806123cb8761268e565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506123fd90886125c4565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461229290876125c4565b60008261243b5750600061063c565b60006124478385612b74565b9050826124548583612cb6565b1461094a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610606565b804710156124fb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610606565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612548576040519150601f19603f3d011682016040523d82523d6000602084013e61254d565b606091505b50509050806107905760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610606565b600061094a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061192b565b6000612610611965565b9050600061261e838361242c565b3060009081526002602052604090205490915061263b9082611d8e565b3060009081526002602090815260408083209390935560189052205460ff161561079057306000908152600360205260409020546126799084611d8e565b30600090815260036020526040902055505050565b60008060008060008060008060006126a58a612701565b92509250925060008060006126c38d86866126be611965565b612743565b919f909e50909c50959a5093985091965092945050505050565b600c546126ea90836125c4565b600c55600d546126fa9082611d8e565b600d555050565b60008060008061271085612793565b9050600061271d866127af565b905060006127358261272f89866125c4565b906125c4565b979296509094509092505050565b6000808080612752888661242c565b90506000612760888761242c565b9050600061276e888861242c565b905060006127808261272f86866125c4565b939b939a50919850919650505050505050565b600061063c6064611d156013548561242c90919063ffffffff16565b600061063c6064611d156012548561242c90919063ffffffff16565b6001600160a01b0381168114610b0d57600080fd5b6000602082840312156127f257600080fd5b813561094a816127cb565b600060208083528351808285015260005b8181101561282a5785810183015185820160400152820161280e565b8181111561283c576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561286557600080fd5b8235612870816127cb565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128bd576128bd61287e565b604052919050565b600067ffffffffffffffff8211156128df576128df61287e565b5060051b60200190565b600082601f8301126128fa57600080fd5b8135602061290f61290a836128c5565b612894565b82815260059290921b8401810191818101908684111561292e57600080fd5b8286015b84811015612952578035612945816127cb565b8352918301918301612932565b509695505050505050565b6000806040838503121561297057600080fd5b823567ffffffffffffffff8082111561298857600080fd5b612994868387016128e9565b93506020915081850135818111156129ab57600080fd5b85019050601f810186136129be57600080fd5b80356129cc61290a826128c5565b81815260059190911b820183019083810190888311156129eb57600080fd5b928401925b82841015612a09578335825292840192908401906129f0565b80955050505050509250929050565b600080600060608486031215612a2d57600080fd5b8335612a38816127cb565b92506020840135612a48816127cb565b929592945050506040919091013590565b600060208284031215612a6b57600080fd5b5035919050565b600060208284031215612a8457600080fd5b813567ffffffffffffffff811115612a9b57600080fd5b612aa7848285016128e9565b949350505050565b8015158114610b0d57600080fd5b600060208284031215612acf57600080fd5b813561094a81612aaf565b60008060408385031215612aed57600080fd5b8235612af8816127cb565b91506020830135612b08816127cb565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612b8e57612b8e612b5e565b500290565b6000600019821415612ba757612ba7612b5e565b5060010190565b60008219821115612bc157612bc1612b5e565b500190565b600060208284031215612bd857600080fd5b815161094a816127cb565b600080600060608486031215612bf857600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215612c2357600080fd5b815161094a81612aaf565b600082821015612c4057612c40612b5e565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c955784516001600160a01b031683529383019391830191600101612c70565b50506001600160a01b03969096166060850152505050608001529392505050565b600082612cd357634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b9d8fdd192b07941f2085ab962cbdd7afd15aa23986d46d76189388486b9633d64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106101c65760003560e01c80635932ead1116100f7578063a9059cbb11610095578063e98391ff11610064578063e98391ff14610566578063ec28438a14610586578063f4293890146105a6578063ffecf516146105bb57600080fd5b8063a9059cbb146104d6578063c9567bf9146104f6578063cd6973151461050b578063dd62ed3e1461052057600080fd5b8063715018a6116100d1578063715018a61461042b57806388f82020146104405780638da5cb5b1461047957806395d89b41146104a157600080fd5b80635932ead1146103d6578063684c77ff146103f657806370a082311461040b57600080fd5b8063273123b711610164578063313ce5671161013e578063313ce5671461034c578063328264081461036857806351bc3c85146103885780635342acb41461039d57600080fd5b8063273123b7146102ec57806327a14fc21461030c5780632d8381191461032c57600080fd5b806318160ddd116101a057806318160ddd1461026d5780631b3107591461028a5780632206035f146102ac57806323b872dd146102cc57600080fd5b8063069f5bdd146101d257806306fdde0314610205578063095ea7b31461023d57600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101f26101ed3660046127e0565b6105db565b6040519081526020015b60405180910390f35b34801561021157600080fd5b5060408051808201909152600681526508af0dee8d2f60d31b60208201525b6040516101fc91906127fd565b34801561024957600080fd5b5061025d610258366004612852565b61062b565b60405190151581526020016101fc565b34801561027957600080fd5b5069d3c21bcecceda10000006101f2565b34801561029657600080fd5b506102aa6102a536600461295d565b610642565b005b3480156102b857600080fd5b506102aa6102c7366004612852565b610795565b3480156102d857600080fd5b5061025d6102e7366004612a18565b6107db565b3480156102f857600080fd5b506102aa6103073660046127e0565b610844565b34801561031857600080fd5b506102aa610327366004612a59565b61088f565b34801561033857600080fd5b506101f2610347366004612a59565b6108cd565b34801561035857600080fd5b50604051600981526020016101fc565b34801561037457600080fd5b506102aa610383366004612a72565b610951565b34801561039457600080fd5b506102aa610a45565b3480156103a957600080fd5b5061025d6103b83660046127e0565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156103e257600080fd5b506102aa6103f1366004612abd565b610b10565b34801561040257600080fd5b506101f2610b58565b34801561041757600080fd5b506101f26104263660046127e0565b610bf1565b34801561043757600080fd5b506102aa610bfc565b34801561044c57600080fd5b5061025d61045b3660046127e0565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561048557600080fd5b506000546040516001600160a01b0390911681526020016101fc565b3480156104ad57600080fd5b5060408051808201909152600c81526bceb5cf87cebfcf84d197cf8760a01b6020820152610230565b3480156104e257600080fd5b5061025d6104f1366004612852565b610c70565b34801561050257600080fd5b506102aa610c7d565b34801561051757600080fd5b506102aa611015565b34801561052c57600080fd5b506101f261053b366004612ada565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561057257600080fd5b506102aa610581366004612abd565b61112b565b34801561059257600080fd5b506102aa6105a1366004612a59565b611173565b3480156105b257600080fd5b506102aa6111b1565b3480156105c757600080fd5b506102aa6105d63660046127e0565b61122c565b600080546001600160a01b0316331461060f5760405162461bcd60e51b815260040161060690612b13565b60405180910390fd5b506001600160a01b03166000908152600b602052604090205490565b60006106383384846112bc565b5060015b92915050565b6000546001600160a01b0316331461066c5760405162461bcd60e51b815260040161060690612b13565b60005b825181101561079057600a83828151811061068c5761068c612b48565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b0390921691909117905581518290829081106106db576106db612b48565b6020026020010151633b9aca006106f29190612b74565b600b600085848151811061070857610708612b48565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555060016005600085848151811061074c5761074c612b48565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061078881612b93565b91505061066f565b505050565b6000546001600160a01b031633146107bf5760405162461bcd60e51b815260040161060690612b13565b6001600160a01b039091166000908152600b6020526040902055565b60006107e88484846113e0565b61083a843361083585604051806060016040528060288152602001612cd9602891396001600160a01b038a166000908152600460209081526040808320338452909152902054919061192b565b6112bc565b5060019392505050565b6000546001600160a01b0316331461086e5760405162461bcd60e51b815260040161060690612b13565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146108b95760405162461bcd60e51b815260040161060690612b13565b6108c781633b9aca00612b74565b60115550565b6000600c548211156109345760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610606565b600061093e611965565b905061094a838261127a565b9392505050565b6000546001600160a01b0316331461097b5760405162461bcd60e51b815260040161060690612b13565b60005b8151811015610a415781818151811061099957610999612b48565b6020026020010151600a82815481106109b4576109b4612b48565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600160056000600a84815481106109fb576109fb612b48565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905580610a3981612b93565b91505061097e565b5050565b6014546001600160a01b0316336001600160a01b03161480610a7a57506015546001600160a01b0316336001600160a01b0316145b80610a9857506016546001600160a01b0316336001600160a01b0316145b80610aad57506000546001600160a01b031633145b610ab657600080fd5b6000610acd69d3c21bcecceda100000060c861127a565b610ad630611988565b1115610af857610af169d3c21bcecceda100000060c861127a565b9050610b04565b610b0130611988565b90505b610b0d816119e7565b50565b6000546001600160a01b03163314610b3a5760405162461bcd60e51b815260040161060690612b13565b601a8054911515600160b81b0260ff60b81b19909216919091179055565b600080546001600160a01b03163314610b835760405162461bcd60e51b815260040161060690612b13565b6000805b600a54811015610beb57600b6000600a8381548110610ba857610ba8612b48565b60009182526020808320909101546001600160a01b03168352820192909252604001902054610bd79083612bae565b915080610be381612b93565b915050610b87565b50905090565b600061063c82611b61565b6000546001600160a01b03163314610c265760405162461bcd60e51b815260040161060690612b13565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60006106383384846113e0565b6000546001600160a01b03163314610ca75760405162461bcd60e51b815260040161060690612b13565b601a54600160a01b900460ff1615610d015760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610606565b601980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610d3f308269d3c21bcecceda10000006112bc565b806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da19190612bc6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e129190612bc6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190612bc6565b601a80546001600160a01b0319166001600160a01b039283161790556019541663f305d7194730610eb381610bf1565b600080610ec86000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610f30573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f559190612be3565b5050601a805461ffff60b01b191661010160b01b17905550610f8269d3c21bcecceda1000000606461127a565b600e55601a8054600160a01b60ff60a01b1982161790915543600f5560195460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af1158015610ff1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a419190612c11565b6000546001600160a01b0316331461103f5760405162461bcd60e51b815260040161060690612b13565b6000601281905560138190555b600a54811015610b0d576110cc33600a838154811061106d5761106d612b48565b9060005260206000200160009054906101000a90046001600160a01b0316600b6000600a86815481106110a2576110a2612b48565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611ba6565b600060056000600a84815481106110e5576110e5612b48565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790558061112381612b93565b91505061104c565b6000546001600160a01b031633146111555760405162461bcd60e51b815260040161060690612b13565b601a8054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b0316331461119d5760405162461bcd60e51b815260040161060690612b13565b6111ab81633b9aca00612b74565b600e5550565b6014546001600160a01b0316336001600160a01b031614806111e657506015546001600160a01b0316336001600160a01b0316145b8061120457506016546001600160a01b0316336001600160a01b0316145b8061121957506000546001600160a01b031633145b61122257600080fd5b47610b0d81611cf5565b6000546001600160a01b031633146112565760405162461bcd60e51b815260040161060690612b13565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b600061094a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d60565b6001600160a01b03831661131e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610606565b6001600160a01b03821661137f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610606565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114445760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610606565b6001600160a01b0382166114a65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610606565b600081116115085760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610606565b600960125560036013556000546001600160a01b0384811691161480159061153e57506000546001600160a01b03838116911614155b801561155357506001600160a01b0383163014155b801561157857506001600160a01b03831660009081526005602052604090205460ff16155b801561159d57506001600160a01b03821660009081526005602052604090205460ff16155b15611915576001600160a01b03831660009081526006602052604090205460ff161580156115e457506001600160a01b03821660009081526006602052604090205460ff16155b61161b5760405162461bcd60e51b81526020600482015260086024820152672737903137ba399760c11b6044820152606401610606565b601a546001600160a01b03848116911614801561164657506019546001600160a01b03838116911614155b801561166b57506001600160a01b03821660009081526005602052604090205460ff16155b80156116855750600f544390611682906003611d8e565b11155b1561174157600e548111156116dc5760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e000000006044820152606401610606565b601154816116e984611988565b6116f39190612bae565b11156117415760405162461bcd60e51b815260206004820152601760248201527f4f766572206d61782077616c6c657420616d6f756e742e0000000000000000006044820152606401610606565b601a546001600160a01b03838116911614801561176c57506019546001600160a01b03838116911614155b801561179157506001600160a01b03831660009081526005602052604090205460ff16155b156117e857600e548111156117e85760405162461bcd60e51b815260206004820152601c60248201527f4f766572206d6178207472616e73616374696f6e20616d6f756e742e000000006044820152606401610606565b601a546001600160a01b03838116911614801561181357506019546001600160a01b03848116911614155b801561183857506001600160a01b03831660009081526005602052604090205460ff16155b1561184857600960125560036013555b600f544390611858906003611d8e565b1180156118725750601a546001600160a01b038481169116145b1561188257606460125560006013555b600061188d30611988565b601054909150811080159081906118ae5750601a54600160a81b900460ff16155b80156118c85750601a546001600160a01b03868116911614155b80156118dd5750601a54600160b01b900460ff165b80156118ec57506118ec611ded565b1561190e576118fc6017546119e7565b47801561190c5761190c47611cf5565b505b5050611920565b600060128190556013555b610790838383611ba6565b6000818484111561194f5760405162461bcd60e51b815260040161060691906127fd565b50600061195c8486612c2e565b95945050505050565b6000806000611972611dfb565b9092509050611981828261127a565b9250505090565b6001600160a01b03811660009081526018602052604081205460ff16156119c557506001600160a01b031660009081526003602052604090205490565b6001600160a01b03821660009081526002602052604090205461063c906108cd565b601a805460ff60a81b1916600160a81b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611a2f57611a2f612b48565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aac9190612bc6565b81600181518110611abf57611abf612b48565b6001600160a01b039283166020918202929092010152601954611ae591309116846112bc565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac94790611b1e908590600090869030904290600401612c45565b600060405180830381600087803b158015611b3857600080fd5b505af1158015611b4c573d6000803e3d6000fd5b5050601a805460ff60a81b1916905550505050565b6001600160a01b038116600090815260086020526040812054431415611b9d57506001600160a01b031660009081526009602052604090205490565b61063c82611988565b6001600160a01b03831660009081526018602052604090205460ff168015611be757506001600160a01b03821660009081526018602052604090205460ff16155b15611bf757610790838383611f9b565b6001600160a01b03831660009081526018602052604090205460ff16158015611c3857506001600160a01b03821660009081526018602052604090205460ff165b15611c485761079083838361220f565b6001600160a01b03831660009081526018602052604090205460ff16158015611c8a57506001600160a01b03821660009081526018602052604090205460ff16155b15611c9a576107908383836122f7565b6001600160a01b03831660009081526018602052604090205460ff168015611cda57506001600160a01b03821660009081526018602052604090205460ff165b15611cea5761079083838361237a565b6107908383836122f7565b601454611d20906001600160a01b0316611d1b6009611d1585600361242c565b9061127a565b6124ab565b601554611d40906001600160a01b0316611d1b6009611d1585600361242c565b601654610b0d906001600160a01b0316611d1b6009611d1585600361242c565b60008183611d815760405162461bcd60e51b815260040161060691906127fd565b50600061195c8486612cb6565b600080611d9b8385612bae565b90508381101561094a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610606565b6000620493e05a1015905090565b600c54600090819069d3c21bcecceda1000000825b600754811015611f5c57826002600060078481548110611e3257611e32612b48565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611e9d5750816003600060078481548110611e7657611e76612b48565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611eba575050600c549369d3c21bcecceda10000009350915050565b611f006002600060078481548110611ed457611ed4612b48565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906125c4565b9250611f486003600060078481548110611f1c57611f1c612b48565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906125c4565b915080611f5481612b93565b915050611e10565b50600c54611f749069d3c21bcecceda100000061127a565b821015611f92575050600c549269d3c21bcecceda100000092509050565b90939092509050565b600f544390611fab906003611d8e565b10158015611fc65750601a546001600160a01b038481169116145b156120e9576001816000611fda82846125c4565b6001600160a01b0386166000908152600860209081526040808320439055600290915290205490915061200d9085611d8e565b6001600160a01b0380871660009081526009602090815260408083209490945591891681526002909152205461204390836125c4565b6001600160a01b0380881660009081526002602052604080822093909355908716815220546120729084611d8e565b6001600160a01b03861660009081526002602052604090205561209481612606565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120d991815260200190565b60405180910390a3505050505050565b6000806000806000806120fb8761268e565b6001600160a01b038f16600090815260036020526040902054959b5093995091975095509350915061212d90886125c4565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461215c90876125c4565b6001600160a01b03808b1660009081526002602052604080822093909355908a168152205461218b9086611d8e565b6001600160a01b0389166000908152600260205260409020556121ad81612606565b6121b784836126dd565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516121fc91815260200190565b60405180910390a3505050505050505050565b600f54439061221f906003611d8e565b1015801561223a5750601a546001600160a01b038481169116145b1561224e576001816000611fda82846125c4565b6000806000806000806122608761268e565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061229290876125c4565b6001600160a01b03808b16600090815260026020908152604080832094909455918b168152600390915220546122c89084611d8e565b6001600160a01b03891660009081526003602090815260408083209390935560029052205461218b9086611d8e565b600f544390612307906003611d8e565b101580156123225750601a546001600160a01b038481169116145b15612336576001816000611fda82846125c4565b6000806000806000806123488761268e565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061215c90876125c4565b600f54439061238a906003611d8e565b101580156123a55750601a546001600160a01b038481169116145b156123b9576001816000611fda82846125c4565b6000806000806000806123cb8761268e565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506123fd90886125c4565b6001600160a01b038a1660009081526003602090815260408083209390935560029052205461229290876125c4565b60008261243b5750600061063c565b60006124478385612b74565b9050826124548583612cb6565b1461094a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610606565b804710156124fb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610606565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612548576040519150601f19603f3d011682016040523d82523d6000602084013e61254d565b606091505b50509050806107905760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610606565b600061094a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061192b565b6000612610611965565b9050600061261e838361242c565b3060009081526002602052604090205490915061263b9082611d8e565b3060009081526002602090815260408083209390935560189052205460ff161561079057306000908152600360205260409020546126799084611d8e565b30600090815260036020526040902055505050565b60008060008060008060008060006126a58a612701565b92509250925060008060006126c38d86866126be611965565b612743565b919f909e50909c50959a5093985091965092945050505050565b600c546126ea90836125c4565b600c55600d546126fa9082611d8e565b600d555050565b60008060008061271085612793565b9050600061271d866127af565b905060006127358261272f89866125c4565b906125c4565b979296509094509092505050565b6000808080612752888661242c565b90506000612760888761242c565b9050600061276e888861242c565b905060006127808261272f86866125c4565b939b939a50919850919650505050505050565b600061063c6064611d156013548561242c90919063ffffffff16565b600061063c6064611d156012548561242c90919063ffffffff16565b6001600160a01b0381168114610b0d57600080fd5b6000602082840312156127f257600080fd5b813561094a816127cb565b600060208083528351808285015260005b8181101561282a5785810183015185820160400152820161280e565b8181111561283c576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561286557600080fd5b8235612870816127cb565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128bd576128bd61287e565b604052919050565b600067ffffffffffffffff8211156128df576128df61287e565b5060051b60200190565b600082601f8301126128fa57600080fd5b8135602061290f61290a836128c5565b612894565b82815260059290921b8401810191818101908684111561292e57600080fd5b8286015b84811015612952578035612945816127cb565b8352918301918301612932565b509695505050505050565b6000806040838503121561297057600080fd5b823567ffffffffffffffff8082111561298857600080fd5b612994868387016128e9565b93506020915081850135818111156129ab57600080fd5b85019050601f810186136129be57600080fd5b80356129cc61290a826128c5565b81815260059190911b820183019083810190888311156129eb57600080fd5b928401925b82841015612a09578335825292840192908401906129f0565b80955050505050509250929050565b600080600060608486031215612a2d57600080fd5b8335612a38816127cb565b92506020840135612a48816127cb565b929592945050506040919091013590565b600060208284031215612a6b57600080fd5b5035919050565b600060208284031215612a8457600080fd5b813567ffffffffffffffff811115612a9b57600080fd5b612aa7848285016128e9565b949350505050565b8015158114610b0d57600080fd5b600060208284031215612acf57600080fd5b813561094a81612aaf565b60008060408385031215612aed57600080fd5b8235612af8816127cb565b91506020830135612b08816127cb565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612b8e57612b8e612b5e565b500290565b6000600019821415612ba757612ba7612b5e565b5060010190565b60008219821115612bc157612bc1612b5e565b500190565b600060208284031215612bd857600080fd5b815161094a816127cb565b600080600060608486031215612bf857600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215612c2357600080fd5b815161094a81612aaf565b600082821015612c4057612c40612b5e565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c955784516001600160a01b031683529383019391830191600101612c70565b50506001600160a01b03969096166060850152505050608001529392505050565b600082612cd357634e487b7160e01b600052601260045260246000fd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b9d8fdd192b07941f2085ab962cbdd7afd15aa23986d46d76189388486b9633d64736f6c634300080a0033

Deployed Bytecode Sourcemap

13329:22810:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25003:119;;;;;;;;;;-1:-1:-1;25003:119:0;;;;;:::i;:::-;;:::i;:::-;;;548:25:1;;;536:2;521:18;25003:119:0;;;;;;;;16640:83;;;;;;;;;;-1:-1:-1;16710:5:0;;;;;;;;;;;;-1:-1:-1;;;16710:5:0;;;;16640:83;;;;;;;:::i;17546:193::-;;;;;;;;;;-1:-1:-1;17546:193:0;;;;;:::i;:::-;;:::i;:::-;;;1671:14:1;;1664:22;1646:41;;1634:2;1619:18;17546:193:0;1506:187:1;16917:95:0;;;;;;;;;;-1:-1:-1;14013:24:0;16917:95;;24170:322;;;;;;;;;;-1:-1:-1;24170:322:0;;;;;:::i;:::-;;:::i;:::-;;25134:114;;;;;;;;;;-1:-1:-1;25134:114:0;;;;;:::i;:::-;;:::i;17747:446::-;;;;;;;;;;-1:-1:-1;17747:446:0;;;;;:::i;:::-;;:::i;23914:88::-;;;;;;;;;;-1:-1:-1;23914:88:0;;;;;:::i;:::-;;:::i;22653:113::-;;;;;;;;;;-1:-1:-1;22653:113:0;;;;;:::i;:::-;;:::i;26917:253::-;;;;;;;;;;-1:-1:-1;26917:253:0;;;;;:::i;:::-;;:::i;16826:83::-;;;;;;;;;;-1:-1:-1;16826:83:0;;15399:1;4971:36:1;;4959:2;4944:18;16826:83:0;4829:184:1;24504:243:0;;;;;;;;;;-1:-1:-1;24504:243:0;;;;;:::i;:::-;;:::i;25606:456::-;;;;;;;;;;;;;:::i;35648:123::-;;;;;;;;;;-1:-1:-1;35648:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;35736:27:0;35712:4;35736:27;;;:18;:27;;;;;;;;;35648:123;18201:101;;;;;;;;;;-1:-1:-1;18201:101:0;;;;;:::i;:::-;;:::i;24759:232::-;;;;;;;;;;;;;:::i;17020:119::-;;;;;;;;;;-1:-1:-1;17020:119:0;;;;;:::i;:::-;;:::i;12281:148::-;;;;;;;;;;;;;:::i;26789:120::-;;;;;;;;;;-1:-1:-1;26789:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;26881:20:0;26857:4;26881:20;;;:11;:20;;;;;;;;;26789:120;12067:79;;;;;;;;;;-1:-1:-1;12105:7:0;12132:6;12067:79;;-1:-1:-1;;;;;12132:6:0;;;5886:51:1;;5874:2;5859:18;12067:79:0;5740:203:1;16731:87:0;;;;;;;;;;-1:-1:-1;16803:7:0;;;;;;;;;;;;-1:-1:-1;;;16803:7:0;;;;16731:87;;17147:199;;;;;;;;;;-1:-1:-1;17147:199:0;;;;;:::i;:::-;;:::i;22776:1035::-;;;;;;;;;;;;;:::i;25260:301::-;;;;;;;;;;;;;:::i;17354:184::-;;;;;;;;;;-1:-1:-1;17354:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;17503:18:0;;;17471:7;17503:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17354:184;21462:97;;;;;;;;;;-1:-1:-1;21462:97:0;;;;;:::i;:::-;;:::i;22542:105::-;;;;;;;;;;-1:-1:-1;22542:105:0;;;;;:::i;:::-;;:::i;26070:291::-;;;;;;;;;;;;;:::i;23819:87::-;;;;;;;;;;-1:-1:-1;23819:87:0;;;;;:::i;:::-;;:::i;25003:119::-;25071:7;12194:6;;-1:-1:-1;;;;;12194:6:0;9650:10;12194:22;12186:67;;;;-1:-1:-1;;;12186:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;25098:16:0::1;;::::0;;;:7:::1;:16;::::0;;;;;;25003:119::o;17546:193::-;17648:4;17670:39;9650:10;17693:7;17702:6;17670:8;:39::i;:::-;-1:-1:-1;17727:4:0;17546:193;;;;;:::o;24170:322::-;12194:6;;-1:-1:-1;;;;;12194:6:0;9650:10;12194:22;12186:67;;;;-1:-1:-1;;;12186:67:0;;;;;;;:::i;:::-;24278:6:::1;24273:212;24294:9;:16;24290:1;:20;24273:212;;;24332:11;24349:9;24359:1;24349:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;24332:30;;::::1;::::0;::::1;::::0;;-1:-1:-1;24332:30:0;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24332:30:0::1;-1:-1:-1::0;;;;;24332:30:0;;::::1;::::0;;;::::1;::::0;;24401:10;;;;24409:1;;24401:10;::::1;;;;;:::i;:::-;;;;;;;24414:5;24401:18;;;;:::i;:::-;24377:7;:21;24385:9;24395:1;24385:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;24377:21:0::1;-1:-1:-1::0;;;;;24377:21:0::1;;;;;;;;;;;;:42;;;;24469:4;24434:18;:32;24453:9;24463:1;24453:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;24434:32:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;24434:32:0;:39;;-1:-1:-1;;24434:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24312:3;::::1;::::0;::::1;:::i;:::-;;;;24273:212;;;;24170:322:::0;;:::o;25134:114::-;12194:6;;-1:-1:-1;;;;;12194:6:0;9650:10;12194:22;12186:67;;;;-1:-1:-1;;;12186:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25215:16:0;;::::1;;::::0;;;:7:::1;:16;::::0;;;;:25;25134:114::o;17747:446::-;17879:4;17896:36;17906:6;17914:9;17925:6;17896:9;:36::i;:::-;17943:220;17966:6;9650:10;18014:138;18070:6;18014:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18014:19:0;;;;;;:11;:19;;;;;;;;9650:10;18014:33;;;;;;;;;;:37;:138::i;:::-;17943:8;:220::i;:::-;-1:-1:-1;18181:4:0;17747:446;;;;;:::o;23914:88::-;12194:6;;-1:-1:-1;;;;;12194:6:0;9650:10;12194:22;12186:67;;;;-1:-1:-1;;;12186:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23974:12:0::1;23989:5;23974:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;23974:20:0::1;::::0;;23914:88::o;22653:113::-;12194:6;;-1:-1:-1;;;;;12194:6:0;9650:10;12194:22;12186:67;;;;-1:-1:-1;;;12186:67:0;;;;;;;:::i;:::-;22744:14:::1;:6:::0;22753:5:::1;22744:14;:::i;:::-;22725:16;:33:::0;-1:-1:-1;22653:113:0:o;26917:253::-;26983:7;27022;;27011;:18;;27003:73;;;;-1:-1:-1;;;27003:73:0;;7481:2:1;27003:73:0;;;7463:21:1;7520:2;7500:18;;;7493:30;7559:34;7539:18;;;7532:62;-1:-1:-1;;;7610:18:1;;;7603:40;7660:19;;27003:73:0;7279:406:1;27003:73:0;27087:19;27110:10;:8;:10::i;:::-;27087:33;-1:-1:-1;27138:24:0;:7;27087:33;27138:11;:24::i;:::-;27131:31;26917:253;-1:-1:-1;;;26917:253:0:o;24504:243::-;12194:6;;-1:-1:-1;;;;;12194:6:0;9650:10;12194:22;12186:67;;;;-1:-1:-1;;;12186:67:0;;;;;;;:::i;:::-;24589:6:::1;24584:156;24605:9;:16;24601:1;:20;24584:156;;;24660:9;24670:1;24660:12;;;;;;;;:::i;:::-;;;;;;;24643:11;24655:1;24643:14;;;;;;;;:::i;:::-;;;;;;;;;:29;;;;;-1:-1:-1::0;;;;;24643:29:0::1;;;;;-1:-1:-1::0;;;;;24643:29:0::1;;;;;;24724:4;24687:18;:34;24706:11;24718:1;24706:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;24706:14:0::1;24687:34:::0;;;::::1;::::0;;;;;;;;:41;;-1:-1:-1;;24687:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24623:3;::::1;::::0;::::1;:::i;:::-;;;;24584:156;;;;24504:243:::0;:::o;25606:456::-;25672:15;;-1:-1:-1;;;;;25672:15:0;9650:10;-1:-1:-1;;;;;25656:31:0;;:66;;;-1:-1:-1;25707:15:0;;-1:-1:-1;;;;;25707:15:0;9650:10;-1:-1:-1;;;;;25691:31:0;;25656:66;:101;;;-1:-1:-1;25742:15:0;;-1:-1:-1;;;;;25742:15:0;9650:10;-1:-1:-1;;;;;25726:31:0;;25656:101;:128;;;-1:-1:-1;12105:7:0;12132:6;-1:-1:-1;;;;;12132:6:0;9650:10;25761:23;25656:128;25648:137;;;;;;25833:12;25888:16;14013:24;25900:3;25888:11;:16::i;:::-;25859:26;25879:4;25859:11;:26::i;:::-;:45;25856:166;;;25928:16;14013:24;25940:3;25928:11;:16::i;:::-;25921:23;;25856:166;;;25984:26;26004:4;25984:11;:26::i;:::-;25977:33;;25856:166;26032:22;26049:4;26032:16;:22::i;:::-;25637:425;25606:456::o;18201:101::-;12194:6;;-1:-1:-1;;;;;12194:6:0;9650:10;12194:22;12186:67;;;;-1:-1:-1;;;12186:67:0;;;;;;;:::i;:::-;18271:15:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;18271:23:0::1;-1:-1:-1::0;;;;18271:23:0;;::::1;::::0;;;::::1;::::0;;18201:101::o;24759:232::-;24817:7;12194:6;;-1:-1:-1;;;;;12194:6:0;9650:10;12194:22;12186:67;;;;-1:-1:-1;;;12186:67:0;;;;;;;:::i;:::-;24836:11:::1;24866:6:::0;24862:101:::1;24882:11;:18:::0;24878:22;::::1;24862:101;;;24928:7;:23;24936:11;24948:1;24936:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;24936:14:0::1;24928:23:::0;;;::::1;::::0;;;;;;;;;24921:30:::1;::::0;;::::1;:::i;:::-;::::0;-1:-1:-1;24902:3:0;::::1;::::0;::::1;:::i;:::-;;;;24862:101;;;-1:-1:-1::0;24980:3:0;-1:-1:-1;24759:232:0;:::o;17020:119::-;17086:7;17113:18;17123:7;17113:9;:18::i;12281:148::-;12194:6;;-1:-1:-1;;;;;12194:6:0;9650:10;12194:22;12186:67;;;;-1:-1:-1;;;12186:67:0;;;;;;;:::i;:::-;12388:1:::1;12372:6:::0;;12351:40:::1;::::0;-1:-1:-1;;;;;12372:6:0;;::::1;::::0;12351:40:::1;::::0;12388:1;;12351:40:::1;12419:1;12402:19:::0;;-1:-1:-1;;;;;;12402:19:0::1;::::0;;12281:148::o;17147:199::-;17252:4;17274:42;9650:10;17298:9;17309:6;17274:9;:42::i;22776:1035::-;12194:6;;-1:-1:-1;;;;;12194:6:0;9650:10;12194:22;12186:67;;;;-1:-1:-1;;;12186:67:0;;;;;;;:::i;:::-;22838:11:::1;::::0;-1:-1:-1;;;22838:11:0;::::1;;;22837:12;22829:48;;;::::0;-1:-1:-1;;;22829:48:0;;8025:2:1;22829:48:0::1;::::0;::::1;8007:21:1::0;8064:2;8044:18;;;8037:30;8103:25;8083:18;;;8076:53;8146:18;;22829:48:0::1;7823:347:1::0;22829:48:0::1;23023:15;:34:::0;;-1:-1:-1;;;;;;23023:34:0::1;22959:42;23023:34:::0;;::::1;::::0;;;23068:58:::1;23085:4;22959:42:::0;14013:24:::1;23068:8;:58::i;:::-;23171:16;-1:-1:-1::0;;;;;23171:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23153:70:0::1;;23232:4;23239:16;-1:-1:-1::0;;;;;23239:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23153:110;::::0;-1:-1:-1;;;;;;23153:110:0::1;::::0;;;;;;-1:-1:-1;;;;;8661:15:1;;;23153:110:0::1;::::0;::::1;8643:34:1::0;8713:15;;8693:18;;;8686:43;8578:18;;23153:110:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23137:13;:126:::0;;-1:-1:-1;;;;;;23137:126:0::1;-1:-1:-1::0;;;;;23137:126:0;;::::1;;::::0;;23274:15:::1;::::0;::::1;:31;23313:21;23358:4;23378:24;23358:4:::0;23378:9:::1;:24::i;:::-;23417:1;23433::::0;23449:7:::1;12105::::0;12132:6;-1:-1:-1;;;;;12132:6:0;;12067:79;23449:7:::1;23274:223;::::0;::::1;::::0;;;-1:-1:-1;;;;;;23274:223:0;;;-1:-1:-1;;;;;9099:15:1;;;23274:223:0::1;::::0;::::1;9081:34:1::0;9131:18;;;9124:34;;;;9174:18;;;9167:34;;;;9217:18;;;9210:34;9281:15;;;9260:19;;;9253:44;23471:15:0::1;9313:19:1::0;;;9306:35;9015:19;;23274:223:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23508:11:0::1;:18:::0;;-1:-1:-1;;;;23537:22:0;-1:-1:-1;;;23537:22:0;;;-1:-1:-1;23601:16:0::1;14013:24;23613:3;23601:11;:16::i;:::-;23586:12;:31:::0;23628:11:::1;:18:::0;;-1:-1:-1;;;;;;;23628:18:0;::::1;;::::0;;;23669:12:::1;23657:9;:24:::0;23744:15:::1;::::0;23692:111:::1;::::0;-1:-1:-1;;;23692:111:0;;-1:-1:-1;;;;;23744:15:0;;::::1;23692:111;::::0;::::1;9837:51:1::0;-1:-1:-1;;9904:18:1;;;9897:34;23699:13:0;;;23692:29:::1;::::0;9810:18:1;;23692:111:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25260:301::-:0;12194:6;;-1:-1:-1;;;;;12194:6:0;9650:10;12194:22;12186:67;;;;-1:-1:-1;;;12186:67:0;;;;;;;:::i;:::-;25321:1:::1;25311:7;:11:::0;;;25333::::1;:15:::0;;;25359:195:::1;25379:11;:18:::0;25375:22;::::1;25359:195;;;25418:67;25433:10;25445:11;25457:1;25445:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;25445:14:0::1;25461:7;:23;25469:11;25481:1;25469:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;25469:14:0::1;25461:23:::0;;;::::1;::::0;;;;;;;;;25418:14:::1;:67::i;:::-;25537:5;25500:18;:34;25519:11;25531:1;25519:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;25519:14:0::1;25500:34:::0;;;::::1;::::0;;;;;;;;:42;;-1:-1:-1;;25500:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25399:3;::::1;::::0;::::1;:::i;:::-;;;;25359:195;;21462:97:::0;12194:6;;-1:-1:-1;;;;;12194:6:0;9650:10;12194:22;12186:67;;;;-1:-1:-1;;;12186:67:0;;;;;;;:::i;:::-;21535:6:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;21535:16:0::1;-1:-1:-1::0;;;;21535:16:0;;::::1;::::0;;;::::1;::::0;;21462:97::o;22542:105::-;12194:6;;-1:-1:-1;;;;;12194:6:0;9650:10;12194:22;12186:67;;;;-1:-1:-1;;;12186:67:0;;;;;;;:::i;:::-;22625:14:::1;:6:::0;22634:5:::1;22625:14;:::i;:::-;22610:12;:29:::0;-1:-1:-1;22542:105:0:o;26070:291::-;26136:15;;-1:-1:-1;;;;;26136:15:0;9650:10;-1:-1:-1;;;;;26120:31:0;;:66;;;-1:-1:-1;26171:15:0;;-1:-1:-1;;;;;26171:15:0;9650:10;-1:-1:-1;;;;;26155:31:0;;26120:66;:101;;;-1:-1:-1;26206:15:0;;-1:-1:-1;;;;;26206:15:0;9650:10;-1:-1:-1;;;;;26190:31:0;;26120:101;:128;;;-1:-1:-1;12105:7:0;12132:6;-1:-1:-1;;;;;12132:6:0;9650:10;26225:23;26120:128;26112:137;;;;;;26289:21;26321:32;26289:21;26321:12;:32::i;23819:87::-;12194:6;;-1:-1:-1;;;;;12194:6:0;9650:10;12194:22;12186:67;;;;-1:-1:-1;;;12186:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23879:12:0::1;;::::0;;;:4:::1;:12;::::0;;;;:19;;-1:-1:-1;;23879:19:0::1;23894:4;23879:19;::::0;;23819:87::o;11318:132::-;11376:7;11403:39;11407:1;11410;11403:39;;;;;;;;;;;;;;;;;:3;:39::i;18312:369::-;-1:-1:-1;;;;;18439:19:0;;18431:68;;;;-1:-1:-1;;;18431:68:0;;10394:2:1;18431:68:0;;;10376:21:1;10433:2;10413:18;;;10406:30;10472:34;10452:18;;;10445:62;-1:-1:-1;;;10523:18:1;;;10516:34;10567:19;;18431:68:0;10192:400:1;18431:68:0;-1:-1:-1;;;;;18518:21:0;;18510:68;;;;-1:-1:-1;;;18510:68:0;;10799:2:1;18510:68:0;;;10781:21:1;10838:2;10818:18;;;10811:30;10877:34;10857:18;;;10850:62;-1:-1:-1;;;10928:18:1;;;10921:32;10970:19;;18510:68:0;10597:398:1;18510:68:0;-1:-1:-1;;;;;18589:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18641:32;;548:25:1;;;18641:32:0;;521:18:1;18641:32:0;;;;;;;18312:369;;;:::o;18689:2765::-;-1:-1:-1;;;;;18813:18:0;;18805:68;;;;-1:-1:-1;;;18805:68:0;;11202:2:1;18805:68:0;;;11184:21:1;11241:2;11221:18;;;11214:30;11280:34;11260:18;;;11253:62;-1:-1:-1;;;11331:18:1;;;11324:35;11376:19;;18805:68:0;11000:401:1;18805:68:0;-1:-1:-1;;;;;18892:16:0;;18884:64;;;;-1:-1:-1;;;18884:64:0;;11608:2:1;18884:64:0;;;11590:21:1;11647:2;11627:18;;;11620:30;11686:34;11666:18;;;11659:62;-1:-1:-1;;;11737:18:1;;;11730:33;11780:19;;18884:64:0;11406:399:1;18884:64:0;18976:1;18967:6;:10;18959:64;;;;-1:-1:-1;;;18959:64:0;;12012:2:1;18959:64:0;;;11994:21:1;12051:2;12031:18;;;12024:30;12090:34;12070:18;;;12063:62;-1:-1:-1;;;12141:18:1;;;12134:39;12190:19;;18959:64:0;11810:405:1;18959:64:0;19063:1;19053:7;:11;19089:1;19075:11;:15;-1:-1:-1;12132:6:0;-1:-1:-1;;;;;19105:15:0;;;12132:6;;19105:15;;;;:32;;-1:-1:-1;12105:7:0;12132:6;-1:-1:-1;;;;;19124:13:0;;;12132:6;;19124:13;;19105:32;:57;;;;-1:-1:-1;;;;;;19141:21:0;;19157:4;19141:21;;19105:57;:86;;;;-1:-1:-1;;;;;;19167:24:0;;;;;;:18;:24;;;;;;;;19166:25;19105:86;:113;;;;-1:-1:-1;;;;;;19196:22:0;;;;;;:18;:22;;;;;;;;19195:23;19105:113;19101:2301;;;-1:-1:-1;;;;;19272:10:0;;;;;;:4;:10;;;;;;;;19271:11;:24;;;;-1:-1:-1;;;;;;19287:8:0;;;;;;:4;:8;;;;;;;;19286:9;19271:24;19263:45;;;;-1:-1:-1;;;19263:45:0;;12422:2:1;19263:45:0;;;12404:21:1;12461:1;12441:18;;;12434:29;-1:-1:-1;;;12479:18:1;;;12472:38;12527:18;;19263:45:0;12220:331:1;19263:45:0;19447:13;;-1:-1:-1;;;;;19439:21:0;;;19447:13;;19439:21;:72;;;;-1:-1:-1;19495:15:0;;-1:-1:-1;;;;;19481:30:0;;;19495:15;;19481:30;;19439:72;:116;;;;-1:-1:-1;;;;;;19533:22:0;;;;;;:18;:22;;;;;;;;19532:23;19439:116;:171;;;;-1:-1:-1;19576:9:0;;19598:12;;19576:18;;14554:1;19576:13;:18::i;:::-;:34;;19439:171;19417:500;;;19724:12;;19714:6;:22;;19706:63;;;;-1:-1:-1;;;19706:63:0;;12758:2:1;19706:63:0;;;12740:21:1;12797:2;12777:18;;;12770:30;12836;12816:18;;;12809:58;12884:18;;19706:63:0;12556:352:1;19706:63:0;19855:16;;19845:6;19827:15;19839:2;19827:11;:15::i;:::-;:24;;;;:::i;:::-;:44;;19819:80;;;;-1:-1:-1;;;19819:80:0;;13115:2:1;19819:80:0;;;13097:21:1;13154:2;13134:18;;;13127:30;13193:25;13173:18;;;13166:53;13236:18;;19819:80:0;12913:347:1;19819:80:0;19940:13;;-1:-1:-1;;;;;19934:19:0;;;19940:13;;19934:19;:53;;;;-1:-1:-1;19971:15:0;;-1:-1:-1;;;;;19957:30:0;;;19971:15;;19957:30;;19934:53;:82;;;;-1:-1:-1;;;;;;19992:24:0;;;;;;:18;:24;;;;;;;;19991:25;19934:82;19931:217;;;20087:12;;20077:6;:22;;20069:63;;;;-1:-1:-1;;;20069:63:0;;12758:2:1;20069:63:0;;;12740:21:1;12797:2;12777:18;;;12770:30;12836;12816:18;;;12809:58;12884:18;;20069:63:0;12556:352:1;20069:63:0;20192:13;;-1:-1:-1;;;;;20186:19:0;;;20192:13;;20186:19;:72;;;;-1:-1:-1;20242:15:0;;-1:-1:-1;;;;;20226:32:0;;;20242:15;;20226:32;;20186:72;:118;;;;-1:-1:-1;;;;;;20280:24:0;;;;;;:18;:24;;;;;;;;20279:25;20186:118;20164:236;;;20349:1;20339:7;:11;20383:1;20369:11;:15;20164:236;20488:9;;20509:12;;20488:18;;14554:1;20488:13;:18::i;:::-;:33;:58;;;;-1:-1:-1;20533:13:0;;-1:-1:-1;;;;;20525:21:0;;;20533:13;;20525:21;20488:58;20484:148;;;20577:3;20567:7;:13;20613:1;20599:11;:15;20484:148;20648:28;20679:26;20699:4;20679:11;:26::i;:::-;20759:19;;20648:57;;-1:-1:-1;20735:43:0;;;;;;;20811:18;;-1:-1:-1;20823:6:0;;-1:-1:-1;;;20823:6:0;;;;20822:7;20811:18;:43;;;;-1:-1:-1;20841:13:0;;-1:-1:-1;;;;;20833:21:0;;;20841:13;;20833:21;;20811:43;:58;;;;-1:-1:-1;20858:11:0;;-1:-1:-1;;;20858:11:0;;;;20811:58;:75;;;;;20873:13;:11;:13::i;:::-;20807:434;;;20998:34;21015:16;;20998;:34::i;:::-;21080:21;21124:22;;21120:106;;21171:35;21184:21;21171:12;:35::i;:::-;20888:353;20807:434;19220:2032;;19101:2301;;;21359:1;21349:7;:11;;;21375;:15;19101:2301;21414:32;21429:4;21435:2;21439:6;21414:14;:32::i;10832:224::-;10952:7;10988:12;10980:6;;;;10972:29;;;;-1:-1:-1;;;10972:29:0;;;;;;;;:::i;:::-;-1:-1:-1;11012:9:0;11024:5;11028:1;11024;:5;:::i;:::-;11012:17;10832:224;-1:-1:-1;;;;;10832:224:0:o;34578:163::-;34619:7;34640:15;34657;34676:19;:17;:19::i;:::-;34639:56;;-1:-1:-1;34639:56:0;-1:-1:-1;34713:20:0;34639:56;;34713:11;:20::i;:::-;34706:27;;;;34578:163;:::o;26607:176::-;-1:-1:-1;;;;;26687:16:0;;26663:7;26687:16;;;:11;:16;;;;;;;;26683:41;;;-1:-1:-1;;;;;;26712:12:0;;;;;:7;:12;;;;;;;26607:176::o;26683:41::-;-1:-1:-1;;;;;26762:12:0;;;;;;:7;:12;;;;;;26742:33;;:19;:33::i;21567:483::-;15734:6;:13;;-1:-1:-1;;;;15734:13:0;-1:-1:-1;;;15734:13:0;;;21669:16:::1;::::0;;21683:1:::1;21669:16:::0;;;;;::::1;::::0;;-1:-1:-1;;21669:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21669:16:0::1;21645:40;;21714:4;21696;21701:1;21696:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21696:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;21740:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;21740:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;21696:7;;21740:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21730:4;21735:1;21730:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21730:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;21805:15:::1;::::0;21773:62:::1;::::0;21790:4:::1;::::0;21805:15:::1;21823:11:::0;21773:8:::1;:62::i;:::-;21846:15;::::0;:196:::1;::::0;-1:-1:-1;;;21846:196:0;;-1:-1:-1;;;;;21846:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;21927:11;;21846:15:::1;::::0;21969:4;;21996::::1;::::0;22016:15:::1;::::0;21846:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;15770:6:0;:14;;-1:-1:-1;;;;15770:14:0;;;-1:-1:-1;;;;21567:483:0:o;26371:220::-;-1:-1:-1;;;;;26448:13:0;;26425:7;26448:13;;;:8;:13;;;;;;26465:12;26448:29;26445:139;;;-1:-1:-1;;;;;;26501:15:0;;;;;:10;:15;;;;;;;26371:220::o;26445:139::-;26556:16;26568:3;26556:11;:16::i;27259:698::-;-1:-1:-1;;;;;27357:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;27381:22:0;;;;;;:11;:22;;;;;;;;27380:23;27357:46;27353:597;;;27420:48;27442:6;27450:9;27461:6;27420:21;:48::i;27353:597::-;-1:-1:-1;;;;;27491:19:0;;;;;;:11;:19;;;;;;;;27490:20;:46;;;;-1:-1:-1;;;;;;27514:22:0;;;;;;:11;:22;;;;;;;;27490:46;27486:464;;;27553:46;27573:6;27581:9;27592:6;27553:19;:46::i;27486:464::-;-1:-1:-1;;;;;27622:19:0;;;;;;:11;:19;;;;;;;;27621:20;:47;;;;-1:-1:-1;;;;;;27646:22:0;;;;;;:11;:22;;;;;;;;27645:23;27621:47;27617:333;;;27685:44;27703:6;27711:9;27722:6;27685:17;:44::i;27617:333::-;-1:-1:-1;;;;;27751:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;27774:22:0;;;;;;:11;:22;;;;;;;;27751:45;27747:203;;;27813:48;27835:6;27843:9;27854:6;27813:21;:48::i;27747:203::-;27894:44;27912:6;27920:9;27931:6;27894:17;:44::i;22056:478::-;22258:15;;22240:78;;-1:-1:-1;;;;;22258:15:0;22275:42;14950:1;22275:24;:6;14896:1;22275:10;:24::i;:::-;:28;;:42::i;:::-;22240:17;:78::i;:::-;22367:15;;22349:72;;-1:-1:-1;;;;;22367:15:0;22384:36;14950:1;22384:18;:6;14848:1;22384:10;:18::i;22349:72::-;22471:15;;22453:73;;-1:-1:-1;;;;;22471:15:0;22488:37;14950:1;22488:19;:6;14806:1;22488:10;:19::i;11458:223::-;11578:7;11613:12;11606:5;11598:28;;;;-1:-1:-1;;;11598:28:0;;;;;;;;:::i;:::-;-1:-1:-1;11637:9:0;11649:5;11653:1;11649;:5;:::i;10501:179::-;10559:7;;10591:5;10595:1;10591;:5;:::i;:::-;10579:17;;10620:1;10615;:6;;10607:46;;;;-1:-1:-1;;;10607:46:0;;14804:2:1;10607:46:0;;;14786:21:1;14843:2;14823:18;;;14816:30;14882:29;14862:18;;;14855:57;14929:18;;10607:46:0;14602:351:1;24010:152:0;24055:4;24148:6;24135:9;:19;;24128:26;;24010:152;:::o;34749:561::-;34846:7;;34799;;;;14013:24;34799:7;34906:289;34930:9;:16;34926:20;;34906:289;;;34996:7;34972;:21;34980:9;34990:1;34980:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34980:12:0;34972:21;;;;;;;;;;;;;:31;;:66;;;35031:7;35007;:21;35015:9;35025:1;35015:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35015:12:0;35007:21;;;;;;;;;;;;;:31;34972:66;34968:97;;;-1:-1:-1;;35048:7:0;;;14013:24;;-1:-1:-1;34749:561:0;-1:-1:-1;;34749:561:0:o;34968:97::-;35090:34;35102:7;:21;35110:9;35120:1;35110:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35110:12:0;35102:21;;;;;;;;;;;;;35090:7;;:11;:34::i;:::-;35080:44;;35149:34;35161:7;:21;35169:9;35179:1;35169:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35169:12:0;35161:21;;;;;;;;;;;;;35149:7;;:11;:34::i;:::-;35139:44;-1:-1:-1;34948:3:0;;;;:::i;:::-;;;;34906:289;;;-1:-1:-1;35219:7:0;;:20;;14013:24;35219:11;:20::i;:::-;35209:7;:30;35205:61;;;-1:-1:-1;;35249:7:0;;;14013:24;;-1:-1:-1;34749:561:0;-1:-1:-1;34749:561:0:o;35205:61::-;35285:7;;35294;;-1:-1:-1;34749:561:0;-1:-1:-1;34749:561:0:o;30533:1298::-;30638:9;;30660:12;;30638:18;;14554:1;30638:13;:18::i;:::-;:34;;:61;;;;-1:-1:-1;30686:13:0;;-1:-1:-1;;;;;30676:23:0;;;30686:13;;30676:23;30638:61;30635:1189;;;30792:1;30826:7;30766:23;30864:28;30826:7;30792:1;30864:11;:28::i;:::-;-1:-1:-1;;;;;30956:19:0;;;;;;:8;:19;;;;;;;;30978:12;30956:34;;31029:7;:18;;;;;;30848:44;;-1:-1:-1;31029:31:0;;31052:7;31029:22;:31::i;:::-;-1:-1:-1;;;;;31005:21:0;;;;;;;:10;:21;;;;;;;;:55;;;;31130:15;;;;;:7;:15;;;;;:28;;31150:7;31130:19;:28::i;:::-;-1:-1:-1;;;;;31112:15:0;;;;;;;:7;:15;;;;;;:46;;;;31194:18;;;;;;;:39;;31217:15;31194:22;:39::i;:::-;-1:-1:-1;;;;;31173:18:0;;;;;;:7;:18;;;;;:60;31248:17;31259:5;31248:10;:17::i;:::-;31302:9;-1:-1:-1;;;;;31285:44:0;31294:6;-1:-1:-1;;;;;31285:44:0;;31313:15;31285:44;;;;548:25:1;;536:2;521:18;;402:177;31285:44:0;;;;;;;;30701:642;;;24273:212:::1;24170:322:::0;;:::o;30635:1189::-;31361:15;31378:23;31403:12;31417:23;31442:12;31456:18;31478:19;31489:7;31478:10;:19::i;:::-;-1:-1:-1;;;;;31526:15:0;;;;;;:7;:15;;;;;;31360:137;;-1:-1:-1;31360:137:0;;-1:-1:-1;31360:137:0;;-1:-1:-1;31360:137:0;-1:-1:-1;31360:137:0;-1:-1:-1;31360:137:0;-1:-1:-1;31526:28:0;;31546:7;31526:19;:28::i;:::-;-1:-1:-1;;;;;31508:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31583:7;:15;;;;:28;;31603:7;31583:19;:28::i;:::-;-1:-1:-1;;;;;31565:15:0;;;;;;;:7;:15;;;;;;:46;;;;31643:18;;;;;;;:39;;31666:15;31643:22;:39::i;:::-;-1:-1:-1;;;;;31622:18:0;;;;;;:7;:18;;;;;:60;31696:22;31707:10;31696;:22::i;:::-;31729:23;31741:4;31747;31729:11;:23::i;:::-;31785:9;-1:-1:-1;;;;;31768:44:0;31777:6;-1:-1:-1;;;;;31768:44:0;;31796:15;31768:44;;;;548:25:1;;536:2;521:18;;402:177;31768:44:0;;;;;;;;31349:475;;;;;;30533:1298;;;:::o;29207:1318::-;29310:9;;29332:12;;29310:18;;14554:1;29310:13;:18::i;:::-;:34;;:61;;;;-1:-1:-1;29358:13:0;;-1:-1:-1;;;;;29348:23:0;;;29358:13;;29348:23;29310:61;29307:1211;;;29464:1;29498:7;29438:23;29536:28;29498:7;29464:1;29536:11;:28::i;29307:1211::-;30033:15;30050:23;30075:12;30089:23;30114:12;30128:18;30150:19;30161:7;30150:10;:19::i;:::-;-1:-1:-1;;;;;30198:15:0;;;;;;:7;:15;;;;;;30032:137;;-1:-1:-1;30032:137:0;;-1:-1:-1;30032:137:0;;-1:-1:-1;30032:137:0;-1:-1:-1;30032:137:0;-1:-1:-1;30032:137:0;-1:-1:-1;30198:28:0;;30032:137;30198:19;:28::i;:::-;-1:-1:-1;;;;;30180:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30258:18;;;;;:7;:18;;;;;:39;;30281:15;30258:22;:39::i;:::-;-1:-1:-1;;;;;30237:18:0;;;;;;:7;:18;;;;;;;;:60;;;;30329:7;:18;;;;:39;;30352:15;30329:22;:39::i;27965:1234::-;28066:9;;28088:12;;28066:18;;14554:1;28066:13;:18::i;:::-;:34;;:61;;;;-1:-1:-1;28114:13:0;;-1:-1:-1;;;;;28104:23:0;;;28114:13;;28104:23;28066:61;28063:1129;;;28220:1;28254:7;28194:23;28292:28;28254:7;28220:1;28292:11;:28::i;28063:1129::-;28789:15;28806:23;28831:12;28845:23;28870:12;28884:18;28906:19;28917:7;28906:10;:19::i;:::-;-1:-1:-1;;;;;28954:15:0;;;;;;:7;:15;;;;;;28788:137;;-1:-1:-1;28788:137:0;;-1:-1:-1;28788:137:0;;-1:-1:-1;28788:137:0;-1:-1:-1;28788:137:0;-1:-1:-1;28788:137:0;-1:-1:-1;28954:28:0;;28788:137;28954:19;:28::i;31839:1374::-;31944:9;;31966:12;;31944:18;;14554:1;31944:13;:18::i;:::-;:34;;:61;;;;-1:-1:-1;31992:13:0;;-1:-1:-1;;;;;31982:23:0;;;31992:13;;31982:23;31944:61;31941:1265;;;32098:1;32132:7;32072:23;32170:28;32132:7;32098:1;32170:11;:28::i;31941:1265::-;32667:15;32684:23;32709:12;32723:23;32748:12;32762:18;32784:19;32795:7;32784:10;:19::i;:::-;-1:-1:-1;;;;;32832:15:0;;;;;;:7;:15;;;;;;32666:137;;-1:-1:-1;32666:137:0;;-1:-1:-1;32666:137:0;;-1:-1:-1;32666:137:0;-1:-1:-1;32666:137:0;-1:-1:-1;32666:137:0;-1:-1:-1;32832:28:0;;32852:7;32832:19;:28::i;:::-;-1:-1:-1;;;;;32814:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32889:7;:15;;;;:28;;32909:7;32889:19;:28::i;11064:246::-;11122:7;11146:6;11142:47;;-1:-1:-1;11176:1:0;11169:8;;11142:47;11199:9;11211:5;11215:1;11211;:5;:::i;:::-;11199:17;-1:-1:-1;11244:1:0;11235:5;11239:1;11199:17;11235:5;:::i;:::-;:10;11227:56;;;;-1:-1:-1;;;11227:56:0;;15160:2:1;11227:56:0;;;15142:21:1;15199:2;15179:18;;;15172:30;15238:34;15218:18;;;15211:62;-1:-1:-1;;;15289:18:1;;;15282:31;15330:19;;11227:56:0;14958:397:1;3530:317:0;3645:6;3620:21;:31;;3612:73;;;;-1:-1:-1;;;3612:73:0;;15562:2:1;3612:73:0;;;15544:21:1;15601:2;15581:18;;;15574:30;15640:31;15620:18;;;15613:59;15689:18;;3612:73:0;15360:353:1;3612:73:0;3699:12;3717:9;-1:-1:-1;;;;;3717:14:0;3739:6;3717:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3698:52;;;3769:7;3761:78;;;;-1:-1:-1;;;3761:78:0;;16130:2:1;3761:78:0;;;16112:21:1;16169:2;16149:18;;;16142:30;16208:34;16188:18;;;16181:62;16279:28;16259:18;;;16252:56;16325:19;;3761:78:0;15928:422:1;10688:136:0;10746:7;10773:43;10777:1;10780;10773:43;;;;;;;;;;;;;;;;;:3;:43::i;35785:351::-;35844:19;35867:10;:8;:10::i;:::-;35844:33;-1:-1:-1;35888:18:0;35909:27;:10;35844:33;35909:14;:27::i;:::-;35988:4;35972:22;;;;:7;:22;;;;;;35888:48;;-1:-1:-1;35972:38:0;;35888:48;35972:26;:38::i;:::-;35963:4;35947:22;;;;:7;:22;;;;;;;;:63;;;;36024:11;:26;;;;;;36021:107;;;36106:4;36090:22;;;;:7;:22;;;;;;:38;;36117:10;36090:26;:38::i;:::-;36081:4;36065:22;;;;:7;:22;;;;;:63;35833:303;;35785:351;:::o;33376:419::-;33435:7;33444;33453;33462;33471;33480;33501:23;33526:12;33540:18;33562:20;33574:7;33562:11;:20::i;:::-;33500:82;;;;;;33594:15;33611:23;33636:12;33652:50;33664:7;33673:4;33679:10;33691;:8;:10::i;:::-;33652:11;:50::i;:::-;33593:109;;;;-1:-1:-1;33593:109:0;;-1:-1:-1;33753:15:0;;-1:-1:-1;33770:4:0;;-1:-1:-1;33776:10:0;;-1:-1:-1;33376:419:0;;-1:-1:-1;;;;;33376:419:0:o;33221:147::-;33299:7;;:17;;33311:4;33299:11;:17::i;:::-;33289:7;:27;33340:10;;:20;;33355:4;33340:14;:20::i;:::-;33327:10;:33;-1:-1:-1;;33221:147:0:o;33803:330::-;33863:7;33872;33881;33901:12;33916:28;33936:7;33916:19;:28::i;:::-;33901:43;;33955:18;33976:26;33994:7;33976:17;:26::i;:::-;33955:47;-1:-1:-1;34013:23:0;34039:33;33955:47;34039:17;:7;34051:4;34039:11;:17::i;:::-;:21;;:33::i;:::-;34013:59;34108:4;;-1:-1:-1;34114:10:0;;-1:-1:-1;33803:330:0;;-1:-1:-1;;;33803:330:0:o;34141:429::-;34256:7;;;;34312:24;:7;34324:11;34312;:24::i;:::-;34294:42;-1:-1:-1;34347:12:0;34362:21;:4;34371:11;34362:8;:21::i;:::-;34347:36;-1:-1:-1;34394:18:0;34415:27;:10;34430:11;34415:14;:27::i;:::-;34394:48;-1:-1:-1;34453:23:0;34479:33;34394:48;34479:17;:7;34491:4;34479:11;:17::i;:33::-;34531:7;;;;-1:-1:-1;34557:4:0;;-1:-1:-1;34141:429:0;;-1:-1:-1;;;;;;;34141:429:0:o;35318:160::-;35386:7;35413:57;35456:3;35413:24;35425:11;;35413:7;:11;;:24;;;;:::i;35486:154::-;35552:7;35579:53;35618:3;35579:20;35591:7;;35579;:11;;:20;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;584:597::-;696:4;725:2;754;743:9;736:21;786:6;780:13;829:6;824:2;813:9;809:18;802:34;854:1;864:140;878:6;875:1;872:13;864:140;;;973:14;;;969:23;;963:30;939:17;;;958:2;935:26;928:66;893:10;;864:140;;;1022:6;1019:1;1016:13;1013:91;;;1092:1;1087:2;1078:6;1067:9;1063:22;1059:31;1052:42;1013:91;-1:-1:-1;1165:2:1;1144:15;-1:-1:-1;;1140:29:1;1125:45;;;;1172:2;1121:54;;584:597;-1:-1:-1;;;584:597:1:o;1186:315::-;1254:6;1262;1315:2;1303:9;1294:7;1290:23;1286:32;1283:52;;;1331:1;1328;1321:12;1283:52;1370:9;1357:23;1389:31;1414:5;1389:31;:::i;:::-;1439:5;1491:2;1476:18;;;;1463:32;;-1:-1:-1;;;1186:315:1:o;1698:127::-;1759:10;1754:3;1750:20;1747:1;1740:31;1790:4;1787:1;1780:15;1814:4;1811:1;1804:15;1830:275;1901:2;1895:9;1966:2;1947:13;;-1:-1:-1;;1943:27:1;1931:40;;2001:18;1986:34;;2022:22;;;1983:62;1980:88;;;2048:18;;:::i;:::-;2084:2;2077:22;1830:275;;-1:-1:-1;1830:275:1:o;2110:183::-;2170:4;2203:18;2195:6;2192:30;2189:56;;;2225:18;;:::i;:::-;-1:-1:-1;2270:1:1;2266:14;2282:4;2262:25;;2110:183::o;2298:737::-;2352:5;2405:3;2398:4;2390:6;2386:17;2382:27;2372:55;;2423:1;2420;2413:12;2372:55;2459:6;2446:20;2485:4;2509:60;2525:43;2565:2;2525:43;:::i;:::-;2509:60;:::i;:::-;2603:15;;;2689:1;2685:10;;;;2673:23;;2669:32;;;2634:12;;;;2713:15;;;2710:35;;;2741:1;2738;2731:12;2710:35;2777:2;2769:6;2765:15;2789:217;2805:6;2800:3;2797:15;2789:217;;;2885:3;2872:17;2902:31;2927:5;2902:31;:::i;:::-;2946:18;;2984:12;;;;2822;;2789:217;;;-1:-1:-1;3024:5:1;2298:737;-1:-1:-1;;;;;;2298:737:1:o;3040:1138::-;3158:6;3166;3219:2;3207:9;3198:7;3194:23;3190:32;3187:52;;;3235:1;3232;3225:12;3187:52;3275:9;3262:23;3304:18;3345:2;3337:6;3334:14;3331:34;;;3361:1;3358;3351:12;3331:34;3384:61;3437:7;3428:6;3417:9;3413:22;3384:61;:::i;:::-;3374:71;;3464:2;3454:12;;3519:2;3508:9;3504:18;3491:32;3548:2;3538:8;3535:16;3532:36;;;3564:1;3561;3554:12;3532:36;3587:24;;;-1:-1:-1;3642:4:1;3634:13;;3630:27;-1:-1:-1;3620:55:1;;3671:1;3668;3661:12;3620:55;3707:2;3694:16;3730:60;3746:43;3786:2;3746:43;:::i;3730:60::-;3824:15;;;3906:1;3902:10;;;;3894:19;;3890:28;;;3855:12;;;;3930:19;;;3927:39;;;3962:1;3959;3952:12;3927:39;3986:11;;;;4006:142;4022:6;4017:3;4014:15;4006:142;;;4088:17;;4076:30;;4039:12;;;;4126;;;;4006:142;;;4167:5;4157:15;;;;;;;3040:1138;;;;;:::o;4183:456::-;4260:6;4268;4276;4329:2;4317:9;4308:7;4304:23;4300:32;4297:52;;;4345:1;4342;4335:12;4297:52;4384:9;4371:23;4403:31;4428:5;4403:31;:::i;:::-;4453:5;-1:-1:-1;4510:2:1;4495:18;;4482:32;4523:33;4482:32;4523:33;:::i;:::-;4183:456;;4575:7;;-1:-1:-1;;;4629:2:1;4614:18;;;;4601:32;;4183:456::o;4644:180::-;4703:6;4756:2;4744:9;4735:7;4731:23;4727:32;4724:52;;;4772:1;4769;4762:12;4724:52;-1:-1:-1;4795:23:1;;4644:180;-1:-1:-1;4644:180:1:o;5018:348::-;5102:6;5155:2;5143:9;5134:7;5130:23;5126:32;5123:52;;;5171:1;5168;5161:12;5123:52;5211:9;5198:23;5244:18;5236:6;5233:30;5230:50;;;5276:1;5273;5266:12;5230:50;5299:61;5352:7;5343:6;5332:9;5328:22;5299:61;:::i;:::-;5289:71;5018:348;-1:-1:-1;;;;5018:348:1:o;5371:118::-;5457:5;5450:13;5443:21;5436:5;5433:32;5423:60;;5479:1;5476;5469:12;5494:241;5550:6;5603:2;5591:9;5582:7;5578:23;5574:32;5571:52;;;5619:1;5616;5609:12;5571:52;5658:9;5645:23;5677:28;5699:5;5677:28;:::i;5948:388::-;6016:6;6024;6077:2;6065:9;6056:7;6052:23;6048:32;6045:52;;;6093:1;6090;6083:12;6045:52;6132:9;6119:23;6151:31;6176:5;6151:31;:::i;:::-;6201:5;-1:-1:-1;6258:2:1;6243:18;;6230:32;6271:33;6230:32;6271:33;:::i;:::-;6323:7;6313:17;;;5948:388;;;;;:::o;6341:356::-;6543:2;6525:21;;;6562:18;;;6555:30;6621:34;6616:2;6601:18;;6594:62;6688:2;6673:18;;6341:356::o;6702:127::-;6763:10;6758:3;6754:20;6751:1;6744:31;6794:4;6791:1;6784:15;6818:4;6815:1;6808:15;6834:127;6895:10;6890:3;6886:20;6883:1;6876:31;6926:4;6923:1;6916:15;6950:4;6947:1;6940:15;6966:168;7006:7;7072:1;7068;7064:6;7060:14;7057:1;7054:21;7049:1;7042:9;7035:17;7031:45;7028:71;;;7079:18;;:::i;:::-;-1:-1:-1;7119:9:1;;6966:168::o;7139:135::-;7178:3;-1:-1:-1;;7199:17:1;;7196:43;;;7219:18;;:::i;:::-;-1:-1:-1;7266:1:1;7255:13;;7139:135::o;7690:128::-;7730:3;7761:1;7757:6;7754:1;7751:13;7748:39;;;7767:18;;:::i;:::-;-1:-1:-1;7803:9:1;;7690:128::o;8175:251::-;8245:6;8298:2;8286:9;8277:7;8273:23;8269:32;8266:52;;;8314:1;8311;8304:12;8266:52;8346:9;8340:16;8365:31;8390:5;8365:31;:::i;9352:306::-;9440:6;9448;9456;9509:2;9497:9;9488:7;9484:23;9480:32;9477:52;;;9525:1;9522;9515:12;9477:52;9554:9;9548:16;9538:26;;9604:2;9593:9;9589:18;9583:25;9573:35;;9648:2;9637:9;9633:18;9627:25;9617:35;;9352:306;;;;;:::o;9942:245::-;10009:6;10062:2;10050:9;10041:7;10037:23;10033:32;10030:52;;;10078:1;10075;10068:12;10030:52;10110:9;10104:16;10129:28;10151:5;10129:28;:::i;13265:125::-;13305:4;13333:1;13330;13327:8;13324:34;;;13338:18;;:::i;:::-;-1:-1:-1;13375:9:1;;13265:125::o;13395:980::-;13657:4;13705:3;13694:9;13690:19;13736:6;13725:9;13718:25;13762:2;13800:6;13795:2;13784:9;13780:18;13773:34;13843:3;13838:2;13827:9;13823:18;13816:31;13867:6;13902;13896:13;13933:6;13925;13918:22;13971:3;13960:9;13956:19;13949:26;;14010:2;14002:6;13998:15;13984:29;;14031:1;14041:195;14055:6;14052:1;14049:13;14041:195;;;14120:13;;-1:-1:-1;;;;;14116:39:1;14104:52;;14211:15;;;;14176:12;;;;14152:1;14070:9;14041:195;;;-1:-1:-1;;;;;;;14292:32:1;;;;14287:2;14272:18;;14265:60;-1:-1:-1;;;14356:3:1;14341:19;14334:35;14253:3;13395:980;-1:-1:-1;;;13395:980:1:o;14380:217::-;14420:1;14446;14436:132;;14490:10;14485:3;14481:20;14478:1;14471:31;14525:4;14522:1;14515:15;14553:4;14550:1;14543:15;14436:132;-1:-1:-1;14582:9:1;;14380:217::o

Swarm Source

ipfs://b9d8fdd192b07941f2085ab962cbdd7afd15aa23986d46d76189388486b9633d
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.