ETH Price: $2,899.61 (-4.31%)
Gas: 1 Gwei

Token

Bored DAO Protocol (BORED)
 

Overview

Max Total Supply

1,000,000,000 BORED

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,267,234.787939550623886318 BORED

Value
$0.00
0x37efb0fb7c4883d61517d454ecc1e2982d7e09ca
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:
General

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-12
*/

// A Decentralized Meme - Bored DAO Protocol  

/**
 
Bored DAO Protocol is non profit organization

What we stand for:
BLOCKCHAIN for ALL
Every person on the planet should be implanted with a soulbound NFT SBT blockchain microchip.

DAO is a MUST
The business must be a DAO or not exist at all. All businesses must be DAO.

DAG is THE NEXT STEP
Decentralized Autonomous Goverment is the obvious next step in the evolution of human society.

SAVE HUMANITY
We must preserve all the knowledge of mankind in blockchain to be sure of the future of our next generations.


TO SUPPORT "BORED DAO PROTOCOL" MOVEMENT
BUY/SELL TAX 5%
1% of TAX GOES BACK to LIQUIDITY to support "BORED"

"BORED" is fundamental element of the Bored Dao Protocol ecosystem. 
"BORED" - gives you early access to become implanted with our SBT blockchain microchip.
"BORED" will be used to transfer values between every human implanted with our blockchain SBT mictochips.

*/


// TG- https://t.me/Bored_DAO_Protocol
// WEB- https://boreddaoprotocol.com
// TWITTER- https://twitter.com/dao_bored
// MEDIUM- https://medium.com/@boreddaoprotocol

// SPDX-License-Identifier: MIT
pragma solidity = 0.8.12;

// ##### Context #####
// This contract is only required for intermediate, library-like contracts.
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// ##### Ownable #####
// Contract module which provides a basic access control mechanism
abstract contract Ownable is Context {
    address private _owner;

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

    // Initializes the contract setting the deployer as the initial owner.
    constructor() {
        _transferOwnership(_msgSender());
    }

    // Returns the address of the current owner.
    function owner() public view virtual returns (address) {
        return _owner;
    }

    // Throws if called by any account other than the owner.
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    // Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    // Transfers ownership of the contract to a new account (`newOwner`).
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    // Transfers ownership of the contract to a new account (`newOwner`).
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// ##### IERC20 #####
interface IERC20 {
    // Returns the amount of tokens in existence.
    function totalSupply() external view returns (uint256);

    // Returns the amount of tokens owned by `account`.
    function balanceOf(address account) external view returns (uint256);

    // Moves `amount` tokens from the caller's account to `recipient`.
    function transfer(address recipient, uint256 amount) external returns (bool);

    // Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default.
    function allowance(address owner, address spender) external view returns (uint256);

    // Sets `amount` as the allowance of `spender` over the caller's tokens.
    function approve(address spender, uint256 amount) external returns (bool);

    // Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance.
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    // Emitted when `value` tokens are moved from one account (`from`) to another (`to`).
    event Transfer(address indexed from, address indexed to, uint256 value);

    // Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// ##### IERC20Metadata #####
// Interface for the optional metadata functions from the ERC20 standard.
interface IERC20Metadata is IERC20 {
    // Returns the name of the token.
    function name() external view returns (string memory);

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

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

// ##### ERC20 #####
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;

    // Sets the values for {name} and {symbol}.
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    // Returns the name of the token.
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    // Returns the symbol of the token, usually a shorter version of the
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    // Returns the number of decimals used to get its user representation.
    // For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`).
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    // See {IERC20-totalSupply}.
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    // See {IERC20-balanceOf}.
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

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

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

    // See {IERC20-transferFrom}.
    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;
    }

    // Atomically increases the allowance granted to `spender` by the caller.
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    // Atomically decreases the allowance granted to `spender` by the caller.
    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;
    }

    // Moves `amount` of tokens from `sender` to `recipient`.
    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);
    }

    // Creates `amount` tokens and assigns them to `account`, increasing the total supply.
    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);
    }

    // Destroys `amount` tokens from `account`, reducing the total supply.
    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);
    }

    // Sets `amount` as the allowance of `spender` over the `owner` s tokens.
    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);
    }

    // Hook that is called before any transfer of tokens. This includes minting and burning.
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    // Hook that is called after any transfer of tokens. This includes minting and burning.
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// ##### IUniswapV2Factory #####
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;
}

// ##### IUniswapV2Factory #####
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 Mint(address indexed sender, uint256 amount0, uint256 amount1);
    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 mint(address to) external returns (uint256 liquidity);

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

// ##### IUniswapV2Router02 #####
interface IUniswapV2Router02 {
    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 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;
}

// ##### GENERAL #####
contract General is ERC20, Ownable {
    // Namings
    string private projectName = "Bored DAO Protocol";
    string private tokenName = "BORED";

    // Wallets
    address public devWallet = address(0x6Cf5551A8936dB43761A11d7D842Ca4AAa4a0265);
    address public marketingWallet = address(0x6Cf5551A8936dB43761A11d7D842Ca4AAa4a0265);

    // Tokens
    uint256 public tokensForDev;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;

    // Buy fee percents
    uint256 public buyTotalFees;
    uint256 public buyDevFee = 5;
    uint256 public buyMarketingFee = 0;
    uint256 public buyLiquidityFee = 5;
    
    // Sell fee percents
    uint256 public sellTotalFees;
    uint256 public sellDevFee = 5;
    uint256 public sellMarketingFee = 0;
    uint256 public sellLiquidityFee = 5;
    
    // Limits
    uint256 public maxTransactionAmount = 10000000 * (10 ** decimals()); // 1% from total supply maxTransactionAmountTxn;
    uint256 public swapTokensAtAmount;
    uint256 public maxWalletAmount = 10000000 * (10 ** decimals()); // 1% from total supply maxWalletAmount;

    // Restrictions
    bool public limitsEnabled = true;
    bool public tradingEnabled = false;
    bool public swapEnabled = false;

    // UniswapV2Router02
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
     
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    // Etc. 
    bool private swapping;
   
   // Exlcude from fees and max transaction amount
    mapping(address => bool) public isExcludedFromFees;
    mapping(address => bool) public isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    // Exclude from fees
    event ExcludeFromFees(address indexed account, bool isExcluded);

    // Set automated market maker pair
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    // Swap and liquify
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20(projectName, tokenName) {
        // Uniswap
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAMMPair(address(uniswapV2Pair), true);
        
        // Total supply
        uint256 totalSupply = 1000000000 * (10 ** decimals());

        // Swap Tokens At Amount
        swapTokensAtAmount = (totalSupply * 10) / 10000; // 0.1% swap wallet
        
        // Buy fees
        buyTotalFees = buyDevFee + buyMarketingFee + buyLiquidityFee;
        
        // Sell fees
        sellTotalFees = sellDevFee + sellMarketingFee + sellLiquidityFee;

        // Exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);

        // _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again.
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // Enable trading (once enabled, can never be turned off)
    function enableTrading() external onlyOwner {
        tradingEnabled = true;
        swapEnabled = true;
    }

    function disableLimits() external onlyOwner {
        limitsEnabled = false;
    }

    function enableLimits() external onlyOwner {
        limitsEnabled = true;
    }

    // Disable transfer delay (once enabled, can never be turned off)
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    // Change the minimum amount of tokens to sell from fees
    function setSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }

    // Update maximum transaction amount
    function setMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 1) / 1000) / (10 ** decimals()), "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    // Update maximum wallet amount
    function setMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 5) / 1000) / (10 ** decimals()), "Cannot set maxWallet lower than 0.5%");
        maxWalletAmount = newNum * (10**18);
    }
	
    // Exclude from max transaction
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner
    {
        isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // Disable contract sales if absolutely necessary (emergency use only)
    function setSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    // Update buy fees
    function setBuyFees(
		uint256 _devFee,
        uint256 _marketingFee,
        uint256 _liquidityFee
    ) external onlyOwner {
		require((_devFee + _marketingFee + _liquidityFee) <= 10, "Max buy fee is <= 10%");
		buyDevFee = _devFee;
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyDevFee + buyMarketingFee + buyLiquidityFee;
     }

    // Update sell fees
    function setSellFees(
		uint256 _devFee,
        uint256 _marketingFee,
        uint256 _liquidityFee
    ) external onlyOwner {
		require((_devFee + _marketingFee + _liquidityFee) <= 10, "Max sell fee is <= 10%");
		sellDevFee = _devFee;
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellDevFee + sellMarketingFee + sellLiquidityFee;
    }

    // Exclude from fees
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    // Market Maker Pair
    function setAMMPair(address pair, bool value) public onlyOwner
    {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAMMPair(pair, value);
    }

    function _setAMMPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    // Transfer
    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 (limitsEnabled) {
            if (from != owner() && to != owner() && to != address(0) && to != deadAddress && !swapping ) {
                if (!tradingEnabled) {
                    require(isExcludedFromFees[from] || isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !isExcludedMaxTransactionAmount[from]
                ) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                } else if (!isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
                }
            }
        }

        bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !isExcludedFromFees[from] &&
            !isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (isExcludedFromFees[from] || isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount * sellTotalFees / 100;      
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount * buyTotalFees / 100;
				tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;  
            }

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

            amount -= fees;
        }

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

    // Swap tokens for Eth.
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    // Add Liquidity
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForDev + tokensForMarketing + tokensForLiquidity;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance - initialETHBalance;

        uint256 ethForDev = ethBalance * tokensForDev / totalTokensToSwap;
        uint256 ethForMarketing = ethBalance * tokensForMarketing / totalTokensToSwap;
        uint256 ethForLiquidity = ethBalance - ethForDev - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");
        (success, ) = address(marketingWallet).call{value: ethForMarketing}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"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":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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"},{"stateMutability":"payable","type":"receive"}]

60c06040526040518060400160405280601281526020017f426f7265642044414f2050726f746f636f6c0000000000000000000000000000815250600690805190602001906200005192919062000c7c565b506040518060400160405280600581526020017f424f524544000000000000000000000000000000000000000000000000000000815250600790805190602001906200009f92919062000c7c565b50736cf5551a8936db43761a11d7d842ca4aaa4a0265600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736cf5551a8936db43761a11d7d842ca4aaa4a0265600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005600e556000600f556005601055600560125560006013556005601455620001786200073360201b60201c565b600a62000186919062000ec6565b6298968062000196919062000f17565b601555620001a96200073360201b60201c565b600a620001b7919062000ec6565b62989680620001c7919062000f17565b6017556001601860006101000a81548160ff0219169083151502179055506000601860016101000a81548160ff0219169083151502179055506000601860026101000a81548160ff0219169083151502179055506001601a60006101000a81548160ff0219169083151502179055503480156200024357600080fd5b5060068054620002539062000fa7565b80601f0160208091040260200160405190810160405280929190818152602001828054620002819062000fa7565b8015620002d25780601f10620002a657610100808354040283529160200191620002d2565b820191906000526020600020905b815481529060010190602001808311620002b457829003601f168201915b505050505060078054620002e69062000fa7565b80601f0160208091040260200160405190810160405280929190818152602001828054620003149062000fa7565b8015620003655780601f10620003395761010080835404028352916020019162000365565b820191906000526020600020905b8154815290600101906020018083116200034757829003601f168201915b505050505081600390805190602001906200038292919062000c7c565b5080600490805190602001906200039b92919062000c7c565b505050620003be620003b26200073c60201b60201c565b6200074460201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620003ea8160016200080a60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200046a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000490919062001047565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200051e919062001047565b6040518363ffffffff1660e01b81526004016200053d9291906200108a565b6020604051808303816000875af11580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000583919062001047565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620005cb60a05160016200080a60201b60201c565b620005e060a0516001620008f460201b60201c565b6000620005f26200073360201b60201c565b600a62000600919062000ec6565b633b9aca0062000611919062000f17565b9050612710600a8262000625919062000f17565b620006319190620010e6565b601681905550601054600f54600e546200064c91906200111e565b6200065891906200111e565b600d819055506014546013546012546200067391906200111e565b6200067f91906200111e565b601181905550620006a7620006996200099560201b60201c565b6001620009bf60201b60201c565b620006ba306001620009bf60201b60201c565b620006cf61dead6001620009bf60201b60201c565b620006f1620006e36200099560201b60201c565b60016200080a60201b60201c565b620007043060016200080a60201b60201c565b6200071961dead60016200080a60201b60201c565b6200072b338262000af960201b60201c565b5050620012d8565b60006012905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200081a6200073c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008406200099560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000899576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089090620011dc565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009cf6200073c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009f56200099560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a4590620011dc565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000aed91906200121b565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b639062001288565b60405180910390fd5b62000b806000838362000c7260201b60201c565b806002600082825462000b9491906200111e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000beb91906200111e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c529190620012bb565b60405180910390a362000c6e6000838362000c7760201b60201c565b5050565b505050565b505050565b82805462000c8a9062000fa7565b90600052602060002090601f01602090048101928262000cae576000855562000cfa565b82601f1062000cc957805160ff191683800117855562000cfa565b8280016001018555821562000cfa579182015b8281111562000cf957825182559160200191906001019062000cdc565b5b50905062000d09919062000d0d565b5090565b5b8082111562000d2857600081600090555060010162000d0e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000dba5780860481111562000d925762000d9162000d2c565b5b600185161562000da25780820291505b808102905062000db28562000d5b565b945062000d72565b94509492505050565b60008262000dd5576001905062000ea8565b8162000de5576000905062000ea8565b816001811462000dfe576002811462000e095762000e3f565b600191505062000ea8565b60ff84111562000e1e5762000e1d62000d2c565b5b8360020a91508482111562000e385762000e3762000d2c565b5b5062000ea8565b5060208310610133831016604e8410600b841016171562000e795782820a90508381111562000e735762000e7262000d2c565b5b62000ea8565b62000e88848484600162000d68565b9250905081840481111562000ea25762000ea162000d2c565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000ed38262000eaf565b915062000ee08362000eb9565b925062000f0f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000dc3565b905092915050565b600062000f248262000eaf565b915062000f318362000eaf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f6d5762000f6c62000d2c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fc057607f821691505b6020821081141562000fd75762000fd662000f78565b5b50919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200100f8262000fe2565b9050919050565b620010218162001002565b81146200102d57600080fd5b50565b600081519050620010418162001016565b92915050565b60006020828403121562001060576200105f62000fdd565b5b6000620010708482850162001030565b91505092915050565b620010848162001002565b82525050565b6000604082019050620010a1600083018562001079565b620010b0602083018462001079565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010f38262000eaf565b9150620011008362000eaf565b925082620011135762001112620010b7565b5b828204905092915050565b60006200112b8262000eaf565b9150620011388362000eaf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001170576200116f62000d2c565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011c46020836200117b565b9150620011d1826200118c565b602082019050919050565b60006020820190508181036000830152620011f781620011b5565b9050919050565b60008115159050919050565b6200121581620011fe565b82525050565b60006020820190506200123260008301846200120a565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001270601f836200117b565b91506200127d8262001238565b602082019050919050565b60006020820190508181036000830152620012a38162001261565b9050919050565b620012b58162000eaf565b82525050565b6000602082019050620012d26000830184620012aa565b92915050565b60805160a051614f5062001336600039600081816112070152818161136c01526125dd015260008181610f3901528181612585015281816135eb015281816136cc015281816136f30152818161378f01526137b60152614f506000f3fe60806040526004361061031e5760003560e01c806375f0a874116101ab578063afa4f3b2116100f7578063e01af92c11610095578063f11a24d31161006f578063f11a24d314610bcb578063f2fde38b14610bf6578063f637434214610c1f578063f928364c14610c4a57610325565b8063e01af92c14610b60578063e2f4560514610b89578063e884f26014610bb457610325565b8063c876d0b9116100d1578063c876d0b914610aa2578063c8c8ebe414610acd578063d85ba06314610af8578063dd62ed3e14610b2357610325565b8063afa4f3b2146109ff578063b62496f514610a3c578063c024666814610a7957610325565b806395d89b4111610164578063a0d82dc51161013e578063a0d82dc51461092f578063a457c2d71461095a578063a9059cbb14610997578063aa4bde28146109d457610325565b806395d89b41146108ae5780639c3b4fdc146108d95780639fccce321461090457610325565b806375f0a874146107c05780637bce5a04146107eb5780638a8c523c146108165780638da5cb5b1461082d5780638ea5220f14610858578063921369131461088357610325565b80633582ad231161026a5780636902ca611161022357806370a08231116101fd57806370a082311461071a578063715018a61461075757806374010ece1461076e5780637571336a1461079757610325565b80636902ca61146106ad5780636a486a8e146106c45780636ddd1713146106ef57610325565b80633582ad231461057557806339509351146105a057806349bd5a5e146105dd5780634ada218b146106085780634bb2c785146106335780634fbee1931461067057610325565b80631a8145bb116102d757806327a14fc2116102b157806327a14fc2146104cd57806327c8f835146104f65780632d99d32e14610521578063313ce5671461054a57610325565b80631a8145bb1461043a5780631f3fed8f1461046557806323b872dd1461049057610325565b806306fdde031461032a578063095ea7b3146103555780630d075d9c146103925780630f683e90146103bb5780631694505e146103e457806318160ddd1461040f57610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c61565b60405161034c919061391e565b60405180910390f35b34801561036157600080fd5b5061037c600480360381019061037791906139d9565b610cf3565b6040516103899190613a34565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b49190613a4f565b610d11565b005b3480156103c757600080fd5b506103e260048036038101906103dd9190613a4f565b610e24565b005b3480156103f057600080fd5b506103f9610f37565b6040516104069190613b01565b60405180910390f35b34801561041b57600080fd5b50610424610f5b565b6040516104319190613b2b565b60405180910390f35b34801561044657600080fd5b5061044f610f65565b60405161045c9190613b2b565b60405180910390f35b34801561047157600080fd5b5061047a610f6b565b6040516104879190613b2b565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613b46565b610f71565b6040516104c49190613a34565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190613b99565b611069565b005b34801561050257600080fd5b5061050b611183565b6040516105189190613bd5565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190613c1c565b611189565b005b34801561055657600080fd5b5061055f6112a2565b60405161056c9190613c78565b60405180910390f35b34801561058157600080fd5b5061058a6112ab565b6040516105979190613a34565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c291906139d9565b6112be565b6040516105d49190613a34565b60405180910390f35b3480156105e957600080fd5b506105f261136a565b6040516105ff9190613bd5565b60405180910390f35b34801561061457600080fd5b5061061d61138e565b60405161062a9190613a34565b60405180910390f35b34801561063f57600080fd5b5061065a60048036038101906106559190613c93565b6113a1565b6040516106679190613a34565b60405180910390f35b34801561067c57600080fd5b5061069760048036038101906106929190613c93565b6113c1565b6040516106a49190613a34565b60405180910390f35b3480156106b957600080fd5b506106c26113e1565b005b3480156106d057600080fd5b506106d961147a565b6040516106e69190613b2b565b60405180910390f35b3480156106fb57600080fd5b50610704611480565b6040516107119190613a34565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190613c93565b611493565b60405161074e9190613b2b565b60405180910390f35b34801561076357600080fd5b5061076c6114db565b005b34801561077a57600080fd5b5061079560048036038101906107909190613b99565b611563565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613c1c565b61167d565b005b3480156107cc57600080fd5b506107d5611754565b6040516107e29190613bd5565b60405180910390f35b3480156107f757600080fd5b5061080061177a565b60405161080d9190613b2b565b60405180910390f35b34801561082257600080fd5b5061082b611780565b005b34801561083957600080fd5b50610842611834565b60405161084f9190613bd5565b60405180910390f35b34801561086457600080fd5b5061086d61185e565b60405161087a9190613bd5565b60405180910390f35b34801561088f57600080fd5b50610898611884565b6040516108a59190613b2b565b60405180910390f35b3480156108ba57600080fd5b506108c361188a565b6040516108d0919061391e565b60405180910390f35b3480156108e557600080fd5b506108ee61191c565b6040516108fb9190613b2b565b60405180910390f35b34801561091057600080fd5b50610919611922565b6040516109269190613b2b565b60405180910390f35b34801561093b57600080fd5b50610944611928565b6040516109519190613b2b565b60405180910390f35b34801561096657600080fd5b50610981600480360381019061097c91906139d9565b61192e565b60405161098e9190613a34565b60405180910390f35b3480156109a357600080fd5b506109be60048036038101906109b991906139d9565b611a19565b6040516109cb9190613a34565b60405180910390f35b3480156109e057600080fd5b506109e9611a37565b6040516109f69190613b2b565b60405180910390f35b348015610a0b57600080fd5b50610a266004803603810190610a219190613b99565b611a3d565b604051610a339190613a34565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e9190613c93565b611b92565b604051610a709190613a34565b60405180910390f35b348015610a8557600080fd5b50610aa06004803603810190610a9b9190613c1c565b611bb2565b005b348015610aae57600080fd5b50610ab7611cd7565b604051610ac49190613a34565b60405180910390f35b348015610ad957600080fd5b50610ae2611cea565b604051610aef9190613b2b565b60405180910390f35b348015610b0457600080fd5b50610b0d611cf0565b604051610b1a9190613b2b565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b459190613cc0565b611cf6565b604051610b579190613b2b565b60405180910390f35b348015610b6c57600080fd5b50610b876004803603810190610b829190613d00565b611d7d565b005b348015610b9557600080fd5b50610b9e611e16565b604051610bab9190613b2b565b60405180910390f35b348015610bc057600080fd5b50610bc9611e1c565b005b348015610bd757600080fd5b50610be0611eb5565b604051610bed9190613b2b565b60405180910390f35b348015610c0257600080fd5b50610c1d6004803603810190610c189190613c93565b611ebb565b005b348015610c2b57600080fd5b50610c34611fb3565b604051610c419190613b2b565b60405180910390f35b348015610c5657600080fd5b50610c5f611fb9565b005b606060038054610c7090613d5c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9c90613d5c565b8015610ce95780601f10610cbe57610100808354040283529160200191610ce9565b820191906000526020600020905b815481529060010190602001808311610ccc57829003601f168201915b5050505050905090565b6000610d07610d00612052565b848461205a565b6001905092915050565b610d19612052565b73ffffffffffffffffffffffffffffffffffffffff16610d37611834565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490613dda565b60405180910390fd5b600a818385610d9c9190613e29565b610da69190613e29565b1115610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90613ecb565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54610e0f9190613e29565b610e199190613e29565b600d81905550505050565b610e2c612052565b73ffffffffffffffffffffffffffffffffffffffff16610e4a611834565b73ffffffffffffffffffffffffffffffffffffffff1614610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790613dda565b60405180910390fd5b600a818385610eaf9190613e29565b610eb99190613e29565b1115610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190613f37565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254610f229190613e29565b610f2c9190613e29565b601181905550505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600c5481565b600b5481565b6000610f7e848484612225565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fc9612052565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104090613fc9565b60405180910390fd5b61105d85611055612052565b85840361205a565b60019150509392505050565b611071612052565b73ffffffffffffffffffffffffffffffffffffffff1661108f611834565b73ffffffffffffffffffffffffffffffffffffffff16146110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90613dda565b60405180910390fd5b6110ed6112a2565b600a6110f9919061411c565b6103e86005611106610f5b565b6111109190614167565b61111a91906141f0565b61112491906141f0565b811015611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90614293565b60405180910390fd5b670de0b6b3a76400008161117a9190614167565b60178190555050565b61dead81565b611191612052565b73ffffffffffffffffffffffffffffffffffffffff166111af611834565b73ffffffffffffffffffffffffffffffffffffffff1614611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc90613dda565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b90614325565b60405180910390fd5b61129e8282612e9d565b5050565b60006012905090565b601860009054906101000a900460ff1681565b60006113606112cb612052565b8484600160006112d9612052565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461135b9190613e29565b61205a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601860019054906101000a900460ff1681565b601c6020528060005260406000206000915054906101000a900460ff1681565b601b6020528060005260406000206000915054906101000a900460ff1681565b6113e9612052565b73ffffffffffffffffffffffffffffffffffffffff16611407611834565b73ffffffffffffffffffffffffffffffffffffffff161461145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490613dda565b60405180910390fd5b6001601860006101000a81548160ff021916908315150217905550565b60115481565b601860029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114e3612052565b73ffffffffffffffffffffffffffffffffffffffff16611501611834565b73ffffffffffffffffffffffffffffffffffffffff1614611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e90613dda565b60405180910390fd5b6115616000612f3e565b565b61156b612052565b73ffffffffffffffffffffffffffffffffffffffff16611589611834565b73ffffffffffffffffffffffffffffffffffffffff16146115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690613dda565b60405180910390fd5b6115e76112a2565b600a6115f3919061411c565b6103e86001611600610f5b565b61160a9190614167565b61161491906141f0565b61161e91906141f0565b811015611660576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611657906143b7565b60405180910390fd5b670de0b6b3a7640000816116749190614167565b60158190555050565b611685612052565b73ffffffffffffffffffffffffffffffffffffffff166116a3611834565b73ffffffffffffffffffffffffffffffffffffffff16146116f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f090613dda565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b611788612052565b73ffffffffffffffffffffffffffffffffffffffff166117a6611834565b73ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390613dda565b60405180910390fd5b6001601860016101000a81548160ff0219169083151502179055506001601860026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b60606004805461189990613d5c565b80601f01602080910402602001604051908101604052809291908181526020018280546118c590613d5c565b80156119125780601f106118e757610100808354040283529160200191611912565b820191906000526020600020905b8154815290600101906020018083116118f557829003601f168201915b5050505050905090565b600e5481565b600a5481565b60125481565b6000806001600061193d612052565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156119fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f190614449565b60405180910390fd5b611a0e611a05612052565b8585840361205a565b600191505092915050565b6000611a2d611a26612052565b8484612225565b6001905092915050565b60175481565b6000611a47612052565b73ffffffffffffffffffffffffffffffffffffffff16611a65611834565b73ffffffffffffffffffffffffffffffffffffffff1614611abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab290613dda565b60405180910390fd5b620186a06001611ac9610f5b565b611ad39190614167565b611add91906141f0565b821015611b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b16906144db565b60405180910390fd5b6103e86005611b2c610f5b565b611b369190614167565b611b4091906141f0565b821115611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b799061456d565b60405180910390fd5b8160168190555060019050919050565b601d6020528060005260406000206000915054906101000a900460ff1681565b611bba612052565b73ffffffffffffffffffffffffffffffffffffffff16611bd8611834565b73ffffffffffffffffffffffffffffffffffffffff1614611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2590613dda565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ccb9190613a34565b60405180910390a25050565b601a60009054906101000a900460ff1681565b60155481565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d85612052565b73ffffffffffffffffffffffffffffffffffffffff16611da3611834565b73ffffffffffffffffffffffffffffffffffffffff1614611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df090613dda565b60405180910390fd5b80601860026101000a81548160ff02191690831515021790555050565b60165481565b611e24612052565b73ffffffffffffffffffffffffffffffffffffffff16611e42611834565b73ffffffffffffffffffffffffffffffffffffffff1614611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90613dda565b60405180910390fd5b6000601a60006101000a81548160ff021916908315150217905550565b60105481565b611ec3612052565b73ffffffffffffffffffffffffffffffffffffffff16611ee1611834565b73ffffffffffffffffffffffffffffffffffffffff1614611f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2e90613dda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e906145ff565b60405180910390fd5b611fb081612f3e565b50565b60145481565b611fc1612052565b73ffffffffffffffffffffffffffffffffffffffff16611fdf611834565b73ffffffffffffffffffffffffffffffffffffffff1614612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c90613dda565b60405180910390fd5b6000601860006101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190614691565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561213a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213190614723565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122189190613b2b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228c906147b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fc90614847565b60405180910390fd5b600081141561231f5761231a83836000613004565b612e98565b601860009054906101000a900460ff16156129e25761233c611834565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123aa575061237a611834565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123e35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561241d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124365750601a60019054906101000a900460ff16155b156129e157601860019054906101000a900460ff1661253057601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124f05750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61252f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612526906148b3565b60405180910390fd5b5b601a60009054906101000a900460ff16156126f85761254d611834565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125d457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561262c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126f75743601960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106126b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a99061496b565b60405180910390fd5b43601960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561279b5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612842576015548111156127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc906149fd565b60405180910390fd5b6017546127f183611493565b826127fc9190613e29565b111561283d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283490614a69565b60405180910390fd5b6129e0565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128e55750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129345760155481111561292f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292690614afb565b60405180910390fd5b6129df565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166129de5760175461299183611493565b8261299c9190613e29565b11156129dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d490614a69565b60405180910390fd5b5b5b5b5b5b60006016546129f030611493565b10159050808015612a0d5750601860029054906101000a900460ff165b8015612a265750601a60019054906101000a900460ff16155b8015612a7c5750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ad25750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b285750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b6c576001601a60016101000a81548160ff021916908315150217905550612b50613285565b6000601a60016101000a81548160ff0219169083151502179055505b6000601a60019054906101000a900460ff16159050601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c225750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c2c57600090505b60008115612e8957601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c8f57506000601154115b15612d4e57606460115485612ca49190614167565b612cae91906141f0565b905060115460125482612cc19190614167565b612ccb91906141f0565b600a6000828254612cdc9190613e29565b9250508190555060115460135482612cf49190614167565b612cfe91906141f0565b600b6000828254612d0f9190613e29565b9250508190555060115460145482612d279190614167565b612d3191906141f0565b600c6000828254612d429190613e29565b92505081905550612e65565b601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612da957506000600d54115b15612e64576064600d5485612dbe9190614167565b612dc891906141f0565b9050600d54600e5482612ddb9190614167565b612de591906141f0565b600a6000828254612df69190613e29565b92505081905550600d54600f5482612e0e9190614167565b612e1891906141f0565b600b6000828254612e299190613e29565b92505081905550600d5460105482612e419190614167565b612e4b91906141f0565b600c6000828254612e5c9190613e29565b925050819055505b5b6000811115612e7a57612e79863083613004565b5b8084612e869190614b1b565b93505b612e94868686613004565b5050505b505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306b906147b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130db90614847565b60405180910390fd5b6130ef838383613542565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316c90614bc1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132089190613e29565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161326c9190613b2b565b60405180910390a361327f848484613547565b50505050565b600061329030611493565b90506000600c54600b54600a546132a79190613e29565b6132b19190613e29565b90506000808314806132c35750600082145b156132d057505050613540565b60146016546132df9190614167565b8311156132f85760146016546132f59190614167565b92505b6000600283600c548661330b9190614167565b61331591906141f0565b61331f91906141f0565b90506000818561332f9190614b1b565b9050600047905061333f8261354c565b6000814761334d9190614b1b565b9050600086600a54836133609190614167565b61336a91906141f0565b9050600087600b548461337d9190614167565b61338791906141f0565b905060008183856133989190614b1b565b6133a29190614b1b565b90506000600c819055506000600b819055506000600a81905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161340290614c12565b60006040518083038185875af1925050503d806000811461343f576040519150601f19603f3d011682016040523d82523d6000602084013e613444565b606091505b505080985050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161349090614c12565b60006040518083038185875af1925050503d80600081146134cd576040519150601f19603f3d011682016040523d82523d6000602084013e6134d2565b606091505b5050809850506000871180156134e85750600081115b15613535576134f78782613789565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682600c5460405161352c93929190614c27565b60405180910390a15b505050505050505050505b565b505050565b505050565b6000600267ffffffffffffffff81111561356957613568614c5e565b5b6040519080825280602002602001820160405280156135975781602001602082028036833780820191505090505b50905030816000815181106135af576135ae614c8d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136789190614cd1565b8160018151811061368c5761368b614c8d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136f1307f00000000000000000000000000000000000000000000000000000000000000008461205a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613753959493929190614df7565b600060405180830381600087803b15801561376d57600080fd5b505af1158015613781573d6000803e3d6000fd5b505050505050565b6137b4307f00000000000000000000000000000000000000000000000000000000000000008461205a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161383b96959493929190614e51565b60606040518083038185885af1158015613859573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061387e9190614ec7565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156138bf5780820151818401526020810190506138a4565b838111156138ce576000848401525b50505050565b6000601f19601f8301169050919050565b60006138f082613885565b6138fa8185613890565b935061390a8185602086016138a1565b613913816138d4565b840191505092915050565b6000602082019050818103600083015261393881846138e5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061397082613945565b9050919050565b61398081613965565b811461398b57600080fd5b50565b60008135905061399d81613977565b92915050565b6000819050919050565b6139b6816139a3565b81146139c157600080fd5b50565b6000813590506139d3816139ad565b92915050565b600080604083850312156139f0576139ef613940565b5b60006139fe8582860161398e565b9250506020613a0f858286016139c4565b9150509250929050565b60008115159050919050565b613a2e81613a19565b82525050565b6000602082019050613a496000830184613a25565b92915050565b600080600060608486031215613a6857613a67613940565b5b6000613a76868287016139c4565b9350506020613a87868287016139c4565b9250506040613a98868287016139c4565b9150509250925092565b6000819050919050565b6000613ac7613ac2613abd84613945565b613aa2565b613945565b9050919050565b6000613ad982613aac565b9050919050565b6000613aeb82613ace565b9050919050565b613afb81613ae0565b82525050565b6000602082019050613b166000830184613af2565b92915050565b613b25816139a3565b82525050565b6000602082019050613b406000830184613b1c565b92915050565b600080600060608486031215613b5f57613b5e613940565b5b6000613b6d8682870161398e565b9350506020613b7e8682870161398e565b9250506040613b8f868287016139c4565b9150509250925092565b600060208284031215613baf57613bae613940565b5b6000613bbd848285016139c4565b91505092915050565b613bcf81613965565b82525050565b6000602082019050613bea6000830184613bc6565b92915050565b613bf981613a19565b8114613c0457600080fd5b50565b600081359050613c1681613bf0565b92915050565b60008060408385031215613c3357613c32613940565b5b6000613c418582860161398e565b9250506020613c5285828601613c07565b9150509250929050565b600060ff82169050919050565b613c7281613c5c565b82525050565b6000602082019050613c8d6000830184613c69565b92915050565b600060208284031215613ca957613ca8613940565b5b6000613cb78482850161398e565b91505092915050565b60008060408385031215613cd757613cd6613940565b5b6000613ce58582860161398e565b9250506020613cf68582860161398e565b9150509250929050565b600060208284031215613d1657613d15613940565b5b6000613d2484828501613c07565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d7457607f821691505b60208210811415613d8857613d87613d2d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dc4602083613890565b9150613dcf82613d8e565b602082019050919050565b60006020820190508181036000830152613df381613db7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e34826139a3565b9150613e3f836139a3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e7457613e73613dfa565b5b828201905092915050565b7f4d61782062757920666565206973203c3d203130250000000000000000000000600082015250565b6000613eb5601583613890565b9150613ec082613e7f565b602082019050919050565b60006020820190508181036000830152613ee481613ea8565b9050919050565b7f4d61782073656c6c20666565206973203c3d2031302500000000000000000000600082015250565b6000613f21601683613890565b9150613f2c82613eeb565b602082019050919050565b60006020820190508181036000830152613f5081613f14565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613fb3602883613890565b9150613fbe82613f57565b604082019050919050565b60006020820190508181036000830152613fe281613fa6565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156140405780860481111561401c5761401b613dfa565b5b600185161561402b5780820291505b808102905061403985613fe9565b9450614000565b94509492505050565b6000826140595760019050614115565b816140675760009050614115565b816001811461407d5760028114614087576140b6565b6001915050614115565b60ff84111561409957614098613dfa565b5b8360020a9150848211156140b0576140af613dfa565b5b50614115565b5060208310610133831016604e8410600b84101617156140eb5782820a9050838111156140e6576140e5613dfa565b5b614115565b6140f88484846001613ff6565b9250905081840481111561410f5761410e613dfa565b5b81810290505b9392505050565b6000614127826139a3565b915061413283613c5c565b925061415f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614049565b905092915050565b6000614172826139a3565b915061417d836139a3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141b6576141b5613dfa565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141fb826139a3565b9150614206836139a3565b925082614216576142156141c1565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061427d602483613890565b915061428882614221565b604082019050919050565b600060208201905081810360008301526142ac81614270565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061430f603983613890565b915061431a826142b3565b604082019050919050565b6000602082019050818103600083015261433e81614302565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006143a1602f83613890565b91506143ac82614345565b604082019050919050565b600060208201905081810360008301526143d081614394565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614433602583613890565b915061443e826143d7565b604082019050919050565b6000602082019050818103600083015261446281614426565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006144c5603583613890565b91506144d082614469565b604082019050919050565b600060208201905081810360008301526144f4816144b8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614557603483613890565b9150614562826144fb565b604082019050919050565b600060208201905081810360008301526145868161454a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145e9602683613890565b91506145f48261458d565b604082019050919050565b60006020820190508181036000830152614618816145dc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061467b602483613890565b91506146868261461f565b604082019050919050565b600060208201905081810360008301526146aa8161466e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061470d602283613890565b9150614718826146b1565b604082019050919050565b6000602082019050818103600083015261473c81614700565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061479f602583613890565b91506147aa82614743565b604082019050919050565b600060208201905081810360008301526147ce81614792565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614831602383613890565b915061483c826147d5565b604082019050919050565b6000602082019050818103600083015261486081614824565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061489d601683613890565b91506148a882614867565b602082019050919050565b600060208201905081810360008301526148cc81614890565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614955604983613890565b9150614960826148d3565b606082019050919050565b6000602082019050818103600083015261498481614948565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006149e7603583613890565b91506149f28261498b565b604082019050919050565b60006020820190508181036000830152614a16816149da565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614a53601383613890565b9150614a5e82614a1d565b602082019050919050565b60006020820190508181036000830152614a8281614a46565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614ae5603683613890565b9150614af082614a89565b604082019050919050565b60006020820190508181036000830152614b1481614ad8565b9050919050565b6000614b26826139a3565b9150614b31836139a3565b925082821015614b4457614b43613dfa565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614bab602683613890565b9150614bb682614b4f565b604082019050919050565b60006020820190508181036000830152614bda81614b9e565b9050919050565b600081905092915050565b50565b6000614bfc600083614be1565b9150614c0782614bec565b600082019050919050565b6000614c1d82614bef565b9150819050919050565b6000606082019050614c3c6000830186613b1c565b614c496020830185613b1c565b614c566040830184613b1c565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614ccb81613977565b92915050565b600060208284031215614ce757614ce6613940565b5b6000614cf584828501614cbc565b91505092915050565b6000819050919050565b6000614d23614d1e614d1984614cfe565b613aa2565b6139a3565b9050919050565b614d3381614d08565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d6e81613965565b82525050565b6000614d808383614d65565b60208301905092915050565b6000602082019050919050565b6000614da482614d39565b614dae8185614d44565b9350614db983614d55565b8060005b83811015614dea578151614dd18882614d74565b9750614ddc83614d8c565b925050600181019050614dbd565b5085935050505092915050565b600060a082019050614e0c6000830188613b1c565b614e196020830187614d2a565b8181036040830152614e2b8186614d99565b9050614e3a6060830185613bc6565b614e476080830184613b1c565b9695505050505050565b600060c082019050614e666000830189613bc6565b614e736020830188613b1c565b614e806040830187614d2a565b614e8d6060830186614d2a565b614e9a6080830185613bc6565b614ea760a0830184613b1c565b979650505050505050565b600081519050614ec1816139ad565b92915050565b600080600060608486031215614ee057614edf613940565b5b6000614eee86828701614eb2565b9350506020614eff86828701614eb2565b9250506040614f1086828701614eb2565b915050925092509256fea2646970667358221220186c1a30248311632c2887561dcf0dda907bacdcee3e3876ef16203802a6a9bf64736f6c634300080c0033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806375f0a874116101ab578063afa4f3b2116100f7578063e01af92c11610095578063f11a24d31161006f578063f11a24d314610bcb578063f2fde38b14610bf6578063f637434214610c1f578063f928364c14610c4a57610325565b8063e01af92c14610b60578063e2f4560514610b89578063e884f26014610bb457610325565b8063c876d0b9116100d1578063c876d0b914610aa2578063c8c8ebe414610acd578063d85ba06314610af8578063dd62ed3e14610b2357610325565b8063afa4f3b2146109ff578063b62496f514610a3c578063c024666814610a7957610325565b806395d89b4111610164578063a0d82dc51161013e578063a0d82dc51461092f578063a457c2d71461095a578063a9059cbb14610997578063aa4bde28146109d457610325565b806395d89b41146108ae5780639c3b4fdc146108d95780639fccce321461090457610325565b806375f0a874146107c05780637bce5a04146107eb5780638a8c523c146108165780638da5cb5b1461082d5780638ea5220f14610858578063921369131461088357610325565b80633582ad231161026a5780636902ca611161022357806370a08231116101fd57806370a082311461071a578063715018a61461075757806374010ece1461076e5780637571336a1461079757610325565b80636902ca61146106ad5780636a486a8e146106c45780636ddd1713146106ef57610325565b80633582ad231461057557806339509351146105a057806349bd5a5e146105dd5780634ada218b146106085780634bb2c785146106335780634fbee1931461067057610325565b80631a8145bb116102d757806327a14fc2116102b157806327a14fc2146104cd57806327c8f835146104f65780632d99d32e14610521578063313ce5671461054a57610325565b80631a8145bb1461043a5780631f3fed8f1461046557806323b872dd1461049057610325565b806306fdde031461032a578063095ea7b3146103555780630d075d9c146103925780630f683e90146103bb5780631694505e146103e457806318160ddd1461040f57610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c61565b60405161034c919061391e565b60405180910390f35b34801561036157600080fd5b5061037c600480360381019061037791906139d9565b610cf3565b6040516103899190613a34565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b49190613a4f565b610d11565b005b3480156103c757600080fd5b506103e260048036038101906103dd9190613a4f565b610e24565b005b3480156103f057600080fd5b506103f9610f37565b6040516104069190613b01565b60405180910390f35b34801561041b57600080fd5b50610424610f5b565b6040516104319190613b2b565b60405180910390f35b34801561044657600080fd5b5061044f610f65565b60405161045c9190613b2b565b60405180910390f35b34801561047157600080fd5b5061047a610f6b565b6040516104879190613b2b565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613b46565b610f71565b6040516104c49190613a34565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190613b99565b611069565b005b34801561050257600080fd5b5061050b611183565b6040516105189190613bd5565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190613c1c565b611189565b005b34801561055657600080fd5b5061055f6112a2565b60405161056c9190613c78565b60405180910390f35b34801561058157600080fd5b5061058a6112ab565b6040516105979190613a34565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c291906139d9565b6112be565b6040516105d49190613a34565b60405180910390f35b3480156105e957600080fd5b506105f261136a565b6040516105ff9190613bd5565b60405180910390f35b34801561061457600080fd5b5061061d61138e565b60405161062a9190613a34565b60405180910390f35b34801561063f57600080fd5b5061065a60048036038101906106559190613c93565b6113a1565b6040516106679190613a34565b60405180910390f35b34801561067c57600080fd5b5061069760048036038101906106929190613c93565b6113c1565b6040516106a49190613a34565b60405180910390f35b3480156106b957600080fd5b506106c26113e1565b005b3480156106d057600080fd5b506106d961147a565b6040516106e69190613b2b565b60405180910390f35b3480156106fb57600080fd5b50610704611480565b6040516107119190613a34565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190613c93565b611493565b60405161074e9190613b2b565b60405180910390f35b34801561076357600080fd5b5061076c6114db565b005b34801561077a57600080fd5b5061079560048036038101906107909190613b99565b611563565b005b3480156107a357600080fd5b506107be60048036038101906107b99190613c1c565b61167d565b005b3480156107cc57600080fd5b506107d5611754565b6040516107e29190613bd5565b60405180910390f35b3480156107f757600080fd5b5061080061177a565b60405161080d9190613b2b565b60405180910390f35b34801561082257600080fd5b5061082b611780565b005b34801561083957600080fd5b50610842611834565b60405161084f9190613bd5565b60405180910390f35b34801561086457600080fd5b5061086d61185e565b60405161087a9190613bd5565b60405180910390f35b34801561088f57600080fd5b50610898611884565b6040516108a59190613b2b565b60405180910390f35b3480156108ba57600080fd5b506108c361188a565b6040516108d0919061391e565b60405180910390f35b3480156108e557600080fd5b506108ee61191c565b6040516108fb9190613b2b565b60405180910390f35b34801561091057600080fd5b50610919611922565b6040516109269190613b2b565b60405180910390f35b34801561093b57600080fd5b50610944611928565b6040516109519190613b2b565b60405180910390f35b34801561096657600080fd5b50610981600480360381019061097c91906139d9565b61192e565b60405161098e9190613a34565b60405180910390f35b3480156109a357600080fd5b506109be60048036038101906109b991906139d9565b611a19565b6040516109cb9190613a34565b60405180910390f35b3480156109e057600080fd5b506109e9611a37565b6040516109f69190613b2b565b60405180910390f35b348015610a0b57600080fd5b50610a266004803603810190610a219190613b99565b611a3d565b604051610a339190613a34565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e9190613c93565b611b92565b604051610a709190613a34565b60405180910390f35b348015610a8557600080fd5b50610aa06004803603810190610a9b9190613c1c565b611bb2565b005b348015610aae57600080fd5b50610ab7611cd7565b604051610ac49190613a34565b60405180910390f35b348015610ad957600080fd5b50610ae2611cea565b604051610aef9190613b2b565b60405180910390f35b348015610b0457600080fd5b50610b0d611cf0565b604051610b1a9190613b2b565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b459190613cc0565b611cf6565b604051610b579190613b2b565b60405180910390f35b348015610b6c57600080fd5b50610b876004803603810190610b829190613d00565b611d7d565b005b348015610b9557600080fd5b50610b9e611e16565b604051610bab9190613b2b565b60405180910390f35b348015610bc057600080fd5b50610bc9611e1c565b005b348015610bd757600080fd5b50610be0611eb5565b604051610bed9190613b2b565b60405180910390f35b348015610c0257600080fd5b50610c1d6004803603810190610c189190613c93565b611ebb565b005b348015610c2b57600080fd5b50610c34611fb3565b604051610c419190613b2b565b60405180910390f35b348015610c5657600080fd5b50610c5f611fb9565b005b606060038054610c7090613d5c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9c90613d5c565b8015610ce95780601f10610cbe57610100808354040283529160200191610ce9565b820191906000526020600020905b815481529060010190602001808311610ccc57829003601f168201915b5050505050905090565b6000610d07610d00612052565b848461205a565b6001905092915050565b610d19612052565b73ffffffffffffffffffffffffffffffffffffffff16610d37611834565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490613dda565b60405180910390fd5b600a818385610d9c9190613e29565b610da69190613e29565b1115610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90613ecb565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54610e0f9190613e29565b610e199190613e29565b600d81905550505050565b610e2c612052565b73ffffffffffffffffffffffffffffffffffffffff16610e4a611834565b73ffffffffffffffffffffffffffffffffffffffff1614610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790613dda565b60405180910390fd5b600a818385610eaf9190613e29565b610eb99190613e29565b1115610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190613f37565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254610f229190613e29565b610f2c9190613e29565b601181905550505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600c5481565b600b5481565b6000610f7e848484612225565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fc9612052565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104090613fc9565b60405180910390fd5b61105d85611055612052565b85840361205a565b60019150509392505050565b611071612052565b73ffffffffffffffffffffffffffffffffffffffff1661108f611834565b73ffffffffffffffffffffffffffffffffffffffff16146110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90613dda565b60405180910390fd5b6110ed6112a2565b600a6110f9919061411c565b6103e86005611106610f5b565b6111109190614167565b61111a91906141f0565b61112491906141f0565b811015611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90614293565b60405180910390fd5b670de0b6b3a76400008161117a9190614167565b60178190555050565b61dead81565b611191612052565b73ffffffffffffffffffffffffffffffffffffffff166111af611834565b73ffffffffffffffffffffffffffffffffffffffff1614611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc90613dda565b60405180910390fd5b7f000000000000000000000000ad329b5c2020dfff589f559b278bdd6f9a1c3e8e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b90614325565b60405180910390fd5b61129e8282612e9d565b5050565b60006012905090565b601860009054906101000a900460ff1681565b60006113606112cb612052565b8484600160006112d9612052565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461135b9190613e29565b61205a565b6001905092915050565b7f000000000000000000000000ad329b5c2020dfff589f559b278bdd6f9a1c3e8e81565b601860019054906101000a900460ff1681565b601c6020528060005260406000206000915054906101000a900460ff1681565b601b6020528060005260406000206000915054906101000a900460ff1681565b6113e9612052565b73ffffffffffffffffffffffffffffffffffffffff16611407611834565b73ffffffffffffffffffffffffffffffffffffffff161461145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490613dda565b60405180910390fd5b6001601860006101000a81548160ff021916908315150217905550565b60115481565b601860029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114e3612052565b73ffffffffffffffffffffffffffffffffffffffff16611501611834565b73ffffffffffffffffffffffffffffffffffffffff1614611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e90613dda565b60405180910390fd5b6115616000612f3e565b565b61156b612052565b73ffffffffffffffffffffffffffffffffffffffff16611589611834565b73ffffffffffffffffffffffffffffffffffffffff16146115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690613dda565b60405180910390fd5b6115e76112a2565b600a6115f3919061411c565b6103e86001611600610f5b565b61160a9190614167565b61161491906141f0565b61161e91906141f0565b811015611660576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611657906143b7565b60405180910390fd5b670de0b6b3a7640000816116749190614167565b60158190555050565b611685612052565b73ffffffffffffffffffffffffffffffffffffffff166116a3611834565b73ffffffffffffffffffffffffffffffffffffffff16146116f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f090613dda565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b611788612052565b73ffffffffffffffffffffffffffffffffffffffff166117a6611834565b73ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390613dda565b60405180910390fd5b6001601860016101000a81548160ff0219169083151502179055506001601860026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b60606004805461189990613d5c565b80601f01602080910402602001604051908101604052809291908181526020018280546118c590613d5c565b80156119125780601f106118e757610100808354040283529160200191611912565b820191906000526020600020905b8154815290600101906020018083116118f557829003601f168201915b5050505050905090565b600e5481565b600a5481565b60125481565b6000806001600061193d612052565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156119fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f190614449565b60405180910390fd5b611a0e611a05612052565b8585840361205a565b600191505092915050565b6000611a2d611a26612052565b8484612225565b6001905092915050565b60175481565b6000611a47612052565b73ffffffffffffffffffffffffffffffffffffffff16611a65611834565b73ffffffffffffffffffffffffffffffffffffffff1614611abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab290613dda565b60405180910390fd5b620186a06001611ac9610f5b565b611ad39190614167565b611add91906141f0565b821015611b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b16906144db565b60405180910390fd5b6103e86005611b2c610f5b565b611b369190614167565b611b4091906141f0565b821115611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b799061456d565b60405180910390fd5b8160168190555060019050919050565b601d6020528060005260406000206000915054906101000a900460ff1681565b611bba612052565b73ffffffffffffffffffffffffffffffffffffffff16611bd8611834565b73ffffffffffffffffffffffffffffffffffffffff1614611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2590613dda565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ccb9190613a34565b60405180910390a25050565b601a60009054906101000a900460ff1681565b60155481565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d85612052565b73ffffffffffffffffffffffffffffffffffffffff16611da3611834565b73ffffffffffffffffffffffffffffffffffffffff1614611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df090613dda565b60405180910390fd5b80601860026101000a81548160ff02191690831515021790555050565b60165481565b611e24612052565b73ffffffffffffffffffffffffffffffffffffffff16611e42611834565b73ffffffffffffffffffffffffffffffffffffffff1614611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90613dda565b60405180910390fd5b6000601a60006101000a81548160ff021916908315150217905550565b60105481565b611ec3612052565b73ffffffffffffffffffffffffffffffffffffffff16611ee1611834565b73ffffffffffffffffffffffffffffffffffffffff1614611f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2e90613dda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e906145ff565b60405180910390fd5b611fb081612f3e565b50565b60145481565b611fc1612052565b73ffffffffffffffffffffffffffffffffffffffff16611fdf611834565b73ffffffffffffffffffffffffffffffffffffffff1614612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c90613dda565b60405180910390fd5b6000601860006101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190614691565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561213a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213190614723565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122189190613b2b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228c906147b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fc90614847565b60405180910390fd5b600081141561231f5761231a83836000613004565b612e98565b601860009054906101000a900460ff16156129e25761233c611834565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123aa575061237a611834565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123e35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561241d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124365750601a60019054906101000a900460ff16155b156129e157601860019054906101000a900460ff1661253057601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124f05750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61252f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612526906148b3565b60405180910390fd5b5b601a60009054906101000a900460ff16156126f85761254d611834565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125d457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561262c57507f000000000000000000000000ad329b5c2020dfff589f559b278bdd6f9a1c3e8e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156126f75743601960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106126b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a99061496b565b60405180910390fd5b43601960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561279b5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612842576015548111156127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc906149fd565b60405180910390fd5b6017546127f183611493565b826127fc9190613e29565b111561283d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283490614a69565b60405180910390fd5b6129e0565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128e55750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129345760155481111561292f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292690614afb565b60405180910390fd5b6129df565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166129de5760175461299183611493565b8261299c9190613e29565b11156129dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d490614a69565b60405180910390fd5b5b5b5b5b5b60006016546129f030611493565b10159050808015612a0d5750601860029054906101000a900460ff165b8015612a265750601a60019054906101000a900460ff16155b8015612a7c5750601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ad25750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b285750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b6c576001601a60016101000a81548160ff021916908315150217905550612b50613285565b6000601a60016101000a81548160ff0219169083151502179055505b6000601a60019054906101000a900460ff16159050601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c225750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c2c57600090505b60008115612e8957601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c8f57506000601154115b15612d4e57606460115485612ca49190614167565b612cae91906141f0565b905060115460125482612cc19190614167565b612ccb91906141f0565b600a6000828254612cdc9190613e29565b9250508190555060115460135482612cf49190614167565b612cfe91906141f0565b600b6000828254612d0f9190613e29565b9250508190555060115460145482612d279190614167565b612d3191906141f0565b600c6000828254612d429190613e29565b92505081905550612e65565b601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612da957506000600d54115b15612e64576064600d5485612dbe9190614167565b612dc891906141f0565b9050600d54600e5482612ddb9190614167565b612de591906141f0565b600a6000828254612df69190613e29565b92505081905550600d54600f5482612e0e9190614167565b612e1891906141f0565b600b6000828254612e299190613e29565b92505081905550600d5460105482612e419190614167565b612e4b91906141f0565b600c6000828254612e5c9190613e29565b925050819055505b5b6000811115612e7a57612e79863083613004565b5b8084612e869190614b1b565b93505b612e94868686613004565b5050505b505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306b906147b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130db90614847565b60405180910390fd5b6130ef838383613542565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316c90614bc1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132089190613e29565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161326c9190613b2b565b60405180910390a361327f848484613547565b50505050565b600061329030611493565b90506000600c54600b54600a546132a79190613e29565b6132b19190613e29565b90506000808314806132c35750600082145b156132d057505050613540565b60146016546132df9190614167565b8311156132f85760146016546132f59190614167565b92505b6000600283600c548661330b9190614167565b61331591906141f0565b61331f91906141f0565b90506000818561332f9190614b1b565b9050600047905061333f8261354c565b6000814761334d9190614b1b565b9050600086600a54836133609190614167565b61336a91906141f0565b9050600087600b548461337d9190614167565b61338791906141f0565b905060008183856133989190614b1b565b6133a29190614b1b565b90506000600c819055506000600b819055506000600a81905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161340290614c12565b60006040518083038185875af1925050503d806000811461343f576040519150601f19603f3d011682016040523d82523d6000602084013e613444565b606091505b505080985050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161349090614c12565b60006040518083038185875af1925050503d80600081146134cd576040519150601f19603f3d011682016040523d82523d6000602084013e6134d2565b606091505b5050809850506000871180156134e85750600081115b15613535576134f78782613789565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682600c5460405161352c93929190614c27565b60405180910390a15b505050505050505050505b565b505050565b505050565b6000600267ffffffffffffffff81111561356957613568614c5e565b5b6040519080825280602002602001820160405280156135975781602001602082028036833780820191505090505b50905030816000815181106135af576135ae614c8d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136789190614cd1565b8160018151811061368c5761368b614c8d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136f1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461205a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613753959493929190614df7565b600060405180830381600087803b15801561376d57600080fd5b505af1158015613781573d6000803e3d6000fd5b505050505050565b6137b4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461205a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161383b96959493929190614e51565b60606040518083038185885af1158015613859573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061387e9190614ec7565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156138bf5780820151818401526020810190506138a4565b838111156138ce576000848401525b50505050565b6000601f19601f8301169050919050565b60006138f082613885565b6138fa8185613890565b935061390a8185602086016138a1565b613913816138d4565b840191505092915050565b6000602082019050818103600083015261393881846138e5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061397082613945565b9050919050565b61398081613965565b811461398b57600080fd5b50565b60008135905061399d81613977565b92915050565b6000819050919050565b6139b6816139a3565b81146139c157600080fd5b50565b6000813590506139d3816139ad565b92915050565b600080604083850312156139f0576139ef613940565b5b60006139fe8582860161398e565b9250506020613a0f858286016139c4565b9150509250929050565b60008115159050919050565b613a2e81613a19565b82525050565b6000602082019050613a496000830184613a25565b92915050565b600080600060608486031215613a6857613a67613940565b5b6000613a76868287016139c4565b9350506020613a87868287016139c4565b9250506040613a98868287016139c4565b9150509250925092565b6000819050919050565b6000613ac7613ac2613abd84613945565b613aa2565b613945565b9050919050565b6000613ad982613aac565b9050919050565b6000613aeb82613ace565b9050919050565b613afb81613ae0565b82525050565b6000602082019050613b166000830184613af2565b92915050565b613b25816139a3565b82525050565b6000602082019050613b406000830184613b1c565b92915050565b600080600060608486031215613b5f57613b5e613940565b5b6000613b6d8682870161398e565b9350506020613b7e8682870161398e565b9250506040613b8f868287016139c4565b9150509250925092565b600060208284031215613baf57613bae613940565b5b6000613bbd848285016139c4565b91505092915050565b613bcf81613965565b82525050565b6000602082019050613bea6000830184613bc6565b92915050565b613bf981613a19565b8114613c0457600080fd5b50565b600081359050613c1681613bf0565b92915050565b60008060408385031215613c3357613c32613940565b5b6000613c418582860161398e565b9250506020613c5285828601613c07565b9150509250929050565b600060ff82169050919050565b613c7281613c5c565b82525050565b6000602082019050613c8d6000830184613c69565b92915050565b600060208284031215613ca957613ca8613940565b5b6000613cb78482850161398e565b91505092915050565b60008060408385031215613cd757613cd6613940565b5b6000613ce58582860161398e565b9250506020613cf68582860161398e565b9150509250929050565b600060208284031215613d1657613d15613940565b5b6000613d2484828501613c07565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d7457607f821691505b60208210811415613d8857613d87613d2d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dc4602083613890565b9150613dcf82613d8e565b602082019050919050565b60006020820190508181036000830152613df381613db7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e34826139a3565b9150613e3f836139a3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e7457613e73613dfa565b5b828201905092915050565b7f4d61782062757920666565206973203c3d203130250000000000000000000000600082015250565b6000613eb5601583613890565b9150613ec082613e7f565b602082019050919050565b60006020820190508181036000830152613ee481613ea8565b9050919050565b7f4d61782073656c6c20666565206973203c3d2031302500000000000000000000600082015250565b6000613f21601683613890565b9150613f2c82613eeb565b602082019050919050565b60006020820190508181036000830152613f5081613f14565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613fb3602883613890565b9150613fbe82613f57565b604082019050919050565b60006020820190508181036000830152613fe281613fa6565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156140405780860481111561401c5761401b613dfa565b5b600185161561402b5780820291505b808102905061403985613fe9565b9450614000565b94509492505050565b6000826140595760019050614115565b816140675760009050614115565b816001811461407d5760028114614087576140b6565b6001915050614115565b60ff84111561409957614098613dfa565b5b8360020a9150848211156140b0576140af613dfa565b5b50614115565b5060208310610133831016604e8410600b84101617156140eb5782820a9050838111156140e6576140e5613dfa565b5b614115565b6140f88484846001613ff6565b9250905081840481111561410f5761410e613dfa565b5b81810290505b9392505050565b6000614127826139a3565b915061413283613c5c565b925061415f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614049565b905092915050565b6000614172826139a3565b915061417d836139a3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141b6576141b5613dfa565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141fb826139a3565b9150614206836139a3565b925082614216576142156141c1565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061427d602483613890565b915061428882614221565b604082019050919050565b600060208201905081810360008301526142ac81614270565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061430f603983613890565b915061431a826142b3565b604082019050919050565b6000602082019050818103600083015261433e81614302565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006143a1602f83613890565b91506143ac82614345565b604082019050919050565b600060208201905081810360008301526143d081614394565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614433602583613890565b915061443e826143d7565b604082019050919050565b6000602082019050818103600083015261446281614426565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006144c5603583613890565b91506144d082614469565b604082019050919050565b600060208201905081810360008301526144f4816144b8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614557603483613890565b9150614562826144fb565b604082019050919050565b600060208201905081810360008301526145868161454a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145e9602683613890565b91506145f48261458d565b604082019050919050565b60006020820190508181036000830152614618816145dc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061467b602483613890565b91506146868261461f565b604082019050919050565b600060208201905081810360008301526146aa8161466e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061470d602283613890565b9150614718826146b1565b604082019050919050565b6000602082019050818103600083015261473c81614700565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061479f602583613890565b91506147aa82614743565b604082019050919050565b600060208201905081810360008301526147ce81614792565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614831602383613890565b915061483c826147d5565b604082019050919050565b6000602082019050818103600083015261486081614824565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061489d601683613890565b91506148a882614867565b602082019050919050565b600060208201905081810360008301526148cc81614890565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614955604983613890565b9150614960826148d3565b606082019050919050565b6000602082019050818103600083015261498481614948565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006149e7603583613890565b91506149f28261498b565b604082019050919050565b60006020820190508181036000830152614a16816149da565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614a53601383613890565b9150614a5e82614a1d565b602082019050919050565b60006020820190508181036000830152614a8281614a46565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614ae5603683613890565b9150614af082614a89565b604082019050919050565b60006020820190508181036000830152614b1481614ad8565b9050919050565b6000614b26826139a3565b9150614b31836139a3565b925082821015614b4457614b43613dfa565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614bab602683613890565b9150614bb682614b4f565b604082019050919050565b60006020820190508181036000830152614bda81614b9e565b9050919050565b600081905092915050565b50565b6000614bfc600083614be1565b9150614c0782614bec565b600082019050919050565b6000614c1d82614bef565b9150819050919050565b6000606082019050614c3c6000830186613b1c565b614c496020830185613b1c565b614c566040830184613b1c565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614ccb81613977565b92915050565b600060208284031215614ce757614ce6613940565b5b6000614cf584828501614cbc565b91505092915050565b6000819050919050565b6000614d23614d1e614d1984614cfe565b613aa2565b6139a3565b9050919050565b614d3381614d08565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614d6e81613965565b82525050565b6000614d808383614d65565b60208301905092915050565b6000602082019050919050565b6000614da482614d39565b614dae8185614d44565b9350614db983614d55565b8060005b83811015614dea578151614dd18882614d74565b9750614ddc83614d8c565b925050600181019050614dbd565b5085935050505092915050565b600060a082019050614e0c6000830188613b1c565b614e196020830187614d2a565b8181036040830152614e2b8186614d99565b9050614e3a6060830185613bc6565b614e476080830184613b1c565b9695505050505050565b600060c082019050614e666000830189613bc6565b614e736020830188613b1c565b614e806040830187614d2a565b614e8d6060830186614d2a565b614e9a6080830185613bc6565b614ea760a0830184613b1c565b979650505050505050565b600081519050614ec1816139ad565b92915050565b600080600060608486031215614ee057614edf613940565b5b6000614eee86828701614eb2565b9350506020614eff86828701614eb2565b9250506040614f1086828701614eb2565b915050925092509256fea2646970667358221220186c1a30248311632c2887561dcf0dda907bacdcee3e3876ef16203802a6a9bf64736f6c634300080c0033

Deployed Bytecode Sourcemap

16683:14410:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5616:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6971:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22873:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23310:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17991:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6253:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17123:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17083;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7183:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22230:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18094:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23971:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6118:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17845:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7762:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18049:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17884:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18543:62;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18486:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21137:82;;;;;;;;;;;;;:::i;:::-;;17373:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17925:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6401:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2446:103;;;;;;;;;;;;;:::i;:::-;;21936:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22512:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16941:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17259:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20924:113;;;;;;;;;;;;;:::i;:::-;;2018:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16856:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17444:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5798:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17224:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17049:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17408:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8064:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6567:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17712:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21466:420;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18763:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23756:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18339:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17549:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17190:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6782:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22744:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17672:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21298:98;;;;;;;;;;;;;:::i;:::-;;17300:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2632:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17486:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21045:84;;;;;;;;;;;;;:::i;:::-;;5616:100;5670:13;5703:5;5696:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5616:100;:::o;6971:169::-;7054:4;7071:39;7080:12;:10;:12::i;:::-;7094:7;7103:6;7071:8;:39::i;:::-;7128:4;7121:11;;6971:169;;;;:::o;22873:404::-;2226:12;:10;:12::i;:::-;2215:23;;:7;:5;:7::i;:::-;:23;;;2207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23061:2:::1;23043:13;23027;23017:7;:23;;;;:::i;:::-;:39;;;;:::i;:::-;23016:47;;23008:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;23106:7;23094:9;:19;;;;23142:13;23124:15;:31;;;;23184:13;23166:15;:31;;;;23253:15;;23235;;23223:9;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;23208:12;:60;;;;22873:404:::0;;;:::o;23310:412::-;2226:12;:10;:12::i;:::-;2215:23;;:7;:5;:7::i;:::-;:23;;;2207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23499:2:::1;23481:13;23465;23455:7;:23;;;;:::i;:::-;:39;;;;:::i;:::-;23454:47;;23446:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;23546:7;23533:10;:20;;;;23583:13;23564:16;:32;;;;23626:13;23607:16;:32;;;;23698:16;;23679;;23666:10;;:29;;;;:::i;:::-;:48;;;;:::i;:::-;23650:13;:64;;;;23310:412:::0;;;:::o;17991:51::-;;;:::o;6253:108::-;6314:7;6341:12;;6334:19;;6253:108;:::o;17123:33::-;;;;:::o;17083:::-;;;;:::o;7183:492::-;7323:4;7340:36;7350:6;7358:9;7369:6;7340:9;:36::i;:::-;7389:24;7416:11;:19;7428:6;7416:19;;;;;;;;;;;;;;;:33;7436:12;:10;:12::i;:::-;7416:33;;;;;;;;;;;;;;;;7389:60;;7488:6;7468:16;:26;;7460:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;7575:57;7584:6;7592:12;:10;:12::i;:::-;7625:6;7606:16;:25;7575:8;:57::i;:::-;7663:4;7656:11;;;7183:492;;;;;:::o;22230:236::-;2226:12;:10;:12::i;:::-;2215:23;;:7;:5;:7::i;:::-;:23;;;2207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22360:10:::1;:8;:10::i;:::-;22354:2;:16;;;;:::i;:::-;22345:4;22340:1;22324:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22323:26;;;;:::i;:::-;22322:49;;;;:::i;:::-;22312:6;:59;;22304:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;22451:6;22441;:17;;;;:::i;:::-;22423:15;:35;;;;22230:236:::0;:::o;18094:53::-;18140:6;18094:53;:::o;23971:213::-;2226:12;:10;:12::i;:::-;2215:23;;:7;:5;:7::i;:::-;:23;;;2207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24066:13:::1;24058:21;;:4;:21;;;;24050:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;24152:24;24164:4;24170:5;24152:11;:24::i;:::-;23971:213:::0;;:::o;6118:93::-;6176:5;6201:2;6194:9;;6118:93;:::o;17845:32::-;;;;;;;;;;;;;:::o;7762:215::-;7850:4;7867:80;7876:12;:10;:12::i;:::-;7890:7;7936:10;7899:11;:25;7911:12;:10;:12::i;:::-;7899:25;;;;;;;;;;;;;;;:34;7925:7;7899:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;7867:8;:80::i;:::-;7965:4;7958:11;;7762:215;;;;:::o;18049:38::-;;;:::o;17884:34::-;;;;;;;;;;;;;:::o;18543:62::-;;;;;;;;;;;;;;;;;;;;;;:::o;18486:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;21137:82::-;2226:12;:10;:12::i;:::-;2215:23;;:7;:5;:7::i;:::-;:23;;;2207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21207:4:::1;21191:13;;:20;;;;;;;;;;;;;;;;;;21137:82::o:0;17373:28::-;;;;:::o;17925:31::-;;;;;;;;;;;;;:::o;6401:127::-;6475:7;6502:9;:18;6512:7;6502:18;;;;;;;;;;;;;;;;6495:25;;6401:127;;;:::o;2446:103::-;2226:12;:10;:12::i;:::-;2215:23;;:7;:5;:7::i;:::-;:23;;;2207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2511:30:::1;2538:1;2511:18;:30::i;:::-;2446:103::o:0;21936:249::-;2226:12;:10;:12::i;:::-;2215:23;;:7;:5;:7::i;:::-;:23;;;2207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22063:10:::1;:8;:10::i;:::-;22057:2;:16;;;;:::i;:::-;22048:4;22043:1;22027:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22026:26;;;;:::i;:::-;22025:49;;;;:::i;:::-;22015:6;:59;;22007:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;22170:6;22160;:17;;;;:::i;:::-;22137:20;:40;;;;21936:249:::0;:::o;22512:148::-;2226:12;:10;:12::i;:::-;2215:23;;:7;:5;:7::i;:::-;:23;;;2207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22648:4:::1;22607:30;:38;22638:6;22607:38;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;22512:148:::0;;:::o;16941:84::-;;;;;;;;;;;;;:::o;17259:34::-;;;;:::o;20924:113::-;2226:12;:10;:12::i;:::-;2215:23;;:7;:5;:7::i;:::-;:23;;;2207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20996:4:::1;20979:14;;:21;;;;;;;;;;;;;;;;;;21025:4;21011:11;;:18;;;;;;;;;;;;;;;;;;20924:113::o:0;2018:87::-;2064:7;2091:6;;;;;;;;;;;2084:13;;2018:87;:::o;16856:78::-;;;;;;;;;;;;;:::o;17444:35::-;;;;:::o;5798:104::-;5854:13;5887:7;5880:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5798:104;:::o;17224:28::-;;;;:::o;17049:27::-;;;;:::o;17408:29::-;;;;:::o;8064:413::-;8157:4;8174:24;8201:11;:25;8213:12;:10;:12::i;:::-;8201:25;;;;;;;;;;;;;;;:34;8227:7;8201:34;;;;;;;;;;;;;;;;8174:61;;8274:15;8254:16;:35;;8246:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;8367:67;8376:12;:10;:12::i;:::-;8390:7;8418:15;8399:16;:34;8367:8;:67::i;:::-;8465:4;8458:11;;;8064:413;;;;:::o;6567:175::-;6653:4;6670:42;6680:12;:10;:12::i;:::-;6694:9;6705:6;6670:9;:42::i;:::-;6730:4;6723:11;;6567:175;;;;:::o;17712:62::-;;;;:::o;21466:420::-;21571:4;2226:12;:10;:12::i;:::-;2215:23;;:7;:5;:7::i;:::-;:23;;;2207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21636:6:::1;21631:1;21615:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21614:28;;;;:::i;:::-;21601:9;:41;;21593:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;21754:4;21749:1;21733:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21732:26;;;;:::i;:::-;21719:9;:39;;21711:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;21847:9;21826:18;:30;;;;21874:4;21867:11;;21466:420:::0;;;:::o;18763:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;23756:181::-;2226:12;:10;:12::i;:::-;2215:23;;:7;:5;:7::i;:::-;:23;;;2207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23871:8:::1;23841:18;:27;23860:7;23841:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;23911:7;23895:34;;;23920:8;23895:34;;;;;;:::i;:::-;;;;;;;;23756:181:::0;;:::o;18339:39::-;;;;;;;;;;;;;:::o;17549:67::-;;;;:::o;17190:27::-;;;;:::o;6782:151::-;6871:7;6898:11;:18;6910:5;6898:18;;;;;;;;;;;;;;;:27;6917:7;6898:27;;;;;;;;;;;;;;;;6891:34;;6782:151;;;;:::o;22744:97::-;2226:12;:10;:12::i;:::-;2215:23;;:7;:5;:7::i;:::-;:23;;;2207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22826:7:::1;22812:11;;:21;;;;;;;;;;;;;;;;;;22744:97:::0;:::o;17672:33::-;;;;:::o;21298:98::-;2226:12;:10;:12::i;:::-;2215:23;;:7;:5;:7::i;:::-;:23;;;2207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21383:5:::1;21360:20;;:28;;;;;;;;;;;;;;;;;;21298:98::o:0;17300:34::-;;;;:::o;2632:201::-;2226:12;:10;:12::i;:::-;2215:23;;:7;:5;:7::i;:::-;:23;;;2207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2741:1:::1;2721:22;;:8;:22;;;;2713:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2797:28;2816:8;2797:18;:28::i;:::-;2632:201:::0;:::o;17486:35::-;;;;:::o;21045:84::-;2226:12;:10;:12::i;:::-;2215:23;;:7;:5;:7::i;:::-;:23;;;2207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21116:5:::1;21100:13;;:21;;;;;;;;;;;;;;;;;;21045:84::o:0;1346:98::-;1399:7;1426:10;1419:17;;1346:98;:::o;10542:380::-;10695:1;10678:19;;:5;:19;;;;10670:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10776:1;10757:21;;:7;:21;;;;10749:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10860:6;10830:11;:18;10842:5;10830:18;;;;;;;;;;;;;;;:27;10849:7;10830:27;;;;;;;;;;;;;;;:36;;;;10898:7;10882:32;;10891:5;10882:32;;;10907:6;10882:32;;;;;;:::i;:::-;;;;;;;;10542:380;;;:::o;24388:3895::-;24536:1;24520:18;;:4;:18;;;;24512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24613:1;24599:16;;:2;:16;;;;24591:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24682:1;24672:6;:11;24668:93;;;24700:28;24716:4;24722:2;24726:1;24700:15;:28::i;:::-;24743:7;;24668:93;24777:13;;;;;;;;;;;24773:1749;;;24819:7;:5;:7::i;:::-;24811:15;;:4;:15;;;;:32;;;;;24836:7;:5;:7::i;:::-;24830:13;;:2;:13;;;;24811:32;:52;;;;;24861:1;24847:16;;:2;:16;;;;24811:52;:73;;;;;18140:6;24867:17;;:2;:17;;;;24811:73;:86;;;;;24889:8;;;;;;;;;;;24888:9;24811:86;24807:1704;;;24924:14;;;;;;;;;;;24919:149;;24971:18;:24;24990:4;24971:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;24999:18;:22;25018:2;24999:22;;;;;;;;;;;;;;;;;;;;;;;;;24971:50;24963:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;24919:149;25224:20;;;;;;;;;;;25220:425;;;25279:7;:5;:7::i;:::-;25273:13;;:2;:13;;;;:47;;;;;25304:15;25290:30;;:2;:30;;;;25273:47;:79;;;;;25338:13;25324:28;;:2;:28;;;;25273:79;25269:357;;;25431:12;25389:28;:39;25418:9;25389:39;;;;;;;;;;;;;;;;:54;25381:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25590:12;25548:28;:39;25577:9;25548:39;;;;;;;;;;;;;;;:54;;;;25269:357;25220:425;25697:25;:31;25723:4;25697:31;;;;;;;;;;;;;;;;;;;;;;;;;:70;;;;;25733:30;:34;25764:2;25733:34;;;;;;;;;;;;;;;;;;;;;;;;;25732:35;25697:70;25693:803;;;25810:20;;25800:6;:30;;25792:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;25945:15;;25928:13;25938:2;25928:9;:13::i;:::-;25919:6;:22;;;;:::i;:::-;:41;;25911:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25693:803;;;26082:25;:29;26108:2;26082:29;;;;;;;;;;;;;;;;;;;;;;;;;:91;;;;;26137:30;:36;26168:4;26137:36;;;;;;;;;;;;;;;;;;;;;;;;;26136:37;26082:91;26056:440;;;26234:20;;26224:6;:30;;26216:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;26056:440;;;26344:30;:34;26375:2;26344:34;;;;;;;;;;;;;;;;;;;;;;;;;26339:157;;26437:15;;26420:13;26430:2;26420:9;:13::i;:::-;26411:6;:22;;;;:::i;:::-;:41;;26403:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26339:157;26056:440;25693:803;24807:1704;24773:1749;26534:12;26577:18;;26549:24;26567:4;26549:9;:24::i;:::-;:46;;26534:61;;26626:7;:35;;;;;26650:11;;;;;;;;;;;26626:35;:61;;;;;26679:8;;;;;;;;;;;26678:9;26626:61;:110;;;;;26705:25;:31;26731:4;26705:31;;;;;;;;;;;;;;;;;;;;;;;;;26704:32;26626:110;:152;;;;;26754:18;:24;26773:4;26754:24;;;;;;;;;;;;;;;;;;;;;;;;;26753:25;26626:152;:192;;;;;26796:18;:22;26815:2;26796:22;;;;;;;;;;;;;;;;;;;;;;;;;26795:23;26626:192;26608:324;;;26856:4;26845:8;;:15;;;;;;;;;;;;;;;;;;26877:10;:8;:10::i;:::-;26915:5;26904:8;;:16;;;;;;;;;;;;;;;;;;26608:324;26944:12;26960:8;;;;;;;;;;;26959:9;26944:24;;27070:18;:24;27089:4;27070:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;27098:18;:22;27117:2;27098:22;;;;;;;;;;;;;;;;;;;;;;;;;27070:50;27066:98;;;27147:5;27137:15;;27066:98;27176:12;27281:7;27277:953;;;27333:25;:29;27359:2;27333:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27382:1;27366:13;;:17;27333:50;27329:752;;;27436:3;27420:13;;27411:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;27404:35;;27502:13;;27488:10;;27481:4;:17;;;;:::i;:::-;27480:35;;;;:::i;:::-;27464:12;;:51;;;;;;;:::i;:::-;;;;;;;;27584:13;;27564:16;;27557:4;:23;;;;:::i;:::-;27556:41;;;;:::i;:::-;27534:18;;:63;;;;;;;:::i;:::-;;;;;;;;27666:13;;27646:16;;27639:4;:23;;;;:::i;:::-;27638:41;;;;:::i;:::-;27616:18;;:63;;;;;;;:::i;:::-;;;;;;;;27329:752;;;27741:25;:31;27767:4;27741:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;27791:1;27776:12;;:16;27741:51;27737:344;;;27844:3;27829:12;;27820:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;27813:34;;27891:12;;27878:9;;27871:4;:16;;;;:::i;:::-;27870:33;;;;:::i;:::-;27854:12;;:49;;;;;;;:::i;:::-;;;;;;;;27971:12;;27952:15;;27945:4;:22;;;;:::i;:::-;27944:39;;;;:::i;:::-;27922:18;;:61;;;;;;;:::i;:::-;;;;;;;;28051:12;;28032:15;;28025:4;:22;;;;:::i;:::-;28024:39;;;;:::i;:::-;28002:18;;:61;;;;;;;:::i;:::-;;;;;;;;27737:344;27329:752;28108:1;28101:4;:8;28097:91;;;28130:42;28146:4;28160;28167;28130:15;:42::i;:::-;28097:91;28214:4;28204:14;;;;;:::i;:::-;;;27277:953;28242:33;28258:4;28264:2;28268:6;28242:15;:33::i;:::-;24501:3782;;;24388:3895;;;;:::o;24192:171::-;24292:5;24258:25;:31;24284:4;24258:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24349:5;24315:40;;24343:4;24315:40;;;;;;;;;;;;24192:171;;:::o;2916:191::-;2990:16;3009:6;;;;;;;;;;;2990:25;;3035:8;3026:6;;:17;;;;;;;;;;;;;;;;;;3090:8;3059:40;;3080:8;3059:40;;;;;;;;;;;;2979:128;2916:191;:::o;8548:733::-;8706:1;8688:20;;:6;:20;;;;8680:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8790:1;8769:23;;:9;:23;;;;8761:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8845:47;8866:6;8874:9;8885:6;8845:20;:47::i;:::-;8905:21;8929:9;:17;8939:6;8929:17;;;;;;;;;;;;;;;;8905:41;;8982:6;8965:13;:23;;8957:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;9103:6;9087:13;:22;9067:9;:17;9077:6;9067:17;;;;;;;;;;;;;;;:42;;;;9155:6;9131:9;:20;9141:9;9131:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;9196:9;9179:35;;9188:6;9179:35;;;9207:6;9179:35;;;;;;:::i;:::-;;;;;;;;9227:46;9247:6;9255:9;9266:6;9227:19;:46::i;:::-;8669:612;8548:733;;;:::o;29462:1628::-;29501:23;29527:24;29545:4;29527:9;:24::i;:::-;29501:50;;29562:25;29626:18;;29605;;29590:12;;:33;;;;:::i;:::-;:54;;;;:::i;:::-;29562:82;;29655:12;29703:1;29684:15;:20;:46;;;;29729:1;29708:17;:22;29684:46;29680:85;;;29747:7;;;;;29680:85;29820:2;29799:18;;:23;;;;:::i;:::-;29781:15;:41;29777:115;;;29878:2;29857:18;;:23;;;;:::i;:::-;29839:41;;29777:115;29953:23;30040:1;30020:17;29998:18;;29980:15;:36;;;;:::i;:::-;29979:58;;;;:::i;:::-;:62;;;;:::i;:::-;29953:88;;30052:26;30099:15;30081;:33;;;;:::i;:::-;30052:62;;30127:25;30155:21;30127:49;;30189:36;30206:18;30189:16;:36::i;:::-;30238:18;30283:17;30259:21;:41;;;;:::i;:::-;30238:62;;30313:17;30361;30346:12;;30333:10;:25;;;;:::i;:::-;:45;;;;:::i;:::-;30313:65;;30389:23;30449:17;30428:18;;30415:10;:31;;;;:::i;:::-;:51;;;;:::i;:::-;30389:77;;30477:23;30528:15;30516:9;30503:10;:22;;;;:::i;:::-;:40;;;;:::i;:::-;30477:66;;30577:1;30556:18;:22;;;;30610:1;30589:18;:22;;;;30637:1;30622:12;:16;;;;30673:9;;;;;;;;;;;30665:23;;30696:9;30665:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30651:59;;;;;30743:15;;;;;;;;;;;30735:29;;30772:15;30735:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30721:71;;;;;30827:1;30809:15;:19;:42;;;;;30850:1;30832:15;:19;30809:42;30805:278;;;30868:46;30881:15;30898;30868:12;:46::i;:::-;30934:137;30967:18;31004:15;31038:18;;30934:137;;;;;;;;:::i;:::-;;;;;;;;30805:278;29490:1600;;;;;;;;;;29462:1628;:::o;11024:125::-;;;;:::o;11250:124::-;;;;:::o;28320:589::-;28446:21;28484:1;28470:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28446:40;;28515:4;28497;28502:1;28497:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28541:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28531:4;28536:1;28531:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28576:62;28593:4;28608:15;28626:11;28576:8;:62::i;:::-;28677:15;:66;;;28758:11;28784:1;28828:4;28855;28875:15;28677:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28375:534;28320:589;:::o;28939:515::-;29087:62;29104:4;29119:15;29137:11;29087:8;:62::i;:::-;29192:15;:31;;;29231:9;29264:4;29284:11;29310:1;29353;29396:9;;;;;;;;;;;29420:15;29192:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28939:515;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:619::-;3571:6;3579;3587;3636:2;3624:9;3615:7;3611:23;3607:32;3604:119;;;3642:79;;:::i;:::-;3604:119;3762:1;3787:53;3832:7;3823:6;3812:9;3808:22;3787:53;:::i;:::-;3777:63;;3733:117;3889:2;3915:53;3960:7;3951:6;3940:9;3936:22;3915:53;:::i;:::-;3905:63;;3860:118;4017:2;4043:53;4088:7;4079:6;4068:9;4064:22;4043:53;:::i;:::-;4033:63;;3988:118;3494:619;;;;;:::o;4119:60::-;4147:3;4168:5;4161:12;;4119:60;;;:::o;4185:142::-;4235:9;4268:53;4286:34;4295:24;4313:5;4295:24;:::i;:::-;4286:34;:::i;:::-;4268:53;:::i;:::-;4255:66;;4185:142;;;:::o;4333:126::-;4383:9;4416:37;4447:5;4416:37;:::i;:::-;4403:50;;4333:126;;;:::o;4465:153::-;4542:9;4575:37;4606:5;4575:37;:::i;:::-;4562:50;;4465:153;;;:::o;4624:185::-;4738:64;4796:5;4738:64;:::i;:::-;4733:3;4726:77;4624:185;;:::o;4815:276::-;4935:4;4973:2;4962:9;4958:18;4950:26;;4986:98;5081:1;5070:9;5066:17;5057:6;4986:98;:::i;:::-;4815:276;;;;:::o;5097:118::-;5184:24;5202:5;5184:24;:::i;:::-;5179:3;5172:37;5097:118;;:::o;5221:222::-;5314:4;5352:2;5341:9;5337:18;5329:26;;5365:71;5433:1;5422:9;5418:17;5409:6;5365:71;:::i;:::-;5221:222;;;;:::o;5449:619::-;5526:6;5534;5542;5591:2;5579:9;5570:7;5566:23;5562:32;5559:119;;;5597:79;;:::i;:::-;5559:119;5717:1;5742:53;5787:7;5778:6;5767:9;5763:22;5742:53;:::i;:::-;5732:63;;5688:117;5844:2;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5815:118;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;5449:619;;;;;:::o;6074:329::-;6133:6;6182:2;6170:9;6161:7;6157:23;6153:32;6150:119;;;6188:79;;:::i;:::-;6150:119;6308:1;6333:53;6378:7;6369:6;6358:9;6354:22;6333:53;:::i;:::-;6323:63;;6279:117;6074:329;;;;:::o;6409:118::-;6496:24;6514:5;6496:24;:::i;:::-;6491:3;6484:37;6409:118;;:::o;6533:222::-;6626:4;6664:2;6653:9;6649:18;6641:26;;6677:71;6745:1;6734:9;6730:17;6721:6;6677:71;:::i;:::-;6533:222;;;;:::o;6761:116::-;6831:21;6846:5;6831:21;:::i;:::-;6824:5;6821:32;6811:60;;6867:1;6864;6857:12;6811:60;6761:116;:::o;6883:133::-;6926:5;6964:6;6951:20;6942:29;;6980:30;7004:5;6980:30;:::i;:::-;6883:133;;;;:::o;7022:468::-;7087:6;7095;7144:2;7132:9;7123:7;7119:23;7115:32;7112:119;;;7150:79;;:::i;:::-;7112:119;7270:1;7295:53;7340:7;7331:6;7320:9;7316:22;7295:53;:::i;:::-;7285:63;;7241:117;7397:2;7423:50;7465:7;7456:6;7445:9;7441:22;7423:50;:::i;:::-;7413:60;;7368:115;7022:468;;;;;:::o;7496:86::-;7531:7;7571:4;7564:5;7560:16;7549:27;;7496:86;;;:::o;7588:112::-;7671:22;7687:5;7671:22;:::i;:::-;7666:3;7659:35;7588:112;;:::o;7706:214::-;7795:4;7833:2;7822:9;7818:18;7810:26;;7846:67;7910:1;7899:9;7895:17;7886:6;7846:67;:::i;:::-;7706:214;;;;:::o;7926:329::-;7985:6;8034:2;8022:9;8013:7;8009:23;8005:32;8002:119;;;8040:79;;:::i;:::-;8002:119;8160:1;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8131:117;7926:329;;;;:::o;8261:474::-;8329:6;8337;8386:2;8374:9;8365:7;8361:23;8357:32;8354:119;;;8392:79;;:::i;:::-;8354:119;8512:1;8537:53;8582:7;8573:6;8562:9;8558:22;8537:53;:::i;:::-;8527:63;;8483:117;8639:2;8665:53;8710:7;8701:6;8690:9;8686:22;8665:53;:::i;:::-;8655:63;;8610:118;8261:474;;;;;:::o;8741:323::-;8797:6;8846:2;8834:9;8825:7;8821:23;8817:32;8814:119;;;8852:79;;:::i;:::-;8814:119;8972:1;8997:50;9039:7;9030:6;9019:9;9015:22;8997:50;:::i;:::-;8987:60;;8943:114;8741:323;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:305;10793:3;10812:20;10830:1;10812:20;:::i;:::-;10807:25;;10846:20;10864:1;10846:20;:::i;:::-;10841:25;;11000:1;10932:66;10928:74;10925:1;10922:81;10919:107;;;11006:18;;:::i;:::-;10919:107;11050:1;11047;11043:9;11036:16;;10753:305;;;;:::o;11064:171::-;11204:23;11200:1;11192:6;11188:14;11181:47;11064:171;:::o;11241:366::-;11383:3;11404:67;11468:2;11463:3;11404:67;:::i;:::-;11397:74;;11480:93;11569:3;11480:93;:::i;:::-;11598:2;11593:3;11589:12;11582:19;;11241:366;;;:::o;11613:419::-;11779:4;11817:2;11806:9;11802:18;11794:26;;11866:9;11860:4;11856:20;11852:1;11841:9;11837:17;11830:47;11894:131;12020:4;11894:131;:::i;:::-;11886:139;;11613:419;;;:::o;12038:172::-;12178:24;12174:1;12166:6;12162:14;12155:48;12038:172;:::o;12216:366::-;12358:3;12379:67;12443:2;12438:3;12379:67;:::i;:::-;12372:74;;12455:93;12544:3;12455:93;:::i;:::-;12573:2;12568:3;12564:12;12557:19;;12216:366;;;:::o;12588:419::-;12754:4;12792:2;12781:9;12777:18;12769:26;;12841:9;12835:4;12831:20;12827:1;12816:9;12812:17;12805:47;12869:131;12995:4;12869:131;:::i;:::-;12861:139;;12588:419;;;:::o;13013:227::-;13153:34;13149:1;13141:6;13137:14;13130:58;13222:10;13217:2;13209:6;13205:15;13198:35;13013:227;:::o;13246:366::-;13388:3;13409:67;13473:2;13468:3;13409:67;:::i;:::-;13402:74;;13485:93;13574:3;13485:93;:::i;:::-;13603:2;13598:3;13594:12;13587:19;;13246:366;;;:::o;13618:419::-;13784:4;13822:2;13811:9;13807:18;13799:26;;13871:9;13865:4;13861:20;13857:1;13846:9;13842:17;13835:47;13899:131;14025:4;13899:131;:::i;:::-;13891:139;;13618:419;;;:::o;14043:102::-;14085:8;14132:5;14129:1;14125:13;14104:34;;14043:102;;;:::o;14151:848::-;14212:5;14219:4;14243:6;14234:15;;14267:5;14258:14;;14281:712;14302:1;14292:8;14289:15;14281:712;;;14397:4;14392:3;14388:14;14382:4;14379:24;14376:50;;;14406:18;;:::i;:::-;14376:50;14456:1;14446:8;14442:16;14439:451;;;14871:4;14864:5;14860:16;14851:25;;14439:451;14921:4;14915;14911:15;14903:23;;14951:32;14974:8;14951:32;:::i;:::-;14939:44;;14281:712;;;14151:848;;;;;;;:::o;15005:1073::-;15059:5;15250:8;15240:40;;15271:1;15262:10;;15273:5;;15240:40;15299:4;15289:36;;15316:1;15307:10;;15318:5;;15289:36;15385:4;15433:1;15428:27;;;;15469:1;15464:191;;;;15378:277;;15428:27;15446:1;15437:10;;15448:5;;;15464:191;15509:3;15499:8;15496:17;15493:43;;;15516:18;;:::i;:::-;15493:43;15565:8;15562:1;15558:16;15549:25;;15600:3;15593:5;15590:14;15587:40;;;15607:18;;:::i;:::-;15587:40;15640:5;;;15378:277;;15764:2;15754:8;15751:16;15745:3;15739:4;15736:13;15732:36;15714:2;15704:8;15701:16;15696:2;15690:4;15687:12;15683:35;15667:111;15664:246;;;15820:8;15814:4;15810:19;15801:28;;15855:3;15848:5;15845:14;15842:40;;;15862:18;;:::i;:::-;15842:40;15895:5;;15664:246;15935:42;15973:3;15963:8;15957:4;15954:1;15935:42;:::i;:::-;15920:57;;;;16009:4;16004:3;16000:14;15993:5;15990:25;15987:51;;;16018:18;;:::i;:::-;15987:51;16067:4;16060:5;16056:16;16047:25;;15005:1073;;;;;;:::o;16084:281::-;16142:5;16166:23;16184:4;16166:23;:::i;:::-;16158:31;;16210:25;16226:8;16210:25;:::i;:::-;16198:37;;16254:104;16291:66;16281:8;16275:4;16254:104;:::i;:::-;16245:113;;16084:281;;;;:::o;16371:348::-;16411:7;16434:20;16452:1;16434:20;:::i;:::-;16429:25;;16468:20;16486:1;16468:20;:::i;:::-;16463:25;;16656:1;16588:66;16584:74;16581:1;16578:81;16573:1;16566:9;16559:17;16555:105;16552:131;;;16663:18;;:::i;:::-;16552:131;16711:1;16708;16704:9;16693:20;;16371:348;;;;:::o;16725:180::-;16773:77;16770:1;16763:88;16870:4;16867:1;16860:15;16894:4;16891:1;16884:15;16911:185;16951:1;16968:20;16986:1;16968:20;:::i;:::-;16963:25;;17002:20;17020:1;17002:20;:::i;:::-;16997:25;;17041:1;17031:35;;17046:18;;:::i;:::-;17031:35;17088:1;17085;17081:9;17076:14;;16911:185;;;;:::o;17102:223::-;17242:34;17238:1;17230:6;17226:14;17219:58;17311:6;17306:2;17298:6;17294:15;17287:31;17102:223;:::o;17331:366::-;17473:3;17494:67;17558:2;17553:3;17494:67;:::i;:::-;17487:74;;17570:93;17659:3;17570:93;:::i;:::-;17688:2;17683:3;17679:12;17672:19;;17331:366;;;:::o;17703:419::-;17869:4;17907:2;17896:9;17892:18;17884:26;;17956:9;17950:4;17946:20;17942:1;17931:9;17927:17;17920:47;17984:131;18110:4;17984:131;:::i;:::-;17976:139;;17703:419;;;:::o;18128:244::-;18268:34;18264:1;18256:6;18252:14;18245:58;18337:27;18332:2;18324:6;18320:15;18313:52;18128:244;:::o;18378:366::-;18520:3;18541:67;18605:2;18600:3;18541:67;:::i;:::-;18534:74;;18617:93;18706:3;18617:93;:::i;:::-;18735:2;18730:3;18726:12;18719:19;;18378:366;;;:::o;18750:419::-;18916:4;18954:2;18943:9;18939:18;18931:26;;19003:9;18997:4;18993:20;18989:1;18978:9;18974:17;18967:47;19031:131;19157:4;19031:131;:::i;:::-;19023:139;;18750:419;;;:::o;19175:234::-;19315:34;19311:1;19303:6;19299:14;19292:58;19384:17;19379:2;19371:6;19367:15;19360:42;19175:234;:::o;19415:366::-;19557:3;19578:67;19642:2;19637:3;19578:67;:::i;:::-;19571:74;;19654:93;19743:3;19654:93;:::i;:::-;19772:2;19767:3;19763:12;19756:19;;19415:366;;;:::o;19787:419::-;19953:4;19991:2;19980:9;19976:18;19968:26;;20040:9;20034:4;20030:20;20026:1;20015:9;20011:17;20004:47;20068:131;20194:4;20068:131;:::i;:::-;20060:139;;19787:419;;;:::o;20212:224::-;20352:34;20348:1;20340:6;20336:14;20329:58;20421:7;20416:2;20408:6;20404:15;20397:32;20212:224;:::o;20442:366::-;20584:3;20605:67;20669:2;20664:3;20605:67;:::i;:::-;20598:74;;20681:93;20770:3;20681:93;:::i;:::-;20799:2;20794:3;20790:12;20783:19;;20442:366;;;:::o;20814:419::-;20980:4;21018:2;21007:9;21003:18;20995:26;;21067:9;21061:4;21057:20;21053:1;21042:9;21038:17;21031:47;21095:131;21221:4;21095:131;:::i;:::-;21087:139;;20814:419;;;:::o;21239:240::-;21379:34;21375:1;21367:6;21363:14;21356:58;21448:23;21443:2;21435:6;21431:15;21424:48;21239:240;:::o;21485:366::-;21627:3;21648:67;21712:2;21707:3;21648:67;:::i;:::-;21641:74;;21724:93;21813:3;21724:93;:::i;:::-;21842:2;21837:3;21833:12;21826:19;;21485:366;;;:::o;21857:419::-;22023:4;22061:2;22050:9;22046:18;22038:26;;22110:9;22104:4;22100:20;22096:1;22085:9;22081:17;22074:47;22138:131;22264:4;22138:131;:::i;:::-;22130:139;;21857:419;;;:::o;22282:239::-;22422:34;22418:1;22410:6;22406:14;22399:58;22491:22;22486:2;22478:6;22474:15;22467:47;22282:239;:::o;22527:366::-;22669:3;22690:67;22754:2;22749:3;22690:67;:::i;:::-;22683:74;;22766:93;22855:3;22766:93;:::i;:::-;22884:2;22879:3;22875:12;22868:19;;22527:366;;;:::o;22899:419::-;23065:4;23103:2;23092:9;23088:18;23080:26;;23152:9;23146:4;23142:20;23138:1;23127:9;23123:17;23116:47;23180:131;23306:4;23180:131;:::i;:::-;23172:139;;22899:419;;;:::o;23324:225::-;23464:34;23460:1;23452:6;23448:14;23441:58;23533:8;23528:2;23520:6;23516:15;23509:33;23324:225;:::o;23555:366::-;23697:3;23718:67;23782:2;23777:3;23718:67;:::i;:::-;23711:74;;23794:93;23883:3;23794:93;:::i;:::-;23912:2;23907:3;23903:12;23896:19;;23555:366;;;:::o;23927:419::-;24093:4;24131:2;24120:9;24116:18;24108:26;;24180:9;24174:4;24170:20;24166:1;24155:9;24151:17;24144:47;24208:131;24334:4;24208:131;:::i;:::-;24200:139;;23927:419;;;:::o;24352:223::-;24492:34;24488:1;24480:6;24476:14;24469:58;24561:6;24556:2;24548:6;24544:15;24537:31;24352:223;:::o;24581:366::-;24723:3;24744:67;24808:2;24803:3;24744:67;:::i;:::-;24737:74;;24820:93;24909:3;24820:93;:::i;:::-;24938:2;24933:3;24929:12;24922:19;;24581:366;;;:::o;24953:419::-;25119:4;25157:2;25146:9;25142:18;25134:26;;25206:9;25200:4;25196:20;25192:1;25181:9;25177:17;25170:47;25234:131;25360:4;25234:131;:::i;:::-;25226:139;;24953:419;;;:::o;25378:221::-;25518:34;25514:1;25506:6;25502:14;25495:58;25587:4;25582:2;25574:6;25570:15;25563:29;25378:221;:::o;25605:366::-;25747:3;25768:67;25832:2;25827:3;25768:67;:::i;:::-;25761:74;;25844:93;25933:3;25844:93;:::i;:::-;25962:2;25957:3;25953:12;25946:19;;25605:366;;;:::o;25977:419::-;26143:4;26181:2;26170:9;26166:18;26158:26;;26230:9;26224:4;26220:20;26216:1;26205:9;26201:17;26194:47;26258:131;26384:4;26258:131;:::i;:::-;26250:139;;25977:419;;;:::o;26402:224::-;26542:34;26538:1;26530:6;26526:14;26519:58;26611:7;26606:2;26598:6;26594:15;26587:32;26402:224;:::o;26632:366::-;26774:3;26795:67;26859:2;26854:3;26795:67;:::i;:::-;26788:74;;26871:93;26960:3;26871:93;:::i;:::-;26989:2;26984:3;26980:12;26973:19;;26632:366;;;:::o;27004:419::-;27170:4;27208:2;27197:9;27193:18;27185:26;;27257:9;27251:4;27247:20;27243:1;27232:9;27228:17;27221:47;27285:131;27411:4;27285:131;:::i;:::-;27277:139;;27004:419;;;:::o;27429:222::-;27569:34;27565:1;27557:6;27553:14;27546:58;27638:5;27633:2;27625:6;27621:15;27614:30;27429:222;:::o;27657:366::-;27799:3;27820:67;27884:2;27879:3;27820:67;:::i;:::-;27813:74;;27896:93;27985:3;27896:93;:::i;:::-;28014:2;28009:3;28005:12;27998:19;;27657:366;;;:::o;28029:419::-;28195:4;28233:2;28222:9;28218:18;28210:26;;28282:9;28276:4;28272:20;28268:1;28257:9;28253:17;28246:47;28310:131;28436:4;28310:131;:::i;:::-;28302:139;;28029:419;;;:::o;28454:172::-;28594:24;28590:1;28582:6;28578:14;28571:48;28454:172;:::o;28632:366::-;28774:3;28795:67;28859:2;28854:3;28795:67;:::i;:::-;28788:74;;28871:93;28960:3;28871:93;:::i;:::-;28989:2;28984:3;28980:12;28973:19;;28632:366;;;:::o;29004:419::-;29170:4;29208:2;29197:9;29193:18;29185:26;;29257:9;29251:4;29247:20;29243:1;29232:9;29228:17;29221:47;29285:131;29411:4;29285:131;:::i;:::-;29277:139;;29004:419;;;:::o;29429:297::-;29569:34;29565:1;29557:6;29553:14;29546:58;29638:34;29633:2;29625:6;29621:15;29614:59;29707:11;29702:2;29694:6;29690:15;29683:36;29429:297;:::o;29732:366::-;29874:3;29895:67;29959:2;29954:3;29895:67;:::i;:::-;29888:74;;29971:93;30060:3;29971:93;:::i;:::-;30089:2;30084:3;30080:12;30073:19;;29732:366;;;:::o;30104:419::-;30270:4;30308:2;30297:9;30293:18;30285:26;;30357:9;30351:4;30347:20;30343:1;30332:9;30328:17;30321:47;30385:131;30511:4;30385:131;:::i;:::-;30377:139;;30104:419;;;:::o;30529:240::-;30669:34;30665:1;30657:6;30653:14;30646:58;30738:23;30733:2;30725:6;30721:15;30714:48;30529:240;:::o;30775:366::-;30917:3;30938:67;31002:2;30997:3;30938:67;:::i;:::-;30931:74;;31014:93;31103:3;31014:93;:::i;:::-;31132:2;31127:3;31123:12;31116:19;;30775:366;;;:::o;31147:419::-;31313:4;31351:2;31340:9;31336:18;31328:26;;31400:9;31394:4;31390:20;31386:1;31375:9;31371:17;31364:47;31428:131;31554:4;31428:131;:::i;:::-;31420:139;;31147:419;;;:::o;31572:169::-;31712:21;31708:1;31700:6;31696:14;31689:45;31572:169;:::o;31747:366::-;31889:3;31910:67;31974:2;31969:3;31910:67;:::i;:::-;31903:74;;31986:93;32075:3;31986:93;:::i;:::-;32104:2;32099:3;32095:12;32088:19;;31747:366;;;:::o;32119:419::-;32285:4;32323:2;32312:9;32308:18;32300:26;;32372:9;32366:4;32362:20;32358:1;32347:9;32343:17;32336:47;32400:131;32526:4;32400:131;:::i;:::-;32392:139;;32119:419;;;:::o;32544:241::-;32684:34;32680:1;32672:6;32668:14;32661:58;32753:24;32748:2;32740:6;32736:15;32729:49;32544:241;:::o;32791:366::-;32933:3;32954:67;33018:2;33013:3;32954:67;:::i;:::-;32947:74;;33030:93;33119:3;33030:93;:::i;:::-;33148:2;33143:3;33139:12;33132:19;;32791:366;;;:::o;33163:419::-;33329:4;33367:2;33356:9;33352:18;33344:26;;33416:9;33410:4;33406:20;33402:1;33391:9;33387:17;33380:47;33444:131;33570:4;33444:131;:::i;:::-;33436:139;;33163:419;;;:::o;33588:191::-;33628:4;33648:20;33666:1;33648:20;:::i;:::-;33643:25;;33682:20;33700:1;33682:20;:::i;:::-;33677:25;;33721:1;33718;33715:8;33712:34;;;33726:18;;:::i;:::-;33712:34;33771:1;33768;33764:9;33756:17;;33588:191;;;;:::o;33785:225::-;33925:34;33921:1;33913:6;33909:14;33902:58;33994:8;33989:2;33981:6;33977:15;33970:33;33785:225;:::o;34016:366::-;34158:3;34179:67;34243:2;34238:3;34179:67;:::i;:::-;34172:74;;34255:93;34344:3;34255:93;:::i;:::-;34373:2;34368:3;34364:12;34357:19;;34016:366;;;:::o;34388:419::-;34554:4;34592:2;34581:9;34577:18;34569:26;;34641:9;34635:4;34631:20;34627:1;34616:9;34612:17;34605:47;34669:131;34795:4;34669:131;:::i;:::-;34661:139;;34388:419;;;:::o;34813:147::-;34914:11;34951:3;34936:18;;34813:147;;;;:::o;34966:114::-;;:::o;35086:398::-;35245:3;35266:83;35347:1;35342:3;35266:83;:::i;:::-;35259:90;;35358:93;35447:3;35358:93;:::i;:::-;35476:1;35471:3;35467:11;35460:18;;35086:398;;;:::o;35490:379::-;35674:3;35696:147;35839:3;35696:147;:::i;:::-;35689:154;;35860:3;35853:10;;35490:379;;;:::o;35875:442::-;36024:4;36062:2;36051:9;36047:18;36039:26;;36075:71;36143:1;36132:9;36128:17;36119:6;36075:71;:::i;:::-;36156:72;36224:2;36213:9;36209:18;36200:6;36156:72;:::i;:::-;36238;36306:2;36295:9;36291:18;36282:6;36238:72;:::i;:::-;35875:442;;;;;;:::o;36323:180::-;36371:77;36368:1;36361:88;36468:4;36465:1;36458:15;36492:4;36489:1;36482:15;36509:180;36557:77;36554:1;36547:88;36654:4;36651:1;36644:15;36678:4;36675:1;36668:15;36695:143;36752:5;36783:6;36777:13;36768:22;;36799:33;36826:5;36799:33;:::i;:::-;36695:143;;;;:::o;36844:351::-;36914:6;36963:2;36951:9;36942:7;36938:23;36934:32;36931:119;;;36969:79;;:::i;:::-;36931:119;37089:1;37114:64;37170:7;37161:6;37150:9;37146:22;37114:64;:::i;:::-;37104:74;;37060:128;36844:351;;;;:::o;37201:85::-;37246:7;37275:5;37264:16;;37201:85;;;:::o;37292:158::-;37350:9;37383:61;37401:42;37410:32;37436:5;37410:32;:::i;:::-;37401:42;:::i;:::-;37383:61;:::i;:::-;37370:74;;37292:158;;;:::o;37456:147::-;37551:45;37590:5;37551:45;:::i;:::-;37546:3;37539:58;37456:147;;:::o;37609:114::-;37676:6;37710:5;37704:12;37694:22;;37609:114;;;:::o;37729:184::-;37828:11;37862:6;37857:3;37850:19;37902:4;37897:3;37893:14;37878:29;;37729:184;;;;:::o;37919:132::-;37986:4;38009:3;38001:11;;38039:4;38034:3;38030:14;38022:22;;37919:132;;;:::o;38057:108::-;38134:24;38152:5;38134:24;:::i;:::-;38129:3;38122:37;38057:108;;:::o;38171:179::-;38240:10;38261:46;38303:3;38295:6;38261:46;:::i;:::-;38339:4;38334:3;38330:14;38316:28;;38171:179;;;;:::o;38356:113::-;38426:4;38458;38453:3;38449:14;38441:22;;38356:113;;;:::o;38505:732::-;38624:3;38653:54;38701:5;38653:54;:::i;:::-;38723:86;38802:6;38797:3;38723:86;:::i;:::-;38716:93;;38833:56;38883:5;38833:56;:::i;:::-;38912:7;38943:1;38928:284;38953:6;38950:1;38947:13;38928:284;;;39029:6;39023:13;39056:63;39115:3;39100:13;39056:63;:::i;:::-;39049:70;;39142:60;39195:6;39142:60;:::i;:::-;39132:70;;38988:224;38975:1;38972;38968:9;38963:14;;38928:284;;;38932:14;39228:3;39221:10;;38629:608;;;38505:732;;;;:::o;39243:831::-;39506:4;39544:3;39533:9;39529:19;39521:27;;39558:71;39626:1;39615:9;39611:17;39602:6;39558:71;:::i;:::-;39639:80;39715:2;39704:9;39700:18;39691:6;39639:80;:::i;:::-;39766:9;39760:4;39756:20;39751:2;39740:9;39736:18;39729:48;39794:108;39897:4;39888:6;39794:108;:::i;:::-;39786:116;;39912:72;39980:2;39969:9;39965:18;39956:6;39912:72;:::i;:::-;39994:73;40062:3;40051:9;40047:19;40038:6;39994:73;:::i;:::-;39243:831;;;;;;;;:::o;40080:807::-;40329:4;40367:3;40356:9;40352:19;40344:27;;40381:71;40449:1;40438:9;40434:17;40425:6;40381:71;:::i;:::-;40462:72;40530:2;40519:9;40515:18;40506:6;40462:72;:::i;:::-;40544:80;40620:2;40609:9;40605:18;40596:6;40544:80;:::i;:::-;40634;40710:2;40699:9;40695:18;40686:6;40634:80;:::i;:::-;40724:73;40792:3;40781:9;40777:19;40768:6;40724:73;:::i;:::-;40807;40875:3;40864:9;40860:19;40851:6;40807:73;:::i;:::-;40080:807;;;;;;;;;:::o;40893:143::-;40950:5;40981:6;40975:13;40966:22;;40997:33;41024:5;40997:33;:::i;:::-;40893:143;;;;:::o;41042:663::-;41130:6;41138;41146;41195:2;41183:9;41174:7;41170:23;41166:32;41163:119;;;41201:79;;:::i;:::-;41163:119;41321:1;41346:64;41402:7;41393:6;41382:9;41378:22;41346:64;:::i;:::-;41336:74;;41292:128;41459:2;41485:64;41541:7;41532:6;41521:9;41517:22;41485:64;:::i;:::-;41475:74;;41430:129;41598:2;41624:64;41680:7;41671:6;41660:9;41656:22;41624:64;:::i;:::-;41614:74;;41569:129;41042:663;;;;;:::o

Swarm Source

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