ETH Price: $2,507.34 (-0.33%)

Token

Fly (FLY)
 

Overview

Max Total Supply

100,000,000 FLY

Holders

39

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
287,435.790896365426719351 FLY

Value
$0.00
0x31e2b9612994a1690c2f89efb78676f07bab0677
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:
FLY

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2022-08-09
*/

// Telegram: t.me/flyerc
// Twitter: twitter.com/flytokeneth

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

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

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

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

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev 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);
}

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable;
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function removeLiquidityETH(address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external returns (uint amountToken, uint amountETH);
}

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

interface IPriceFeed {
    function latestAnswer() external returns (int256);
}

contract FLY is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    IPriceFeed internal immutable priceFeed;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress;
    address public devAddress;
    address public futureOwner;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    mapping (address => bool) public boughtEarly;
    address[] public earlyBuyers;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public constant FEE_DIVISOR = 10000;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    // floating liquidity settings
    bool public customLiquidityActive = true;
    uint256 public latestEthPrice = 0;
    uint256 public minimumBuyLiqPerc = 50;
    uint256 public minimumSellLiqPerc = 33;
    uint256 public maximumBuyLiqPerc = 80;
    uint256 public maximumSellLiqPerc = 50;
    uint256 public mcapComparisonValue = 10 * 1e6;

    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _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 SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event UpdatedDevAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoBurnLP(uint256 indexed tokensBurned);

    event ManualBurnLP(uint256 indexed tokensBurned);

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("Fly", "FLY") payable {
        
        address newOwner = msg.sender; // can leave alone if owner is deployer.
        address _dexRouter;
        address _priceFeed;

        if(block.chainid == 1){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
            _priceFeed = 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419;
        } else if(block.chainid == 4){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Rinkeby ETH: Uniswap V2
            _priceFeed = 0x8A753747A1Fa494EC906cE90E9f37563A8AF630e;
        } else if(block.chainid == 56){
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
            _priceFeed = 0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE;
        } else if(block.chainid == 97){
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain Testnet: PCS V2
            _priceFeed = 0x2514895c72f50D8bd4B4F9b1110F0D6bD2c97526;
        } else if(block.chainid == 42161){
            _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
            _priceFeed = 0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612;
        } else {
            revert("Chain not configured");
        }

        priceFeed = IPriceFeed(_priceFeed);
        require(priceFeed.latestAnswer() > 0, "wrong price feed");

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        uint256 totalSupply = 100 * 1e6 * (10 ** decimals());
        
        maxBuyAmount = totalSupply * 5 / 10000;
        maxSellAmount = totalSupply * 5 / 10000;
        maxWallet = totalSupply * 1 / 1000;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        buyOperationsFee = 0;
        buyLiquidityFee = 100;
        buyDevFee = 200;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;

        sellOperationsFee = 3333;
        sellLiquidityFee = 3333;
        sellDevFee = 3333;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;

        if(block.chainid == 1){
            operationsAddress = address(0xD2c29C08A6FcAFD270148740155A600A367b1884);
            devAddress = address(0xD2c29C08A6FcAFD270148740155A600A367b1884);
            futureOwner = address(0xD2c29C08A6FcAFD270148740155A600A367b1884);
        } else {
            operationsAddress = address(msg.sender);
            devAddress = address(msg.sender);
            futureOwner = address(msg.sender);
        }

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);
        _excludeFromMaxTransaction(address(dexRouter), true);
        _excludeFromMaxTransaction(address(futureOwner), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);
        excludeFromFees(address(dexRouter), true);
        excludeFromFees(address(futureOwner), true);

        
        _createInitialSupply(address(this), totalSupply * 66 / 100);  // update with % for LP
        _createInitialSupply(futureOwner, totalSupply - balanceOf(address(this)));
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function setCustomLiquidityActive(bool active) external onlyOwner {
        customLiquidityActive = active;
    }
    
    function enableTrading(uint256 blocksForPenalty, address _lpPair) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(blocksForPenalty <= 10, "Cannot make penalty blocks more than 10");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        
        // set pair
        lpPair = _lpPair;
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        emit EnabledTrading();
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner {

        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();

        emit RemovedLimits();
    }

    function getEarlyBuyers() external view returns (address[] memory){
        return earlyBuyers;
    }

    function massManageRestrictedWallets(address[] calldata accounts, bool restricted) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            boughtEarly[accounts[i]] = restricted;
        }
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 100) / (10 ** decimals()), "Cannot set max sell amount lower than 1%");
        maxWallet = newNum * (10 ** decimals());
        emit UpdatedMaxWalletAmount(maxWallet);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 300, "Can only airdrop 300 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 15 * FEE_DIVISOR / 100, "Must keep fees at 15% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 20 * FEE_DIVISOR / 100, "Must keep fees at 20% or less");
    }

    function massExcludeFromFees(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++){
            _isExcludedFromFees[accounts[i]] = excluded;
            emit ExcludeFromFees(accounts[i], excluded);
        }
    }

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

    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");
        require(amount > 0, "amount must be greater than 0");
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(tradingActive){
            require((!boughtEarly[from] && !boughtEarly[to]) || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }
        
        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                } else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded");
                }
            }
        }

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

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;

        if(customLiquidityActive && tradingActive && !swapping){
            latestEthPrice = uint256(priceFeed.latestAnswer());
            setCustomFees();
        }

        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && !_isExcludedFromFees[to] && buyTotalFees > 0){
                
                if(!earlyBuyPenaltyInEffect()){
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                if(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    earlyBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

                fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    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] = dexRouter.WETH();

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

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

    function swapBack() private {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForDev;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

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

        bool success;
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        
        swapTokensForEth(contractBalance - liquidityTokens); 
        
        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForDev;
            
        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForDev = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(devAddress).call{value: ethForDev}("");

        (success,) = address(operationsAddress).call{value: address(this).balance}("");
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }
    
    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_operationsAddress address cannot be 0");
        devAddress = payable(_devAddress);
        emit UpdatedDevAddress(_devAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }

    function launch(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);
   
        // add the liquidity

        require(address(this).balance > 0, "Must have ETH on contract to launch");

        require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");

        _approve(address(this), address(dexRouter), balanceOf(address(this)));
        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(futureOwner),
            block.timestamp
        );

        latestEthPrice = uint256(priceFeed.latestAnswer());

        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }

    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function autoBurnLiquidityPairTokens() internal {
        
        lastLpBurnTime = block.timestamp;
        
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percentForLPBurn / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit AutoBurnLP(lpAmount);
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner {
        require(percent <= 5000, "May not burn more than 50% of contract's LP at a time");
        require(lastManualLpBurnTime <= block.timestamp - manualBurnFrequency, "Burn too soon");
        lastManualLpBurnTime = block.timestamp;
        uint256 lpBalance = IERC20(lpPair).balanceOf(address(this));
        uint256 tokenBalance = balanceOf(address(this));
        uint256 lpAmount = lpBalance * percent / 10000;
        uint256 initialEthBalance = address(this).balance;

        // approve token transfer to cover all possible scenarios
        IERC20(lpPair).approve(address(dexRouter), lpAmount);

        // remove the liquidity
        dexRouter.removeLiquidityETH(
            address(this),
            lpAmount,
            1, // slippage is unavoidable
            1, // slippage is unavoidable
            address(this),
            block.timestamp
        );

        uint256 deltaTokenBalance = balanceOf(address(this)) - tokenBalance;
        if(deltaTokenBalance > 0){
            super._transfer(address(this), address(0xdead), deltaTokenBalance);
        }

        uint256 deltaEthBalance = address(this).balance - initialEthBalance;

        if(deltaEthBalance > 0){
            buyBackTokens(deltaEthBalance);
        }

        emit ManualBurnLP(lpAmount);
    }

    function buyBackTokens(uint256 amountInWei) internal {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0,
            path,
            address(0xdead),
            block.timestamp
        );
    }

    function getMcap() public view returns (uint256){
        return (IERC20(dexRouter.WETH()).balanceOf(address(lpPair)) * 1e18 * latestEthPrice / balanceOf(address(lpPair)) * (totalSupply()-balanceOf(address(0xdead))) / 1e18 / 1e8); 
    }

    function customLiquiditySettings(bool _customLiquidityActive, uint256 _minimumBuyLiqPerc, uint256 _maximumBuyLiqPerc, uint256 _minimumSellLiqPerc, uint256 _maximumSellLiqPerc, uint256 _mcapComparisonValue) external onlyOwner {
        require(_minimumBuyLiqPerc <= 100 && _maximumBuyLiqPerc <= 100 && _minimumBuyLiqPerc <= _maximumBuyLiqPerc, "Buy settings incorrect");
        require(_minimumSellLiqPerc <= 100 && _maximumSellLiqPerc <= 100 && _minimumSellLiqPerc <= _maximumSellLiqPerc, "Sell settings incorrect");
        customLiquidityActive = _customLiquidityActive;
        minimumBuyLiqPerc = _minimumBuyLiqPerc;
        maximumBuyLiqPerc = _maximumBuyLiqPerc;
        minimumSellLiqPerc = _minimumSellLiqPerc;
        maximumSellLiqPerc = _maximumSellLiqPerc;
        mcapComparisonValue = _mcapComparisonValue;
    }

    function setCustomFees() internal {
        uint256 mcap = getMcap();
        uint256 newLiquidityPercBuy = (mcap / mcapComparisonValue) * maximumBuyLiqPerc / 1e18 + minimumBuyLiqPerc;
        uint256 newLiquidityPercSell = (mcap / mcapComparisonValue) * maximumSellLiqPerc / 1e18 + minimumSellLiqPerc;
        if(newLiquidityPercBuy > maximumBuyLiqPerc){
            newLiquidityPercBuy = maximumBuyLiqPerc;
        }
        if(newLiquidityPercSell > maximumSellLiqPerc){
            newLiquidityPercSell = maximumSellLiqPerc;
        }
        buyLiquidityFee = buyTotalFees * newLiquidityPercBuy / 100;
        buyOperationsFee = (buyTotalFees - buyLiquidityFee) * 33 / 100;
        buyDevFee = buyTotalFees - buyOperationsFee - buyLiquidityFee;
            
        sellLiquidityFee = sellTotalFees * newLiquidityPercSell / 100;
        sellOperationsFee = (sellTotalFees - sellLiquidityFee) * 50 / 100;
        sellDevFee = sellTotalFees - sellOperationsFee - sellLiquidityFee;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"uint256","name":"tokensBurned","type":"uint256"}],"name":"AutoBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","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":"uint256","name":"tokensBurned","type":"uint256"}],"name":"ManualBurnLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"buyOperationsFee","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":"customLiquidityActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_customLiquidityActive","type":"bool"},{"internalType":"uint256","name":"_minimumBuyLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_maximumBuyLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_minimumSellLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_maximumSellLiqPerc","type":"uint256"},{"internalType":"uint256","name":"_mcapComparisonValue","type":"uint256"}],"name":"customLiquiditySettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"earlyBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"},{"internalType":"address","name":"_lpPair","type":"address"}],"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":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"futureOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEarlyBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMcap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"massExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"restricted","type":"bool"}],"name":"massManageRestrictedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumBuyLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumSellLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mcapComparisonValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumBuyLiqPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumSellLiqPerc","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":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"sellOperationsFee","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":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"setCustomLiquidityActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"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":"tokensForOperations","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":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600f8190556014805462ffffff191660019081179091556016805460ff19908116831790915560196022556023805482169055610e106024556107086026556028805490911690911790556029556032602a8190556021602b556050602c55602d5562989680602e55600360a081815262466c7960e81b60c05261012060405260e082815262464c5960e81b6101005290916200009f8382620009ba565b506004620000ae8282620009ba565b5050506000620000c36200062260201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005f19833981519152908290a3503360008046600103620001405750737a250d5630b4cf539739df2c5dacb4c659f2488d9050735f4ec3df9cbd43714fe2740f5e3616155c5b84196200027e565b466004036200017c5750737a250d5630b4cf539739df2c5dacb4c659f2488d9050738a753747a1fa494ec906ce90e9f37563a8af630e6200027e565b46603803620001b857507310ed43c718714eb63d5aa57b78b54704e256024e9050730567f2323251f0aab15c8dfb1967e4e8a7d42aee6200027e565b46606103620001f4575073d99d1c33f9fc3444f8101754abc46c52416550d19050732514895c72f50d8bd4b4f9b1110f0d6bd2c975266200027e565b4661a4b103620002315750731b02da8cb0d097eb8d57a175b88c7d8b47997506905073639fe6ab55c921f74e7fac1ee960c0b6293ba6126200027e565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166080819052604080516350d25bcd60e01b81529051600092916350d25bcd916004808301926020929190829003018187875af1158015620002cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f3919062000a86565b13620003355760405162461bcd60e51b815260206004820152601060248201526f1ddc9bdb99c81c1c9a58d9481999595960821b604482015260640162000275565b600980546001600160a01b0319166001600160a01b03841617905560006200035b601290565b6200036890600a62000bb5565b62000378906305f5e10062000bcd565b90506127106200038a82600562000bcd565b62000396919062000bef565b600655612710620003a982600562000bcd565b620003b5919062000bef565b6007556103e8620003c882600162000bcd565b620003d4919062000bef565b600855620186a0620003e882601962000bcd565b620003f4919062000bef565b600b55600060188190556064601981905560c8601a8190559162000419919062000c12565b62000425919062000c12565b601755610d05601c819055601d819055601e81905562000446818062000c12565b62000452919062000c12565b601b5546600103620004a457600c805473d2c29c08a6fcafd270148740155a600a367b18846001600160a01b03199182168117909255600d8054821683179055600e80549091169091179055620004d1565b600c8054336001600160a01b03199182168117909255600d8054821683179055600e805490911690911790555b620004de84600162000626565b620004eb30600162000626565b620004fa61dead600162000626565b600c5462000513906001600160a01b0316600162000626565b6009546200052c906001600160a01b0316600162000626565b600e5462000545906001600160a01b0316600162000626565b6200055284600162000689565b6200055f30600162000689565b6200056e61dead600162000689565b600c5462000587906001600160a01b0316600162000689565b600954620005a0906001600160a01b0316600162000689565b600e54620005b9906001600160a01b0316600162000689565b620005df306064620005cd84604262000bcd565b620005d9919062000bef565b62000733565b600e54306000908152602081905260409020546200060d916001600160a01b031690620005d9908462000c2d565b620006188462000818565b5050505062000c47565b3390565b6001600160a01b038216600081815260306020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620006d45760405162461bcd60e51b8152602060048201819052602482015260008051602062005ef9833981519152604482015260640162000275565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200078b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000275565b80600260008282546200079f919062000c12565b90915550506001600160a01b03821660009081526020819052604081208054839290620007ce90849062000c12565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620008635760405162461bcd60e51b8152602060048201819052602482015260008051602062005ef9833981519152604482015260640162000275565b6001600160a01b038116620008ca5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000275565b6005546040516001600160a01b0380841692169060008051602062005f1983398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200094057607f821691505b6020821081036200096157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009b557600081815260208120601f850160051c81016020861015620009905750805b601f850160051c820191505b81811015620009b1578281556001016200099c565b5050505b505050565b81516001600160401b03811115620009d657620009d662000915565b620009ee81620009e784546200092b565b8462000967565b602080601f83116001811462000a26576000841562000a0d5750858301515b600019600386901b1c1916600185901b178555620009b1565b600085815260208120601f198616915b8281101562000a575788860151825594840194600190910190840162000a36565b508582101562000a765787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a9957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000af757816000190482111562000adb5762000adb62000aa0565b8085161562000ae957918102915b93841c939080029062000abb565b509250929050565b60008262000b105750600162000baf565b8162000b1f5750600062000baf565b816001811462000b38576002811462000b435762000b63565b600191505062000baf565b60ff84111562000b575762000b5762000aa0565b50506001821b62000baf565b5060208310610133831016604e8410600b841016171562000b88575081810a62000baf565b62000b94838362000ab6565b806000190482111562000bab5762000bab62000aa0565b0290505b92915050565b600062000bc660ff84168362000aff565b9392505050565b600081600019048311821515161562000bea5762000bea62000aa0565b500290565b60008262000c0d57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000c285762000c2862000aa0565b500190565b60008282101562000c425762000c4262000aa0565b500390565b60805161528f62000c6a6000396000818161203f0152613b2d015261528f6000f3fe6080604052600436106104c45760003560e01c806388e765ff11610276578063c18bc1951161014f578063ea4cfe12116100c1578063f5648a4f11610085578063f5648a4f14610e0e578063f5f4a97d14610e23578063f637434214610e39578063f8b45b0514610e4f578063fb002c9714610e65578063fe72b27a14610e7b57600080fd5b8063ea4cfe1214610d82578063eb472fc414610da2578063ee40166e14610dc2578063f11a24d314610dd8578063f2fde38b14610dee57600080fd5b8063d85ba06311610113578063d85ba06314610cc5578063dc3f0d0f14610cdb578063dd62ed3e14610cfb578063e1ade1fe14610d41578063e2f4560514610d57578063e884f26014610d6d57600080fd5b8063c18bc19514610c35578063c876d0b914610c55578063d0d41fe114610c6f578063d0e7d33f14610c8f578063d257b34f14610ca557600080fd5b8063a4c82a00116101e8578063b9e9d1aa116101ac578063b9e9d1aa14610b81578063bbc0c74214610ba1578063bd5fb92014610bc0578063c024666814610be0578063c077ab4b14610c00578063c17b5b8c14610c1557600080fd5b8063a4c82a0014610ae5578063a62068ce14610afb578063a9059cbb14610b11578063b3e4c17914610b31578063b62496f514610b5157600080fd5b80639c3b4fdc1161023a5780639c3b4fdc14610a575780639e93ad8e14610a6d5780639ec22c0e14610a835780639fccce3214610a99578063a0d82dc514610aaf578063a457c2d714610ac557600080fd5b806388e765ff146109cc5780638da5cb5b146109e257806395d89b4114610a005780639a5bd2dd14610a155780639a7a23d614610a3757600080fd5b806342088f1e116103a85780636b0a894c1161031a578063751039fc116102de578063751039fc146109075780637571336a1461091c5780638095d5641461093c5780638366e79a1461095c57806385b12c7c1461097c57806385ecfd281461099c57600080fd5b80636b0a894c1461087c5780636ddd17131461089257806370a08231146108b2578063715018a6146108d2578063730c1888146108e757600080fd5b806351f205e41161036c57806351f205e4146107ee578063552fd1481461080357806358a6d531146108235780635a139dd41461083a57806366d602ae146108505780636a486a8e1461086657600080fd5b806342088f1e14610768578063452ed4f11461077e578063499b83941461079e5780634a62bb65146107be5780634f77f6c0146107d857600080fd5b8063199ffc72116104415780632c3e486c116104055780632c3e486c146106bc5780632e82f1a0146106d25780632f1ffebf146106ec578063313ce5671461070c57806339509351146107285780633ad10ef61461074857600080fd5b8063199ffc72146106305780631a8145bb146106465780632307b4411461065c57806323b872dd1461067c5780632be32b611461069c57600080fd5b80630d3cbb22116104885780630d3cbb221461059957806310d5de53146105bb5780631708da75146105eb57806318160ddd14610605578063184c16c51461061a57600080fd5b8063046f9c3f146104d057806306fdde03146104f95780630758d9241461051b578063095ea7b3146105535780630d3141e01461058357600080fd5b366104cb57005b600080fd5b3480156104dc57600080fd5b506104e6602a5481565b6040519081526020015b60405180910390f35b34801561050557600080fd5b5061050e610e9b565b6040516104f0919061493a565b34801561052757600080fd5b5060095461053b906001600160a01b031681565b6040516001600160a01b0390911681526020016104f0565b34801561055f57600080fd5b5061057361056e3660046149a7565b610f2d565b60405190151581526020016104f0565b34801561058f57600080fd5b506104e6602e5481565b3480156105a557600080fd5b506105b96105b43660046149e1565b610f44565b005b3480156105c757600080fd5b506105736105d6366004614a05565b60306020526000908152604090205460ff1681565b3480156105f757600080fd5b506028546105739060ff1681565b34801561061157600080fd5b506002546104e6565b34801561062657600080fd5b506104e660265481565b34801561063c57600080fd5b506104e660225481565b34801561065257600080fd5b506104e660205481565b34801561066857600080fd5b506105b9610677366004614af8565b610f8a565b34801561068857600080fd5b50610573610697366004614bba565b6110e3565b3480156106a857600080fd5b506105b96106b7366004614bfb565b61118d565b3480156106c857600080fd5b506104e660245481565b3480156106de57600080fd5b506023546105739060ff1681565b3480156106f857600080fd5b506105b9610707366004614c14565b6112a1565b34801561071857600080fd5b50604051601281526020016104f0565b34801561073457600080fd5b506105736107433660046149a7565b611416565b34801561075457600080fd5b50600d5461053b906001600160a01b031681565b34801561077457600080fd5b506104e660295481565b34801561078a57600080fd5b50600a5461053b906001600160a01b031681565b3480156107aa57600080fd5b506105b96107b9366004614a05565b611452565b3480156107ca57600080fd5b506014546105739060ff1681565b3480156107e457600080fd5b506104e6601c5481565b3480156107fa57600080fd5b506105b96114ec565b34801561080f57600080fd5b506105b961081e366004614c44565b6115f5565b34801561082f57600080fd5b506010544310610573565b34801561084657600080fd5b506104e660185481565b34801561085c57600080fd5b506104e660075481565b34801561087257600080fd5b506104e6601b5481565b34801561088857600080fd5b506104e660135481565b34801561089e57600080fd5b506014546105739062010000900460ff1681565b3480156108be57600080fd5b506104e66108cd366004614a05565b611696565b3480156108de57600080fd5b506105b96116b1565b3480156108f357600080fd5b506105b9610902366004614cca565b611725565b34801561091357600080fd5b506105b961184e565b34801561092857600080fd5b506105b9610937366004614cf8565b6118c5565b34801561094857600080fd5b506105b9610957366004614d26565b61198d565b34801561096857600080fd5b50610573610977366004614d52565b611a48565b34801561098857600080fd5b506105b9610997366004614bfb565b611c82565b3480156109a857600080fd5b506105736109b7366004614a05565b60116020526000908152604090205460ff1681565b3480156109d857600080fd5b506104e660065481565b3480156109ee57600080fd5b506005546001600160a01b031661053b565b348015610a0c57600080fd5b5061050e612115565b348015610a2157600080fd5b50610a2a612124565b6040516104f09190614dc4565b348015610a4357600080fd5b506105b9610a52366004614cf8565b612185565b348015610a6357600080fd5b506104e6601a5481565b348015610a7957600080fd5b506104e661271081565b348015610a8f57600080fd5b506104e660275481565b348015610aa557600080fd5b506104e660215481565b348015610abb57600080fd5b506104e6601e5481565b348015610ad157600080fd5b50610573610ae03660046149a7565b612279565b348015610af157600080fd5b506104e660255481565b348015610b0757600080fd5b506104e660105481565b348015610b1d57600080fd5b50610573610b2c3660046149a7565b612312565b348015610b3d57600080fd5b506105b9610b4c366004614dd7565b61231f565b348015610b5d57600080fd5b50610573610b6c366004614a05565b60316020526000908152604090205460ff1681565b348015610b8d57600080fd5b50600e5461053b906001600160a01b031681565b348015610bad57600080fd5b5060145461057390610100900460ff1681565b348015610bcc57600080fd5b506105b9610bdb366004614c44565b61243f565b348015610bec57600080fd5b506105b9610bfb366004614cf8565b612545565b348015610c0c57600080fd5b506104e66125ce565b348015610c2157600080fd5b506105b9610c30366004614d26565b61273b565b348015610c4157600080fd5b506105b9610c50366004614bfb565b6127f6565b348015610c6157600080fd5b506016546105739060ff1681565b348015610c7b57600080fd5b506105b9610c8a366004614a05565b612901565b348015610c9b57600080fd5b506104e6602d5481565b348015610cb157600080fd5b506105b9610cc0366004614bfb565b61299b565b348015610cd157600080fd5b506104e660175481565b348015610ce757600080fd5b506105b9610cf6366004614bfb565b612ae6565b348015610d0757600080fd5b506104e6610d16366004614d52565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d4d57600080fd5b506104e6602b5481565b348015610d6357600080fd5b506104e6600b5481565b348015610d7957600080fd5b506105b9612bf4565b348015610d8e57600080fd5b50600c5461053b906001600160a01b031681565b348015610dae57600080fd5b5061053b610dbd366004614bfb565b612c2a565b348015610dce57600080fd5b506104e6600f5481565b348015610de457600080fd5b506104e660195481565b348015610dfa57600080fd5b506105b9610e09366004614a05565b612c54565b348015610e1a57600080fd5b506105b9612d3f565b348015610e2f57600080fd5b506104e6602c5481565b348015610e4557600080fd5b506104e6601d5481565b348015610e5b57600080fd5b506104e660085481565b348015610e7157600080fd5b506104e6601f5481565b348015610e8757600080fd5b506105b9610e96366004614bfb565b612dab565b606060038054610eaa90614e23565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed690614e23565b8015610f235780601f10610ef857610100808354040283529160200191610f23565b820191906000526020600020905b815481529060010190602001808311610f0657829003601f168201915b5050505050905090565b6000610f3a3384846130a5565b5060015b92915050565b6005546001600160a01b03163314610f775760405162461bcd60e51b8152600401610f6e90614e5d565b60405180910390fd5b6028805460ff1916911515919091179055565b6005546001600160a01b03163314610fb45760405162461bcd60e51b8152600401610f6e90614e5d565b80518251146110055760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f6e565b61012c8251106110765760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f6e565b60005b82518110156110de57600083828151811061109657611096614e92565b6020026020010151905060008383815181106110b4576110b4614e92565b602002602001015190506110c93383836131c9565b505080806110d690614ebe565b915050611079565b505050565b60006110f084848461331e565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156111755760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f6e565b61118285338584036130a5565b506001949350505050565b6005546001600160a01b031633146111b75760405162461bcd60e51b8152600401610f6e90614e5d565b6111c36012600a614fbb565b6103e86111cf60025490565b6111da906001614fca565b6111e49190614fe9565b6111ee9190614fe9565b81101561124f5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f6e565b61125b6012600a614fbb565b6112659082614fca565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146112cb5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff16156113235760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f6e565b600a8211156113845760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610f6e565b6014805462ffff0019166201010017905543600f8190556113a690839061500b565b601055600a80546001600160a01b0319166001600160a01b0383169081179091556113d2906001613fc9565b600a546113e9906001600160a01b0316600161402c565b6040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a15050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f3a91859061144d90869061500b565b6130a5565b6005546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166114a25760405162461bcd60e51b8152600401610f6e90615023565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146115165760405162461bcd60e51b8152600401610f6e90614e5d565b600b5461152230611696565b1015611598576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f6e565b600a805460ff60a01b1916600160a01b1790556115b361405a565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461161f5760405162461bcd60e51b8152600401610f6e90614e5d565b60005b8281101561169057816011600086868581811061164157611641614e92565b90506020020160208101906116569190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061168881614ebe565b915050611622565b50505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146116db5760405162461bcd60e51b8152600401610f6e90614e5d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610f6e90614e5d565b6102588310156117bd5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f6e565b6103e882111580156117cd575060015b6118325760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f6e565b6024929092556022556023805460ff1916911515919091179055565b6005546001600160a01b031633146118785760405162461bcd60e51b8152600401610f6e90614e5d565b6014805460ff199081169091556016805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146118ef5760405162461bcd60e51b8152600401610f6e90614e5d565b8061196257600a546001600160a01b03908116908316036119625760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f6e565b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146119b75760405162461bcd60e51b8152600401610f6e90614e5d565b60188390556019829055601a819055806119d1838561500b565b6119db919061500b565b60175560646119ed612710600f614fca565b6119f79190614fe9565b60175411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610f6e565b6005546000906001600160a01b03163314611a755760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038316611acb5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f6e565b6001600160a01b03831630141580611aeb5750601454610100900460ff16155b611b545760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f6e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbf9190615069565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190615082565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611cac5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff1615611d185760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f6e565b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8f919061509f565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e15919061509f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e86919061509f565b600a80546001600160a01b0319166001600160a01b03929092169182179055611eb0906001613fc9565b600a54611ec7906001600160a01b0316600161402c565b60004711611f235760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f6e565b6000611f2e30611696565b11611f8a5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f6e565b600954611fa59030906001600160a01b031661144d82611696565b6009546001600160a01b031663f305d7194730611fc181611696565b600e546040516001600160e01b031960e087901b168152611ff793929160009182916001600160a01b03169042906004016150bc565b60606040518083038185885af1158015612015573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061203a91906150f7565b5050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561209d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c19190615069565b6029556014805462ffff0019166201010017905543600f8190556120e690829061500b565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b606060048054610eaa90614e23565b60606012805480602002602001604051908101604052809291908181526020018280548015610f2357602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161215e575050505050905090565b6005546001600160a01b031633146121af5760405162461bcd60e51b8152600401610f6e90614e5d565b600a546001600160a01b03908116908316036122335760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f6e565b61223d828261402c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122fb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f6e565b61230833858584036130a5565b5060019392505050565b6000610f3a33848461331e565b6005546001600160a01b031633146123495760405162461bcd60e51b8152600401610f6e90614e5d565b6064851115801561235b575060648411155b80156123675750838511155b6123ac5760405162461bcd60e51b8152602060048201526016602482015275109d5e481cd95d1d1a5b99dcc81a5b98dbdc9c9958dd60521b6044820152606401610f6e565b606483111580156123be575060648211155b80156123ca5750818311155b6124165760405162461bcd60e51b815260206004820152601760248201527f53656c6c2073657474696e677320696e636f72726563740000000000000000006044820152606401610f6e565b6028805460ff191696151596909617909555602a93909355602c91909155602b55602d55602e55565b6005546001600160a01b031633146124695760405162461bcd60e51b8152600401610f6e90614e5d565b60005b828110156116905781602f600086868581811061248b5761248b614e92565b90506020020160208101906124a09190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558383828181106124da576124da614e92565b90506020020160208101906124ef9190614a05565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78360405161252b911515815260200190565b60405180910390a28061253d81614ebe565b91505061246c565b6005546001600160a01b0316331461256f5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60006305f5e100670de0b6b3a76400006125e961dead611696565b6002546125f69190615125565b600a5461260b906001600160a01b0316611696565b602954600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612661573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612685919061509f565b600a546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa1580156126ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f29190615069565b61270490670de0b6b3a7640000614fca565b61270e9190614fca565b6127189190614fe9565b6127229190614fca565b61272c9190614fe9565b6127369190614fe9565b905090565b6005546001600160a01b031633146127655760405162461bcd60e51b8152600401610f6e90614e5d565b601c839055601d829055601e8190558061277f838561500b565b612789919061500b565b601b55606461279b6127106014614fca565b6127a59190614fe9565b601b5411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f6e565b6005546001600160a01b031633146128205760405162461bcd60e51b8152600401610f6e90614e5d565b61282c6012600a614fbb565b606461283760025490565b612842906001614fca565b61284c9190614fe9565b6128569190614fe9565b8110156128b65760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015267207468616e20312560c01b6064820152608401610f6e565b6128c26012600a614fbb565b6128cc9082614fca565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611296565b6005546001600160a01b0316331461292b5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166129515760405162461bcd60e51b8152600401610f6e90615023565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490600090a250565b6005546001600160a01b031633146129c55760405162461bcd60e51b8152600401610f6e90614e5d565b620186a06129d260025490565b6129dd906001614fca565b6129e79190614fe9565b811015612a545760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f6e565b6103e8612a6060025490565b612a6b906001614fca565b612a759190614fe9565b811115612ae15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f6e565b600b55565b6005546001600160a01b03163314612b105760405162461bcd60e51b8152600401610f6e90614e5d565b612b1c6012600a614fbb565b6103e8612b2860025490565b612b33906001614fca565b612b3d9190614fe9565b612b479190614fe9565b811015612ba95760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f6e565b612bb56012600a614fbb565b612bbf9082614fca565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611296565b6005546001600160a01b03163314612c1e5760405162461bcd60e51b8152600401610f6e90614e5d565b6016805460ff19169055565b60128181548110612c3a57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612c7e5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038116612ce35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f6e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612d695760405162461bcd60e51b8152600401610f6e90614e5d565b604051600090339047908381818185875af1925050503d8060008114611690576040519150601f19603f3d011682016040523d82523d6000602084013e611690565b6005546001600160a01b03163314612dd55760405162461bcd60e51b8152600401610f6e90614e5d565b611388811115612e455760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20353025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f6e565b602654612e529042615125565b6027541115612e935760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f6e565b42602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f049190615069565b90506000612f1130611696565b90506000612710612f228585614fca565b612f2c9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015612f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612faa9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90612fe590309086906001908190849042906004016150bc565b60408051808303816000875af1158015613003573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613027919061513c565b505060008361303530611696565b61303f9190615125565b90508015613054576130543061dead836131c9565b60006130608347615125565b905080156130715761307181614262565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166131075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f6e565b6001600160a01b0382166131685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f6e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166131ef5760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b0382166132155760405162461bcd60e51b8152600401610f6e906151a5565b6001600160a01b0383166000908152602081905260409020548181101561328d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f6e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132c490849061500b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161331091815260200190565b60405180910390a350505050565b6001600160a01b0383166133445760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b03821661336a5760405162461bcd60e51b8152600401610f6e906151a5565b600081116133ba5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f6e565b601454610100900460ff1661344d576001600160a01b0383166000908152602f602052604090205460ff168061340857506001600160a01b0382166000908152602f602052604090205460ff165b61344d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f6e565b601454610100900460ff161561354d576001600160a01b03831660009081526011602052604090205460ff1615801561349f57506001600160a01b03821660009081526011602052604090205460ff16155b806134b757506005546001600160a01b038381169116145b806134cc57506001600160a01b03821661dead145b61354d5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f6e565b60145460ff161561393f576005546001600160a01b0384811691161480159061358457506005546001600160a01b03838116911614155b801561359857506001600160a01b03821615155b80156135af57506001600160a01b03821661dead14155b80156135d457506001600160a01b0383166000908152602f602052604090205460ff16155b80156135f957506001600160a01b0382166000908152602f602052604090205460ff16155b1561393f5760165460ff1615613712576009546001600160a01b038381169116148015906136355750600a546001600160a01b03838116911614155b1561371257613645600243615125565b326000908152601560205260409020541080156136835750613668600243615125565b6001600160a01b038316600090815260156020526040902054105b6136ed5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f6e565b3260009081526015602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526031602052604090205460ff16801561375357506001600160a01b03821660009081526030602052604090205460ff16155b1561381a576006548111156137bb5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f6e565b6008546137c783611696565b6137d1908361500b565b11156138155760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b61393f565b6001600160a01b03821660009081526031602052604090205460ff16801561385b57506001600160a01b03831660009081526030602052604090205460ff16155b156138c5576007548111156138155760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f6e565b6001600160a01b03821660009081526030602052604090205460ff1661393f576008546138f183611696565b6138fb908361500b565b111561393f5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b600061394a30611696565b600b5490915081108015908190613969575060145462010000900460ff165b801561397f5750600a54600160a01b900460ff16155b80156139a457506001600160a01b03851660009081526031602052604090205460ff16155b80156139c957506001600160a01b0385166000908152602f602052604090205460ff16155b80156139ee57506001600160a01b0384166000908152602f602052604090205460ff16155b15613a1c57600a805460ff60a01b1916600160a01b179055613a0e61405a565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613a4e57506001600160a01b03841660009081526031602052604090205460ff165b8015613a5c575060235460ff165b8015613a775750602454602554613a73919061500b565b4210155b8015613a9c57506001600160a01b0385166000908152602f602052604090205460ff16155b15613aa957613aa96143ac565b6001600160a01b0385166000908152602f602052604090205460019060ff1680613aeb57506001600160a01b0385166000908152602f602052604090205460ff165b15613af4575060005b60285460009060ff168015613b105750601454610100900460ff165b8015613b265750600a54600160a01b900460ff16155b15613bba577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015613b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613baf9190615069565b602955613bba6145c6565b8115613fb55760105443108015613be957506001600160a01b03871660009081526031602052604090205460ff165b8015613c0e57506001600160a01b03861660009081526031602052604090205460ff16155b8015613c3357506001600160a01b0386166000908152602f602052604090205460ff16155b8015613c4157506000601754115b15613dfc576010544310613c6857600160066000828254613c629190615125565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16613d48576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556013805491929091613cc190849061500b565b9091555050601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b61271060175486613d599190614fca565b613d639190614fe9565b905060175460195482613d769190614fca565b613d809190614fe9565b60206000828254613d91919061500b565b9091555050601754601854613da69083614fca565b613db09190614fe9565b601f6000828254613dc1919061500b565b9091555050601754601a54613dd69083614fca565b613de09190614fe9565b60216000828254613df1919061500b565b90915550613f979050565b6001600160a01b03861660009081526031602052604090205460ff168015613e2657506000601b54115b15613eb957612710601b5486613e3c9190614fca565b613e469190614fe9565b9050601b54601d5482613e599190614fca565b613e639190614fe9565b60206000828254613e74919061500b565b9091555050601b54601c54613e899083614fca565b613e939190614fe9565b601f6000828254613ea4919061500b565b9091555050601b54601e54613dd69083614fca565b6001600160a01b03871660009081526031602052604090205460ff168015613ee357506000601754115b15613f975761271060175486613ef99190614fca565b613f039190614fe9565b905060175460195482613f169190614fca565b613f209190614fe9565b60206000828254613f31919061500b565b9091555050601754601854613f469083614fca565b613f509190614fe9565b601f6000828254613f61919061500b565b9091555050601754601a54613f769083614fca565b613f809190614fe9565b60216000828254613f91919061500b565b90915550505b8015613fa857613fa88730836131c9565b613fb28186615125565b94505b613fc08787876131c9565b50505050505050565b6001600160a01b038216600081815260306020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152603160205260409020805460ff191682151517905561223d8282613fc9565b600061406530611696565b90506000602154601f5460205461407c919061500b565b614086919061500b565b9050811580614093575080155b1561409c575050565b600b546140aa906014614fca565b8211156140c257600b546140bf906014614fca565b91505b600080600283602054866140d69190614fca565b6140e09190614fe9565b6140ea9190614fe9565b90506140fe6140f98286615125565b614741565b6020544790819060009061411490600290614fe9565b61411e9087615125565b601f5461412b9085614fca565b6141359190614fe9565b9050600060026020546141489190614fe9565b6141529088615125565b60215461415f9086614fca565b6141699190614fe9565b9050614175818361500b565b61417f9084615125565b60006020819055601f8190556021559250841580159061419f5750600083115b156141ae576141ae858461489b565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146141fb576040519150601f19603f3d011682016040523d82523d6000602084013e614200565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114614250576040519150601f19603f3d011682016040523d82523d6000602084013e614255565b606091505b5050505050505050505050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156142cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f0919061509f565b8160008151811061430357614303614e92565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061433757614337614e92565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061437f90600090869061dead9042906004016151e8565b6000604051808303818588803b15801561439857600080fd5b505af1158015613fc0573d6000803e3d6000fd5b426025819055602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156143fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144229190615069565b9050600061442f30611696565b90506000612710602254846144449190614fca565b61444e9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156144a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144cc9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061450790309086906001908190849042906004016150bc565b60408051808303816000875af1158015614525573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614549919061513c565b505060008361455730611696565b6145619190615125565b90508015614576576145763061dead836131c9565b60006145828347615125565b905080156145935761459381614262565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b60006145d06125ce565b90506000602a54670de0b6b3a7640000602c54602e54856145f19190614fe9565b6145fb9190614fca565b6146059190614fe9565b61460f919061500b565b90506000602b54670de0b6b3a7640000602d54602e54866146309190614fe9565b61463a9190614fca565b6146449190614fe9565b61464e919061500b565b9050602c5482111561466057602c5491505b602d5481111561466f5750602d545b60648260175461467f9190614fca565b6146899190614fe9565b601981905560175460649161469d91615125565b6146a8906021614fca565b6146b29190614fe9565b601881905560195460175490916146c891615125565b6146d29190615125565b601a55601b546064906146e6908390614fca565b6146f09190614fe9565b601d819055601b5460649161470491615125565b61470f906032614fca565b6147199190614fe9565b601c819055601d54601b54909161472f91615125565b6147399190615125565b601e55505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061477657614776614e92565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156147cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147f3919061509f565b8160018151811061480657614806614e92565b6001600160a01b03928316602091820292909201015260095461482c91309116846130a5565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061486590859060009086903090429060040161521d565b600060405180830381600087803b15801561487f57600080fd5b505af1158015614893573d6000803e3d6000fd5b505050505050565b6009546148b39030906001600160a01b0316846130a5565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906148f090309087906000908190849042906004016150bc565b60606040518083038185885af115801561490e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061493391906150f7565b5050505050565b600060208083528351808285015260005b818110156149675785810183015185820160400152820161494b565b81811115614979576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146149a457600080fd5b50565b600080604083850312156149ba57600080fd5b82356149c58161498f565b946020939093013593505050565b80151581146149a457600080fd5b6000602082840312156149f357600080fd5b81356149fe816149d3565b9392505050565b600060208284031215614a1757600080fd5b81356149fe8161498f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614a6157614a61614a22565b604052919050565b600067ffffffffffffffff821115614a8357614a83614a22565b5060051b60200190565b600082601f830112614a9e57600080fd5b81356020614ab3614aae83614a69565b614a38565b82815260059290921b84018101918181019086841115614ad257600080fd5b8286015b84811015614aed5780358352918301918301614ad6565b509695505050505050565b60008060408385031215614b0b57600080fd5b823567ffffffffffffffff80821115614b2357600080fd5b818501915085601f830112614b3757600080fd5b81356020614b47614aae83614a69565b82815260059290921b84018101918181019089841115614b6657600080fd5b948201945b83861015614b8d578535614b7e8161498f565b82529482019490820190614b6b565b96505086013592505080821115614ba357600080fd5b50614bb085828601614a8d565b9150509250929050565b600080600060608486031215614bcf57600080fd5b8335614bda8161498f565b92506020840135614bea8161498f565b929592945050506040919091013590565b600060208284031215614c0d57600080fd5b5035919050565b60008060408385031215614c2757600080fd5b823591506020830135614c398161498f565b809150509250929050565b600080600060408486031215614c5957600080fd5b833567ffffffffffffffff80821115614c7157600080fd5b818601915086601f830112614c8557600080fd5b813581811115614c9457600080fd5b8760208260051b8501011115614ca957600080fd5b60209283019550935050840135614cbf816149d3565b809150509250925092565b600080600060608486031215614cdf57600080fd5b83359250602084013591506040840135614cbf816149d3565b60008060408385031215614d0b57600080fd5b8235614d168161498f565b91506020830135614c39816149d3565b600080600060608486031215614d3b57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614d6557600080fd5b8235614d708161498f565b91506020830135614c398161498f565b600081518084526020808501945080840160005b83811015614db95781516001600160a01b031687529582019590820190600101614d94565b509495945050505050565b6020815260006149fe6020830184614d80565b60008060008060008060c08789031215614df057600080fd5b8635614dfb816149d3565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b600181811c90821680614e3757607f821691505b602082108103614e5757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614ed057614ed0614ea8565b5060010190565b600181815b80851115614f12578160001904821115614ef857614ef8614ea8565b80851615614f0557918102915b93841c9390800290614edc565b509250929050565b600082614f2957506001610f3e565b81614f3657506000610f3e565b8160018114614f4c5760028114614f5657614f72565b6001915050610f3e565b60ff841115614f6757614f67614ea8565b50506001821b610f3e565b5060208310610133831016604e8410600b8410161715614f95575081810a610f3e565b614f9f8383614ed7565b8060001904821115614fb357614fb3614ea8565b029392505050565b60006149fe60ff841683614f1a565b6000816000190483118215151615614fe457614fe4614ea8565b500290565b60008261500657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561501e5761501e614ea8565b500190565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60006020828403121561507b57600080fd5b5051919050565b60006020828403121561509457600080fd5b81516149fe816149d3565b6000602082840312156150b157600080fd5b81516149fe8161498f565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561510c57600080fd5b8351925060208401519150604084015190509250925092565b60008282101561513757615137614ea8565b500390565b6000806040838503121561514f57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006152016080830186614d80565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061523c60a0830186614d80565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220354747c3499d0b5d3b0ec29507f70050b73dc9f91729c7f793997fbdfbadccdd64736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104c45760003560e01c806388e765ff11610276578063c18bc1951161014f578063ea4cfe12116100c1578063f5648a4f11610085578063f5648a4f14610e0e578063f5f4a97d14610e23578063f637434214610e39578063f8b45b0514610e4f578063fb002c9714610e65578063fe72b27a14610e7b57600080fd5b8063ea4cfe1214610d82578063eb472fc414610da2578063ee40166e14610dc2578063f11a24d314610dd8578063f2fde38b14610dee57600080fd5b8063d85ba06311610113578063d85ba06314610cc5578063dc3f0d0f14610cdb578063dd62ed3e14610cfb578063e1ade1fe14610d41578063e2f4560514610d57578063e884f26014610d6d57600080fd5b8063c18bc19514610c35578063c876d0b914610c55578063d0d41fe114610c6f578063d0e7d33f14610c8f578063d257b34f14610ca557600080fd5b8063a4c82a00116101e8578063b9e9d1aa116101ac578063b9e9d1aa14610b81578063bbc0c74214610ba1578063bd5fb92014610bc0578063c024666814610be0578063c077ab4b14610c00578063c17b5b8c14610c1557600080fd5b8063a4c82a0014610ae5578063a62068ce14610afb578063a9059cbb14610b11578063b3e4c17914610b31578063b62496f514610b5157600080fd5b80639c3b4fdc1161023a5780639c3b4fdc14610a575780639e93ad8e14610a6d5780639ec22c0e14610a835780639fccce3214610a99578063a0d82dc514610aaf578063a457c2d714610ac557600080fd5b806388e765ff146109cc5780638da5cb5b146109e257806395d89b4114610a005780639a5bd2dd14610a155780639a7a23d614610a3757600080fd5b806342088f1e116103a85780636b0a894c1161031a578063751039fc116102de578063751039fc146109075780637571336a1461091c5780638095d5641461093c5780638366e79a1461095c57806385b12c7c1461097c57806385ecfd281461099c57600080fd5b80636b0a894c1461087c5780636ddd17131461089257806370a08231146108b2578063715018a6146108d2578063730c1888146108e757600080fd5b806351f205e41161036c57806351f205e4146107ee578063552fd1481461080357806358a6d531146108235780635a139dd41461083a57806366d602ae146108505780636a486a8e1461086657600080fd5b806342088f1e14610768578063452ed4f11461077e578063499b83941461079e5780634a62bb65146107be5780634f77f6c0146107d857600080fd5b8063199ffc72116104415780632c3e486c116104055780632c3e486c146106bc5780632e82f1a0146106d25780632f1ffebf146106ec578063313ce5671461070c57806339509351146107285780633ad10ef61461074857600080fd5b8063199ffc72146106305780631a8145bb146106465780632307b4411461065c57806323b872dd1461067c5780632be32b611461069c57600080fd5b80630d3cbb22116104885780630d3cbb221461059957806310d5de53146105bb5780631708da75146105eb57806318160ddd14610605578063184c16c51461061a57600080fd5b8063046f9c3f146104d057806306fdde03146104f95780630758d9241461051b578063095ea7b3146105535780630d3141e01461058357600080fd5b366104cb57005b600080fd5b3480156104dc57600080fd5b506104e6602a5481565b6040519081526020015b60405180910390f35b34801561050557600080fd5b5061050e610e9b565b6040516104f0919061493a565b34801561052757600080fd5b5060095461053b906001600160a01b031681565b6040516001600160a01b0390911681526020016104f0565b34801561055f57600080fd5b5061057361056e3660046149a7565b610f2d565b60405190151581526020016104f0565b34801561058f57600080fd5b506104e6602e5481565b3480156105a557600080fd5b506105b96105b43660046149e1565b610f44565b005b3480156105c757600080fd5b506105736105d6366004614a05565b60306020526000908152604090205460ff1681565b3480156105f757600080fd5b506028546105739060ff1681565b34801561061157600080fd5b506002546104e6565b34801561062657600080fd5b506104e660265481565b34801561063c57600080fd5b506104e660225481565b34801561065257600080fd5b506104e660205481565b34801561066857600080fd5b506105b9610677366004614af8565b610f8a565b34801561068857600080fd5b50610573610697366004614bba565b6110e3565b3480156106a857600080fd5b506105b96106b7366004614bfb565b61118d565b3480156106c857600080fd5b506104e660245481565b3480156106de57600080fd5b506023546105739060ff1681565b3480156106f857600080fd5b506105b9610707366004614c14565b6112a1565b34801561071857600080fd5b50604051601281526020016104f0565b34801561073457600080fd5b506105736107433660046149a7565b611416565b34801561075457600080fd5b50600d5461053b906001600160a01b031681565b34801561077457600080fd5b506104e660295481565b34801561078a57600080fd5b50600a5461053b906001600160a01b031681565b3480156107aa57600080fd5b506105b96107b9366004614a05565b611452565b3480156107ca57600080fd5b506014546105739060ff1681565b3480156107e457600080fd5b506104e6601c5481565b3480156107fa57600080fd5b506105b96114ec565b34801561080f57600080fd5b506105b961081e366004614c44565b6115f5565b34801561082f57600080fd5b506010544310610573565b34801561084657600080fd5b506104e660185481565b34801561085c57600080fd5b506104e660075481565b34801561087257600080fd5b506104e6601b5481565b34801561088857600080fd5b506104e660135481565b34801561089e57600080fd5b506014546105739062010000900460ff1681565b3480156108be57600080fd5b506104e66108cd366004614a05565b611696565b3480156108de57600080fd5b506105b96116b1565b3480156108f357600080fd5b506105b9610902366004614cca565b611725565b34801561091357600080fd5b506105b961184e565b34801561092857600080fd5b506105b9610937366004614cf8565b6118c5565b34801561094857600080fd5b506105b9610957366004614d26565b61198d565b34801561096857600080fd5b50610573610977366004614d52565b611a48565b34801561098857600080fd5b506105b9610997366004614bfb565b611c82565b3480156109a857600080fd5b506105736109b7366004614a05565b60116020526000908152604090205460ff1681565b3480156109d857600080fd5b506104e660065481565b3480156109ee57600080fd5b506005546001600160a01b031661053b565b348015610a0c57600080fd5b5061050e612115565b348015610a2157600080fd5b50610a2a612124565b6040516104f09190614dc4565b348015610a4357600080fd5b506105b9610a52366004614cf8565b612185565b348015610a6357600080fd5b506104e6601a5481565b348015610a7957600080fd5b506104e661271081565b348015610a8f57600080fd5b506104e660275481565b348015610aa557600080fd5b506104e660215481565b348015610abb57600080fd5b506104e6601e5481565b348015610ad157600080fd5b50610573610ae03660046149a7565b612279565b348015610af157600080fd5b506104e660255481565b348015610b0757600080fd5b506104e660105481565b348015610b1d57600080fd5b50610573610b2c3660046149a7565b612312565b348015610b3d57600080fd5b506105b9610b4c366004614dd7565b61231f565b348015610b5d57600080fd5b50610573610b6c366004614a05565b60316020526000908152604090205460ff1681565b348015610b8d57600080fd5b50600e5461053b906001600160a01b031681565b348015610bad57600080fd5b5060145461057390610100900460ff1681565b348015610bcc57600080fd5b506105b9610bdb366004614c44565b61243f565b348015610bec57600080fd5b506105b9610bfb366004614cf8565b612545565b348015610c0c57600080fd5b506104e66125ce565b348015610c2157600080fd5b506105b9610c30366004614d26565b61273b565b348015610c4157600080fd5b506105b9610c50366004614bfb565b6127f6565b348015610c6157600080fd5b506016546105739060ff1681565b348015610c7b57600080fd5b506105b9610c8a366004614a05565b612901565b348015610c9b57600080fd5b506104e6602d5481565b348015610cb157600080fd5b506105b9610cc0366004614bfb565b61299b565b348015610cd157600080fd5b506104e660175481565b348015610ce757600080fd5b506105b9610cf6366004614bfb565b612ae6565b348015610d0757600080fd5b506104e6610d16366004614d52565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610d4d57600080fd5b506104e6602b5481565b348015610d6357600080fd5b506104e6600b5481565b348015610d7957600080fd5b506105b9612bf4565b348015610d8e57600080fd5b50600c5461053b906001600160a01b031681565b348015610dae57600080fd5b5061053b610dbd366004614bfb565b612c2a565b348015610dce57600080fd5b506104e6600f5481565b348015610de457600080fd5b506104e660195481565b348015610dfa57600080fd5b506105b9610e09366004614a05565b612c54565b348015610e1a57600080fd5b506105b9612d3f565b348015610e2f57600080fd5b506104e6602c5481565b348015610e4557600080fd5b506104e6601d5481565b348015610e5b57600080fd5b506104e660085481565b348015610e7157600080fd5b506104e6601f5481565b348015610e8757600080fd5b506105b9610e96366004614bfb565b612dab565b606060038054610eaa90614e23565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed690614e23565b8015610f235780601f10610ef857610100808354040283529160200191610f23565b820191906000526020600020905b815481529060010190602001808311610f0657829003601f168201915b5050505050905090565b6000610f3a3384846130a5565b5060015b92915050565b6005546001600160a01b03163314610f775760405162461bcd60e51b8152600401610f6e90614e5d565b60405180910390fd5b6028805460ff1916911515919091179055565b6005546001600160a01b03163314610fb45760405162461bcd60e51b8152600401610f6e90614e5d565b80518251146110055760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610f6e565b61012c8251106110765760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203330302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610f6e565b60005b82518110156110de57600083828151811061109657611096614e92565b6020026020010151905060008383815181106110b4576110b4614e92565b602002602001015190506110c93383836131c9565b505080806110d690614ebe565b915050611079565b505050565b60006110f084848461331e565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156111755760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610f6e565b61118285338584036130a5565b506001949350505050565b6005546001600160a01b031633146111b75760405162461bcd60e51b8152600401610f6e90614e5d565b6111c36012600a614fbb565b6103e86111cf60025490565b6111da906001614fca565b6111e49190614fe9565b6111ee9190614fe9565b81101561124f5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610f6e565b61125b6012600a614fbb565b6112659082614fca565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146112cb5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff16156113235760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610f6e565b600a8211156113845760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610f6e565b6014805462ffff0019166201010017905543600f8190556113a690839061500b565b601055600a80546001600160a01b0319166001600160a01b0383169081179091556113d2906001613fc9565b600a546113e9906001600160a01b0316600161402c565b6040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a15050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610f3a91859061144d90869061500b565b6130a5565b6005546001600160a01b0316331461147c5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166114a25760405162461bcd60e51b8152600401610f6e90615023565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146115165760405162461bcd60e51b8152600401610f6e90614e5d565b600b5461152230611696565b1015611598576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610f6e565b600a805460ff60a01b1916600160a01b1790556115b361405a565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461161f5760405162461bcd60e51b8152600401610f6e90614e5d565b60005b8281101561169057816011600086868581811061164157611641614e92565b90506020020160208101906116569190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061168881614ebe565b915050611622565b50505050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146116db5760405162461bcd60e51b8152600401610f6e90614e5d565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610f6e90614e5d565b6102588310156117bd5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015272616e206576657279203130206d696e7574657360681b6064820152608401610f6e565b6103e882111580156117cd575060015b6118325760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610f6e565b6024929092556022556023805460ff1916911515919091179055565b6005546001600160a01b031633146118785760405162461bcd60e51b8152600401610f6e90614e5d565b6014805460ff199081169091556016805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146118ef5760405162461bcd60e51b8152600401610f6e90614e5d565b8061196257600a546001600160a01b03908116908316036119625760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610f6e565b6001600160a01b03919091166000908152603060205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146119b75760405162461bcd60e51b8152600401610f6e90614e5d565b60188390556019829055601a819055806119d1838561500b565b6119db919061500b565b60175560646119ed612710600f614fca565b6119f79190614fe9565b60175411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610f6e565b6005546000906001600160a01b03163314611a755760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038316611acb5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610f6e565b6001600160a01b03831630141580611aeb5750601454610100900460ff16155b611b545760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610f6e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbf9190615069565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190615082565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611cac5760405162461bcd60e51b8152600401610f6e90614e5d565b601454610100900460ff1615611d185760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610f6e565b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8f919061509f565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e15919061509f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e86919061509f565b600a80546001600160a01b0319166001600160a01b03929092169182179055611eb0906001613fc9565b600a54611ec7906001600160a01b0316600161402c565b60004711611f235760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610f6e565b6000611f2e30611696565b11611f8a5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610f6e565b600954611fa59030906001600160a01b031661144d82611696565b6009546001600160a01b031663f305d7194730611fc181611696565b600e546040516001600160e01b031960e087901b168152611ff793929160009182916001600160a01b03169042906004016150bc565b60606040518083038185885af1158015612015573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061203a91906150f7565b5050507f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561209d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c19190615069565b6029556014805462ffff0019166201010017905543600f8190556120e690829061500b565b6010556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b606060048054610eaa90614e23565b60606012805480602002602001604051908101604052809291908181526020018280548015610f2357602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161215e575050505050905090565b6005546001600160a01b031633146121af5760405162461bcd60e51b8152600401610f6e90614e5d565b600a546001600160a01b03908116908316036122335760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610f6e565b61223d828261402c565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156122fb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610f6e565b61230833858584036130a5565b5060019392505050565b6000610f3a33848461331e565b6005546001600160a01b031633146123495760405162461bcd60e51b8152600401610f6e90614e5d565b6064851115801561235b575060648411155b80156123675750838511155b6123ac5760405162461bcd60e51b8152602060048201526016602482015275109d5e481cd95d1d1a5b99dcc81a5b98dbdc9c9958dd60521b6044820152606401610f6e565b606483111580156123be575060648211155b80156123ca5750818311155b6124165760405162461bcd60e51b815260206004820152601760248201527f53656c6c2073657474696e677320696e636f72726563740000000000000000006044820152606401610f6e565b6028805460ff191696151596909617909555602a93909355602c91909155602b55602d55602e55565b6005546001600160a01b031633146124695760405162461bcd60e51b8152600401610f6e90614e5d565b60005b828110156116905781602f600086868581811061248b5761248b614e92565b90506020020160208101906124a09190614a05565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558383828181106124da576124da614e92565b90506020020160208101906124ef9190614a05565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78360405161252b911515815260200190565b60405180910390a28061253d81614ebe565b91505061246c565b6005546001600160a01b0316331461256f5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0382166000818152602f6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60006305f5e100670de0b6b3a76400006125e961dead611696565b6002546125f69190615125565b600a5461260b906001600160a01b0316611696565b602954600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612661573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612685919061509f565b600a546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa1580156126ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f29190615069565b61270490670de0b6b3a7640000614fca565b61270e9190614fca565b6127189190614fe9565b6127229190614fca565b61272c9190614fe9565b6127369190614fe9565b905090565b6005546001600160a01b031633146127655760405162461bcd60e51b8152600401610f6e90614e5d565b601c839055601d829055601e8190558061277f838561500b565b612789919061500b565b601b55606461279b6127106014614fca565b6127a59190614fe9565b601b5411156110de5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610f6e565b6005546001600160a01b031633146128205760405162461bcd60e51b8152600401610f6e90614e5d565b61282c6012600a614fbb565b606461283760025490565b612842906001614fca565b61284c9190614fe9565b6128569190614fe9565b8110156128b65760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015267207468616e20312560c01b6064820152608401610f6e565b6128c26012600a614fbb565b6128cc9082614fca565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc90602001611296565b6005546001600160a01b0316331461292b5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b0381166129515760405162461bcd60e51b8152600401610f6e90615023565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f804ec39c1aea0b9f2615a34c3fa437b6ddda2c72e6848abf0f23955589a7ad5490600090a250565b6005546001600160a01b031633146129c55760405162461bcd60e51b8152600401610f6e90614e5d565b620186a06129d260025490565b6129dd906001614fca565b6129e79190614fe9565b811015612a545760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610f6e565b6103e8612a6060025490565b612a6b906001614fca565b612a759190614fe9565b811115612ae15760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610f6e565b600b55565b6005546001600160a01b03163314612b105760405162461bcd60e51b8152600401610f6e90614e5d565b612b1c6012600a614fbb565b6103e8612b2860025490565b612b33906001614fca565b612b3d9190614fe9565b612b479190614fe9565b811015612ba95760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610f6e565b612bb56012600a614fbb565b612bbf9082614fca565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001611296565b6005546001600160a01b03163314612c1e5760405162461bcd60e51b8152600401610f6e90614e5d565b6016805460ff19169055565b60128181548110612c3a57600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612c7e5760405162461bcd60e51b8152600401610f6e90614e5d565b6001600160a01b038116612ce35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f6e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612d695760405162461bcd60e51b8152600401610f6e90614e5d565b604051600090339047908381818185875af1925050503d8060008114611690576040519150601f19603f3d011682016040523d82523d6000602084013e611690565b6005546001600160a01b03163314612dd55760405162461bcd60e51b8152600401610f6e90614e5d565b611388811115612e455760405162461bcd60e51b815260206004820152603560248201527f4d6179206e6f74206275726e206d6f7265207468616e20353025206f6620636f6044820152746e74726163742773204c5020617420612074696d6560581b6064820152608401610f6e565b602654612e529042615125565b6027541115612e935760405162461bcd60e51b815260206004820152600d60248201526c213ab937103a37b79039b7b7b760991b6044820152606401610f6e565b42602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f049190615069565b90506000612f1130611696565b90506000612710612f228585614fca565b612f2c9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af1158015612f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612faa9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec90612fe590309086906001908190849042906004016150bc565b60408051808303816000875af1158015613003573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613027919061513c565b505060008361303530611696565b61303f9190615125565b90508015613054576130543061dead836131c9565b60006130608347615125565b905080156130715761307181614262565b60405184907f81b7e7967a97e0708996ad25e859322b1c2e22612ac6798c9c95cfda2dca265f90600090a250505050505050565b6001600160a01b0383166131075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f6e565b6001600160a01b0382166131685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f6e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166131ef5760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b0382166132155760405162461bcd60e51b8152600401610f6e906151a5565b6001600160a01b0383166000908152602081905260409020548181101561328d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610f6e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132c490849061500b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161331091815260200190565b60405180910390a350505050565b6001600160a01b0383166133445760405162461bcd60e51b8152600401610f6e90615160565b6001600160a01b03821661336a5760405162461bcd60e51b8152600401610f6e906151a5565b600081116133ba5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610f6e565b601454610100900460ff1661344d576001600160a01b0383166000908152602f602052604090205460ff168061340857506001600160a01b0382166000908152602f602052604090205460ff165b61344d5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610f6e565b601454610100900460ff161561354d576001600160a01b03831660009081526011602052604090205460ff1615801561349f57506001600160a01b03821660009081526011602052604090205460ff16155b806134b757506005546001600160a01b038381169116145b806134cc57506001600160a01b03821661dead145b61354d5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610f6e565b60145460ff161561393f576005546001600160a01b0384811691161480159061358457506005546001600160a01b03838116911614155b801561359857506001600160a01b03821615155b80156135af57506001600160a01b03821661dead14155b80156135d457506001600160a01b0383166000908152602f602052604090205460ff16155b80156135f957506001600160a01b0382166000908152602f602052604090205460ff16155b1561393f5760165460ff1615613712576009546001600160a01b038381169116148015906136355750600a546001600160a01b03838116911614155b1561371257613645600243615125565b326000908152601560205260409020541080156136835750613668600243615125565b6001600160a01b038316600090815260156020526040902054105b6136ed5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610f6e565b3260009081526015602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526031602052604090205460ff16801561375357506001600160a01b03821660009081526030602052604090205460ff16155b1561381a576006548111156137bb5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610f6e565b6008546137c783611696565b6137d1908361500b565b11156138155760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b61393f565b6001600160a01b03821660009081526031602052604090205460ff16801561385b57506001600160a01b03831660009081526030602052604090205460ff16155b156138c5576007548111156138155760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610f6e565b6001600160a01b03821660009081526030602052604090205460ff1661393f576008546138f183611696565b6138fb908361500b565b111561393f5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610f6e565b600061394a30611696565b600b5490915081108015908190613969575060145462010000900460ff165b801561397f5750600a54600160a01b900460ff16155b80156139a457506001600160a01b03851660009081526031602052604090205460ff16155b80156139c957506001600160a01b0385166000908152602f602052604090205460ff16155b80156139ee57506001600160a01b0384166000908152602f602052604090205460ff16155b15613a1c57600a805460ff60a01b1916600160a01b179055613a0e61405a565b600a805460ff60a01b191690555b600a54600160a01b900460ff16158015613a4e57506001600160a01b03841660009081526031602052604090205460ff165b8015613a5c575060235460ff165b8015613a775750602454602554613a73919061500b565b4210155b8015613a9c57506001600160a01b0385166000908152602f602052604090205460ff16155b15613aa957613aa96143ac565b6001600160a01b0385166000908152602f602052604090205460019060ff1680613aeb57506001600160a01b0385166000908152602f602052604090205460ff165b15613af4575060005b60285460009060ff168015613b105750601454610100900460ff165b8015613b265750600a54600160a01b900460ff16155b15613bba577f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b03166350d25bcd6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015613b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613baf9190615069565b602955613bba6145c6565b8115613fb55760105443108015613be957506001600160a01b03871660009081526031602052604090205460ff165b8015613c0e57506001600160a01b03861660009081526031602052604090205460ff16155b8015613c3357506001600160a01b0386166000908152602f602052604090205460ff16155b8015613c4157506000601754115b15613dfc576010544310613c6857600160066000828254613c629190615125565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16613d48576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556013805491929091613cc190849061500b565b9091555050601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b61271060175486613d599190614fca565b613d639190614fe9565b905060175460195482613d769190614fca565b613d809190614fe9565b60206000828254613d91919061500b565b9091555050601754601854613da69083614fca565b613db09190614fe9565b601f6000828254613dc1919061500b565b9091555050601754601a54613dd69083614fca565b613de09190614fe9565b60216000828254613df1919061500b565b90915550613f979050565b6001600160a01b03861660009081526031602052604090205460ff168015613e2657506000601b54115b15613eb957612710601b5486613e3c9190614fca565b613e469190614fe9565b9050601b54601d5482613e599190614fca565b613e639190614fe9565b60206000828254613e74919061500b565b9091555050601b54601c54613e899083614fca565b613e939190614fe9565b601f6000828254613ea4919061500b565b9091555050601b54601e54613dd69083614fca565b6001600160a01b03871660009081526031602052604090205460ff168015613ee357506000601754115b15613f975761271060175486613ef99190614fca565b613f039190614fe9565b905060175460195482613f169190614fca565b613f209190614fe9565b60206000828254613f31919061500b565b9091555050601754601854613f469083614fca565b613f509190614fe9565b601f6000828254613f61919061500b565b9091555050601754601a54613f769083614fca565b613f809190614fe9565b60216000828254613f91919061500b565b90915550505b8015613fa857613fa88730836131c9565b613fb28186615125565b94505b613fc08787876131c9565b50505050505050565b6001600160a01b038216600081815260306020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152603160205260409020805460ff191682151517905561223d8282613fc9565b600061406530611696565b90506000602154601f5460205461407c919061500b565b614086919061500b565b9050811580614093575080155b1561409c575050565b600b546140aa906014614fca565b8211156140c257600b546140bf906014614fca565b91505b600080600283602054866140d69190614fca565b6140e09190614fe9565b6140ea9190614fe9565b90506140fe6140f98286615125565b614741565b6020544790819060009061411490600290614fe9565b61411e9087615125565b601f5461412b9085614fca565b6141359190614fe9565b9050600060026020546141489190614fe9565b6141529088615125565b60215461415f9086614fca565b6141699190614fe9565b9050614175818361500b565b61417f9084615125565b60006020819055601f8190556021559250841580159061419f5750600083115b156141ae576141ae858461489b565b600d546040516001600160a01b03909116908290600081818185875af1925050503d80600081146141fb576040519150601f19603f3d011682016040523d82523d6000602084013e614200565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d8060008114614250576040519150601f19603f3d011682016040523d82523d6000602084013e614255565b606091505b5050505050505050505050565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156142cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f0919061509f565b8160008151811061430357614303614e92565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061433757614337614e92565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de9590849061437f90600090869061dead9042906004016151e8565b6000604051808303818588803b15801561439857600080fd5b505af1158015613fc0573d6000803e3d6000fd5b426025819055602755600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156143fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144229190615069565b9050600061442f30611696565b90506000612710602254846144449190614fca565b61444e9190614fe9565b600a5460095460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350479291169063095ea7b3906044016020604051808303816000875af11580156144a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144cc9190615082565b50600954604051629d473b60e21b81526001600160a01b03909116906302751cec9061450790309086906001908190849042906004016150bc565b60408051808303816000875af1158015614525573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614549919061513c565b505060008361455730611696565b6145619190615125565b90508015614576576145763061dead836131c9565b60006145828347615125565b905080156145935761459381614262565b60405184907f30464008593337c7762c84338a125f5c481ce1997dbf1d7931bcce0b6430787a90600090a2505050505050565b60006145d06125ce565b90506000602a54670de0b6b3a7640000602c54602e54856145f19190614fe9565b6145fb9190614fca565b6146059190614fe9565b61460f919061500b565b90506000602b54670de0b6b3a7640000602d54602e54866146309190614fe9565b61463a9190614fca565b6146449190614fe9565b61464e919061500b565b9050602c5482111561466057602c5491505b602d5481111561466f5750602d545b60648260175461467f9190614fca565b6146899190614fe9565b601981905560175460649161469d91615125565b6146a8906021614fca565b6146b29190614fe9565b601881905560195460175490916146c891615125565b6146d29190615125565b601a55601b546064906146e6908390614fca565b6146f09190614fe9565b601d819055601b5460649161470491615125565b61470f906032614fca565b6147199190614fe9565b601c819055601d54601b54909161472f91615125565b6147399190615125565b601e55505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061477657614776614e92565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156147cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147f3919061509f565b8160018151811061480657614806614e92565b6001600160a01b03928316602091820292909201015260095461482c91309116846130a5565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061486590859060009086903090429060040161521d565b600060405180830381600087803b15801561487f57600080fd5b505af1158015614893573d6000803e3d6000fd5b505050505050565b6009546148b39030906001600160a01b0316846130a5565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906148f090309087906000908190849042906004016150bc565b60606040518083038185885af115801561490e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061493391906150f7565b5050505050565b600060208083528351808285015260005b818110156149675785810183015185820160400152820161494b565b81811115614979576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146149a457600080fd5b50565b600080604083850312156149ba57600080fd5b82356149c58161498f565b946020939093013593505050565b80151581146149a457600080fd5b6000602082840312156149f357600080fd5b81356149fe816149d3565b9392505050565b600060208284031215614a1757600080fd5b81356149fe8161498f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614a6157614a61614a22565b604052919050565b600067ffffffffffffffff821115614a8357614a83614a22565b5060051b60200190565b600082601f830112614a9e57600080fd5b81356020614ab3614aae83614a69565b614a38565b82815260059290921b84018101918181019086841115614ad257600080fd5b8286015b84811015614aed5780358352918301918301614ad6565b509695505050505050565b60008060408385031215614b0b57600080fd5b823567ffffffffffffffff80821115614b2357600080fd5b818501915085601f830112614b3757600080fd5b81356020614b47614aae83614a69565b82815260059290921b84018101918181019089841115614b6657600080fd5b948201945b83861015614b8d578535614b7e8161498f565b82529482019490820190614b6b565b96505086013592505080821115614ba357600080fd5b50614bb085828601614a8d565b9150509250929050565b600080600060608486031215614bcf57600080fd5b8335614bda8161498f565b92506020840135614bea8161498f565b929592945050506040919091013590565b600060208284031215614c0d57600080fd5b5035919050565b60008060408385031215614c2757600080fd5b823591506020830135614c398161498f565b809150509250929050565b600080600060408486031215614c5957600080fd5b833567ffffffffffffffff80821115614c7157600080fd5b818601915086601f830112614c8557600080fd5b813581811115614c9457600080fd5b8760208260051b8501011115614ca957600080fd5b60209283019550935050840135614cbf816149d3565b809150509250925092565b600080600060608486031215614cdf57600080fd5b83359250602084013591506040840135614cbf816149d3565b60008060408385031215614d0b57600080fd5b8235614d168161498f565b91506020830135614c39816149d3565b600080600060608486031215614d3b57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614d6557600080fd5b8235614d708161498f565b91506020830135614c398161498f565b600081518084526020808501945080840160005b83811015614db95781516001600160a01b031687529582019590820190600101614d94565b509495945050505050565b6020815260006149fe6020830184614d80565b60008060008060008060c08789031215614df057600080fd5b8635614dfb816149d3565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b600181811c90821680614e3757607f821691505b602082108103614e5757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614ed057614ed0614ea8565b5060010190565b600181815b80851115614f12578160001904821115614ef857614ef8614ea8565b80851615614f0557918102915b93841c9390800290614edc565b509250929050565b600082614f2957506001610f3e565b81614f3657506000610f3e565b8160018114614f4c5760028114614f5657614f72565b6001915050610f3e565b60ff841115614f6757614f67614ea8565b50506001821b610f3e565b5060208310610133831016604e8410600b8410161715614f95575081810a610f3e565b614f9f8383614ed7565b8060001904821115614fb357614fb3614ea8565b029392505050565b60006149fe60ff841683614f1a565b6000816000190483118215151615614fe457614fe4614ea8565b500290565b60008261500657634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561501e5761501e614ea8565b500190565b60208082526026908201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60408201526507420626520360d41b606082015260800190565b60006020828403121561507b57600080fd5b5051919050565b60006020828403121561509457600080fd5b81516149fe816149d3565b6000602082840312156150b157600080fd5b81516149fe8161498f565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561510c57600080fd5b8351925060208401519150604084015190509250925092565b60008282101561513757615137614ea8565b500390565b6000806040838503121561514f57600080fd5b505080516020909101519092909150565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8481526080602082015260006152016080830186614d80565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061523c60a0830186614d80565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220354747c3499d0b5d3b0ec29507f70050b73dc9f91729c7f793997fbdfbadccdd64736f6c634300080f0033

Deployed Bytecode Sourcemap

9897:29766:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11783:37;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;11783:37:0;;;;;;;;4213:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10039:27::-;;;;;;;;;;-1:-1:-1;10039:27:0;;;;-1:-1:-1;;;;;10039:27:0;;;;;;-1:-1:-1;;;;;980:32:1;;;962:51;;950:2;935:18;10039:27:0;798:221:1;5127:169:0;;;;;;;;;;-1:-1:-1;5127:169:0;;;;;:::i;:::-;;:::i;:::-;;;1645:14:1;;1638:22;1620:41;;1608:2;1593:18;5127:169:0;1480:187:1;11961:45:0;;;;;;;;;;;;;;;;16950:115;;;;;;;;;;-1:-1:-1;16950:115:0;;;;;:::i;:::-;;:::i;:::-;;12162:64;;;;;;;;;;-1:-1:-1;12162:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11696:40;;;;;;;;;;-1:-1:-1;11696:40:0;;;;;;;;4534:108;;;;;;;;;;-1:-1:-1;4622:12:0;;4534:108;;11562:47;;;;;;;;;;;;;;;;11372:36;;;;;;;;;;;;;;;;11296:33;;;;;;;;;;;;;;;;20065:618;;;;;;;;;;-1:-1:-1;20065:618:0;;;;;:::i;:::-;;:::i;5304:492::-;;;;;;;;;;-1:-1:-1;5304:492:0;;;;;:::i;:::-;;:::i;18514:295::-;;;;;;;;;;-1:-1:-1;18514:295:0;;;;;:::i;:::-;;:::i;11468:45::-;;;;;;;;;;;;;;;;11428:33;;;;;;;;;;-1:-1:-1;11428:33:0;;;;;;;;17077:626;;;;;;;;;;-1:-1:-1;17077:626:0;;;;;:::i;:::-;;:::i;4433:93::-;;;;;;;;;;-1:-1:-1;4433:93:0;;4516:2;5888:36:1;;5876:2;5861:18;4433:93:0;5746:184:1;5804:215:0;;;;;;;;;;-1:-1:-1;5804:215:0;;;;;:::i;:::-;;:::i;10260:25::-;;;;;;;;;;-1:-1:-1;10260:25:0;;;;-1:-1:-1;;;;;10260:25:0;;;11743:33;;;;;;;;;;;;;;;;10073:21;;;;;;;;;;-1:-1:-1;10073:21:0;;;;-1:-1:-1;;;;;10073:21:0;;;31821:297;;;;;;;;;;-1:-1:-1;31821:297:0;;;;;:::i;:::-;;:::i;10564:33::-;;;;;;;;;;-1:-1:-1;10564:33:0;;;;;;;;11092:32;;;;;;;;;;;;;;;;32430:312;;;;;;;;;;;;;:::i;18115:228::-;;;;;;;;;;-1:-1:-1;18115:228:0;;;;;:::i;:::-;;:::i;28395:120::-;;;;;;;;;;-1:-1:-1;28489:18:0;;28474:12;:33;28395:120;;10949:31;;;;;;;;;;;;;;;;9971:28;;;;;;;;;;;;;;;;11057;;;;;;;;;;;;;;;;10530:25;;;;;;;;;;;;;;;;10644:31;;;;;;;;;;-1:-1:-1;10644:31:0;;;;;;;;;;;4650:127;;;;;;;;;;-1:-1:-1;4650:127:0;;;;;:::i;:::-;;:::i;8294:150::-;;;;;;;;;;;;;:::i;34047:447::-;;;;;;;;;;-1:-1:-1;34047:447:0;;;;;:::i;:::-;;:::i;17759:237::-;;;;;;;;;;;;;:::i;20695:260::-;;;;;;;;;;-1:-1:-1;20695:260:0;;;;;:::i;:::-;;:::i;21508:393::-;;;;;;;;;;-1:-1:-1;21508:393:0;;;;;:::i;:::-;;:::i;31085:498::-;;;;;;;;;;-1:-1:-1;31085:498:0;;;;;:::i;:::-;;:::i;32750:1289::-;;;;;;;;;;-1:-1:-1;32750:1289:0;;;;;:::i;:::-;;:::i;10444:44::-;;;;;;;;;;-1:-1:-1;10444:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9937:27;;;;;;;;;;;;;;;;8080:79;;;;;;;;;;-1:-1:-1;8145:6:0;;-1:-1:-1;;;;;8145:6:0;8080:79;;4321:104;;;;;;;;;;;;;:::i;18004:103::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20963:293::-;;;;;;;;;;-1:-1:-1;20963:293:0;;;;;:::i;:::-;;:::i;11024:24::-;;;;;;;;;;;;;;;;11203:43;;;;;;;;;;;;11241:5;11203:43;;11616:35;;;;;;;;;;;;;;;;11336:27;;;;;;;;;;;;;;;;11169:25;;;;;;;;;;;;;;;;6027:413;;;;;;;;;;-1:-1:-1;6027:413:0;;;;;:::i;:::-;;:::i;11520:29::-;;;;;;;;;;;;;;;;10404:33;;;;;;;;;;;;;;;;4785:175;;;;;;;;;;-1:-1:-1;4785:175:0;;;;;:::i;:::-;;:::i;37810:836::-;;;;;;;;;;-1:-1:-1;37810:836:0;;;;;:::i;:::-;;:::i;12384:58::-;;;;;;;;;;-1:-1:-1;12384:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10292:26;;;;;;;;;;-1:-1:-1;10292:26:0;;;;-1:-1:-1;;;;;10292:26:0;;;10604:33;;;;;;;;;;-1:-1:-1;10604:33:0;;;;;;;;;;;22319:282;;;;;;;;;;-1:-1:-1;22319:282:0;;;;;:::i;:::-;;:::i;22609:182::-;;;;;;;;;;-1:-1:-1;22609:182:0;;;;;:::i;:::-;;:::i;37563:239::-;;;;;;;;;;;;;:::i;21909:402::-;;;;;;;;;;-1:-1:-1;21909:402:0;;;;;:::i;:::-;;:::i;19129:293::-;;;;;;;;;;-1:-1:-1;19129:293:0;;;;;:::i;:::-;;:::i;10867:39::-;;;;;;;;;;-1:-1:-1;10867:39:0;;;;;;;;32130:248;;;;;;;;;;-1:-1:-1;32130:248:0;;;;;:::i;:::-;;:::i;11916:38::-;;;;;;;;;;;;;;;;19492:346;;;;;;;;;;-1:-1:-1;19492:346:0;;;;;:::i;:::-;;:::i;10915:27::-;;;;;;;;;;;;;;;;18821:300;;;;;;;;;;-1:-1:-1;18821:300:0;;;;;:::i;:::-;;:::i;4968:151::-;;;;;;;;;;-1:-1:-1;4968:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;5084:18:0;;;5057:7;5084:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4968:151;11827:38;;;;;;;;;;;;;;;;10179:33;;;;;;;;;;;;;;;;18404:98;;;;;;;;;;;;;:::i;10221:32::-;;;;;;;;;;-1:-1:-1;10221:32:0;;;;-1:-1:-1;;;;;10221:32:0;;;10495:28;;;;;;;;;;-1:-1:-1;10495:28:0;;;;;:::i;:::-;;:::i;10327:37::-;;;;;;;;;;;;;;;;10987:30;;;;;;;;;;;;;;;;8452:244;;;;;;;;;;-1:-1:-1;8452:244:0;;;;;:::i;:::-;;:::i;31653:160::-;;;;;;;;;;;;;:::i;11872:37::-;;;;;;;;;;;;;;;;11131:31;;;;;;;;;;;;;;;;10006:24;;;;;;;;;;;;;;;;11255:34;;;;;;;;;;;;;;;;35766:1399;;;;;;;;;;-1:-1:-1;35766:1399:0;;;;;:::i;:::-;;:::i;4213:100::-;4267:13;4300:5;4293:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:100;:::o;5127:169::-;5210:4;5227:39;442:10;5250:7;5259:6;5227:8;:39::i;:::-;-1:-1:-1;5284:4:0;5127:169;;;;;:::o;16950:115::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;;;;;;;;;17027:21:::1;:30:::0;;-1:-1:-1;;17027:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16950:115::o;20065:618::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;20207:15:::1;:22;20189:7;:14;:40;20181:83;;;::::0;-1:-1:-1;;;20181:83:0;;10650:2:1;20181:83:0::1;::::0;::::1;10632:21:1::0;10689:2;10669:18;;;10662:30;10728:32;10708:18;;;10701:60;10778:18;;20181:83:0::1;10448:354:1::0;20181:83:0::1;20300:3;20283:7;:14;:20;20275:87;;;::::0;-1:-1:-1;;;20275:87:0;;11009:2:1;20275:87:0::1;::::0;::::1;10991:21:1::0;11048:2;11028:18;;;11021:30;11087:34;11067:18;;;11060:62;-1:-1:-1;;;11138:18:1;;;11131:52;11200:19;;20275:87:0::1;10807:418:1::0;20275:87:0::1;20475:9;20471:205;20494:7;:14;20490:1;:18;20471:205;;;20529:14;20546:7;20554:1;20546:10;;;;;;;;:::i;:::-;;;;;;;20529:27;;20571:14;20588:15;20604:1;20588:18;;;;;;;;:::i;:::-;;;;;;;20571:35;;20621:43;20637:10;20649:6;20657;20621:15;:43::i;:::-;20514:162;;20510:3;;;;;:::i;:::-;;;;20471:205;;;;20065:618:::0;;:::o;5304:492::-;5444:4;5461:36;5471:6;5479:9;5490:6;5461:9;:36::i;:::-;-1:-1:-1;;;;;5537:19:0;;5510:24;5537:19;;;:11;:19;;;;;;;;442:10;5537:33;;;;;;;;5589:26;;;;5581:79;;;;-1:-1:-1;;;5581:79:0;;11836:2:1;5581:79:0;;;11818:21:1;11875:2;11855:18;;;11848:30;11914:34;11894:18;;;11887:62;-1:-1:-1;;;11965:18:1;;;11958:38;12013:19;;5581:79:0;11634:404:1;5581:79:0;5696:57;5705:6;442:10;5746:6;5727:16;:25;5696:8;:57::i;:::-;-1:-1:-1;5784:4:0;;5304:492;-1:-1:-1;;;;5304:492:0:o;18514:295::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;18636:16:::1;4516:2:::0;18636::::1;:16;:::i;:::-;18627:4;18607:13;4622:12:::0;;;4534:108;18607:13:::1;:17;::::0;18623:1:::1;18607:17;:::i;:::-;:24;;;;:::i;:::-;18606:47;;;;:::i;:::-;18596:6;:57;;18588:111;;;::::0;-1:-1:-1;;;18588:111:0;;14023:2:1;18588:111:0::1;::::0;::::1;14005:21:1::0;14062:2;14042:18;;;14035:30;14101:34;14081:18;;;14074:62;-1:-1:-1;;;14152:18:1;;;14145:39;14201:19;;18588:111:0::1;13821:405:1::0;18588:111:0::1;18735:16;4516:2:::0;18735::::1;:16;:::i;:::-;18725:27;::::0;:6;:27:::1;:::i;:::-;18710:12;:42:::0;;;18768:33:::1;::::0;160:25:1;;;18768:33:0::1;::::0;148:2:1;133:18;18768:33:0::1;;;;;;;;18514:295:::0;:::o;17077:626::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;17182:13:::1;::::0;::::1;::::0;::::1;;;17181:14;17173:50;;;::::0;-1:-1:-1;;;17173:50:0;;14433:2:1;17173:50:0::1;::::0;::::1;14415:21:1::0;14472:2;14452:18;;;14445:30;14511:25;14491:18;;;14484:53;14554:18;;17173:50:0::1;14231:347:1::0;17173:50:0::1;17262:2;17242:16;:22;;17234:74;;;::::0;-1:-1:-1;;;17234:74:0;;14785:2:1;17234:74:0::1;::::0;::::1;14767:21:1::0;14824:2;14804:18;;;14797:30;14863:34;14843:18;;;14836:62;-1:-1:-1;;;14914:18:1;;;14907:37;14961:19;;17234:74:0::1;14583:403:1::0;17234:74:0::1;17319:13;:20:::0;;-1:-1:-1;;17350:18:0;;;;;17400:12:::1;17379:18;:33:::0;;;17444:37:::1;::::0;17465:16;;17444:37:::1;:::i;:::-;17423:18;:58:::0;17523:6:::1;:16:::0;;-1:-1:-1;;;;;;17523:16:0::1;-1:-1:-1::0;;;;;17523:16:0;::::1;::::0;;::::1;::::0;;;17550:49:::1;::::0;-1:-1:-1;17550:26:0::1;:49::i;:::-;17647:6;::::0;17610:51:::1;::::0;-1:-1:-1;;;;;17647:6:0::1;::::0;17610:28:::1;:51::i;:::-;17679:16;::::0;::::1;::::0;;;::::1;17077:626:::0;;:::o;5804:215::-;442:10;5892:4;5941:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5941:34:0;;;;;;;;;;5892:4;;5909:80;;5932:7;;5941:47;;5978:10;;5941:47;:::i;:::-;5909:8;:80::i;31821:297::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31917:32:0;::::1;31909:83;;;;-1:-1:-1::0;;;31909:83:0::1;;;;;;;:::i;:::-;32003:17;:47:::0;;-1:-1:-1;;;;;;32003:47:0::1;-1:-1:-1::0;;;;;32003:47:0;::::1;::::0;;::::1;::::0;;;32066:44:::1;::::0;::::1;::::0;-1:-1:-1;;32066:44:0::1;31821:297:::0;:::o;32430:312::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;32521:18:::1;;32493:24;32511:4;32493:9;:24::i;:::-;:46;;32485:123;;;::::0;;-1:-1:-1;;;32485:123:0;;15733:2:1;32485:123:0::1;::::0;::::1;15715:21:1::0;15752:18;;;15745:30;;;;15811:34;15791:18;;;15784:62;15882:34;15862:18;;;15855:62;15934:19;;32485:123:0::1;15531:428:1::0;32485:123:0::1;32619:8;:15:::0;;-1:-1:-1;;;;32619:15:0::1;-1:-1:-1::0;;;32619:15:0::1;::::0;;32645:10:::1;:8;:10::i;:::-;32666:8;:16:::0;;-1:-1:-1;;;;32666:16:0::1;::::0;;32698:36:::1;::::0;32718:15:::1;160:25:1::0;;32698:36:0::1;::::0;148:2:1;133:18;32698:36:0::1;;;;;;;32430:312::o:0;18115:228::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;18232:9:::1;18228:108;18247:19:::0;;::::1;18228:108;;;18314:10;18287:11;:24;18299:8;;18308:1;18299:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18287:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18287:24:0;:37;;-1:-1:-1;;18287:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18268:3;::::1;::::0;::::1;:::i;:::-;;;;18228:108;;;;18115:228:::0;;;:::o;4650:127::-;-1:-1:-1;;;;;4751:18:0;4724:7;4751:18;;;;;;;;;;;;4650:127::o;8294:150::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;8387:6:::1;::::0;8366:40:::1;::::0;8403:1:::1;::::0;-1:-1:-1;;;;;8387:6:0::1;::::0;8366:40:::1;::::0;8403:1;;8366:40:::1;8417:6;:19:::0;;-1:-1:-1;;;;;;8417:19:0::1;::::0;;8294:150::o;34047:447::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;34201:3:::1;34178:19;:26;;34170:90;;;::::0;-1:-1:-1;;;34170:90:0;;16166:2:1;34170:90:0::1;::::0;::::1;16148:21:1::0;16205:2;16185:18;;;16178:30;16244:34;16224:18;;;16217:62;-1:-1:-1;;;16295:18:1;;;16288:49;16354:19;;34170:90:0::1;15964:415:1::0;34170:90:0::1;34291:4;34279:8;:16;;:33;;;;-1:-1:-1::0;34299:13:0;34279:33:::1;34271:94;;;::::0;-1:-1:-1;;;34271:94:0;;16586:2:1;34271:94:0::1;::::0;::::1;16568:21:1::0;16625:2;16605:18;;;16598:30;16664:34;16644:18;;;16637:62;-1:-1:-1;;;16715:18:1;;;16708:46;16771:19;;34271:94:0::1;16384:412:1::0;34271:94:0::1;34376:15;:37:::0;;;;34424:16:::1;:27:::0;34462:13:::1;:24:::0;;-1:-1:-1;;34462:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34047:447::o;17759:237::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;17815:14:::1;:22:::0;;-1:-1:-1;;17815:22:0;;::::1;::::0;;;17848:20:::1;:28:::0;;;;::::1;::::0;;4622:12;;17887::::1;:28:::0;4622:12;;17926:13:::1;:29:::0;17973:15:::1;::::0;::::1;::::0;;;::::1;17759:237::o:0;20695:260::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;20791:4:::1;20787:104;;20829:6;::::0;-1:-1:-1;;;;;20829:6:0;;::::1;20819:16:::0;;::::1;::::0;20811:68:::1;;;::::0;-1:-1:-1;;;20811:68:0;;17003:2:1;20811:68:0::1;::::0;::::1;16985:21:1::0;17042:2;17022:18;;;17015:30;17081:34;17061:18;;;17054:62;-1:-1:-1;;;17132:18:1;;;17125:37;17179:19;;20811:68:0::1;16801:403:1::0;20811:68:0::1;-1:-1:-1::0;;;;;20901:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;20901:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20695:260::o;21508:393::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;21625:16:::1;:33:::0;;;21669:15:::1;:31:::0;;;21711:9:::1;:19:::0;;;21723:7;21756:34:::1;21687:13:::0;21644:14;21756:34:::1;:::i;:::-;:46;;;;:::i;:::-;21741:12;:61:::0;21856:3:::1;21837:16;11241:5;21837:2;:16;:::i;:::-;:22;;;;:::i;:::-;21821:12;;:38;;21813:80;;;::::0;-1:-1:-1;;;21813:80:0;;17411:2:1;21813:80:0::1;::::0;::::1;17393:21:1::0;17450:2;17430:18;;;17423:30;17489:31;17469:18;;;17462:59;17538:18;;21813:80:0::1;17209:353:1::0;31085:498:0;8207:6;;31172:10;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31203:20:0;::::1;31195:59;;;::::0;-1:-1:-1;;;31195:59:0;;17769:2:1;31195:59:0::1;::::0;::::1;17751:21:1::0;17808:2;17788:18;;;17781:30;17847:28;17827:18;;;17820:56;17893:18;;31195:59:0::1;17567:350:1::0;31195:59:0::1;-1:-1:-1::0;;;;;31273:23:0;::::1;31291:4;31273:23;;::::0;:41:::1;;-1:-1:-1::0;31301:13:0::1;::::0;::::1;::::0;::::1;;;31300:14;31273:41;31265:106;;;::::0;-1:-1:-1;;;31265:106:0;;18124:2:1;31265:106:0::1;::::0;::::1;18106:21:1::0;18163:2;18143:18;;;18136:30;18202:34;18182:18;;;18175:62;-1:-1:-1;;;18253:18:1;;;18246:50;18313:19;;31265:106:0::1;17922:416:1::0;31265:106:0::1;31409:39;::::0;-1:-1:-1;;;31409:39:0;;31442:4:::1;31409:39;::::0;::::1;962:51:1::0;31382:24:0::1;::::0;-1:-1:-1;;;;;31409:24:0;::::1;::::0;::::1;::::0;935:18:1;;31409:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31467:46;::::0;-1:-1:-1;;;31467:46:0;;-1:-1:-1;;;;;18724:32:1;;;31467:46:0::1;::::0;::::1;18706:51:1::0;18773:18;;;18766:34;;;31382:66:0;;-1:-1:-1;31467:23:0;;::::1;::::0;::::1;::::0;18679:18:1;;31467:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31529;::::0;;-1:-1:-1;;;;;18724:32:1;;18706:51;;18788:2;18773:18;;18766:34;;;31459:54:0;;-1:-1:-1;31529:46:0::1;::::0;18679:18:1;31529:46:0::1;;;;;;;31184:399;31085:498:::0;;;;:::o;32750:1289::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;32831:13:::1;::::0;::::1;::::0;::::1;;;32830:14;32822:70;;;::::0;-1:-1:-1;;;32822:70:0;;19263:2:1;32822:70:0::1;::::0;::::1;19245:21:1::0;19302:2;19282:18;;;19275:30;19341:34;19321:18;;;19314:62;-1:-1:-1;;;19392:18:1;;;19385:41;19443:19;;32822:70:0::1;19061:407:1::0;32822:70:0::1;32950:9;;;;;;;;;-1:-1:-1::0;;;;;32950:9:0::1;-1:-1:-1::0;;;;;32950:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32938:43:0::1;;32990:4;32997:9;;;;;;;;;-1:-1:-1::0;;;;;32997:9:0::1;-1:-1:-1::0;;;;;32997:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32938:76;::::0;-1:-1:-1;;;;;;32938:76:0::1;::::0;;;;;;-1:-1:-1;;;;;19959:15:1;;;32938:76:0::1;::::0;::::1;19941:34:1::0;20011:15;;19991:18;;;19984:43;19876:18;;32938:76:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32929:6;:85:::0;;-1:-1:-1;;;;;;32929:85:0::1;-1:-1:-1::0;;;;;32929:85:0;;;::::1;::::0;;::::1;::::0;;33025:49:::1;::::0;-1:-1:-1;33025:26:0::1;:49::i;:::-;33122:6;::::0;33085:51:::1;::::0;-1:-1:-1;;;;;33122:6:0::1;::::0;33085:28:::1;:51::i;:::-;33216:1;33192:21;:25;33184:73;;;::::0;-1:-1:-1;;;33184:73:0;;20240:2:1;33184:73:0::1;::::0;::::1;20222:21:1::0;20279:2;20259:18;;;20252:30;20318:34;20298:18;;;20291:62;-1:-1:-1;;;20369:18:1;;;20362:33;20412:19;;33184:73:0::1;20038:399:1::0;33184:73:0::1;33305:1;33278:24;33296:4;33278:9;:24::i;:::-;:28;33270:79;;;::::0;-1:-1:-1;;;33270:79:0;;20644:2:1;33270:79:0::1;::::0;::::1;20626:21:1::0;20683:2;20663:18;;;20656:30;20722:34;20702:18;;;20695:62;-1:-1:-1;;;20773:18:1;;;20766:36;20819:19;;33270:79:0::1;20442:402:1::0;33270:79:0::1;33394:9;::::0;33362:69:::1;::::0;33379:4:::1;::::0;-1:-1:-1;;;;;33394:9:0::1;33406:24;33379:4:::0;33406:9:::1;:24::i;33362:69::-;33442:9;::::0;-1:-1:-1;;;;;33442:9:0::1;:25;33475:21;33520:4;33540:24;33520:4:::0;33540:9:::1;:24::i;:::-;33673:11;::::0;33442:284:::1;::::0;-1:-1:-1;;;;;;33442:284:0::1;::::0;;;;;;::::1;::::0;;;33579:1:::1;::::0;;;-1:-1:-1;;;;;33673:11:0::1;::::0;33700:15:::1;::::0;33442:284:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33764:9;-1:-1:-1::0;;;;;33764:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33739:14;:50:::0;33837:13:::1;:20:::0;;-1:-1:-1;;33868:18:0;;;;;33918:12:::1;33897:18;:33:::0;;;33962:37:::1;::::0;33983:16;;33962:37:::1;:::i;:::-;33941:18;:58:::0;34015:16:::1;::::0;::::1;::::0;;;::::1;32750:1289:::0;:::o;4321:104::-;4377:13;4410:7;4403:14;;;;;:::i;18004:103::-;18053:16;18088:11;18081:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18081:18:0;;;;;;;;;;;;;;;;;;;;;;18004:103;:::o;20963:293::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;21072:6:::1;::::0;-1:-1:-1;;;;;21072:6:0;;::::1;21064:14:::0;;::::1;::::0;21056:84:::1;;;::::0;-1:-1:-1;;;21056:84:0;;22162:2:1;21056:84:0::1;::::0;::::1;22144:21:1::0;22201:2;22181:18;;;22174:30;22240:34;22220:18;;;22213:62;22311:27;22291:18;;;22284:55;22356:19;;21056:84:0::1;21960:421:1::0;21056:84:0::1;21151:41;21180:4;21186:5;21151:28;:41::i;:::-;21208:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;21208:40:0;::::1;::::0;::::1;::::0;;;::::1;20963:293:::0;;:::o;6027:413::-;442:10;6120:4;6164:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6164:34:0;;;;;;;;;;6217:35;;;;6209:85;;;;-1:-1:-1;;;6209:85:0;;22588:2:1;6209:85:0;;;22570:21:1;22627:2;22607:18;;;22600:30;22666:34;22646:18;;;22639:62;-1:-1:-1;;;22717:18:1;;;22710:35;22762:19;;6209:85:0;22386:401:1;6209:85:0;6330:67;442:10;6353:7;6381:15;6362:16;:34;6330:8;:67::i;:::-;-1:-1:-1;6428:4:0;;6027:413;-1:-1:-1;;;6027:413:0:o;4785:175::-;4871:4;4888:42;442:10;4912:9;4923:6;4888:9;:42::i;37810:836::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;38076:3:::1;38054:18;:25;;:54;;;;;38105:3;38083:18;:25;;38054:54;:98;;;;;38134:18;38112;:40;;38054:98;38046:133;;;::::0;-1:-1:-1;;;38046:133:0;;22994:2:1;38046:133:0::1;::::0;::::1;22976:21:1::0;23033:2;23013:18;;;23006:30;-1:-1:-1;;;23052:18:1;;;23045:52;23114:18;;38046:133:0::1;22792:346:1::0;38046:133:0::1;38221:3;38198:19;:26;;:56;;;;;38251:3;38228:19;:26;;38198:56;:102;;;;;38281:19;38258;:42;;38198:102;38190:138;;;::::0;-1:-1:-1;;;38190:138:0;;23345:2:1;38190:138:0::1;::::0;::::1;23327:21:1::0;23384:2;23364:18;;;23357:30;23423:25;23403:18;;;23396:53;23466:18;;38190:138:0::1;23143:347:1::0;38190:138:0::1;38339:21;:46:::0;;-1:-1:-1;;38339:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;38396:17:::1;:38:::0;;;;38445:17:::1;:38:::0;;;;38494:18:::1;:40:::0;38545:18:::1;:40:::0;38596:19:::1;:42:::0;37810:836::o;22319:282::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;22426:9:::1;22422:172;22441:19:::0;;::::1;22422:172;;;22516:8;22481:19;:32;22501:8;;22510:1;22501:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22481:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;22481:32:0;:43;;-1:-1:-1;;22481:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22560:8;;22569:1;22560:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22544:38:0::1;;22573:8;22544:38;;;;1645:14:1::0;1638:22;1620:41;;1608:2;1593:18;;1480:187;22544:38:0::1;;;;;;;;22462:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22422:172;;22609:182:::0;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22694:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22694:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22749:34;;1620:41:1;;;22749:34:0::1;::::0;1593:18:1;22749:34:0::1;;;;;;;22609:182:::0;;:::o;37563:239::-;37603:7;37789:3;37782:4;37752:26;37770:6;37752:9;:26::i;:::-;4622:12;;37738:40;;;;:::i;:::-;37726:6;;37708:26;;-1:-1:-1;;;;;37726:6:0;37708:9;:26::i;:::-;37691:14;;37637:9;;;;;;;;;-1:-1:-1;;;;;37637:9:0;-1:-1:-1;;;;;37637:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37673:6;;37630:51;;-1:-1:-1;;;37630:51:0;;-1:-1:-1;;;;;37673:6:0;;;37630:51;;;962::1;37630:34:0;;;;;935:18:1;;37630:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;37684:4;37630:58;:::i;:::-;:75;;;;:::i;:::-;:104;;;;:::i;:::-;:149;;;;:::i;:::-;:156;;;;:::i;:::-;:162;;;;:::i;:::-;37622:171;;37563:239;:::o;21909:402::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;22027:17:::1;:34:::0;;;22072:16:::1;:32:::0;;;22115:10:::1;:20:::0;;;22128:7;22162:36:::1;22091:13:::0;22047:14;22162:36:::1;:::i;:::-;:49;;;;:::i;:::-;22146:13;:65:::0;22266:3:::1;22247:16;11241:5;22247:2;:16;:::i;:::-;:22;;;;:::i;:::-;22230:13;;:39;;22222:81;;;::::0;-1:-1:-1;;;22222:81:0;;23827:2:1;22222:81:0::1;::::0;::::1;23809:21:1::0;23866:2;23846:18;;;23839:30;23905:31;23885:18;;;23878:59;23954:18;;22222:81:0::1;23625:353:1::0;19129:293:0;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;19253:16:::1;4516:2:::0;19253::::1;:16;:::i;:::-;19245:3;19225:13;4622:12:::0;;;4534:108;19225:13:::1;:17;::::0;19241:1:::1;19225:17;:::i;:::-;:23;;;;:::i;:::-;19224:46;;;;:::i;:::-;19214:6;:56;;19206:109;;;::::0;-1:-1:-1;;;19206:109:0;;24185:2:1;19206:109:0::1;::::0;::::1;24167:21:1::0;24224:2;24204:18;;;24197:30;24263:34;24243:18;;;24236:62;-1:-1:-1;;;24314:18:1;;;24307:38;24362:19;;19206:109:0::1;23983:404:1::0;19206:109:0::1;19348:16;4516:2:::0;19348::::1;:16;:::i;:::-;19338:27;::::0;:6;:27:::1;:::i;:::-;19326:9;:39:::0;;;19381:33:::1;::::0;160:25:1;;;19381:33:0::1;::::0;148:2:1;133:18;19381:33:0::1;14:177:1::0;32130:248:0;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32212:25:0;::::1;32204:76;;;;-1:-1:-1::0;;;32204:76:0::1;;;;;;;:::i;:::-;32291:10;:33:::0;;-1:-1:-1;;;;;;32291:33:0::1;-1:-1:-1::0;;;;;32291:33:0;::::1;::::0;;::::1;::::0;;;32340:30:::1;::::0;::::1;::::0;-1:-1:-1;;32340:30:0::1;32130:248:::0;:::o;19492:346::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;19615:6:::1;19595:13;4622:12:::0;;;4534:108;19595:13:::1;:17;::::0;19611:1:::1;19595:17;:::i;:::-;:26;;;;:::i;:::-;19582:9;:39;;19574:105;;;::::0;-1:-1:-1;;;19574:105:0;;24594:2:1;19574:105:0::1;::::0;::::1;24576:21:1::0;24633:2;24613:18;;;24606:30;24672:34;24652:18;;;24645:62;-1:-1:-1;;;24723:18:1;;;24716:51;24784:19;;19574:105:0::1;24392:417:1::0;19574:105:0::1;19730:4;19710:13;4622:12:::0;;;4534:108;19710:13:::1;:17;::::0;19726:1:::1;19710:17;:::i;:::-;:24;;;;:::i;:::-;19697:9;:37;;19689:102;;;::::0;-1:-1:-1;;;19689:102:0;;25016:2:1;19689:102:0::1;::::0;::::1;24998:21:1::0;25055:2;25035:18;;;25028:30;25094:34;25074:18;;;25067:62;-1:-1:-1;;;25145:18:1;;;25138:50;25205:19;;19689:102:0::1;24814:416:1::0;19689:102:0::1;19801:18;:30:::0;19492:346::o;18821:300::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;18944:16:::1;4516:2:::0;18944::::1;:16;:::i;:::-;18935:4;18915:13;4622:12:::0;;;4534:108;18915:13:::1;:17;::::0;18931:1:::1;18915:17;:::i;:::-;:24;;;;:::i;:::-;18914:47;;;;:::i;:::-;18904:6;:57;;18896:112;;;::::0;-1:-1:-1;;;18896:112:0;;25437:2:1;18896:112:0::1;::::0;::::1;25419:21:1::0;25476:2;25456:18;;;25449:30;25515:34;25495:18;;;25488:62;-1:-1:-1;;;25566:18:1;;;25559:40;25616:19;;18896:112:0::1;25235:406:1::0;18896:112:0::1;19045:16;4516:2:::0;19045::::1;:16;:::i;:::-;19035:27;::::0;:6;:27:::1;:::i;:::-;19019:13;:43:::0;;;19078:35:::1;::::0;160:25:1;;;19078:35:0::1;::::0;148:2:1;133:18;19078:35:0::1;14:177:1::0;18404:98:0;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;18466:20:::1;:28:::0;;-1:-1:-1;;18466:28:0::1;::::0;;18404:98::o;10495:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10495:28:0;;-1:-1:-1;10495:28:0;:::o;8452:244::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8541:22:0;::::1;8533:73;;;::::0;-1:-1:-1;;;8533:73:0;;25848:2:1;8533:73:0::1;::::0;::::1;25830:21:1::0;25887:2;25867:18;;;25860:30;25926:34;25906:18;;;25899:62;-1:-1:-1;;;25977:18:1;;;25970:36;26023:19;;8533:73:0::1;25646:402:1::0;8533:73:0::1;8643:6;::::0;8622:38:::1;::::0;-1:-1:-1;;;;;8622:38:0;;::::1;::::0;8643:6:::1;::::0;8622:38:::1;::::0;8643:6:::1;::::0;8622:38:::1;8671:6;:17:::0;;-1:-1:-1;;;;;;8671:17:0::1;-1:-1:-1::0;;;;;8671:17:0;;;::::1;::::0;;;::::1;::::0;;8452:244::o;31653:160::-;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;31747:58:::1;::::0;31711:12:::1;::::0;31755:10:::1;::::0;31779:21:::1;::::0;31711:12;31747:58;31711:12;31747:58;31779:21;31755:10;31747:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35766:1399:::0;8207:6;;-1:-1:-1;;;;;8207:6:0;442:10;8207:22;8199:67;;;;-1:-1:-1;;;8199:67:0;;;;;;;:::i;:::-;35871:4:::1;35860:7;:15;;35852:81;;;::::0;-1:-1:-1;;;35852:81:0;;26465:2:1;35852:81:0::1;::::0;::::1;26447:21:1::0;26504:2;26484:18;;;26477:30;26543:34;26523:18;;;26516:62;-1:-1:-1;;;26594:18:1;;;26587:51;26655:19;;35852:81:0::1;26263:417:1::0;35852:81:0::1;35994:19;::::0;35976:37:::1;::::0;:15:::1;:37;:::i;:::-;35952:20;;:61;;35944:87;;;::::0;-1:-1:-1;;;35944:87:0;;26887:2:1;35944:87:0::1;::::0;::::1;26869:21:1::0;26926:2;26906:18;;;26899:30;-1:-1:-1;;;26945:18:1;;;26938:43;26998:18;;35944:87:0::1;26685:337:1::0;35944:87:0::1;36065:15;36042:20;:38:::0;36118:6:::1;::::0;36111:39:::1;::::0;-1:-1:-1;;;36111:39:0;;36144:4:::1;36111:39;::::0;::::1;962:51:1::0;36091:17:0::1;::::0;-1:-1:-1;;;;;36118:6:0::1;::::0;36111:24:::1;::::0;935:18:1;;36111:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36091:59;;36161:20;36184:24;36202:4;36184:9;:24::i;:::-;36161:47:::0;-1:-1:-1;36219:16:0::1;36260:5;36238:19;36250:7:::0;36238:9;:19:::1;:::i;:::-;:27;;;;:::i;:::-;36412:6;::::0;36436:9:::1;::::0;36405:52:::1;::::0;-1:-1:-1;;;36405:52:0;;-1:-1:-1;;;;;36436:9:0;;::::1;36405:52;::::0;::::1;18706:51:1::0;18773:18;;;18766:34;;;36219:46:0;;-1:-1:-1;36304:21:0::1;::::0;36412:6;::::1;::::0;36405:22:::1;::::0;18679:18:1;;36405:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;36503:9:0::1;::::0;:234:::1;::::0;-1:-1:-1;;;36503:234:0;;-1:-1:-1;;;;;36503:9:0;;::::1;::::0;:28:::1;::::0;:234:::1;::::0;36554:4:::1;::::0;36574:8;;36503:9;;;;36554:4;;36711:15:::1;::::0;36503:234:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36750:25;36805:12;36778:24;36796:4;36778:9;:24::i;:::-;:39;;;;:::i;:::-;36750:67:::0;-1:-1:-1;36831:21:0;;36828:118:::1;;36868:66;36892:4;36907:6;36916:17;36868:15;:66::i;:::-;36958:23;36984:41;37008:17:::0;36984:21:::1;:41;:::i;:::-;36958:67:::0;-1:-1:-1;37041:19:0;;37038:80:::1;;37076:30;37090:15;37076:13;:30::i;:::-;37135:22;::::0;37148:8;;37135:22:::1;::::0;;;::::1;35841:1324;;;;;;35766:1399:::0;:::o;7369:380::-;-1:-1:-1;;;;;7505:19:0;;7497:68;;;;-1:-1:-1;;;7497:68:0;;28091:2:1;7497:68:0;;;28073:21:1;28130:2;28110:18;;;28103:30;28169:34;28149:18;;;28142:62;-1:-1:-1;;;28220:18:1;;;28213:34;28264:19;;7497:68:0;27889:400:1;7497:68:0;-1:-1:-1;;;;;7584:21:0;;7576:68;;;;-1:-1:-1;;;7576:68:0;;28496:2:1;7576:68:0;;;28478:21:1;28535:2;28515:18;;;28508:30;28574:34;28554:18;;;28547:62;-1:-1:-1;;;28625:18:1;;;28618:32;28667:19;;7576:68:0;28294:398:1;7576:68:0;-1:-1:-1;;;;;7657:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7709:32;;160:25:1;;;7709:32:0;;133:18:1;7709:32:0;;;;;;;7369:380;;;:::o;6448:614::-;-1:-1:-1;;;;;6588:20:0;;6580:70;;;;-1:-1:-1;;;6580:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6669:23:0;;6661:71;;;;-1:-1:-1;;;6661:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6769:17:0;;6745:21;6769:17;;;;;;;;;;;6805:23;;;;6797:74;;;;-1:-1:-1;;;6797:74:0;;29709:2:1;6797:74:0;;;29691:21:1;29748:2;29728:18;;;29721:30;29787:34;29767:18;;;29760:62;-1:-1:-1;;;29838:18:1;;;29831:36;29884:19;;6797:74:0;29507:402:1;6797:74:0;-1:-1:-1;;;;;6907:17:0;;;:9;:17;;;;;;;;;;;6927:22;;;6907:42;;6971:20;;;;;;;;:30;;6943:6;;6907:9;6971:30;;6943:6;;6971:30;:::i;:::-;;;;;;;;7036:9;-1:-1:-1;;;;;7019:35:0;7028:6;-1:-1:-1;;;;;7019:35:0;;7047:6;7019:35;;;;160:25:1;;148:2;133:18;;14:177;7019:35:0;;;;;;;;6569:493;6448:614;;;:::o;22799:5588::-;-1:-1:-1;;;;;22899:18:0;;22891:68;;;;-1:-1:-1;;;22891:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22978:16:0;;22970:64;;;;-1:-1:-1;;;22970:64:0;;;;;;;:::i;:::-;23062:1;23053:6;:10;23045:52;;;;-1:-1:-1;;;23045:52:0;;30116:2:1;23045:52:0;;;30098:21:1;30155:2;30135:18;;;30128:30;30194:31;30174:18;;;30167:59;30243:18;;23045:52:0;29914:353:1;23045:52:0;23122:13;;;;;;;23118:132;;-1:-1:-1;;;;;23159:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23188:23:0;;;;;;:19;:23;;;;;;;;23159:52;23151:87;;;;-1:-1:-1;;;23151:87:0;;30474:2:1;23151:87:0;;;30456:21:1;30513:2;30493:18;;;30486:30;-1:-1:-1;;;30532:18:1;;;30525:52;30594:18;;23151:87:0;30272:346:1;23151:87:0;23265:13;;;;;;;23262:209;;;-1:-1:-1;;;;;23304:17:0;;;;;;:11;:17;;;;;;;;23303:18;:38;;;;-1:-1:-1;;;;;;23326:15:0;;;;;;:11;:15;;;;;;;;23325:16;23303:38;23302:57;;;-1:-1:-1;8145:6:0;;-1:-1:-1;;;;;23346:13:0;;;8145:6;;23346:13;23302:57;:82;;;-1:-1:-1;;;;;;23363:21:0;;23377:6;23363:21;23302:82;23294:165;;;;-1:-1:-1;;;23294:165:0;;30825:2:1;23294:165:0;;;30807:21:1;30864:2;30844:18;;;30837:30;30903:34;30883:18;;;30876:62;30974:34;30954:18;;;30947:62;-1:-1:-1;;;31025:19:1;;;31018:37;31072:19;;23294:165:0;30623:474:1;23294:165:0;23494:14;;;;23491:1634;;;8145:6;;-1:-1:-1;;;;;23528:15:0;;;8145:6;;23528:15;;;;:32;;-1:-1:-1;8145:6:0;;-1:-1:-1;;;;;23547:13:0;;;8145:6;;23547:13;;23528:32;:52;;;;-1:-1:-1;;;;;;23564:16:0;;;;23528:52;:77;;;;-1:-1:-1;;;;;;23584:21:0;;23598:6;23584:21;;23528:77;:107;;;;-1:-1:-1;;;;;;23610:25:0;;;;;;:19;:25;;;;;;;;23609:26;23528:107;:135;;;;-1:-1:-1;;;;;;23640:23:0;;;;;;:19;:23;;;;;;;;23639:24;23528:135;23524:1590;;;23839:20;;;;23835:506;;;23901:9;;-1:-1:-1;;;;;23887:24:0;;;23901:9;;23887:24;;;;:49;;-1:-1:-1;23929:6:0;;-1:-1:-1;;;;;23915:21:0;;;23929:6;;23915:21;;23887:49;23883:439;;;24014:16;24029:1;24014:12;:16;:::i;:::-;24001:9;23972:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;24069:16:0;24084:1;24069:12;:16;:::i;:::-;-1:-1:-1;;;;;24034:32:0;;;;;;:28;:32;;;;;;:51;23972:113;23964:179;;;;-1:-1:-1;;;23964:179:0;;31304:2:1;23964:179:0;;;31286:21:1;31343:2;31323:18;;;31316:30;31382:34;31362:18;;;31355:62;-1:-1:-1;;;31433:18:1;;;31426:51;31494:19;;23964:179:0;31102:417:1;23964:179:0;24199:9;24170:39;;;;:28;:39;;;;;;24212:12;24170:54;;;;-1:-1:-1;;;;;24251:32:0;;;;;;:47;23883:439;-1:-1:-1;;;;;24410:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;24446:35:0;;;;;;:31;:35;;;;;;;;24445:36;24410:71;24406:693;;;24524:12;;24514:6;:22;;24506:75;;;;-1:-1:-1;;;24506:75:0;;31726:2:1;24506:75:0;;;31708:21:1;31765:2;31745:18;;;31738:30;31804:34;31784:18;;;31777:62;-1:-1:-1;;;31855:18:1;;;31848:38;31903:19;;24506:75:0;31524:404:1;24506:75:0;24638:9;;24621:13;24631:2;24621:9;:13::i;:::-;24612:22;;:6;:22;:::i;:::-;:35;;24604:67;;;;-1:-1:-1;;;24604:67:0;;32135:2:1;24604:67:0;;;32117:21:1;32174:2;32154:18;;;32147:30;-1:-1:-1;;;32193:18:1;;;32186:49;32252:18;;24604:67:0;31933:343:1;24604:67:0;24406:693;;;-1:-1:-1;;;;;24748:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;24782:37:0;;;;;;:31;:37;;;;;;;;24781:38;24748:71;24744:355;;;24862:13;;24852:6;:23;;24844:78;;;;-1:-1:-1;;;24844:78:0;;32483:2:1;24844:78:0;;;32465:21:1;32522:2;32502:18;;;32495:30;32561:34;32541:18;;;32534:62;-1:-1:-1;;;32612:18:1;;;32605:40;32662:19;;24844:78:0;32281:406:1;24744:355:0;-1:-1:-1;;;;;24953:35:0;;;;;;:31;:35;;;;;;;;24948:151;;25046:9;;25029:13;25039:2;25029:9;:13::i;:::-;25020:22;;:6;:22;:::i;:::-;:35;;25012:67;;;;-1:-1:-1;;;25012:67:0;;32135:2:1;25012:67:0;;;32117:21:1;32174:2;32154:18;;;32147:30;-1:-1:-1;;;32193:18:1;;;32186:49;32252:18;;25012:67:0;31933:343:1;25012:67:0;25137:28;25168:24;25186:4;25168:9;:24::i;:::-;25252:18;;25137:55;;-1:-1:-1;25228:42:0;;;;;;;25286:22;;-1:-1:-1;25297:11:0;;;;;;;25286:22;:35;;;;-1:-1:-1;25313:8:0;;-1:-1:-1;;;25313:8:0;;;;25312:9;25286:35;:71;;;;-1:-1:-1;;;;;;25326:31:0;;;;;;:25;:31;;;;;;;;25325:32;25286:71;:101;;;;-1:-1:-1;;;;;;25362:25:0;;;;;;:19;:25;;;;;;;;25361:26;25286:101;:129;;;;-1:-1:-1;;;;;;25392:23:0;;;;;;:19;:23;;;;;;;;25391:24;25286:129;25283:232;;;25432:8;:15;;-1:-1:-1;;;;25432:15:0;-1:-1:-1;;;25432:15:0;;;25462:10;:8;:10::i;:::-;25487:8;:16;;-1:-1:-1;;;;25487:16:0;;;25283:232;25531:8;;-1:-1:-1;;;25531:8:0;;;;25530:9;:42;;;;-1:-1:-1;;;;;;25543:29:0;;;;;;:25;:29;;;;;;;;25530:42;:59;;;;-1:-1:-1;25576:13:0;;;;25530:59;:114;;;;;25629:15;;25612:14;;:32;;;;:::i;:::-;25593:15;:51;;25530:114;:144;;;;-1:-1:-1;;;;;;25649:25:0;;;;;;:19;:25;;;;;;;;25648:26;25530:144;25527:204;;;25690:29;:27;:29::i;:::-;-1:-1:-1;;;;;25861:25:0;;25743:12;25861:25;;;:19;:25;;;;;;25758:4;;25861:25;;;:52;;-1:-1:-1;;;;;;25890:23:0;;;;;;:19;:23;;;;;;;;25861:52;25858:99;;;-1:-1:-1;25940:5:0;25858:99;26009:21;;25977:12;;26009:21;;:38;;;;-1:-1:-1;26034:13:0;;;;;;;26009:38;:51;;;;-1:-1:-1;26052:8:0;;-1:-1:-1;;;26052:8:0;;;;26051:9;26009:51;26006:162;;;26101:9;-1:-1:-1;;;;;26101:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26076:14;:50;26141:15;:13;:15::i;:::-;26257:7;26254:2080;;;28489:18;;28474:12;:33;26319:60;;;;-1:-1:-1;;;;;;26348:31:0;;;;;;:25;:31;;;;;;;;26319:60;:94;;;;-1:-1:-1;;;;;;26384:29:0;;;;;;:25;:29;;;;;;;;26383:30;26319:94;:122;;;;-1:-1:-1;;;;;;26418:23:0;;;;;;:19;:23;;;;;;;;26417:24;26319:122;:142;;;;;26460:1;26445:12;;:16;26319:142;26316:1849;;;28489:18;;28474:12;:33;26499:330;;26808:1;26792:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;26499:330:0;-1:-1:-1;;;;;26853:15:0;;;;;;:11;:15;;;;;;;;26849:214;;-1:-1:-1;;;;;26892:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;26892:22:0;26910:4;26892:22;;;;;;26937:10;:15;;26910:4;;26937:10;;:15;;26910:4;;26937:15;:::i;:::-;;;;-1:-1:-1;;26975:11:0;:20;;;;;;;-1:-1:-1;26975:20:0;;;;;;;;-1:-1:-1;;;;;;26975:20:0;-1:-1:-1;;;;;26975:20:0;;;;;;;;27023;;962:51:1;;;27023:20:0;;950:2:1;935:18;27023:20:0;;;;;;;26849:214;11241:5;27099:12;;27090:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;27083:42;;27188:12;;27170:15;;27163:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;27141:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;27268:12:0;;27249:16;;27242:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;27219:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27334:12:0;;27322:9;;27315:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;27299:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;26316:1849:0;;-1:-1:-1;26316:1849:0;;-1:-1:-1;;;;;27411:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27460:1;27444:13;;:17;27411:50;27407:758;;;11241:5;27497:13;;27488:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;27481:43;;27591:13;;27572:16;;27565:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;27543:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27673:13:0;;27653:17;;27646:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;27623:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27741:13:0;;27728:10;;27721:17;;:4;:17;:::i;27407:758::-;-1:-1:-1;;;;;27817:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27867:1;27852:12;;:16;27817:51;27814:351;;;11241:5;27902:12;;27893:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;27886:42;;27991:12;;27973:15;;27966:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;27944:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;28071:12:0;;28052:16;;28045:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;28022:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28137:12:0;;28125:9;;28118:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;28102:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;27814:351:0;28196:8;;28193:93;;28228:42;28244:4;28258;28265;28228:15;:42::i;:::-;28308:14;28318:4;28308:14;;:::i;:::-;;;26254:2080;28346:33;28362:4;28368:2;28372:6;28346:15;:33::i;:::-;22878:5509;;;;22799:5588;;;:::o;19850:207::-;-1:-1:-1;;;;;19938:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;19938:52:0;;;;;;;;;;20006:43;;32860:51:1;;;32927:18;;;32920:50;20006:43:0;;32833:18:1;20006:43:0;;;;;;;19850:207;;:::o;21264:236::-;-1:-1:-1;;;;;21347:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;21347:39:0;;;;;;;21397;21347:31;:39;21397:26;:39::i;29623:1454::-;29664:23;29690:24;29708:4;29690:9;:24::i;:::-;29664:50;;29725:25;29796:12;;29774:19;;29753:18;;:40;;;;:::i;:::-;:55;;;;:::i;:::-;29725:83;-1:-1:-1;29832:20:0;;;:46;;-1:-1:-1;29856:22:0;;29832:46;29829:60;;;29881:7;;29623:1454::o;29829:60::-;29922:18;;:23;;29943:2;29922:23;:::i;:::-;29904:15;:41;29901:113;;;29979:18;;:23;;30000:2;29979:23;:::i;:::-;29961:41;;29901:113;30026:12;30108:23;30193:1;30173:17;30152:18;;30134:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;30108:86;-1:-1:-1;30215:51:0;30232:33;30108:86;30232:15;:33;:::i;:::-;30215:16;:51::i;:::-;30474:18;;30309:21;;;;30288:18;;30474:20;;30493:1;;30474:20;:::i;:::-;30453:42;;:17;:42;:::i;:::-;30430:19;;30417:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;30390:106;;30507:17;30596:1;30577:18;;:20;;;;:::i;:::-;30556:42;;:17;:42;:::i;:::-;30540:12;;30527:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;30507:92;-1:-1:-1;30631:28:0;30507:92;30631:16;:28;:::i;:::-;30612:47;;;;:::i;:::-;30705:1;30684:18;:22;;;30717:19;:23;;;30751:12;:16;30612:47;-1:-1:-1;30791:19:0;;;;;:42;;;30832:1;30814:15;:19;30791:42;30788:119;;;30849:46;30862:15;30879;30849:12;:46::i;:::-;30940:10;;30932:46;;-1:-1:-1;;;;;30940:10:0;;;;30964:9;;30932:46;;;;30964:9;30940:10;30932:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31012:17:0;;31004:65;;30919:59;;-1:-1:-1;;;;;;31012:17:0;;31043:21;;31004:65;;;;31043:21;31012:17;31004:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29623:1454:0:o;37173:382::-;37261:16;;;37275:1;37261:16;;;;;;;;37237:21;;37261:16;;;;;;;;-1:-1:-1;;37298:9:0;;:16;;;-1:-1:-1;;;37298:16:0;;;;37237:40;;-1:-1:-1;;;;;;37298:9:0;;;;:14;;-1:-1:-1;37298:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37288:4;37293:1;37288:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;37288:26:0;;;-1:-1:-1;;;;;37288:26:0;;;;;37343:4;37325;37330:1;37325:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37325:23:0;;;:7;;;;;;;;;:23;37361:9;;:186;;-1:-1:-1;;;37361:186:0;;:9;;;:60;;37429:11;;37361:186;;:9;;37472:4;;37499:6;;37521:15;;37361:186;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34506:1252;34592:15;34575:14;:32;;;34628:20;:38;34704:6;;34697:39;;-1:-1:-1;;;34697:39:0;;34730:4;34697:39;;;962:51:1;-1:-1:-1;;;;;;;34704:6:0;;34697:24;;935:18:1;;34697:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34677:59;;34747:20;34770:24;34788:4;34770:9;:24::i;:::-;34747:47;;34805:16;34855:5;34836:16;;34824:9;:28;;;;:::i;:::-;:36;;;;:::i;:::-;35007:6;;35031:9;;35000:52;;-1:-1:-1;;;35000:52:0;;-1:-1:-1;;;;;35031:9:0;;;35000:52;;;18706:51:1;18773:18;;;18766:34;;;34805:55:0;;-1:-1:-1;34899:21:0;;35007:6;;;35000:22;;18679:18:1;;35000:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;35098:9:0;;:234;;-1:-1:-1;;;35098:234:0;;-1:-1:-1;;;;;35098:9:0;;;;:28;;:234;;35149:4;;35169:8;;35098:9;;;;35149:4;;35306:15;;35098:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35345:25;35400:12;35373:24;35391:4;35373:9;:24::i;:::-;:39;;;;:::i;:::-;35345:67;-1:-1:-1;35426:21:0;;35423:118;;35463:66;35487:4;35502:6;35511:17;35463:15;:66::i;:::-;35553:23;35579:41;35603:17;35579:21;:41;:::i;:::-;35553:67;-1:-1:-1;35636:19:0;;35633:80;;35671:30;35685:15;35671:13;:30::i;:::-;35730:20;;35741:8;;35730:20;;;;;34554:1204;;;;;;34506:1252::o;38654:1006::-;38699:12;38714:9;:7;:9::i;:::-;38699:24;;38734:27;38822:17;;38815:4;38795:17;;38772:19;;38765:4;:26;;;;:::i;:::-;38764:48;;;;:::i;:::-;:55;;;;:::i;:::-;:75;;;;:::i;:::-;38734:105;;38850:28;38940:18;;38933:4;38912:18;;38889:19;;38882:4;:26;;;;:::i;:::-;38881:49;;;;:::i;:::-;:56;;;;:::i;:::-;:77;;;;:::i;:::-;38850:108;;38994:17;;38972:19;:39;38969:109;;;39049:17;;39027:39;;38969:109;39114:18;;39091:20;:41;39088:113;;;-1:-1:-1;39171:18:0;;39088:113;39266:3;39244:19;39229:12;;:34;;;;:::i;:::-;:40;;;;:::i;:::-;39211:15;:58;;;39300:12;;39339:3;;39300:30;;;:::i;:::-;39299:37;;39334:2;39299:37;:::i;:::-;:43;;;;:::i;:::-;39280:16;:62;;;39399:15;;39365:12;;39399:15;;39365:31;;;:::i;:::-;:49;;;;:::i;:::-;39353:9;:61;39458:13;;39497:3;;39458:36;;39474:20;;39458:36;:::i;:::-;:42;;;;:::i;:::-;39439:16;:61;;;39532:13;;39573:3;;39532:32;;;:::i;:::-;39531:39;;39568:2;39531:39;:::i;:::-;:45;;;;:::i;:::-;39511:17;:65;;;39636:16;;39600:13;;39636:16;;39600:33;;;:::i;:::-;:52;;;;:::i;:::-;39587:10;:65;-1:-1:-1;;;38654:1006:0:o;28523:573::-;28675:16;;;28689:1;28675:16;;;;;;;;28651:21;;28675:16;;;;;;;;;;-1:-1:-1;28675:16:0;28651:40;;28720:4;28702;28707:1;28702:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28702:23:0;;;:7;;;;;;;;;;:23;;;;28746:9;;:16;;;-1:-1:-1;;;28746:16:0;;;;:9;;;;;:14;;:16;;;;;28702:7;;28746:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28736:4;28741:1;28736:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28736:26:0;;;:7;;;;;;;;;:26;28807:9;;28775:56;;28792:4;;28807:9;28819:11;28775:8;:56::i;:::-;28870:9;;:218;;-1:-1:-1;;;28870:218:0;;-1:-1:-1;;;;;28870:9:0;;;;:60;;:218;;28945:11;;28870:9;;29015:4;;29042;;29062:15;;28870:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28578:518;28523:573;:::o;29108:507::-;29288:9;;29256:56;;29273:4;;-1:-1:-1;;;;;29288:9:0;29300:11;29256:8;:56::i;:::-;29355:9;;:252;;-1:-1:-1;;;29355:252:0;;-1:-1:-1;;;;;29355:9:0;;;;:25;;29388:9;;29355:252;;29421:4;;29441:11;;29355:9;;;;29421:4;;29581:15;;29355:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29108:507;;:::o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;1024:131::-;-1:-1:-1;;;;;1099:31:1;;1089:42;;1079:70;;1145:1;1142;1135:12;1079:70;1024:131;:::o;1160:315::-;1228:6;1236;1289:2;1277:9;1268:7;1264:23;1260:32;1257:52;;;1305:1;1302;1295:12;1257:52;1344:9;1331:23;1363:31;1388:5;1363:31;:::i;:::-;1413:5;1465:2;1450:18;;;;1437:32;;-1:-1:-1;;;1160:315:1:o;1672:118::-;1758:5;1751:13;1744:21;1737:5;1734:32;1724:60;;1780:1;1777;1770:12;1795:241;1851:6;1904:2;1892:9;1883:7;1879:23;1875:32;1872:52;;;1920:1;1917;1910:12;1872:52;1959:9;1946:23;1978:28;2000:5;1978:28;:::i;:::-;2025:5;1795:241;-1:-1:-1;;;1795:241:1:o;2041:247::-;2100:6;2153:2;2141:9;2132:7;2128:23;2124:32;2121:52;;;2169:1;2166;2159:12;2121:52;2208:9;2195:23;2227:31;2252:5;2227:31;:::i;2293:127::-;2354:10;2349:3;2345:20;2342:1;2335:31;2385:4;2382:1;2375:15;2409:4;2406:1;2399:15;2425:275;2496:2;2490:9;2561:2;2542:13;;-1:-1:-1;;2538:27:1;2526:40;;2596:18;2581:34;;2617:22;;;2578:62;2575:88;;;2643:18;;:::i;:::-;2679:2;2672:22;2425:275;;-1:-1:-1;2425:275:1:o;2705:183::-;2765:4;2798:18;2790:6;2787:30;2784:56;;;2820:18;;:::i;:::-;-1:-1:-1;2865:1:1;2861:14;2877:4;2857:25;;2705:183::o;2893:662::-;2947:5;3000:3;2993:4;2985:6;2981:17;2977:27;2967:55;;3018:1;3015;3008:12;2967:55;3054:6;3041:20;3080:4;3104:60;3120:43;3160:2;3120:43;:::i;:::-;3104:60;:::i;:::-;3198:15;;;3284:1;3280:10;;;;3268:23;;3264:32;;;3229:12;;;;3308:15;;;3305:35;;;3336:1;3333;3326:12;3305:35;3372:2;3364:6;3360:15;3384:142;3400:6;3395:3;3392:15;3384:142;;;3466:17;;3454:30;;3504:12;;;;3417;;3384:142;;;-1:-1:-1;3544:5:1;2893:662;-1:-1:-1;;;;;;2893:662:1:o;3560:1215::-;3678:6;3686;3739:2;3727:9;3718:7;3714:23;3710:32;3707:52;;;3755:1;3752;3745:12;3707:52;3795:9;3782:23;3824:18;3865:2;3857:6;3854:14;3851:34;;;3881:1;3878;3871:12;3851:34;3919:6;3908:9;3904:22;3894:32;;3964:7;3957:4;3953:2;3949:13;3945:27;3935:55;;3986:1;3983;3976:12;3935:55;4022:2;4009:16;4044:4;4068:60;4084:43;4124:2;4084:43;:::i;4068:60::-;4162:15;;;4244:1;4240:10;;;;4232:19;;4228:28;;;4193:12;;;;4268:19;;;4265:39;;;4300:1;4297;4290:12;4265:39;4324:11;;;;4344:217;4360:6;4355:3;4352:15;4344:217;;;4440:3;4427:17;4457:31;4482:5;4457:31;:::i;:::-;4501:18;;4377:12;;;;4539;;;;4344:217;;;4580:5;-1:-1:-1;;4623:18:1;;4610:32;;-1:-1:-1;;4654:16:1;;;4651:36;;;4683:1;4680;4673:12;4651:36;;4706:63;4761:7;4750:8;4739:9;4735:24;4706:63;:::i;:::-;4696:73;;;3560:1215;;;;;:::o;4780:456::-;4857:6;4865;4873;4926:2;4914:9;4905:7;4901:23;4897:32;4894:52;;;4942:1;4939;4932:12;4894:52;4981:9;4968:23;5000:31;5025:5;5000:31;:::i;:::-;5050:5;-1:-1:-1;5107:2:1;5092:18;;5079:32;5120:33;5079:32;5120:33;:::i;:::-;4780:456;;5172:7;;-1:-1:-1;;;5226:2:1;5211:18;;;;5198:32;;4780:456::o;5241:180::-;5300:6;5353:2;5341:9;5332:7;5328:23;5324:32;5321:52;;;5369:1;5366;5359:12;5321:52;-1:-1:-1;5392:23:1;;5241:180;-1:-1:-1;5241:180:1:o;5426:315::-;5494:6;5502;5555:2;5543:9;5534:7;5530:23;5526:32;5523:52;;;5571:1;5568;5561:12;5523:52;5607:9;5594:23;5584:33;;5667:2;5656:9;5652:18;5639:32;5680:31;5705:5;5680:31;:::i;:::-;5730:5;5720:15;;;5426:315;;;;;:::o;6143:750::-;6235:6;6243;6251;6304:2;6292:9;6283:7;6279:23;6275:32;6272:52;;;6320:1;6317;6310:12;6272:52;6360:9;6347:23;6389:18;6430:2;6422:6;6419:14;6416:34;;;6446:1;6443;6436:12;6416:34;6484:6;6473:9;6469:22;6459:32;;6529:7;6522:4;6518:2;6514:13;6510:27;6500:55;;6551:1;6548;6541:12;6500:55;6591:2;6578:16;6617:2;6609:6;6606:14;6603:34;;;6633:1;6630;6623:12;6603:34;6688:7;6681:4;6671:6;6668:1;6664:14;6660:2;6656:23;6652:34;6649:47;6646:67;;;6709:1;6706;6699:12;6646:67;6740:4;6732:13;;;;-1:-1:-1;6764:6:1;-1:-1:-1;;6805:20:1;;6792:34;6835:28;6792:34;6835:28;:::i;:::-;6882:5;6872:15;;;6143:750;;;;;:::o;6898:377::-;6972:6;6980;6988;7041:2;7029:9;7020:7;7016:23;7012:32;7009:52;;;7057:1;7054;7047:12;7009:52;7093:9;7080:23;7070:33;;7150:2;7139:9;7135:18;7122:32;7112:42;;7204:2;7193:9;7189:18;7176:32;7217:28;7239:5;7217:28;:::i;7280:382::-;7345:6;7353;7406:2;7394:9;7385:7;7381:23;7377:32;7374:52;;;7422:1;7419;7412:12;7374:52;7461:9;7448:23;7480:31;7505:5;7480:31;:::i;:::-;7530:5;-1:-1:-1;7587:2:1;7572:18;;7559:32;7600:30;7559:32;7600:30;:::i;7667:316::-;7744:6;7752;7760;7813:2;7801:9;7792:7;7788:23;7784:32;7781:52;;;7829:1;7826;7819:12;7781:52;-1:-1:-1;;7852:23:1;;;7922:2;7907:18;;7894:32;;-1:-1:-1;7973:2:1;7958:18;;;7945:32;;7667:316;-1:-1:-1;7667:316:1:o;7988:388::-;8056:6;8064;8117:2;8105:9;8096:7;8092:23;8088:32;8085:52;;;8133:1;8130;8123:12;8085:52;8172:9;8159:23;8191:31;8216:5;8191:31;:::i;:::-;8241:5;-1:-1:-1;8298:2:1;8283:18;;8270:32;8311:33;8270:32;8311:33;:::i;8381:461::-;8434:3;8472:5;8466:12;8499:6;8494:3;8487:19;8525:4;8554:2;8549:3;8545:12;8538:19;;8591:2;8584:5;8580:14;8612:1;8622:195;8636:6;8633:1;8630:13;8622:195;;;8701:13;;-1:-1:-1;;;;;8697:39:1;8685:52;;8757:12;;;;8792:15;;;;8733:1;8651:9;8622:195;;;-1:-1:-1;8833:3:1;;8381:461;-1:-1:-1;;;;;8381:461:1:o;8847:261::-;9026:2;9015:9;9008:21;8989:4;9046:56;9098:2;9087:9;9083:18;9075:6;9046:56;:::i;9113:584::-;9214:6;9222;9230;9238;9246;9254;9307:3;9295:9;9286:7;9282:23;9278:33;9275:53;;;9324:1;9321;9314:12;9275:53;9363:9;9350:23;9382:28;9404:5;9382:28;:::i;:::-;9429:5;9481:2;9466:18;;9453:32;;-1:-1:-1;9532:2:1;9517:18;;9504:32;;9583:2;9568:18;;9555:32;;-1:-1:-1;9634:3:1;9619:19;;9606:33;;-1:-1:-1;9686:3:1;9671:19;9658:33;;-1:-1:-1;9113:584:1;-1:-1:-1;;;9113:584:1:o;9702:380::-;9781:1;9777:12;;;;9824;;;9845:61;;9899:4;9891:6;9887:17;9877:27;;9845:61;9952:2;9944:6;9941:14;9921:18;9918:38;9915:161;;9998:10;9993:3;9989:20;9986:1;9979:31;10033:4;10030:1;10023:15;10061:4;10058:1;10051:15;9915:161;;9702:380;;;:::o;10087:356::-;10289:2;10271:21;;;10308:18;;;10301:30;10367:34;10362:2;10347:18;;10340:62;10434:2;10419:18;;10087:356::o;11230:127::-;11291:10;11286:3;11282:20;11279:1;11272:31;11322:4;11319:1;11312:15;11346:4;11343:1;11336:15;11362:127;11423:10;11418:3;11414:20;11411:1;11404:31;11454:4;11451:1;11444:15;11478:4;11475:1;11468:15;11494:135;11533:3;11554:17;;;11551:43;;11574:18;;:::i;:::-;-1:-1:-1;11621:1:1;11610:13;;11494:135::o;12043:422::-;12132:1;12175:5;12132:1;12189:270;12210:7;12200:8;12197:21;12189:270;;;12269:4;12265:1;12261:6;12257:17;12251:4;12248:27;12245:53;;;12278:18;;:::i;:::-;12328:7;12318:8;12314:22;12311:55;;;12348:16;;;;12311:55;12427:22;;;;12387:15;;;;12189:270;;;12193:3;12043:422;;;;;:::o;12470:806::-;12519:5;12549:8;12539:80;;-1:-1:-1;12590:1:1;12604:5;;12539:80;12638:4;12628:76;;-1:-1:-1;12675:1:1;12689:5;;12628:76;12720:4;12738:1;12733:59;;;;12806:1;12801:130;;;;12713:218;;12733:59;12763:1;12754:10;;12777:5;;;12801:130;12838:3;12828:8;12825:17;12822:43;;;12845:18;;:::i;:::-;-1:-1:-1;;12901:1:1;12887:16;;12916:5;;12713:218;;13015:2;13005:8;13002:16;12996:3;12990:4;12987:13;12983:36;12977:2;12967:8;12964:16;12959:2;12953:4;12950:12;12946:35;12943:77;12940:159;;;-1:-1:-1;13052:19:1;;;13084:5;;12940:159;13131:34;13156:8;13150:4;13131:34;:::i;:::-;13201:6;13197:1;13193:6;13189:19;13180:7;13177:32;13174:58;;;13212:18;;:::i;:::-;13250:20;;12470:806;-1:-1:-1;;;12470:806:1:o;13281:140::-;13339:5;13368:47;13409:4;13399:8;13395:19;13389:4;13368:47;:::i;13426:168::-;13466:7;13532:1;13528;13524:6;13520:14;13517:1;13514:21;13509:1;13502:9;13495:17;13491:45;13488:71;;;13539:18;;:::i;:::-;-1:-1:-1;13579:9:1;;13426:168::o;13599:217::-;13639:1;13665;13655:132;;13709:10;13704:3;13700:20;13697:1;13690:31;13744:4;13741:1;13734:15;13772:4;13769:1;13762:15;13655:132;-1:-1:-1;13801:9:1;;13599:217::o;14991:128::-;15031:3;15062:1;15058:6;15055:1;15052:13;15049:39;;;15068:18;;:::i;:::-;-1:-1:-1;15104:9:1;;14991:128::o;15124:402::-;15326:2;15308:21;;;15365:2;15345:18;;;15338:30;15404:34;15399:2;15384:18;;15377:62;-1:-1:-1;;;15470:2:1;15455:18;;15448:36;15516:3;15501:19;;15124:402::o;18343:184::-;18413:6;18466:2;18454:9;18445:7;18441:23;18437:32;18434:52;;;18482:1;18479;18472:12;18434:52;-1:-1:-1;18505:16:1;;18343:184;-1:-1:-1;18343:184:1:o;18811:245::-;18878:6;18931:2;18919:9;18910:7;18906:23;18902:32;18899:52;;;18947:1;18944;18937:12;18899:52;18979:9;18973:16;18998:28;19020:5;18998:28;:::i;19473:251::-;19543:6;19596:2;19584:9;19575:7;19571:23;19567:32;19564:52;;;19612:1;19609;19602:12;19564:52;19644:9;19638:16;19663:31;19688:5;19663:31;:::i;20849:607::-;-1:-1:-1;;;;;21208:15:1;;;21190:34;;21255:2;21240:18;;21233:34;;;;21298:2;21283:18;;21276:34;;;;21341:2;21326:18;;21319:34;;;;21390:15;;;21384:3;21369:19;;21362:44;21170:3;21422:19;;21415:35;;;;21139:3;21124:19;;20849:607::o;21461:306::-;21549:6;21557;21565;21618:2;21606:9;21597:7;21593:23;21589:32;21586:52;;;21634:1;21631;21624:12;21586:52;21663:9;21657:16;21647:26;;21713:2;21702:9;21698:18;21692:25;21682:35;;21757:2;21746:9;21742:18;21736:25;21726:35;;21461:306;;;;;:::o;23495:125::-;23535:4;23563:1;23560;23557:8;23554:34;;;23568:18;;:::i;:::-;-1:-1:-1;23605:9:1;;23495:125::o;27639:245::-;27718:6;27726;27779:2;27767:9;27758:7;27754:23;27750:32;27747:52;;;27795:1;27792;27785:12;27747:52;-1:-1:-1;;27818:16:1;;27874:2;27859:18;;;27853:25;27818:16;;27853:25;;-1:-1:-1;27639:245:1:o;28697:401::-;28899:2;28881:21;;;28938:2;28918:18;;;28911:30;28977:34;28972:2;28957:18;;28950:62;-1:-1:-1;;;29043:2:1;29028:18;;29021:35;29088:3;29073:19;;28697:401::o;29103:399::-;29305:2;29287:21;;;29344:2;29324:18;;;29317:30;29383:34;29378:2;29363:18;;29356:62;-1:-1:-1;;;29449:2:1;29434:18;;29427:33;29492:3;29477:19;;29103:399::o;32981:510::-;33252:6;33241:9;33234:25;33295:3;33290:2;33279:9;33275:18;33268:31;33215:4;33316:57;33368:3;33357:9;33353:19;33345:6;33316:57;:::i;:::-;-1:-1:-1;;;;;33409:32:1;;;;33404:2;33389:18;;33382:60;-1:-1:-1;33473:2:1;33458:18;33451:34;33308:65;32981:510;-1:-1:-1;;32981:510:1:o;33496:582::-;33795:6;33784:9;33777:25;33838:6;33833:2;33822:9;33818:18;33811:34;33881:3;33876:2;33865:9;33861:18;33854:31;33758:4;33902:57;33954:3;33943:9;33939:19;33931:6;33902:57;:::i;:::-;-1:-1:-1;;;;;33995:32:1;;;;33990:2;33975:18;;33968:60;-1:-1:-1;34059:3:1;34044:19;34037:35;33894:65;33496:582;-1:-1:-1;;;33496:582:1:o

Swarm Source

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