ETH Price: $2,458.01 (+3.90%)

Token

Guardian Network (GRDN)
 

Overview

Max Total Supply

100,000,000 GRDN

Holders

113

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
114,988.861628107798732553 GRDN

Value
$0.00
0x75165e808c8e6fbaa0c0c670d025621b01a8718f
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:
GuardianNetwork

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-26
*/

// SPDX-License-Identifier: MIT

/*
𝔾𝕦𝕒𝕣𝕕𝕚𝕒𝕟 ℕ𝕖𝕥𝕨𝕠𝕣𝕜
Website: https://guardiannetwork.io/
Telegram: https://t.me/Guardian_GRDN
Twitter: https://x.com/Guardian_GRDN
Links: https://guardiannetwork.io/links

*/

pragma solidity ^0.8.20;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

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

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

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

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

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

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

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

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

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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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 waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract GuardianNetwork is ERC20, Ownable {
    
    event FeeExclusionChanged(address indexed account, bool isExcluded);
    event AMMPairUpdated(address indexed pair, bool indexed value);

    event WalletChanged(
    address indexed newWallet,
    address indexed oldWallet,
    string walletType
    );

    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant ROUTER_ADDRESS =
        0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    bool private isSwapping;
    uint256 public buyingFee;
    uint256 public sellingFee;
    uint256 private _maxSwappableTokens;

    uint256 public preventSwapBefore = 20;
    uint256 public totalBuys = 0;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;
    mapping(address => bool) public automatedMarketMakerPairs;

    address private teamWallet;
    address private marketingWallet;
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public areLimitsActive = true;
    bool public isTradingEnabled = false;
    bool public isSwapEnabled = false;

    mapping(address => uint256) private _holderLastTransferBlock;
    bool public isTransferDelayActive = true;
    uint256 public launchBlockNo;

    constructor() ERC20("Guardian Network", "GRDN", 18) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(ROUTER_ADDRESS);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 100_000_000 * (10**18);

        maxTransactionAmount = (totalSupply * 100) / 10_000; 
        maxWallet = (totalSupply * 100) / 10_000; 
        swapTokensAtAmount = (totalSupply * 50) / 10_000; 
        _maxSwappableTokens = (totalSupply * 100) / 10_000; 

        buyingFee = 3_500;
        sellingFee = 4_000;

        teamWallet = 0xD9E8Ab636B82502217DD6C885F331Dd571A38f21;
        marketingWallet = 0xC3cC8700a111b63050399bF5B5817471B09B62e0;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }


    receive() external payable {}

    function launch() external onlyOwner {
        require(!isTradingEnabled, "Token launched");
        isTradingEnabled = true;
        launchBlockNo = block.number;
        isSwapEnabled = true;
    }

    function limitsOff() external onlyOwner returns (bool) {
        areLimitsActive = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        isTransferDelayActive = false;
        return true;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxTransaction[updAds] = isEx;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit FeeExclusionChanged(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit AMMPairUpdated(pair, value);
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
        emit WalletChanged(newWallet, marketingWallet, "MKT");
    }

    function updateTeamWallet(address newWallet) external onlyOwner {
        teamWallet = newWallet;
        emit WalletChanged(newWallet, teamWallet, "TEAM");
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (areLimitsActive) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwapping
            ) {
                if (!isTradingEnabled) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                if (isTransferDelayActive) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferBlock[tx.origin] < block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferBlock[tx.origin] = block.number;
                    }
                }

                // BUY
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedmaxTransaction[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransaction."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                // SELL
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedmaxTransaction[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransaction."
                    );
                } else if (!_isExcludedmaxTransaction[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            isSwapEnabled &&
            !isSwapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to] &&
            totalBuys > preventSwapBefore
        ) {
            isSwapping = true;
            swapBack(min(contractTokenBalance, _maxSwappableTokens));
            isSwapping = false;
        }

        bool takeFee = !isSwapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // SELL
            if (automatedMarketMakerPairs[to] && sellingFee > 0) {
                fees = amount.mul(sellingFee).div(10_000);
            }
            // BUY
            else if (automatedMarketMakerPairs[from] && buyingFee > 0) {
                fees = amount.mul(buyingFee).div(10_000);
                totalBuys++;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        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 swapBack(uint256 amount) private {
        bool success;

        if (amount == 0) {
            return;
        }

        uint256 amountToSwapForETH = amount;
        swapTokensForEth(amountToSwapForETH);
        uint256 ethBalance = address(this).balance;
        // Calculate allocations
        uint256 mkt_amount = ethBalance / 2;
        uint256 development_amount = ethBalance - mkt_amount;

        (success, ) = address(marketingWallet).call{value: mkt_amount}("");
        (success, ) = address(teamWallet).call{value: development_amount}("");
    }

    function changeSwapTokensAtAmount(uint256 newValue)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newValue >= (totalSupply() * 1) / 100_000,
            "Swap amount < 0.001% total supply."
        );
        require(
            newValue <= (totalSupply() * 100) / 10_000,
            "Swap amount > 1% total supply."
        );
        swapTokensAtAmount = newValue;
        return true;
    }

    function changeMaxTransaction(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 10) / 10_000),
            "maxTransaction < 0.1%"
        );
        maxTransactionAmount = newValue * (10**decimals());
    }

    function changeMaxWallet(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 50) / 10_000),
            "maxWallet < 0.5%"
        );
        maxWallet = newValue * (10**decimals());
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool _isEnable) external onlyOwner {
        isSwapEnabled = _isEnable;
    }

    function updateBuyFee(uint256 _newFee) external onlyOwner {
        require(_newFee <= 5_000);
        buyingFee = _newFee;
    }

    function updateSellFee(uint256 _newFee) external onlyOwner {
        require(_newFee <= 5_000);
        sellingFee = _newFee;
    }




}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AMMPairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"FeeExclusionChanged","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"},{"indexed":false,"internalType":"string","name":"walletType","type":"string"}],"name":"WalletChanged","type":"event"},{"inputs":[],"name":"ROUTER_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areLimitsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTransferDelayActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchBlockNo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsOff","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preventSwapBefore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isEnable","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526014600a555f600b55600160145f6101000a81548160ff0219169083151502179055505f601460016101000a81548160ff0219169083151502179055505f601460026101000a81548160ff021916908315150217905550600160165f6101000a81548160ff021916908315150217905550348015610080575f80fd5b506040518060400160405280601081526020017f477561726469616e204e6574776f726b000000000000000000000000000000008152506040518060400160405280600481526020017f4752444e00000000000000000000000000000000000000000000000000000000815250601282600390816100fe9190610c73565b50816004908161010e9190610c73565b508060055f6101000a81548160ff021916908360ff1602179055505050505f61013b6105c660201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d90506102028160016105cd60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561027f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102a39190610da0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610308573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061032c9190610da0565b6040518363ffffffff1660e01b8152600401610349929190610dda565b6020604051808303815f875af1158015610365573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103899190610da0565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506103cf60a05160016105cd60201b60201c565b6103e260a05160016106c260201b60201c565b5f6a52b7d2dcc80cd2e400000090506127106064826104019190610e2e565b61040b9190610e9c565b6011819055506127106064826104219190610e2e565b61042b9190610e9c565b6013819055506127106032826104419190610e2e565b61044b9190610e9c565b6012819055506127106064826104619190610e2e565b61046b9190610e9c565b600981905550610dac600781905550610fa060088190555073d9e8ab636b82502217dd6c885f331dd571a38f21600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c3cc8700a111b63050399bf5b5817471b09b62e060105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061054961053c61076060201b60201c565b600161078960201b60201c565b61055a30600161078960201b60201c565b61056d61dead600161078960201b60201c565b61058b61057e61076060201b60201c565b60016105cd60201b60201c565b61059c3060016105cd60201b60201c565b6105af61dead60016105cd60201b60201c565b6105bf33826108cc60201b60201c565b505061103a565b5f33905090565b6105db6105c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461066a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066190610f26565b60405180910390fd5b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f9a05f836a81b64d2d3ee62b752e87947ab26a9fdcd5b2572b1744ae8499b3aac60405160405180910390a35050565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6107976105c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081d90610f26565b60405180910390fd5b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167ff815f00beae85223ac9b4080b0a33b5191008f4570249ad14763024977fb7fbc826040516108c09190610f5e565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361093a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093190610fc1565b60405180910390fd5b61094b5f8383610a2f60201b60201c565b8060025f82825461095c9190610fdf565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109ae9190610fdf565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a129190611021565b60405180910390a3610a2b5f8383610a3460201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610ab457607f821691505b602082108103610ac757610ac6610a70565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610b297fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610aee565b610b338683610aee565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610b77610b72610b6d84610b4b565b610b54565b610b4b565b9050919050565b5f819050919050565b610b9083610b5d565b610ba4610b9c82610b7e565b848454610afa565b825550505050565b5f90565b610bb8610bac565b610bc3818484610b87565b505050565b5b81811015610be657610bdb5f82610bb0565b600181019050610bc9565b5050565b601f821115610c2b57610bfc81610acd565b610c0584610adf565b81016020851015610c14578190505b610c28610c2085610adf565b830182610bc8565b50505b505050565b5f82821c905092915050565b5f610c4b5f1984600802610c30565b1980831691505092915050565b5f610c638383610c3c565b9150826002028217905092915050565b610c7c82610a39565b67ffffffffffffffff811115610c9557610c94610a43565b5b610c9f8254610a9d565b610caa828285610bea565b5f60209050601f831160018114610cdb575f8415610cc9578287015190505b610cd38582610c58565b865550610d3a565b601f198416610ce986610acd565b5f5b82811015610d1057848901518255600182019150602085019450602081019050610ceb565b86831015610d2d5784890151610d29601f891682610c3c565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610d6f82610d46565b9050919050565b610d7f81610d65565b8114610d89575f80fd5b50565b5f81519050610d9a81610d76565b92915050565b5f60208284031215610db557610db4610d42565b5b5f610dc284828501610d8c565b91505092915050565b610dd481610d65565b82525050565b5f604082019050610ded5f830185610dcb565b610dfa6020830184610dcb565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e3882610b4b565b9150610e4383610b4b565b9250828202610e5181610b4b565b91508282048414831517610e6857610e67610e01565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610ea682610b4b565b9150610eb183610b4b565b925082610ec157610ec0610e6f565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f610f10602083610ecc565b9150610f1b82610edc565b602082019050919050565b5f6020820190508181035f830152610f3d81610f04565b9050919050565b5f8115159050919050565b610f5881610f44565b82525050565b5f602082019050610f715f830184610f4f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610fab601f83610ecc565b9150610fb682610f77565b602082019050919050565b5f6020820190508181035f830152610fd881610f9f565b9050919050565b5f610fe982610b4b565b9150610ff483610b4b565b925082820190508082111561100c5761100b610e01565b5b92915050565b61101b81610b4b565b82525050565b5f6020820190506110345f830184611012565b92915050565b60805160a051614cbf6110855f395f8181611334015281816119b401526127ef01525f8181610f2a015281816127970152818161358f0152818161366e01526136950152614cbf5ff3fe608060405260043610610280575f3560e01c80637571336a1161014e578063b94a6dfe116100c0578063e1bc339411610079578063e1bc339414610993578063e28a9394146109cf578063e2f45605146109f9578063e884f26014610a23578063f2fde38b14610a4d578063f8b45b0514610a7557610287565b8063b94a6dfe14610889578063c0246668146108b3578063c8c8ebe4146108db578063cbd8dc0a14610905578063cd73ab021461092f578063dd62ed3e1461095757610287565b806395d89b411161011257806395d89b411461075b5780639a7a23d614610785578063a457c2d7146107ad578063a9059cbb146107e9578063aacebbe314610825578063b62496f51461084d57610287565b80637571336a146106a35780637cb332bb146106cb5780638da5cb5b146106f3578063914eb66a1461071d578063924de9b71461073357610287565b8063232050f9116101f257806349bd5a5e116101ab57806349bd5a5e146105835780634fbee193146105ad57806351a783cd146105e957806363ee4d1c146106135780636c7f3f171461063d57806370a082311461066757610287565b8063232050f91461046557806323b872dd1461048f578063313ce567146104cb578063351a964d146104f5578063395093511461051f578063467abe0a1461055b57610287565b80630b006d60116102445780630b006d601461036d5780630b44190e146103955780631694505e146103bf57806318160ddd146103e95780631891201e146104135780631d933a4a1461043d57610287565b806301339c211461028b578063064a59d0146102a157806306fdde03146102cb578063095ea7b3146102f557806309d6bf0a1461033157610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a9f565b005b3480156102ac575f80fd5b506102b5610bc5565b6040516102c291906137a0565b60405180910390f35b3480156102d6575f80fd5b506102df610bd8565b6040516102ec9190613829565b60405180910390f35b348015610300575f80fd5b5061031b600480360381019061031691906138da565b610c68565b60405161032891906137a0565b60405180910390f35b34801561033c575f80fd5b5061035760048036038101906103529190613918565b610c85565b60405161036491906137a0565b60405180910390f35b348015610378575f80fd5b50610393600480360381019061038e9190613918565b610df4565b005b3480156103a0575f80fd5b506103a9610f16565b6040516103b691906137a0565b60405180910390f35b3480156103ca575f80fd5b506103d3610f28565b6040516103e0919061399e565b60405180910390f35b3480156103f4575f80fd5b506103fd610f4c565b60405161040a91906139c6565b60405180910390f35b34801561041e575f80fd5b50610427610f55565b60405161043491906139c6565b60405180910390f35b348015610448575f80fd5b50610463600480360381019061045e9190613918565b610f5b565b005b348015610470575f80fd5b5061047961100a565b60405161048691906137a0565b60405180910390f35b34801561049a575f80fd5b506104b560048036038101906104b091906139df565b6110c2565b6040516104c291906137a0565b60405180910390f35b3480156104d6575f80fd5b506104df6111b4565b6040516104ec9190613a4a565b60405180910390f35b348015610500575f80fd5b506105096111c9565b60405161051691906137a0565b60405180910390f35b34801561052a575f80fd5b50610545600480360381019061054091906138da565b6111dc565b60405161055291906137a0565b60405180910390f35b348015610566575f80fd5b50610581600480360381019061057c9190613918565b611283565b005b34801561058e575f80fd5b50610597611332565b6040516105a49190613a72565b60405180910390f35b3480156105b8575f80fd5b506105d360048036038101906105ce9190613a8b565b611356565b6040516105e091906137a0565b60405180910390f35b3480156105f4575f80fd5b506105fd6113a8565b60405161060a91906137a0565b60405180910390f35b34801561061e575f80fd5b506106276113ba565b60405161063491906139c6565b60405180910390f35b348015610648575f80fd5b506106516113c0565b60405161065e91906139c6565b60405180910390f35b348015610672575f80fd5b5061068d60048036038101906106889190613a8b565b6113c6565b60405161069a91906139c6565b60405180910390f35b3480156106ae575f80fd5b506106c960048036038101906106c49190613ae0565b61140b565b005b3480156106d6575f80fd5b506106f160048036038101906106ec9190613a8b565b6114fa565b005b3480156106fe575f80fd5b50610707611658565b6040516107149190613a72565b60405180910390f35b348015610728575f80fd5b50610731611681565b005b34801561073e575f80fd5b5061075960048036038101906107549190613b1e565b6117d7565b005b348015610766575f80fd5b5061076f61188b565b60405161077c9190613829565b60405180910390f35b348015610790575f80fd5b506107ab60048036038101906107a69190613ae0565b61191b565b005b3480156107b8575f80fd5b506107d360048036038101906107ce91906138da565b611a4e565b6040516107e091906137a0565b60405180910390f35b3480156107f4575f80fd5b5061080f600480360381019061080a91906138da565b611b34565b60405161081c91906137a0565b60405180910390f35b348015610830575f80fd5b5061084b60048036038101906108469190613a8b565b611b51565b005b348015610858575f80fd5b50610873600480360381019061086e9190613a8b565b611caf565b60405161088091906137a0565b60405180910390f35b348015610894575f80fd5b5061089d611ccc565b6040516108aa9190613a72565b60405180910390f35b3480156108be575f80fd5b506108d960048036038101906108d49190613ae0565b611ce4565b005b3480156108e6575f80fd5b506108ef611e21565b6040516108fc91906139c6565b60405180910390f35b348015610910575f80fd5b50610919611e27565b60405161092691906139c6565b60405180910390f35b34801561093a575f80fd5b5061095560048036038101906109509190613918565b611e2d565b005b348015610962575f80fd5b5061097d60048036038101906109789190613b49565b611f4f565b60405161098a91906139c6565b60405180910390f35b34801561099e575f80fd5b506109b960048036038101906109b49190613a8b565b611fd1565b6040516109c691906137a0565b60405180910390f35b3480156109da575f80fd5b506109e3611fee565b6040516109f091906139c6565b60405180910390f35b348015610a04575f80fd5b50610a0d611ff4565b604051610a1a91906139c6565b60405180910390f35b348015610a2e575f80fd5b50610a37611ffa565b604051610a4491906137a0565b60405180910390f35b348015610a58575f80fd5b50610a736004803603810190610a6e9190613a8b565b6120b2565b005b348015610a80575f80fd5b50610a89612277565b604051610a9691906139c6565b60405180910390f35b610aa761227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2d90613bd1565b60405180910390fd5b601460019054906101000a900460ff1615610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d90613c39565b60405180910390fd5b6001601460016101000a81548160ff021916908315150217905550436017819055506001601460026101000a81548160ff021916908315150217905550565b601460019054906101000a900460ff1681565b606060038054610be790613c84565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1390613c84565b8015610c5e5780601f10610c3557610100808354040283529160200191610c5e565b820191905f5260205f20905b815481529060010190602001808311610c4157829003601f168201915b5050505050905090565b5f610c7b610c7461227d565b8484612284565b6001905092915050565b5f610c8e61227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1490613bd1565b60405180910390fd5b620186a06001610d2b610f4c565b610d359190613ce1565b610d3f9190613d4f565b821015610d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7890613def565b60405180910390fd5b6127106064610d8e610f4c565b610d989190613ce1565b610da29190613d4f565b821115610de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddb90613e57565b60405180910390fd5b8160128190555060019050919050565b610dfc61227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8290613bd1565b60405180910390fd5b6127106032610e98610f4c565b610ea29190613ce1565b610eac9190613d4f565b811015610eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee590613ebf565b60405180910390fd5b610ef66111b4565b600a610f02919061400c565b81610f0d9190613ce1565b60138190555050565b60145f9054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b60085481565b610f6361227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe990613bd1565b60405180910390fd5b611388811115611000575f80fd5b8060088190555050565b5f61101361227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990613bd1565b60405180910390fd5b5f60145f6101000a81548160ff0219169083151502179055506001905090565b5f6110ce848484612447565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61111561227d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b906140c6565b60405180910390fd5b6111a8856111a061227d565b858403612284565b60019150509392505050565b5f60055f9054906101000a900460ff16905090565b601460029054906101000a900460ff1681565b5f6112796111e861227d565b848460015f6111f561227d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461127491906140e4565b612284565b6001905092915050565b61128b61227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190613bd1565b60405180910390fd5b611388811115611328575f80fd5b8060078190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60165f9054906101000a900460ff1681565b60175481565b600b5481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61141361227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149990613bd1565b60405180910390fd5b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61150261227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890613bd1565b60405180910390fd5b80600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f34688992dbdbed50246ef13536ca4c4c917ee229047c495f089f38f5e873381c60405161164d90614161565b60405180910390a350565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61168961227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f90613bd1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117df61227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590613bd1565b60405180910390fd5b80601460026101000a81548160ff02191690831515021790555050565b60606004805461189a90613c84565b80601f01602080910402602001604051908101604052809291908181526020018280546118c690613c84565b80156119115780601f106118e857610100808354040283529160200191611911565b820191905f5260205f20905b8154815290600101906020018083116118f457829003601f168201915b5050505050905090565b61192361227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990613bd1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a37906141ef565b60405180910390fd5b611a4a8282612fa2565b5050565b5f8060015f611a5b61227d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c9061427d565b60405180910390fd5b611b29611b2061227d565b85858403612284565b600191505092915050565b5f611b47611b4061227d565b8484612447565b6001905092915050565b611b5961227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90613bd1565b60405180910390fd5b8060105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f34688992dbdbed50246ef13536ca4c4c917ee229047c495f089f38f5e873381c604051611ca4906142e5565b60405180910390a350565b600e602052805f5260405f205f915054906101000a900460ff1681565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b611cec61227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7290613bd1565b60405180910390fd5b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167ff815f00beae85223ac9b4080b0a33b5191008f4570249ad14763024977fb7fbc82604051611e1591906137a0565b60405180910390a25050565b60115481565b60075481565b611e3561227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb90613bd1565b60405180910390fd5b612710600a611ed1610f4c565b611edb9190613ce1565b611ee59190613d4f565b811015611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e9061434d565b60405180910390fd5b611f2f6111b4565b600a611f3b919061400c565b81611f469190613ce1565b60118190555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60125481565b5f61200361227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208990613bd1565b60405180910390fd5b5f60165f6101000a81548160ff0219169083151502179055506001905090565b6120ba61227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214090613bd1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ae906143db565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e990614469565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612357906144f7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161243a91906139c6565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac90614585565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251a90614613565b60405180910390fd5b5f810361253a5761253583835f613040565b612f9d565b60145f9054906101000a900460ff1615612be157612556611658565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125c45750612594611658565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125fc57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612636575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561264f5750600660149054906101000a900460ff16155b15612be057601460019054906101000a900460ff1661274357600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127035750600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612742576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127399061467b565b60405180910390fd5b5b60165f9054906101000a900460ff16156129065761275f611658565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127e657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561283e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612905574360155f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b99061472f565b60405180910390fd5b4360155f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129a35750600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a4a576011548111156129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e4906147bd565b60405180910390fd5b6013546129f9836113c6565b82612a0491906140e4565b1115612a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3c90614825565b60405180910390fd5b612bdf565b600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ae75750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b3657601154811115612b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b28906148b3565b60405180910390fd5b612bde565b600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612bdd57601354612b90836113c6565b82612b9b91906140e4565b1115612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd390614825565b60405180910390fd5b5b5b5b5b5b5f612beb306113c6565b90505f6012548210159050808015612c0f5750601460029054906101000a900460ff165b8015612c285750600660149054906101000a900460ff16155b8015612c7b5750600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612cce5750600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d215750600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d305750600a54600b54115b15612d7f576001600660146101000a81548160ff021916908315150217905550612d64612d5f836009546132b5565b6132cd565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff16159050600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e2e5750600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612e37575f90505b5f8115612f8d57600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e9557505f600854115b15612eca57612ec3612710612eb56008548861342890919063ffffffff16565b61349f90919063ffffffff16565b9050612f6a565b600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f2157505f600754115b15612f6957612f4f612710612f416007548861342890919063ffffffff16565b61349f90919063ffffffff16565b9050600b5f815480929190612f63906148d1565b91905055505b5b5f811115612f7e57612f7d873083613040565b5b8085612f8a9190614918565b94505b612f98878787613040565b505050505b505050565b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f9a05f836a81b64d2d3ee62b752e87947ab26a9fdcd5b2572b1744ae8499b3aac60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a590614585565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361311c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311390614613565b60405180910390fd5b6131278383836134e8565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156131aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a1906149bb565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461323891906140e4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161329c91906139c6565b60405180910390a36132af8484846134ed565b50505050565b5f8183116132c357826132c5565b815b905092915050565b5f8082036132db5750613425565b5f8290506132e8816134f2565b5f4790505f6002826132fa9190613d4f565b90505f81836133099190614918565b905060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161335090614a06565b5f6040518083038185875af1925050503d805f811461338a576040519150601f19603f3d011682016040523d82523d5f602084013e61338f565b606091505b505080955050600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516133da90614a06565b5f6040518083038185875af1925050503d805f8114613414576040519150601f19603f3d011682016040523d82523d5f602084013e613419565b606091505b50508095505050505050505b50565b5f808303613438575f9050613499565b5f82846134459190613ce1565b90508284826134549190613d4f565b14613494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348b90614a8a565b60405180910390fd5b809150505b92915050565b5f6134e083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613725565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561350e5761350d614aa8565b5b60405190808252806020026020018201604052801561353c5781602001602082028036833780820191505090505b50905030815f8151811061355357613552614ad5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061361a9190614b16565b8160018151811061362e5761362d614ad5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613693307f000000000000000000000000000000000000000000000000000000000000000084612284565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016136f4959493929190614c31565b5f604051808303815f87803b15801561370b575f80fd5b505af115801561371d573d5f803e3d5ffd5b505050505050565b5f808311829061376b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137629190613829565b60405180910390fd5b505f83856137799190613d4f565b9050809150509392505050565b5f8115159050919050565b61379a81613786565b82525050565b5f6020820190506137b35f830184613791565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6137fb826137b9565b61380581856137c3565b93506138158185602086016137d3565b61381e816137e1565b840191505092915050565b5f6020820190508181035f83015261384181846137f1565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6138768261384d565b9050919050565b6138868161386c565b8114613890575f80fd5b50565b5f813590506138a18161387d565b92915050565b5f819050919050565b6138b9816138a7565b81146138c3575f80fd5b50565b5f813590506138d4816138b0565b92915050565b5f80604083850312156138f0576138ef613849565b5b5f6138fd85828601613893565b925050602061390e858286016138c6565b9150509250929050565b5f6020828403121561392d5761392c613849565b5b5f61393a848285016138c6565b91505092915050565b5f819050919050565b5f61396661396161395c8461384d565b613943565b61384d565b9050919050565b5f6139778261394c565b9050919050565b5f6139888261396d565b9050919050565b6139988161397e565b82525050565b5f6020820190506139b15f83018461398f565b92915050565b6139c0816138a7565b82525050565b5f6020820190506139d95f8301846139b7565b92915050565b5f805f606084860312156139f6576139f5613849565b5b5f613a0386828701613893565b9350506020613a1486828701613893565b9250506040613a25868287016138c6565b9150509250925092565b5f60ff82169050919050565b613a4481613a2f565b82525050565b5f602082019050613a5d5f830184613a3b565b92915050565b613a6c8161386c565b82525050565b5f602082019050613a855f830184613a63565b92915050565b5f60208284031215613aa057613a9f613849565b5b5f613aad84828501613893565b91505092915050565b613abf81613786565b8114613ac9575f80fd5b50565b5f81359050613ada81613ab6565b92915050565b5f8060408385031215613af657613af5613849565b5b5f613b0385828601613893565b9250506020613b1485828601613acc565b9150509250929050565b5f60208284031215613b3357613b32613849565b5b5f613b4084828501613acc565b91505092915050565b5f8060408385031215613b5f57613b5e613849565b5b5f613b6c85828601613893565b9250506020613b7d85828601613893565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613bbb6020836137c3565b9150613bc682613b87565b602082019050919050565b5f6020820190508181035f830152613be881613baf565b9050919050565b7f546f6b656e206c61756e636865640000000000000000000000000000000000005f82015250565b5f613c23600e836137c3565b9150613c2e82613bef565b602082019050919050565b5f6020820190508181035f830152613c5081613c17565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c9b57607f821691505b602082108103613cae57613cad613c57565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ceb826138a7565b9150613cf6836138a7565b9250828202613d04816138a7565b91508282048414831517613d1b57613d1a613cb4565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d59826138a7565b9150613d64836138a7565b925082613d7457613d73613d22565b5b828204905092915050565b7f5377617020616d6f756e74203c20302e3030312520746f74616c20737570706c5f8201527f792e000000000000000000000000000000000000000000000000000000000000602082015250565b5f613dd96022836137c3565b9150613de482613d7f565b604082019050919050565b5f6020820190508181035f830152613e0681613dcd565b9050919050565b7f5377617020616d6f756e74203e20312520746f74616c20737570706c792e00005f82015250565b5f613e41601e836137c3565b9150613e4c82613e0d565b602082019050919050565b5f6020820190508181035f830152613e6e81613e35565b9050919050565b7f6d617857616c6c6574203c20302e3525000000000000000000000000000000005f82015250565b5f613ea96010836137c3565b9150613eb482613e75565b602082019050919050565b5f6020820190508181035f830152613ed681613e9d565b9050919050565b5f8160011c9050919050565b5f808291508390505b6001851115613f3257808604811115613f0e57613f0d613cb4565b5b6001851615613f1d5780820291505b8081029050613f2b85613edd565b9450613ef2565b94509492505050565b5f82613f4a5760019050614005565b81613f57575f9050614005565b8160018114613f6d5760028114613f7757613fa6565b6001915050614005565b60ff841115613f8957613f88613cb4565b5b8360020a915084821115613fa057613f9f613cb4565b5b50614005565b5060208310610133831016604e8410600b8410161715613fdb5782820a905083811115613fd657613fd5613cb4565b5b614005565b613fe88484846001613ee9565b92509050818404811115613fff57613ffe613cb4565b5b81810290505b9392505050565b5f614016826138a7565b915061402183613a2f565b925061404e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613f3b565b905092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6140b06028836137c3565b91506140bb82614056565b604082019050919050565b5f6020820190508181035f8301526140dd816140a4565b9050919050565b5f6140ee826138a7565b91506140f9836138a7565b925082820190508082111561411157614110613cb4565b5b92915050565b7f5445414d000000000000000000000000000000000000000000000000000000005f82015250565b5f61414b6004836137c3565b915061415682614117565b602082019050919050565b5f6020820190508181035f8301526141788161413f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6141d96039836137c3565b91506141e48261417f565b604082019050919050565b5f6020820190508181035f830152614206816141cd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6142676025836137c3565b91506142728261420d565b604082019050919050565b5f6020820190508181035f8301526142948161425b565b9050919050565b7f4d4b5400000000000000000000000000000000000000000000000000000000005f82015250565b5f6142cf6003836137c3565b91506142da8261429b565b602082019050919050565b5f6020820190508181035f8301526142fc816142c3565b9050919050565b7f6d61785472616e73616374696f6e203c20302e312500000000000000000000005f82015250565b5f6143376015836137c3565b915061434282614303565b602082019050919050565b5f6020820190508181035f8301526143648161432b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6143c56026836137c3565b91506143d08261436b565b604082019050919050565b5f6020820190508181035f8301526143f2816143b9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6144536024836137c3565b915061445e826143f9565b604082019050919050565b5f6020820190508181035f83015261448081614447565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144e16022836137c3565b91506144ec82614487565b604082019050919050565b5f6020820190508181035f83015261450e816144d5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61456f6025836137c3565b915061457a82614515565b604082019050919050565b5f6020820190508181035f83015261459c81614563565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6145fd6023836137c3565b9150614608826145a3565b604082019050919050565b5f6020820190508181035f83015261462a816145f1565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6146656016836137c3565b915061467082614631565b602082019050919050565b5f6020820190508181035f83015261469281614659565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f6147196049836137c3565b915061472482614699565b606082019050919050565b5f6020820190508181035f8301526147468161470d565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b5f6147a7602f836137c3565b91506147b28261474d565b604082019050919050565b5f6020820190508181035f8301526147d48161479b565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61480f6013836137c3565b915061481a826147db565b602082019050919050565b5f6020820190508181035f83015261483c81614803565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b5f61489d6030836137c3565b91506148a882614843565b604082019050919050565b5f6020820190508181035f8301526148ca81614891565b9050919050565b5f6148db826138a7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361490d5761490c613cb4565b5b600182019050919050565b5f614922826138a7565b915061492d836138a7565b925082820390508181111561494557614944613cb4565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149a56026836137c3565b91506149b08261494b565b604082019050919050565b5f6020820190508181035f8301526149d281614999565b9050919050565b5f81905092915050565b50565b5f6149f15f836149d9565b91506149fc826149e3565b5f82019050919050565b5f614a10826149e6565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a746021836137c3565b9150614a7f82614a1a565b604082019050919050565b5f6020820190508181035f830152614aa181614a68565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614b108161387d565b92915050565b5f60208284031215614b2b57614b2a613849565b5b5f614b3884828501614b02565b91505092915050565b5f819050919050565b5f614b64614b5f614b5a84614b41565b613943565b6138a7565b9050919050565b614b7481614b4a565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614bac8161386c565b82525050565b5f614bbd8383614ba3565b60208301905092915050565b5f602082019050919050565b5f614bdf82614b7a565b614be98185614b84565b9350614bf483614b94565b805f5b83811015614c24578151614c0b8882614bb2565b9750614c1683614bc9565b925050600181019050614bf7565b5085935050505092915050565b5f60a082019050614c445f8301886139b7565b614c516020830187614b6b565b8181036040830152614c638186614bd5565b9050614c726060830185613a63565b614c7f60808301846139b7565b969550505050505056fea26469706673582212208fc27c4472a3c5c1c5d4d7159c102c99e0f8292233d4b723aaf63ba5a27b60fc64736f6c63430008190033

Deployed Bytecode

0x608060405260043610610280575f3560e01c80637571336a1161014e578063b94a6dfe116100c0578063e1bc339411610079578063e1bc339414610993578063e28a9394146109cf578063e2f45605146109f9578063e884f26014610a23578063f2fde38b14610a4d578063f8b45b0514610a7557610287565b8063b94a6dfe14610889578063c0246668146108b3578063c8c8ebe4146108db578063cbd8dc0a14610905578063cd73ab021461092f578063dd62ed3e1461095757610287565b806395d89b411161011257806395d89b411461075b5780639a7a23d614610785578063a457c2d7146107ad578063a9059cbb146107e9578063aacebbe314610825578063b62496f51461084d57610287565b80637571336a146106a35780637cb332bb146106cb5780638da5cb5b146106f3578063914eb66a1461071d578063924de9b71461073357610287565b8063232050f9116101f257806349bd5a5e116101ab57806349bd5a5e146105835780634fbee193146105ad57806351a783cd146105e957806363ee4d1c146106135780636c7f3f171461063d57806370a082311461066757610287565b8063232050f91461046557806323b872dd1461048f578063313ce567146104cb578063351a964d146104f5578063395093511461051f578063467abe0a1461055b57610287565b80630b006d60116102445780630b006d601461036d5780630b44190e146103955780631694505e146103bf57806318160ddd146103e95780631891201e146104135780631d933a4a1461043d57610287565b806301339c211461028b578063064a59d0146102a157806306fdde03146102cb578063095ea7b3146102f557806309d6bf0a1461033157610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610a9f565b005b3480156102ac575f80fd5b506102b5610bc5565b6040516102c291906137a0565b60405180910390f35b3480156102d6575f80fd5b506102df610bd8565b6040516102ec9190613829565b60405180910390f35b348015610300575f80fd5b5061031b600480360381019061031691906138da565b610c68565b60405161032891906137a0565b60405180910390f35b34801561033c575f80fd5b5061035760048036038101906103529190613918565b610c85565b60405161036491906137a0565b60405180910390f35b348015610378575f80fd5b50610393600480360381019061038e9190613918565b610df4565b005b3480156103a0575f80fd5b506103a9610f16565b6040516103b691906137a0565b60405180910390f35b3480156103ca575f80fd5b506103d3610f28565b6040516103e0919061399e565b60405180910390f35b3480156103f4575f80fd5b506103fd610f4c565b60405161040a91906139c6565b60405180910390f35b34801561041e575f80fd5b50610427610f55565b60405161043491906139c6565b60405180910390f35b348015610448575f80fd5b50610463600480360381019061045e9190613918565b610f5b565b005b348015610470575f80fd5b5061047961100a565b60405161048691906137a0565b60405180910390f35b34801561049a575f80fd5b506104b560048036038101906104b091906139df565b6110c2565b6040516104c291906137a0565b60405180910390f35b3480156104d6575f80fd5b506104df6111b4565b6040516104ec9190613a4a565b60405180910390f35b348015610500575f80fd5b506105096111c9565b60405161051691906137a0565b60405180910390f35b34801561052a575f80fd5b50610545600480360381019061054091906138da565b6111dc565b60405161055291906137a0565b60405180910390f35b348015610566575f80fd5b50610581600480360381019061057c9190613918565b611283565b005b34801561058e575f80fd5b50610597611332565b6040516105a49190613a72565b60405180910390f35b3480156105b8575f80fd5b506105d360048036038101906105ce9190613a8b565b611356565b6040516105e091906137a0565b60405180910390f35b3480156105f4575f80fd5b506105fd6113a8565b60405161060a91906137a0565b60405180910390f35b34801561061e575f80fd5b506106276113ba565b60405161063491906139c6565b60405180910390f35b348015610648575f80fd5b506106516113c0565b60405161065e91906139c6565b60405180910390f35b348015610672575f80fd5b5061068d60048036038101906106889190613a8b565b6113c6565b60405161069a91906139c6565b60405180910390f35b3480156106ae575f80fd5b506106c960048036038101906106c49190613ae0565b61140b565b005b3480156106d6575f80fd5b506106f160048036038101906106ec9190613a8b565b6114fa565b005b3480156106fe575f80fd5b50610707611658565b6040516107149190613a72565b60405180910390f35b348015610728575f80fd5b50610731611681565b005b34801561073e575f80fd5b5061075960048036038101906107549190613b1e565b6117d7565b005b348015610766575f80fd5b5061076f61188b565b60405161077c9190613829565b60405180910390f35b348015610790575f80fd5b506107ab60048036038101906107a69190613ae0565b61191b565b005b3480156107b8575f80fd5b506107d360048036038101906107ce91906138da565b611a4e565b6040516107e091906137a0565b60405180910390f35b3480156107f4575f80fd5b5061080f600480360381019061080a91906138da565b611b34565b60405161081c91906137a0565b60405180910390f35b348015610830575f80fd5b5061084b60048036038101906108469190613a8b565b611b51565b005b348015610858575f80fd5b50610873600480360381019061086e9190613a8b565b611caf565b60405161088091906137a0565b60405180910390f35b348015610894575f80fd5b5061089d611ccc565b6040516108aa9190613a72565b60405180910390f35b3480156108be575f80fd5b506108d960048036038101906108d49190613ae0565b611ce4565b005b3480156108e6575f80fd5b506108ef611e21565b6040516108fc91906139c6565b60405180910390f35b348015610910575f80fd5b50610919611e27565b60405161092691906139c6565b60405180910390f35b34801561093a575f80fd5b5061095560048036038101906109509190613918565b611e2d565b005b348015610962575f80fd5b5061097d60048036038101906109789190613b49565b611f4f565b60405161098a91906139c6565b60405180910390f35b34801561099e575f80fd5b506109b960048036038101906109b49190613a8b565b611fd1565b6040516109c691906137a0565b60405180910390f35b3480156109da575f80fd5b506109e3611fee565b6040516109f091906139c6565b60405180910390f35b348015610a04575f80fd5b50610a0d611ff4565b604051610a1a91906139c6565b60405180910390f35b348015610a2e575f80fd5b50610a37611ffa565b604051610a4491906137a0565b60405180910390f35b348015610a58575f80fd5b50610a736004803603810190610a6e9190613a8b565b6120b2565b005b348015610a80575f80fd5b50610a89612277565b604051610a9691906139c6565b60405180910390f35b610aa761227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2d90613bd1565b60405180910390fd5b601460019054906101000a900460ff1615610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d90613c39565b60405180910390fd5b6001601460016101000a81548160ff021916908315150217905550436017819055506001601460026101000a81548160ff021916908315150217905550565b601460019054906101000a900460ff1681565b606060038054610be790613c84565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1390613c84565b8015610c5e5780601f10610c3557610100808354040283529160200191610c5e565b820191905f5260205f20905b815481529060010190602001808311610c4157829003601f168201915b5050505050905090565b5f610c7b610c7461227d565b8484612284565b6001905092915050565b5f610c8e61227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1490613bd1565b60405180910390fd5b620186a06001610d2b610f4c565b610d359190613ce1565b610d3f9190613d4f565b821015610d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7890613def565b60405180910390fd5b6127106064610d8e610f4c565b610d989190613ce1565b610da29190613d4f565b821115610de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddb90613e57565b60405180910390fd5b8160128190555060019050919050565b610dfc61227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8290613bd1565b60405180910390fd5b6127106032610e98610f4c565b610ea29190613ce1565b610eac9190613d4f565b811015610eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee590613ebf565b60405180910390fd5b610ef66111b4565b600a610f02919061400c565b81610f0d9190613ce1565b60138190555050565b60145f9054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60085481565b610f6361227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe990613bd1565b60405180910390fd5b611388811115611000575f80fd5b8060088190555050565b5f61101361227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990613bd1565b60405180910390fd5b5f60145f6101000a81548160ff0219169083151502179055506001905090565b5f6110ce848484612447565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61111561227d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b906140c6565b60405180910390fd5b6111a8856111a061227d565b858403612284565b60019150509392505050565b5f60055f9054906101000a900460ff16905090565b601460029054906101000a900460ff1681565b5f6112796111e861227d565b848460015f6111f561227d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461127491906140e4565b612284565b6001905092915050565b61128b61227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190613bd1565b60405180910390fd5b611388811115611328575f80fd5b8060078190555050565b7f0000000000000000000000004a558c632f3f2a518624b0c60580bc42d1094f3481565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60165f9054906101000a900460ff1681565b60175481565b600b5481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61141361227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149990613bd1565b60405180910390fd5b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61150261227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890613bd1565b60405180910390fd5b80600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f34688992dbdbed50246ef13536ca4c4c917ee229047c495f089f38f5e873381c60405161164d90614161565b60405180910390a350565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61168961227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f90613bd1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117df61227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590613bd1565b60405180910390fd5b80601460026101000a81548160ff02191690831515021790555050565b60606004805461189a90613c84565b80601f01602080910402602001604051908101604052809291908181526020018280546118c690613c84565b80156119115780601f106118e857610100808354040283529160200191611911565b820191905f5260205f20905b8154815290600101906020018083116118f457829003601f168201915b5050505050905090565b61192361227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990613bd1565b60405180910390fd5b7f0000000000000000000000004a558c632f3f2a518624b0c60580bc42d1094f3473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a37906141ef565b60405180910390fd5b611a4a8282612fa2565b5050565b5f8060015f611a5b61227d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c9061427d565b60405180910390fd5b611b29611b2061227d565b85858403612284565b600191505092915050565b5f611b47611b4061227d565b8484612447565b6001905092915050565b611b5961227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90613bd1565b60405180910390fd5b8060105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f34688992dbdbed50246ef13536ca4c4c917ee229047c495f089f38f5e873381c604051611ca4906142e5565b60405180910390a350565b600e602052805f5260405f205f915054906101000a900460ff1681565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b611cec61227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7290613bd1565b60405180910390fd5b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167ff815f00beae85223ac9b4080b0a33b5191008f4570249ad14763024977fb7fbc82604051611e1591906137a0565b60405180910390a25050565b60115481565b60075481565b611e3561227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb90613bd1565b60405180910390fd5b612710600a611ed1610f4c565b611edb9190613ce1565b611ee59190613d4f565b811015611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e9061434d565b60405180910390fd5b611f2f6111b4565b600a611f3b919061400c565b81611f469190613ce1565b60118190555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60125481565b5f61200361227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208990613bd1565b60405180910390fd5b5f60165f6101000a81548160ff0219169083151502179055506001905090565b6120ba61227d565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214090613bd1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ae906143db565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e990614469565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612357906144f7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161243a91906139c6565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac90614585565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251a90614613565b60405180910390fd5b5f810361253a5761253583835f613040565b612f9d565b60145f9054906101000a900460ff1615612be157612556611658565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125c45750612594611658565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125fc57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612636575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561264f5750600660149054906101000a900460ff16155b15612be057601460019054906101000a900460ff1661274357600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127035750600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612742576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127399061467b565b60405180910390fd5b5b60165f9054906101000a900460ff16156129065761275f611658565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127e657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561283e57507f0000000000000000000000004a558c632f3f2a518624b0c60580bc42d1094f3473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612905574360155f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054106128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b99061472f565b60405180910390fd5b4360155f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129a35750600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a4a576011548111156129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e4906147bd565b60405180910390fd5b6013546129f9836113c6565b82612a0491906140e4565b1115612a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3c90614825565b60405180910390fd5b612bdf565b600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ae75750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612b3657601154811115612b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b28906148b3565b60405180910390fd5b612bde565b600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612bdd57601354612b90836113c6565b82612b9b91906140e4565b1115612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd390614825565b60405180910390fd5b5b5b5b5b5b5f612beb306113c6565b90505f6012548210159050808015612c0f5750601460029054906101000a900460ff165b8015612c285750600660149054906101000a900460ff16155b8015612c7b5750600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612cce5750600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d215750600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612d305750600a54600b54115b15612d7f576001600660146101000a81548160ff021916908315150217905550612d64612d5f836009546132b5565b6132cd565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff16159050600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e2e5750600c5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612e37575f90505b5f8115612f8d57600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e9557505f600854115b15612eca57612ec3612710612eb56008548861342890919063ffffffff16565b61349f90919063ffffffff16565b9050612f6a565b600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f2157505f600754115b15612f6957612f4f612710612f416007548861342890919063ffffffff16565b61349f90919063ffffffff16565b9050600b5f815480929190612f63906148d1565b91905055505b5b5f811115612f7e57612f7d873083613040565b5b8085612f8a9190614918565b94505b612f98878787613040565b505050505b505050565b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f9a05f836a81b64d2d3ee62b752e87947ab26a9fdcd5b2572b1744ae8499b3aac60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a590614585565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361311c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311390614613565b60405180910390fd5b6131278383836134e8565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156131aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a1906149bb565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461323891906140e4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161329c91906139c6565b60405180910390a36132af8484846134ed565b50505050565b5f8183116132c357826132c5565b815b905092915050565b5f8082036132db5750613425565b5f8290506132e8816134f2565b5f4790505f6002826132fa9190613d4f565b90505f81836133099190614918565b905060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161335090614a06565b5f6040518083038185875af1925050503d805f811461338a576040519150601f19603f3d011682016040523d82523d5f602084013e61338f565b606091505b505080955050600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516133da90614a06565b5f6040518083038185875af1925050503d805f8114613414576040519150601f19603f3d011682016040523d82523d5f602084013e613419565b606091505b50508095505050505050505b50565b5f808303613438575f9050613499565b5f82846134459190613ce1565b90508284826134549190613d4f565b14613494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348b90614a8a565b60405180910390fd5b809150505b92915050565b5f6134e083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613725565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561350e5761350d614aa8565b5b60405190808252806020026020018201604052801561353c5781602001602082028036833780820191505090505b50905030815f8151811061355357613552614ad5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061361a9190614b16565b8160018151811061362e5761362d614ad5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613693307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612284565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016136f4959493929190614c31565b5f604051808303815f87803b15801561370b575f80fd5b505af115801561371d573d5f803e3d5ffd5b505050505050565b5f808311829061376b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137629190613829565b60405180910390fd5b505f83856137799190613d4f565b9050809150509392505050565b5f8115159050919050565b61379a81613786565b82525050565b5f6020820190506137b35f830184613791565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6137fb826137b9565b61380581856137c3565b93506138158185602086016137d3565b61381e816137e1565b840191505092915050565b5f6020820190508181035f83015261384181846137f1565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6138768261384d565b9050919050565b6138868161386c565b8114613890575f80fd5b50565b5f813590506138a18161387d565b92915050565b5f819050919050565b6138b9816138a7565b81146138c3575f80fd5b50565b5f813590506138d4816138b0565b92915050565b5f80604083850312156138f0576138ef613849565b5b5f6138fd85828601613893565b925050602061390e858286016138c6565b9150509250929050565b5f6020828403121561392d5761392c613849565b5b5f61393a848285016138c6565b91505092915050565b5f819050919050565b5f61396661396161395c8461384d565b613943565b61384d565b9050919050565b5f6139778261394c565b9050919050565b5f6139888261396d565b9050919050565b6139988161397e565b82525050565b5f6020820190506139b15f83018461398f565b92915050565b6139c0816138a7565b82525050565b5f6020820190506139d95f8301846139b7565b92915050565b5f805f606084860312156139f6576139f5613849565b5b5f613a0386828701613893565b9350506020613a1486828701613893565b9250506040613a25868287016138c6565b9150509250925092565b5f60ff82169050919050565b613a4481613a2f565b82525050565b5f602082019050613a5d5f830184613a3b565b92915050565b613a6c8161386c565b82525050565b5f602082019050613a855f830184613a63565b92915050565b5f60208284031215613aa057613a9f613849565b5b5f613aad84828501613893565b91505092915050565b613abf81613786565b8114613ac9575f80fd5b50565b5f81359050613ada81613ab6565b92915050565b5f8060408385031215613af657613af5613849565b5b5f613b0385828601613893565b9250506020613b1485828601613acc565b9150509250929050565b5f60208284031215613b3357613b32613849565b5b5f613b4084828501613acc565b91505092915050565b5f8060408385031215613b5f57613b5e613849565b5b5f613b6c85828601613893565b9250506020613b7d85828601613893565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613bbb6020836137c3565b9150613bc682613b87565b602082019050919050565b5f6020820190508181035f830152613be881613baf565b9050919050565b7f546f6b656e206c61756e636865640000000000000000000000000000000000005f82015250565b5f613c23600e836137c3565b9150613c2e82613bef565b602082019050919050565b5f6020820190508181035f830152613c5081613c17565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c9b57607f821691505b602082108103613cae57613cad613c57565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613ceb826138a7565b9150613cf6836138a7565b9250828202613d04816138a7565b91508282048414831517613d1b57613d1a613cb4565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d59826138a7565b9150613d64836138a7565b925082613d7457613d73613d22565b5b828204905092915050565b7f5377617020616d6f756e74203c20302e3030312520746f74616c20737570706c5f8201527f792e000000000000000000000000000000000000000000000000000000000000602082015250565b5f613dd96022836137c3565b9150613de482613d7f565b604082019050919050565b5f6020820190508181035f830152613e0681613dcd565b9050919050565b7f5377617020616d6f756e74203e20312520746f74616c20737570706c792e00005f82015250565b5f613e41601e836137c3565b9150613e4c82613e0d565b602082019050919050565b5f6020820190508181035f830152613e6e81613e35565b9050919050565b7f6d617857616c6c6574203c20302e3525000000000000000000000000000000005f82015250565b5f613ea96010836137c3565b9150613eb482613e75565b602082019050919050565b5f6020820190508181035f830152613ed681613e9d565b9050919050565b5f8160011c9050919050565b5f808291508390505b6001851115613f3257808604811115613f0e57613f0d613cb4565b5b6001851615613f1d5780820291505b8081029050613f2b85613edd565b9450613ef2565b94509492505050565b5f82613f4a5760019050614005565b81613f57575f9050614005565b8160018114613f6d5760028114613f7757613fa6565b6001915050614005565b60ff841115613f8957613f88613cb4565b5b8360020a915084821115613fa057613f9f613cb4565b5b50614005565b5060208310610133831016604e8410600b8410161715613fdb5782820a905083811115613fd657613fd5613cb4565b5b614005565b613fe88484846001613ee9565b92509050818404811115613fff57613ffe613cb4565b5b81810290505b9392505050565b5f614016826138a7565b915061402183613a2f565b925061404e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613f3b565b905092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6140b06028836137c3565b91506140bb82614056565b604082019050919050565b5f6020820190508181035f8301526140dd816140a4565b9050919050565b5f6140ee826138a7565b91506140f9836138a7565b925082820190508082111561411157614110613cb4565b5b92915050565b7f5445414d000000000000000000000000000000000000000000000000000000005f82015250565b5f61414b6004836137c3565b915061415682614117565b602082019050919050565b5f6020820190508181035f8301526141788161413f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6141d96039836137c3565b91506141e48261417f565b604082019050919050565b5f6020820190508181035f830152614206816141cd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6142676025836137c3565b91506142728261420d565b604082019050919050565b5f6020820190508181035f8301526142948161425b565b9050919050565b7f4d4b5400000000000000000000000000000000000000000000000000000000005f82015250565b5f6142cf6003836137c3565b91506142da8261429b565b602082019050919050565b5f6020820190508181035f8301526142fc816142c3565b9050919050565b7f6d61785472616e73616374696f6e203c20302e312500000000000000000000005f82015250565b5f6143376015836137c3565b915061434282614303565b602082019050919050565b5f6020820190508181035f8301526143648161432b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6143c56026836137c3565b91506143d08261436b565b604082019050919050565b5f6020820190508181035f8301526143f2816143b9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6144536024836137c3565b915061445e826143f9565b604082019050919050565b5f6020820190508181035f83015261448081614447565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144e16022836137c3565b91506144ec82614487565b604082019050919050565b5f6020820190508181035f83015261450e816144d5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61456f6025836137c3565b915061457a82614515565b604082019050919050565b5f6020820190508181035f83015261459c81614563565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6145fd6023836137c3565b9150614608826145a3565b604082019050919050565b5f6020820190508181035f83015261462a816145f1565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6146656016836137c3565b915061467082614631565b602082019050919050565b5f6020820190508181035f83015261469281614659565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f6147196049836137c3565b915061472482614699565b606082019050919050565b5f6020820190508181035f8301526147468161470d565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b5f6147a7602f836137c3565b91506147b28261474d565b604082019050919050565b5f6020820190508181035f8301526147d48161479b565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61480f6013836137c3565b915061481a826147db565b602082019050919050565b5f6020820190508181035f83015261483c81614803565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b5f61489d6030836137c3565b91506148a882614843565b604082019050919050565b5f6020820190508181035f8301526148ca81614891565b9050919050565b5f6148db826138a7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361490d5761490c613cb4565b5b600182019050919050565b5f614922826138a7565b915061492d836138a7565b925082820390508181111561494557614944613cb4565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149a56026836137c3565b91506149b08261494b565b604082019050919050565b5f6020820190508181035f8301526149d281614999565b9050919050565b5f81905092915050565b50565b5f6149f15f836149d9565b91506149fc826149e3565b5f82019050919050565b5f614a10826149e6565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a746021836137c3565b9150614a7f82614a1a565b604082019050919050565b5f6020820190508181035f830152614aa181614a68565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614b108161387d565b92915050565b5f60208284031215614b2b57614b2a613849565b5b5f614b3884828501614b02565b91505092915050565b5f819050919050565b5f614b64614b5f614b5a84614b41565b613943565b6138a7565b9050919050565b614b7481614b4a565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614bac8161386c565b82525050565b5f614bbd8383614ba3565b60208301905092915050565b5f602082019050919050565b5f614bdf82614b7a565b614be98185614b84565b9350614bf483614b94565b805f5b83811015614c24578151614c0b8882614bb2565b9750614c1683614bc9565b925050600181019050614bf7565b5085935050505092915050565b5f60a082019050614c445f8301886139b7565b614c516020830187614b6b565b8181036040830152614c638186614bd5565b9050614c726060830185613a63565b614c7f60808301846139b7565b969550505050505056fea26469706673582212208fc27c4472a3c5c1c5d4d7159c102c99e0f8292233d4b723aaf63ba5a27b60fc64736f6c63430008190033

Deployed Bytecode Sourcemap

22493:11422:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25351:204;;;;;;;;;;;;;:::i;:::-;;23690:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2433:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3495:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32446:457;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33180:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23649:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22852:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2761:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23117:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33770:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25563:119;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3713:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2653:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23733:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4250:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33630:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22910:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27103:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23842:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23889:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23237;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2877:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25887:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26930:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12641:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12855:145;;;;;;;;;;;;;:::i;:::-;;33516:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2541:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26250:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4555:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3062:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26743:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23397:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22955:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26056:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23534:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23086:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32911:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3286:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23333:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23193:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23576:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25743:136;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13008:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23616:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25351:204;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25408:16:::1;;;;;;;;;;;25407:17;25399:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;25473:4;25454:16;;:23;;;;;;;;;;;;;;;;;;25504:12;25488:13;:28;;;;25543:4;25527:13;;:20;;;;;;;;;;;;;;;;;;25351:204::o:0;23690:36::-;;;;;;;;;;;;;:::o;2433:100::-;2487:13;2520:5;2513:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2433:100;:::o;3495:210::-;3614:4;3636:39;3645:12;:10;:12::i;:::-;3659:7;3668:6;3636:8;:39::i;:::-;3693:4;3686:11;;3495:210;;;;:::o;32446:457::-;32553:4;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32631:7:::1;32626:1;32610:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32609:29;;;;:::i;:::-;32597:8;:41;;32575:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;32769:6;32762:3;32746:13;:11;:13::i;:::-;:19;;;;:::i;:::-;32745:30;;;;:::i;:::-;32733:8;:42;;32711:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;32865:8;32844:18;:29;;;;32891:4;32884:11;;32446:457:::0;;;:::o;33180:240::-;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33311:6:::1;33305:2;33289:13;:11;:13::i;:::-;:18;;;;:::i;:::-;33288:29;;;;:::i;:::-;33275:8;:43;;33253:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;33401:10;:8;:10::i;:::-;33397:2;:14;;;;:::i;:::-;33385:8;:27;;;;:::i;:::-;33373:9;:39;;;;33180:240:::0;:::o;23649:34::-;;;;;;;;;;;;;:::o;22852:51::-;;;:::o;2761:108::-;2822:7;2849:12;;2842:19;;2761:108;:::o;23117:25::-;;;;:::o;33770:134::-;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33859:5:::1;33848:7;:16;;33840:25;;;::::0;::::1;;33889:7;33876:10;:20;;;;33770:134:::0;:::o;25563:119::-;25612:4;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25647:5:::1;25629:15;;:23;;;;;;;;;;;;;;;;;;25670:4;25663:11;;25563:119:::0;:::o;3713:529::-;3853:4;3870:36;3880:6;3888:9;3899:6;3870:9;:36::i;:::-;3919:24;3946:11;:19;3958:6;3946:19;;;;;;;;;;;;;;;:33;3966:12;:10;:12::i;:::-;3946:33;;;;;;;;;;;;;;;;3919:60;;4032:6;4012:16;:26;;3990:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;4142:57;4151:6;4159:12;:10;:12::i;:::-;4192:6;4173:16;:25;4142:8;:57::i;:::-;4230:4;4223:11;;;3713:529;;;;;:::o;2653:100::-;2711:5;2736:9;;;;;;;;;;;2729:16;;2653:100;:::o;23733:33::-;;;;;;;;;;;;;:::o;4250:297::-;4365:4;4387:130;4410:12;:10;:12::i;:::-;4437:7;4496:10;4459:11;:25;4471:12;:10;:12::i;:::-;4459:25;;;;;;;;;;;;;;;:34;4485:7;4459:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4387:8;:130::i;:::-;4535:4;4528:11;;4250:297;;;;:::o;33630:132::-;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33718:5:::1;33707:7;:16;;33699:25;;;::::0;::::1;;33747:7;33735:9;:19;;;;33630:132:::0;:::o;22910:38::-;;;:::o;27103:126::-;27169:4;27193:19;:28;27213:7;27193:28;;;;;;;;;;;;;;;;;;;;;;;;;27186:35;;27103:126;;;:::o;23842:40::-;;;;;;;;;;;;;:::o;23889:28::-;;;;:::o;23237:::-;;;;:::o;2877:177::-;2996:7;3028:9;:18;3038:7;3028:18;;;;;;;;;;;;;;;;3021:25;;2877:177;;;:::o;25887:161::-;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26036:4:::1;26000:25;:33;26026:6;26000:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;25887:161:::0;;:::o;26930:165::-;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27018:9:::1;27005:10;;:22;;;;;;;;;;;;;;;;;;27068:10;;;;;;;;;;;27043:44;;27057:9;27043:44;;;;;;;;:::i;:::-;;;;;;;;26930:165:::0;:::o;12641:79::-;12679:7;12706:6;;;;;;;;;;;12699:13;;12641:79;:::o;12855:145::-;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12959:1:::1;12922:40;;12943:6;;;;;;;;;;;12922:40;;;;;;;;;;;;12990:1;12973:6;;:19;;;;;;;;;;;;;;;;;;12855:145::o:0;33516:106::-;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33605:9:::1;33589:13;;:25;;;;;;;;;;;;;;;;;;33516:106:::0;:::o;2541:104::-;2597:13;2630:7;2623:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2541:104;:::o;26250:304::-;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26394:13:::1;26386:21;;:4;:21;;::::0;26364:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26505:41;26534:4;26540:5;26505:28;:41::i;:::-;26250:304:::0;;:::o;4555:482::-;4675:4;4697:24;4724:11;:25;4736:12;:10;:12::i;:::-;4724:25;;;;;;;;;;;;;;;:34;4750:7;4724:34;;;;;;;;;;;;;;;;4697:61;;4811:15;4791:16;:35;;4769:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;4927:67;4936:12;:10;:12::i;:::-;4950:7;4978:15;4959:16;:34;4927:8;:67::i;:::-;5025:4;5018:11;;;4555:482;;;;:::o;3062:216::-;3184:4;3206:42;3216:12;:10;:12::i;:::-;3230:9;3241:6;3206:9;:42::i;:::-;3266:4;3259:11;;3062:216;;;;:::o;26743:179::-;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26841:9:::1;26823:15;;:27;;;;;;;;;;;;;;;;;;26891:15;;;;;;;;;;;26866:48;;26880:9;26866:48;;;;;;;;:::i;:::-;;;;;;;;26743:179:::0;:::o;23397:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;22955:92::-;23005:42;22955:92;:::o;26056:186::-;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26172:8:::1;26141:19;:28;26161:7;26141:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26216:7;26196:38;;;26225:8;26196:38;;;;;;:::i;:::-;;;;;;;;26056:186:::0;;:::o;23534:35::-;;;;:::o;23086:24::-;;;;:::o;32911:261::-;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33047:6:::1;33041:2;33025:13;:11;:13::i;:::-;:18;;;;:::i;:::-;33024:29;;;;:::i;:::-;33011:8;:43;;32989:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;33153:10;:8;:10::i;:::-;33149:2;:14;;;;:::i;:::-;33137:8;:27;;;;:::i;:::-;33114:20;:50;;;;32911:261:::0;:::o;3286:201::-;3420:7;3452:11;:18;3464:5;3452:18;;;;;;;;;;;;;;;:27;3471:7;3452:27;;;;;;;;;;;;;;;;3445:34;;3286:201;;;;:::o;23333:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;23193:37::-;;;;:::o;23576:33::-;;;;:::o;25743:136::-;25803:4;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25844:5:::1;25820:21;;:29;;;;;;;;;;;;;;;;;;25867:4;25860:11;;25743:136:::0;:::o;13008:281::-;12778:12;:10;:12::i;:::-;12768:22;;:6;;;;;;;;;;;:22;;;12760:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13131:1:::1;13111:22;;:8;:22;;::::0;13089:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13244:8;13215:38;;13236:6;;;;;;;;;;;13215:38;;;;;;;;;;;;13273:8;13264:6;;:17;;;;;;;;;;;;;;;;;;13008:281:::0;:::o;23616:24::-;;;;:::o;325:115::-;378:15;421:10;406:26;;325:115;:::o;6829:380::-;6982:1;6965:19;;:5;:19;;;6957:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7063:1;7044:21;;:7;:21;;;7036:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7147:6;7117:11;:18;7129:5;7117:18;;;;;;;;;;;;;;;:27;7136:7;7117:27;;;;;;;;;;;;;;;:36;;;;7185:7;7169:32;;7178:5;7169:32;;;7194:6;7169:32;;;;;;:::i;:::-;;;;;;;;6829:380;;;:::o;27237:4010::-;27385:1;27369:18;;:4;:18;;;27361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27462:1;27448:16;;:2;:16;;;27440:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27531:1;27521:6;:11;27517:93;;27549:28;27565:4;27571:2;27575:1;27549:15;:28::i;:::-;27592:7;;27517:93;27626:15;;;;;;;;;;;27622:2283;;;27688:7;:5;:7::i;:::-;27680:15;;:4;:15;;;;:49;;;;;27722:7;:5;:7::i;:::-;27716:13;;:2;:13;;;;27680:49;:86;;;;;27764:1;27750:16;;:2;:16;;;;27680:86;:128;;;;;27801:6;27787:21;;:2;:21;;;;27680:128;:160;;;;;27830:10;;;;;;;;;;;27829:11;27680:160;27658:2236;;;27880:16;;;;;;;;;;;27875:226;;27955:19;:25;27975:4;27955:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27984:19;:23;28004:2;27984:23;;;;;;;;;;;;;;;;;;;;;;;;;27955:52;27921:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;27875:226;28125:21;;;;;;;;;;;28121:601;;;28207:7;:5;:7::i;:::-;28201:13;;:2;:13;;;;:72;;;;;28257:15;28243:30;;:2;:30;;;;28201:72;:129;;;;;28316:13;28302:28;;:2;:28;;;;28201:129;28171:532;;;28457:12;28419:24;:35;28444:9;28419:35;;;;;;;;;;;;;;;;:50;28381:221;;;;;;;;;;;;:::i;:::-;;;;;;;;;28667:12;28629:24;:35;28654:9;28629:35;;;;;;;;;;;;;;;:50;;;;28171:532;28121:601;28792:25;:31;28818:4;28792:31;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;28849:25;:29;28875:2;28849:29;;;;;;;;;;;;;;;;;;;;;;;;;28848:30;28792:86;28766:1113;;;28965:20;;28955:6;:30;;28921:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;29167:9;;29150:13;29160:2;29150:9;:13::i;:::-;29141:6;:22;;;;:::i;:::-;:35;;29107:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28766:1113;;;29341:25;:29;29367:2;29341:29;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;29396:25;:31;29422:4;29396:31;;;;;;;;;;;;;;;;;;;;;;;;;29395:32;29341:86;29315:564;;;29514:20;;29504:6;:30;;29470:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;29315:564;;;29665:25;:29;29691:2;29665:29;;;;;;;;;;;;;;;;;;;;;;;;;29660:219;;29779:9;;29762:13;29772:2;29762:9;:13::i;:::-;29753:6;:22;;;;:::i;:::-;:35;;29719:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29660:219;29315:564;28766:1113;27658:2236;27622:2283;29917:28;29948:24;29966:4;29948:9;:24::i;:::-;29917:55;;29985:12;30024:18;;30000:20;:42;;29985:57;;30073:7;:37;;;;;30097:13;;;;;;;;;;;30073:37;:65;;;;;30128:10;;;;;;;;;;;30127:11;30073:65;:114;;;;;30156:25;:31;30182:4;30156:31;;;;;;;;;;;;;;;;;;;;;;;;;30155:32;30073:114;:157;;;;;30205:19;:25;30225:4;30205:25;;;;;;;;;;;;;;;;;;;;;;;;;30204:26;30073:157;:198;;;;;30248:19;:23;30268:2;30248:23;;;;;;;;;;;;;;;;;;;;;;;;;30247:24;30073:198;:244;;;;;30300:17;;30288:9;;:29;30073:244;30055:422;;;30357:4;30344:10;;:17;;;;;;;;;;;;;;;;;;30376:56;30385:46;30389:20;30411:19;;30385:3;:46::i;:::-;30376:8;:56::i;:::-;30460:5;30447:10;;:18;;;;;;;;;;;;;;;;;;30055:422;30489:12;30505:10;;;;;;;;;;;30504:11;30489:26;;30532:19;:25;30552:4;30532:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;30561:19;:23;30581:2;30561:23;;;;;;;;;;;;;;;;;;;;;;;;;30532:52;30528:100;;;30611:5;30601:15;;30528:100;30640:12;30673:7;30669:525;;;30722:25;:29;30748:2;30722:29;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;;;30768:1;30755:10;;:14;30722:47;30718:327;;;30797:34;30824:6;30797:22;30808:10;;30797:6;:10;;:22;;;;:::i;:::-;:26;;:34;;;;:::i;:::-;30790:41;;30718:327;;;30890:25;:31;30916:4;30890:31;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;30937:1;30925:9;;:13;30890:48;30886:159;;;30966:33;30992:6;30966:21;30977:9;;30966:6;:10;;:21;;;;:::i;:::-;:25;;:33;;;;:::i;:::-;30959:40;;31018:9;;:11;;;;;;;;;:::i;:::-;;;;;;30886:159;30718:327;31072:1;31065:4;:8;31061:91;;;31094:42;31110:4;31124;31131;31094:15;:42::i;:::-;31061:91;31178:4;31168:14;;;;;:::i;:::-;;;30669:525;31206:33;31222:4;31228:2;31232:6;31206:15;:33::i;:::-;27350:3897;;;;27237:4010;;;;:::o;26562:173::-;26679:5;26645:25;:31;26671:4;26645:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26721:5;26700:27;;26715:4;26700:27;;;;;;;;;;;;26562:173;;:::o;5045:770::-;5203:1;5185:20;;:6;:20;;;5177:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5287:1;5266:23;;:9;:23;;;5258:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5342:47;5363:6;5371:9;5382:6;5342:20;:47::i;:::-;5402:21;5426:9;:17;5436:6;5426:17;;;;;;;;;;;;;;;;5402:41;;5493:6;5476:13;:23;;5454:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;5637:6;5621:13;:22;5601:9;:17;5611:6;5601:17;;;;;;;;;;;;;;;:42;;;;5689:6;5665:9;:20;5675:9;5665:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5730:9;5713:35;;5722:6;5713:35;;;5741:6;5713:35;;;;;;:::i;:::-;;;;;;;;5761:46;5781:6;5789:9;5800:6;5761:19;:46::i;:::-;5166:649;5045:770;;;:::o;31255:107::-;31312:7;31344:1;31340;:5;31339:15;;31353:1;31339:15;;;31349:1;31339:15;31332:22;;31255:107;;;;:::o;31853:585::-;31906:12;31945:1;31935:6;:11;31931:50;;31963:7;;;31931:50;31993:26;32022:6;31993:35;;32039:36;32056:18;32039:16;:36::i;:::-;32086:18;32107:21;32086:42;;32173:18;32207:1;32194:10;:14;;;;:::i;:::-;32173:35;;32219:26;32261:10;32248;:23;;;;:::i;:::-;32219:52;;32306:15;;;;;;;;;;;32298:29;;32335:10;32298:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32284:66;;;;;32383:10;;;;;;;;;;;32375:24;;32407:18;32375:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32361:69;;;;;31895:543;;;;;31853:585;;:::o;8072:250::-;8130:7;8159:1;8154;:6;8150:47;;8184:1;8177:8;;;;8150:47;8209:9;8225:1;8221;:5;;;;:::i;:::-;8209:17;;8254:1;8249;8245;:5;;;;:::i;:::-;:10;8237:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;8313:1;8306:8;;;8072:250;;;;;:::o;8330:132::-;8388:7;8415:39;8419:1;8422;8415:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8408:46;;8330:132;;;;:::o;7217:125::-;;;;:::o;7350:124::-;;;;:::o;31370:475::-;31436:21;31474:1;31460:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31436:40;;31505:4;31487;31492:1;31487:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31531:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31521:4;31526:1;31521:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31566:62;31583:4;31598:15;31616:11;31566:8;:62::i;:::-;31641:15;:66;;;31722:11;31748:1;31764:4;31791;31811:15;31641:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31425:420;31370:475;:::o;8470:312::-;8590:7;8622:1;8618;:5;8625:12;8610:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8649:9;8665:1;8661;:5;;;;:::i;:::-;8649:17;;8773:1;8766:8;;;8470:312;;;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:99::-;486:6;520:5;514:12;504:22;;434:99;;;:::o;539:169::-;623:11;657:6;652:3;645:19;697:4;692:3;688:14;673:29;;539:169;;;;:::o;714:139::-;803:6;798:3;793;787:23;844:1;835:6;830:3;826:16;819:27;714:139;;;:::o;859:102::-;900:6;951:2;947:7;942:2;935:5;931:14;927:28;917:38;;859:102;;;:::o;967:377::-;1055:3;1083:39;1116:5;1083:39;:::i;:::-;1138:71;1202:6;1197:3;1138:71;:::i;:::-;1131:78;;1218:65;1276:6;1271:3;1264:4;1257:5;1253:16;1218:65;:::i;:::-;1308:29;1330:6;1308:29;:::i;:::-;1303:3;1299:39;1292:46;;1059:285;967:377;;;;:::o;1350:313::-;1463:4;1501:2;1490:9;1486:18;1478:26;;1550:9;1544:4;1540:20;1536:1;1525:9;1521:17;1514:47;1578:78;1651:4;1642:6;1578:78;:::i;:::-;1570:86;;1350:313;;;;:::o;1750:117::-;1859:1;1856;1849:12;1996:126;2033:7;2073:42;2066:5;2062:54;2051:65;;1996:126;;;:::o;2128:96::-;2165:7;2194:24;2212:5;2194:24;:::i;:::-;2183:35;;2128:96;;;:::o;2230:122::-;2303:24;2321:5;2303:24;:::i;:::-;2296:5;2293:35;2283:63;;2342:1;2339;2332:12;2283:63;2230:122;:::o;2358:139::-;2404:5;2442:6;2429:20;2420:29;;2458:33;2485:5;2458:33;:::i;:::-;2358:139;;;;:::o;2503:77::-;2540:7;2569:5;2558:16;;2503:77;;;:::o;2586:122::-;2659:24;2677:5;2659:24;:::i;:::-;2652:5;2649:35;2639:63;;2698:1;2695;2688:12;2639:63;2586:122;:::o;2714:139::-;2760:5;2798:6;2785:20;2776:29;;2814:33;2841:5;2814:33;:::i;:::-;2714:139;;;;:::o;2859:474::-;2927:6;2935;2984:2;2972:9;2963:7;2959:23;2955:32;2952:119;;;2990:79;;:::i;:::-;2952:119;3110:1;3135:53;3180:7;3171:6;3160:9;3156:22;3135:53;:::i;:::-;3125:63;;3081:117;3237:2;3263:53;3308:7;3299:6;3288:9;3284:22;3263:53;:::i;:::-;3253:63;;3208:118;2859:474;;;;;:::o;3339:329::-;3398:6;3447:2;3435:9;3426:7;3422:23;3418:32;3415:119;;;3453:79;;:::i;:::-;3415:119;3573:1;3598:53;3643:7;3634:6;3623:9;3619:22;3598:53;:::i;:::-;3588:63;;3544:117;3339:329;;;;:::o;3674:60::-;3702:3;3723:5;3716:12;;3674:60;;;:::o;3740:142::-;3790:9;3823:53;3841:34;3850:24;3868:5;3850:24;:::i;:::-;3841:34;:::i;:::-;3823:53;:::i;:::-;3810:66;;3740:142;;;:::o;3888:126::-;3938:9;3971:37;4002:5;3971:37;:::i;:::-;3958:50;;3888:126;;;:::o;4020:153::-;4097:9;4130:37;4161:5;4130:37;:::i;:::-;4117:50;;4020:153;;;:::o;4179:185::-;4293:64;4351:5;4293:64;:::i;:::-;4288:3;4281:77;4179:185;;:::o;4370:276::-;4490:4;4528:2;4517:9;4513:18;4505:26;;4541:98;4636:1;4625:9;4621:17;4612:6;4541:98;:::i;:::-;4370:276;;;;:::o;4652:118::-;4739:24;4757:5;4739:24;:::i;:::-;4734:3;4727:37;4652:118;;:::o;4776:222::-;4869:4;4907:2;4896:9;4892:18;4884:26;;4920:71;4988:1;4977:9;4973:17;4964:6;4920:71;:::i;:::-;4776:222;;;;:::o;5004:619::-;5081:6;5089;5097;5146:2;5134:9;5125:7;5121:23;5117:32;5114:119;;;5152:79;;:::i;:::-;5114:119;5272:1;5297:53;5342:7;5333:6;5322:9;5318:22;5297:53;:::i;:::-;5287:63;;5243:117;5399:2;5425:53;5470:7;5461:6;5450:9;5446:22;5425:53;:::i;:::-;5415:63;;5370:118;5527:2;5553:53;5598:7;5589:6;5578:9;5574:22;5553:53;:::i;:::-;5543:63;;5498:118;5004:619;;;;;:::o;5629:86::-;5664:7;5704:4;5697:5;5693:16;5682:27;;5629:86;;;:::o;5721:112::-;5804:22;5820:5;5804:22;:::i;:::-;5799:3;5792:35;5721:112;;:::o;5839:214::-;5928:4;5966:2;5955:9;5951:18;5943:26;;5979:67;6043:1;6032:9;6028:17;6019:6;5979:67;:::i;:::-;5839:214;;;;:::o;6059:118::-;6146:24;6164:5;6146:24;:::i;:::-;6141:3;6134:37;6059:118;;:::o;6183:222::-;6276:4;6314:2;6303:9;6299:18;6291:26;;6327:71;6395:1;6384:9;6380:17;6371:6;6327:71;:::i;:::-;6183:222;;;;:::o;6411:329::-;6470:6;6519:2;6507:9;6498:7;6494:23;6490:32;6487:119;;;6525:79;;:::i;:::-;6487:119;6645:1;6670:53;6715:7;6706:6;6695:9;6691:22;6670:53;:::i;:::-;6660:63;;6616:117;6411:329;;;;:::o;6746:116::-;6816:21;6831:5;6816:21;:::i;:::-;6809:5;6806:32;6796:60;;6852:1;6849;6842:12;6796:60;6746:116;:::o;6868:133::-;6911:5;6949:6;6936:20;6927:29;;6965:30;6989:5;6965:30;:::i;:::-;6868:133;;;;:::o;7007:468::-;7072:6;7080;7129:2;7117:9;7108:7;7104:23;7100:32;7097:119;;;7135:79;;:::i;:::-;7097:119;7255:1;7280:53;7325:7;7316:6;7305:9;7301:22;7280:53;:::i;:::-;7270:63;;7226:117;7382:2;7408:50;7450:7;7441:6;7430:9;7426:22;7408:50;:::i;:::-;7398:60;;7353:115;7007:468;;;;;:::o;7481:323::-;7537:6;7586:2;7574:9;7565:7;7561:23;7557:32;7554:119;;;7592:79;;:::i;:::-;7554:119;7712:1;7737:50;7779:7;7770:6;7759:9;7755:22;7737:50;:::i;:::-;7727:60;;7683:114;7481:323;;;;:::o;7810:474::-;7878:6;7886;7935:2;7923:9;7914:7;7910:23;7906:32;7903:119;;;7941:79;;:::i;:::-;7903:119;8061:1;8086:53;8131:7;8122:6;8111:9;8107:22;8086:53;:::i;:::-;8076:63;;8032:117;8188:2;8214:53;8259:7;8250:6;8239:9;8235:22;8214:53;:::i;:::-;8204:63;;8159:118;7810:474;;;;;:::o;8290:182::-;8430:34;8426:1;8418:6;8414:14;8407:58;8290:182;:::o;8478:366::-;8620:3;8641:67;8705:2;8700:3;8641:67;:::i;:::-;8634:74;;8717:93;8806:3;8717:93;:::i;:::-;8835:2;8830:3;8826:12;8819:19;;8478:366;;;:::o;8850:419::-;9016:4;9054:2;9043:9;9039:18;9031:26;;9103:9;9097:4;9093:20;9089:1;9078:9;9074:17;9067:47;9131:131;9257:4;9131:131;:::i;:::-;9123:139;;8850:419;;;:::o;9275:164::-;9415:16;9411:1;9403:6;9399:14;9392:40;9275:164;:::o;9445:366::-;9587:3;9608:67;9672:2;9667:3;9608:67;:::i;:::-;9601:74;;9684:93;9773:3;9684:93;:::i;:::-;9802:2;9797:3;9793:12;9786:19;;9445:366;;;:::o;9817:419::-;9983:4;10021:2;10010:9;10006:18;9998:26;;10070:9;10064:4;10060:20;10056:1;10045:9;10041:17;10034:47;10098:131;10224:4;10098:131;:::i;:::-;10090:139;;9817:419;;;:::o;10242:180::-;10290:77;10287:1;10280:88;10387:4;10384:1;10377:15;10411:4;10408:1;10401:15;10428:320;10472:6;10509:1;10503:4;10499:12;10489:22;;10556:1;10550:4;10546:12;10577:18;10567:81;;10633:4;10625:6;10621:17;10611:27;;10567:81;10695:2;10687:6;10684:14;10664:18;10661:38;10658:84;;10714:18;;:::i;:::-;10658:84;10479:269;10428:320;;;:::o;10754:180::-;10802:77;10799:1;10792:88;10899:4;10896:1;10889:15;10923:4;10920:1;10913:15;10940:410;10980:7;11003:20;11021:1;11003:20;:::i;:::-;10998:25;;11037:20;11055:1;11037:20;:::i;:::-;11032:25;;11092:1;11089;11085:9;11114:30;11132:11;11114:30;:::i;:::-;11103:41;;11293:1;11284:7;11280:15;11277:1;11274:22;11254:1;11247:9;11227:83;11204:139;;11323:18;;:::i;:::-;11204:139;10988:362;10940:410;;;;:::o;11356:180::-;11404:77;11401:1;11394:88;11501:4;11498:1;11491:15;11525:4;11522:1;11515:15;11542:185;11582:1;11599:20;11617:1;11599:20;:::i;:::-;11594:25;;11633:20;11651:1;11633:20;:::i;:::-;11628:25;;11672:1;11662:35;;11677:18;;:::i;:::-;11662:35;11719:1;11716;11712:9;11707:14;;11542:185;;;;:::o;11733:221::-;11873:34;11869:1;11861:6;11857:14;11850:58;11942:4;11937:2;11929:6;11925:15;11918:29;11733:221;:::o;11960:366::-;12102:3;12123:67;12187:2;12182:3;12123:67;:::i;:::-;12116:74;;12199:93;12288:3;12199:93;:::i;:::-;12317:2;12312:3;12308:12;12301:19;;11960:366;;;:::o;12332:419::-;12498:4;12536:2;12525:9;12521:18;12513:26;;12585:9;12579:4;12575:20;12571:1;12560:9;12556:17;12549:47;12613:131;12739:4;12613:131;:::i;:::-;12605:139;;12332:419;;;:::o;12757:180::-;12897:32;12893:1;12885:6;12881:14;12874:56;12757:180;:::o;12943:366::-;13085:3;13106:67;13170:2;13165:3;13106:67;:::i;:::-;13099:74;;13182:93;13271:3;13182:93;:::i;:::-;13300:2;13295:3;13291:12;13284:19;;12943:366;;;:::o;13315:419::-;13481:4;13519:2;13508:9;13504:18;13496:26;;13568:9;13562:4;13558:20;13554:1;13543:9;13539:17;13532:47;13596:131;13722:4;13596:131;:::i;:::-;13588:139;;13315:419;;;:::o;13740:166::-;13880:18;13876:1;13868:6;13864:14;13857:42;13740:166;:::o;13912:366::-;14054:3;14075:67;14139:2;14134:3;14075:67;:::i;:::-;14068:74;;14151:93;14240:3;14151:93;:::i;:::-;14269:2;14264:3;14260:12;14253:19;;13912:366;;;:::o;14284:419::-;14450:4;14488:2;14477:9;14473:18;14465:26;;14537:9;14531:4;14527:20;14523:1;14512:9;14508:17;14501:47;14565:131;14691:4;14565:131;:::i;:::-;14557:139;;14284:419;;;:::o;14709:102::-;14751:8;14798:5;14795:1;14791:13;14770:34;;14709:102;;;:::o;14817:848::-;14878:5;14885:4;14909:6;14900:15;;14933:5;14924:14;;14947:712;14968:1;14958:8;14955:15;14947:712;;;15063:4;15058:3;15054:14;15048:4;15045:24;15042:50;;;15072:18;;:::i;:::-;15042:50;15122:1;15112:8;15108:16;15105:451;;;15537:4;15530:5;15526:16;15517:25;;15105:451;15587:4;15581;15577:15;15569:23;;15617:32;15640:8;15617:32;:::i;:::-;15605:44;;14947:712;;;14817:848;;;;;;;:::o;15671:1073::-;15725:5;15916:8;15906:40;;15937:1;15928:10;;15939:5;;15906:40;15965:4;15955:36;;15982:1;15973:10;;15984:5;;15955:36;16051:4;16099:1;16094:27;;;;16135:1;16130:191;;;;16044:277;;16094:27;16112:1;16103:10;;16114:5;;;16130:191;16175:3;16165:8;16162:17;16159:43;;;16182:18;;:::i;:::-;16159:43;16231:8;16228:1;16224:16;16215:25;;16266:3;16259:5;16256:14;16253:40;;;16273:18;;:::i;:::-;16253:40;16306:5;;;16044:277;;16430:2;16420:8;16417:16;16411:3;16405:4;16402:13;16398:36;16380:2;16370:8;16367:16;16362:2;16356:4;16353:12;16349:35;16333:111;16330:246;;;16486:8;16480:4;16476:19;16467:28;;16521:3;16514:5;16511:14;16508:40;;;16528:18;;:::i;:::-;16508:40;16561:5;;16330:246;16601:42;16639:3;16629:8;16623:4;16620:1;16601:42;:::i;:::-;16586:57;;;;16675:4;16670:3;16666:14;16659:5;16656:25;16653:51;;;16684:18;;:::i;:::-;16653:51;16733:4;16726:5;16722:16;16713:25;;15671:1073;;;;;;:::o;16750:281::-;16808:5;16832:23;16850:4;16832:23;:::i;:::-;16824:31;;16876:25;16892:8;16876:25;:::i;:::-;16864:37;;16920:104;16957:66;16947:8;16941:4;16920:104;:::i;:::-;16911:113;;16750:281;;;;:::o;17037:227::-;17177:34;17173:1;17165:6;17161:14;17154:58;17246:10;17241:2;17233:6;17229:15;17222:35;17037:227;:::o;17270:366::-;17412:3;17433:67;17497:2;17492:3;17433:67;:::i;:::-;17426:74;;17509:93;17598:3;17509:93;:::i;:::-;17627:2;17622:3;17618:12;17611:19;;17270:366;;;:::o;17642:419::-;17808:4;17846:2;17835:9;17831:18;17823:26;;17895:9;17889:4;17885:20;17881:1;17870:9;17866:17;17859:47;17923:131;18049:4;17923:131;:::i;:::-;17915:139;;17642:419;;;:::o;18067:191::-;18107:3;18126:20;18144:1;18126:20;:::i;:::-;18121:25;;18160:20;18178:1;18160:20;:::i;:::-;18155:25;;18203:1;18200;18196:9;18189:16;;18224:3;18221:1;18218:10;18215:36;;;18231:18;;:::i;:::-;18215:36;18067:191;;;;:::o;18264:154::-;18404:6;18400:1;18392:6;18388:14;18381:30;18264:154;:::o;18424:365::-;18566:3;18587:66;18651:1;18646:3;18587:66;:::i;:::-;18580:73;;18662:93;18751:3;18662:93;:::i;:::-;18780:2;18775:3;18771:12;18764:19;;18424:365;;;:::o;18795:419::-;18961:4;18999:2;18988:9;18984:18;18976:26;;19048:9;19042:4;19038:20;19034:1;19023:9;19019:17;19012:47;19076:131;19202:4;19076:131;:::i;:::-;19068:139;;18795:419;;;:::o;19220:244::-;19360:34;19356:1;19348:6;19344:14;19337:58;19429:27;19424:2;19416:6;19412:15;19405:52;19220:244;:::o;19470:366::-;19612:3;19633:67;19697:2;19692:3;19633:67;:::i;:::-;19626:74;;19709:93;19798:3;19709:93;:::i;:::-;19827:2;19822:3;19818:12;19811:19;;19470:366;;;:::o;19842:419::-;20008:4;20046:2;20035:9;20031:18;20023:26;;20095:9;20089:4;20085:20;20081:1;20070:9;20066:17;20059:47;20123:131;20249:4;20123:131;:::i;:::-;20115:139;;19842:419;;;:::o;20267:224::-;20407:34;20403:1;20395:6;20391:14;20384:58;20476:7;20471:2;20463:6;20459:15;20452:32;20267:224;:::o;20497:366::-;20639:3;20660:67;20724:2;20719:3;20660:67;:::i;:::-;20653:74;;20736:93;20825:3;20736:93;:::i;:::-;20854:2;20849:3;20845:12;20838:19;;20497:366;;;:::o;20869:419::-;21035:4;21073:2;21062:9;21058:18;21050:26;;21122:9;21116:4;21112:20;21108:1;21097:9;21093:17;21086:47;21150:131;21276:4;21150:131;:::i;:::-;21142:139;;20869:419;;;:::o;21294:153::-;21434:5;21430:1;21422:6;21418:14;21411:29;21294:153;:::o;21453:365::-;21595:3;21616:66;21680:1;21675:3;21616:66;:::i;:::-;21609:73;;21691:93;21780:3;21691:93;:::i;:::-;21809:2;21804:3;21800:12;21793:19;;21453:365;;;:::o;21824:419::-;21990:4;22028:2;22017:9;22013:18;22005:26;;22077:9;22071:4;22067:20;22063:1;22052:9;22048:17;22041:47;22105:131;22231:4;22105:131;:::i;:::-;22097:139;;21824:419;;;:::o;22249:171::-;22389:23;22385:1;22377:6;22373:14;22366:47;22249:171;:::o;22426:366::-;22568:3;22589:67;22653:2;22648:3;22589:67;:::i;:::-;22582:74;;22665:93;22754:3;22665:93;:::i;:::-;22783:2;22778:3;22774:12;22767:19;;22426:366;;;:::o;22798:419::-;22964:4;23002:2;22991:9;22987:18;22979:26;;23051:9;23045:4;23041:20;23037:1;23026:9;23022:17;23015:47;23079:131;23205:4;23079:131;:::i;:::-;23071:139;;22798:419;;;:::o;23223:225::-;23363:34;23359:1;23351:6;23347:14;23340:58;23432:8;23427:2;23419:6;23415:15;23408:33;23223:225;:::o;23454:366::-;23596:3;23617:67;23681:2;23676:3;23617:67;:::i;:::-;23610:74;;23693:93;23782:3;23693:93;:::i;:::-;23811:2;23806:3;23802:12;23795:19;;23454:366;;;:::o;23826:419::-;23992:4;24030:2;24019:9;24015:18;24007:26;;24079:9;24073:4;24069:20;24065:1;24054:9;24050:17;24043:47;24107:131;24233:4;24107:131;:::i;:::-;24099:139;;23826:419;;;:::o;24251:223::-;24391:34;24387:1;24379:6;24375:14;24368:58;24460:6;24455:2;24447:6;24443:15;24436:31;24251:223;:::o;24480:366::-;24622:3;24643:67;24707:2;24702:3;24643:67;:::i;:::-;24636:74;;24719:93;24808:3;24719:93;:::i;:::-;24837:2;24832:3;24828:12;24821:19;;24480:366;;;:::o;24852:419::-;25018:4;25056:2;25045:9;25041:18;25033:26;;25105:9;25099:4;25095:20;25091:1;25080:9;25076:17;25069:47;25133:131;25259:4;25133:131;:::i;:::-;25125:139;;24852:419;;;:::o;25277:221::-;25417:34;25413:1;25405:6;25401:14;25394:58;25486:4;25481:2;25473:6;25469:15;25462:29;25277:221;:::o;25504:366::-;25646:3;25667:67;25731:2;25726:3;25667:67;:::i;:::-;25660:74;;25743:93;25832:3;25743:93;:::i;:::-;25861:2;25856:3;25852:12;25845:19;;25504:366;;;:::o;25876:419::-;26042:4;26080:2;26069:9;26065:18;26057:26;;26129:9;26123:4;26119:20;26115:1;26104:9;26100:17;26093:47;26157:131;26283:4;26157:131;:::i;:::-;26149:139;;25876:419;;;:::o;26301:224::-;26441:34;26437:1;26429:6;26425:14;26418:58;26510:7;26505:2;26497:6;26493:15;26486:32;26301:224;:::o;26531:366::-;26673:3;26694:67;26758:2;26753:3;26694:67;:::i;:::-;26687:74;;26770:93;26859:3;26770:93;:::i;:::-;26888:2;26883:3;26879:12;26872:19;;26531:366;;;:::o;26903:419::-;27069:4;27107:2;27096:9;27092:18;27084:26;;27156:9;27150:4;27146:20;27142:1;27131:9;27127:17;27120:47;27184:131;27310:4;27184:131;:::i;:::-;27176:139;;26903:419;;;:::o;27328:222::-;27468:34;27464:1;27456:6;27452:14;27445:58;27537:5;27532:2;27524:6;27520:15;27513:30;27328:222;:::o;27556:366::-;27698:3;27719:67;27783:2;27778:3;27719:67;:::i;:::-;27712:74;;27795:93;27884:3;27795:93;:::i;:::-;27913:2;27908:3;27904:12;27897:19;;27556:366;;;:::o;27928:419::-;28094:4;28132:2;28121:9;28117:18;28109:26;;28181:9;28175:4;28171:20;28167:1;28156:9;28152:17;28145:47;28209:131;28335:4;28209:131;:::i;:::-;28201:139;;27928:419;;;:::o;28353:172::-;28493:24;28489:1;28481:6;28477:14;28470:48;28353:172;:::o;28531:366::-;28673:3;28694:67;28758:2;28753:3;28694:67;:::i;:::-;28687:74;;28770:93;28859:3;28770:93;:::i;:::-;28888:2;28883:3;28879:12;28872:19;;28531:366;;;:::o;28903:419::-;29069:4;29107:2;29096:9;29092:18;29084:26;;29156:9;29150:4;29146:20;29142:1;29131:9;29127:17;29120:47;29184:131;29310:4;29184:131;:::i;:::-;29176:139;;28903:419;;;:::o;29328:297::-;29468:34;29464:1;29456:6;29452:14;29445:58;29537:34;29532:2;29524:6;29520:15;29513:59;29606:11;29601:2;29593:6;29589:15;29582:36;29328:297;:::o;29631:366::-;29773:3;29794:67;29858:2;29853:3;29794:67;:::i;:::-;29787:74;;29870:93;29959:3;29870:93;:::i;:::-;29988:2;29983:3;29979:12;29972:19;;29631:366;;;:::o;30003:419::-;30169:4;30207:2;30196:9;30192:18;30184:26;;30256:9;30250:4;30246:20;30242:1;30231:9;30227:17;30220:47;30284:131;30410:4;30284:131;:::i;:::-;30276:139;;30003:419;;;:::o;30428:234::-;30568:34;30564:1;30556:6;30552:14;30545:58;30637:17;30632:2;30624:6;30620:15;30613:42;30428:234;:::o;30668:366::-;30810:3;30831:67;30895:2;30890:3;30831:67;:::i;:::-;30824:74;;30907:93;30996:3;30907:93;:::i;:::-;31025:2;31020:3;31016:12;31009:19;;30668:366;;;:::o;31040:419::-;31206:4;31244:2;31233:9;31229:18;31221:26;;31293:9;31287:4;31283:20;31279:1;31268:9;31264:17;31257:47;31321:131;31447:4;31321:131;:::i;:::-;31313:139;;31040:419;;;:::o;31465:169::-;31605:21;31601:1;31593:6;31589:14;31582:45;31465:169;:::o;31640:366::-;31782:3;31803:67;31867:2;31862:3;31803:67;:::i;:::-;31796:74;;31879:93;31968:3;31879:93;:::i;:::-;31997:2;31992:3;31988:12;31981:19;;31640:366;;;:::o;32012:419::-;32178:4;32216:2;32205:9;32201:18;32193:26;;32265:9;32259:4;32255:20;32251:1;32240:9;32236:17;32229:47;32293:131;32419:4;32293:131;:::i;:::-;32285:139;;32012:419;;;:::o;32437:235::-;32577:34;32573:1;32565:6;32561:14;32554:58;32646:18;32641:2;32633:6;32629:15;32622:43;32437:235;:::o;32678:366::-;32820:3;32841:67;32905:2;32900:3;32841:67;:::i;:::-;32834:74;;32917:93;33006:3;32917:93;:::i;:::-;33035:2;33030:3;33026:12;33019:19;;32678:366;;;:::o;33050:419::-;33216:4;33254:2;33243:9;33239:18;33231:26;;33303:9;33297:4;33293:20;33289:1;33278:9;33274:17;33267:47;33331:131;33457:4;33331:131;:::i;:::-;33323:139;;33050:419;;;:::o;33475:233::-;33514:3;33537:24;33555:5;33537:24;:::i;:::-;33528:33;;33583:66;33576:5;33573:77;33570:103;;33653:18;;:::i;:::-;33570:103;33700:1;33693:5;33689:13;33682:20;;33475:233;;;:::o;33714:194::-;33754:4;33774:20;33792:1;33774:20;:::i;:::-;33769:25;;33808:20;33826:1;33808:20;:::i;:::-;33803:25;;33852:1;33849;33845:9;33837:17;;33876:1;33870:4;33867:11;33864:37;;;33881:18;;:::i;:::-;33864:37;33714:194;;;;:::o;33914:225::-;34054:34;34050:1;34042:6;34038:14;34031:58;34123:8;34118:2;34110:6;34106:15;34099:33;33914:225;:::o;34145:366::-;34287:3;34308:67;34372:2;34367:3;34308:67;:::i;:::-;34301:74;;34384:93;34473:3;34384:93;:::i;:::-;34502:2;34497:3;34493:12;34486:19;;34145:366;;;:::o;34517:419::-;34683:4;34721:2;34710:9;34706:18;34698:26;;34770:9;34764:4;34760:20;34756:1;34745:9;34741:17;34734:47;34798:131;34924:4;34798:131;:::i;:::-;34790:139;;34517:419;;;:::o;34942:147::-;35043:11;35080:3;35065:18;;34942:147;;;;:::o;35095:114::-;;:::o;35215:398::-;35374:3;35395:83;35476:1;35471:3;35395:83;:::i;:::-;35388:90;;35487:93;35576:3;35487:93;:::i;:::-;35605:1;35600:3;35596:11;35589:18;;35215:398;;;:::o;35619:379::-;35803:3;35825:147;35968:3;35825:147;:::i;:::-;35818:154;;35989:3;35982:10;;35619:379;;;:::o;36004:220::-;36144:34;36140:1;36132:6;36128:14;36121:58;36213:3;36208:2;36200:6;36196:15;36189:28;36004:220;:::o;36230:366::-;36372:3;36393:67;36457:2;36452:3;36393:67;:::i;:::-;36386:74;;36469:93;36558:3;36469:93;:::i;:::-;36587:2;36582:3;36578:12;36571:19;;36230:366;;;:::o;36602:419::-;36768:4;36806:2;36795:9;36791:18;36783:26;;36855:9;36849:4;36845:20;36841:1;36830:9;36826:17;36819:47;36883:131;37009:4;36883:131;:::i;:::-;36875:139;;36602:419;;;:::o;37027:180::-;37075:77;37072:1;37065:88;37172:4;37169:1;37162:15;37196:4;37193:1;37186:15;37213:180;37261:77;37258:1;37251:88;37358:4;37355:1;37348:15;37382:4;37379:1;37372:15;37399:143;37456:5;37487:6;37481:13;37472:22;;37503:33;37530:5;37503:33;:::i;:::-;37399:143;;;;:::o;37548:351::-;37618:6;37667:2;37655:9;37646:7;37642:23;37638:32;37635:119;;;37673:79;;:::i;:::-;37635:119;37793:1;37818:64;37874:7;37865:6;37854:9;37850:22;37818:64;:::i;:::-;37808:74;;37764:128;37548:351;;;;:::o;37905:85::-;37950:7;37979:5;37968:16;;37905:85;;;:::o;37996:158::-;38054:9;38087:61;38105:42;38114:32;38140:5;38114:32;:::i;:::-;38105:42;:::i;:::-;38087:61;:::i;:::-;38074:74;;37996:158;;;:::o;38160:147::-;38255:45;38294:5;38255:45;:::i;:::-;38250:3;38243:58;38160:147;;:::o;38313:114::-;38380:6;38414:5;38408:12;38398:22;;38313:114;;;:::o;38433:184::-;38532:11;38566:6;38561:3;38554:19;38606:4;38601:3;38597:14;38582:29;;38433:184;;;;:::o;38623:132::-;38690:4;38713:3;38705:11;;38743:4;38738:3;38734:14;38726:22;;38623:132;;;:::o;38761:108::-;38838:24;38856:5;38838:24;:::i;:::-;38833:3;38826:37;38761:108;;:::o;38875:179::-;38944:10;38965:46;39007:3;38999:6;38965:46;:::i;:::-;39043:4;39038:3;39034:14;39020:28;;38875:179;;;;:::o;39060:113::-;39130:4;39162;39157:3;39153:14;39145:22;;39060:113;;;:::o;39209:732::-;39328:3;39357:54;39405:5;39357:54;:::i;:::-;39427:86;39506:6;39501:3;39427:86;:::i;:::-;39420:93;;39537:56;39587:5;39537:56;:::i;:::-;39616:7;39647:1;39632:284;39657:6;39654:1;39651:13;39632:284;;;39733:6;39727:13;39760:63;39819:3;39804:13;39760:63;:::i;:::-;39753:70;;39846:60;39899:6;39846:60;:::i;:::-;39836:70;;39692:224;39679:1;39676;39672:9;39667:14;;39632:284;;;39636:14;39932:3;39925:10;;39333:608;;;39209:732;;;;:::o;39947:831::-;40210:4;40248:3;40237:9;40233:19;40225:27;;40262:71;40330:1;40319:9;40315:17;40306:6;40262:71;:::i;:::-;40343:80;40419:2;40408:9;40404:18;40395:6;40343:80;:::i;:::-;40470:9;40464:4;40460:20;40455:2;40444:9;40440:18;40433:48;40498:108;40601:4;40592:6;40498:108;:::i;:::-;40490:116;;40616:72;40684:2;40673:9;40669:18;40660:6;40616:72;:::i;:::-;40698:73;40766:3;40755:9;40751:19;40742:6;40698:73;:::i;:::-;39947:831;;;;;;;;:::o

Swarm Source

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