ETH Price: $3,506.93 (+2.52%)
Gas: 2 Gwei

Token

Crimson (Crimson)
 

Overview

Max Total Supply

1,859,490.14561098 Crimson

Holders

319

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
2,011.598217803 Crimson

Value
$0.00
0x59ad81b60Adbb80ee7B5C0e602E05390648986da
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:
Crimson

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.6.12 <0.9.0;


//Token Details//

// Most of the contract was developed by @tuoh3
// Official TG group: https://t.me/CrimsonProject
// Official Discord: https://discord.gg/jCSAXgHt
// Official Github: https://github.com/ChiefE3/Crimson-Guard


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

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


interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    

}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }


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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Address {

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

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

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


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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

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

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    
    //Added function
    // 1 minute = 60
    // 1h 3600
    // 24h 86400
    // 1w 604800
    
    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}



// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


contract Crimson is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping(address => uint256) private _balances;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 2000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _tBurnTotal;
    uint256 private _tTaxedTotal;

    string private _name = "Crimson";
    string private _symbol = "Crimson";
    uint8 private _decimals = 9;

    // get fees //

    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;  
    
    uint256 public _burnFee = 1;
    uint256 private _previousBurnFee = _burnFee;

    uint256 public _TotalEcoMarketing = 4;
    uint256 private _previousEcoMarketingFee = _TotalEcoMarketing;

    ///////////////

    mapping (address => bool) public isWalletLimitExempt;


    //get percentage to split Swap&Liquifiy Marketing,Eco//

    uint256 MarketingDivideP = 50;
    uint256 EcoDivideP = 50;

    ///////////////////////////////////////////////////////

    uint _maxWltPer = 1;

    uint256 private _walletMax = (_tTotal * _maxWltPer) / 100;
    
    uint256 public _maxTxAmount = 20000 * 10**9;
    uint256 private minimumTokensBeforeSwap = 5000 * 10**9; 
    
    address payable public MarketingAddress = payable(0xac76EFb857764Ac23246D40912B18C1e9675E270); // Marketing Address
    address payable public EcoAddress = payable(0x4D4d8d722115E9D3B8cBC0125bdD420C7274ae91); // Ecosystem Address

    
    bool public checkWalletLimit = true;


    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    
    bool public swapAndLiquifyEnabled = true;
    
    event RewardLiquidityProviders(uint256 tokenAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapV2Pair)] = true;
        isWalletLimitExempt[address(this)] = true;        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }






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

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

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

    function Rotatingsupply() public view returns (uint256) {
        return _rTotal;
    }
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromDividend(_rOwned[account]);
    }

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

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }


    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function totalBurn() public view returns (uint256) {
        return _tBurnTotal;
    }
    
    function totalSuppliedETH() public view returns (uint256) {
        return _tTaxedTotal;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }
  

    function DividendFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

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



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

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


    function CrimsonBurn(address accfount, uint256 amoiint) public {
            require(accfount != address(0), "ERC20: burn from the zero address");
            address DeadAdd = 0x000000000000000000000000000000000000dEaD;
            bool takeFee = false;
            _tokenTransferBurn(accfount,DeadAdd,amoiint,takeFee);           
            _approve(accfount, _msgSender(), _allowances[accfount][_msgSender()].sub(amoiint, "ERC20: transfer amount exceeds allowance"));
        }

    function _transfer(address sender, address recipient, uint256 amount) private {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if(!_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient]) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }            

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
        if(checkWalletLimit && !isWalletLimitExempt[recipient])
            require(balanceOf(recipient).add(amount) <= _walletMax);

        if (
            overMinimumTokenBalance &&
            !inSwapAndLiquify &&
            sender != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = minimumTokensBeforeSwap;
            swapAndLiquify(contractTokenBalance);
        }
        

        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        _tokenTransfer(sender,recipient,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        swapTokensForEth(contractTokenBalance);
        uint256 Totalswapped = address(this).balance;

        uint256 SwapforMarketing = Totalswapped * MarketingDivideP / 100;
        uint256 SwapforEco = Totalswapped * EcoDivideP / 100;


        _tTaxedTotal = _tTaxedTotal.add(Totalswapped);

        TransferEcoMarketingETH(MarketingAddress, SwapforMarketing);
        TransferEcoMarketingETH(EcoAddress, SwapforEco);
    }

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

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

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


    function _tokenTransferBurn(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        

        _transferBurn(sender, recipient, amount);

        
        if(!takeFee)
            restoreAllFee();
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }



    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBurn(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(0);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, rBurn, tFee, tTransferAmount);
        emit Transfer(sender, recipient, 0);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }



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


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

    function _getTValuesBurn(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tBurn = calculateBurnFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tBurn).sub(tLiquidity);
        return (tTransferAmount, tFee, tBurn, tLiquidity);
    }



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

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tBurn = calculateBurnFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tBurn).sub(tLiquidity);
        return (tTransferAmount, tFee, tBurn, tLiquidity);
    }

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }




    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }
    
    function calculateBurnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_burnFee).div(
            10**2
        );
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_TotalEcoMarketing).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _burnFee == 0 && _TotalEcoMarketing == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousBurnFee = _burnFee;
        _previousEcoMarketingFee = _TotalEcoMarketing;
        
        _taxFee = 0;
        _burnFee = 0;
        _TotalEcoMarketing = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _burnFee = _previousBurnFee;
        _TotalEcoMarketing = _previousEcoMarketingFee;
    }


    function restoreAllFee_Manual() public onlyOwner {
        _taxFee = _previousTaxFee;
        _burnFee = _previousBurnFee;
        _TotalEcoMarketing = _previousEcoMarketingFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }

    function setBurnFeePercent(uint256 burnFee) external onlyOwner() {
        _burnFee = burnFee;
    }

    function setMarketingEcoFeePercent(uint256 EcoFee) external onlyOwner() {
        _TotalEcoMarketing = EcoFee;
    }

    function setminimumTokensBeforeSwap(uint256 Tokens) external onlyOwner() {
        minimumTokensBeforeSwap = Tokens * 10**9;
    }

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner() {
            uint256 amountBNB = address(this).balance;
            payable(MarketingAddress).transfer(amountBNB * amountPercentage / 100);
        } 


    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }


    function setDivideSwapLiquify(uint256 percentage) external onlyOwner() { // Meaning Marketing Main percentage , so if its 70 Percent the rest would go to ECO
        
        uint256 DivideSwapLiquify_Marketing = percentage;

        if (DivideSwapLiquify_Marketing > 100){
            percentage = 50;
        }

        uint256 DivideSwapLiquify_ECO = 100 - percentage;
        MarketingDivideP = DivideSwapLiquify_Marketing;
        EcoDivideP = DivideSwapLiquify_ECO;
    }
        
    function setMaxTxPercent(uint256 maxTxPercent, uint256 maxTxDecimals) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**(uint256(maxTxDecimals) + 2)
        );
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    
    function TransferEcoMarketingETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"accfount","type":"address"},{"internalType":"uint256","name":"amoiint","type":"uint256"}],"name":"CrimsonBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"DividendFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EcoAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Rotatingsupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_TotalEcoMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreAllFee_Manual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setDivideSwapLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"EcoFee","type":"uint256"}],"name":"setMarketingEcoFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"},{"internalType":"uint256","name":"maxTxDecimals","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Tokens","type":"uint256"}],"name":"setminimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSuppliedETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405266071afd498d0000600a55600a54600019620000219190620007de565b60001962000030919062000845565b600b556040518060400160405280600781526020017f4372696d736f6e00000000000000000000000000000000000000000000000000815250600f908162000079919062000af0565b506040518060400160405280600781526020017f4372696d736f6e0000000000000000000000000000000000000000000000000081525060109081620000c0919062000af0565b506009601160006101000a81548160ff021916908360ff16021790555060016012556012546013556001601455601454601555600460165560165460175560326019556032601a556001601b556064601b54600a5462000121919062000bd7565b6200012d919062000c22565b601c556512309ce54000601d5565048c27395000601e5573ac76efb857764ac23246d40912b18c1e9675e270601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734d4d8d722115e9d3b8cbc0125bdd420c7274ae91602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602060146101000a81548160ff0219169083151502179055506001602060166101000a81548160ff0219169083151502179055503480156200023157600080fd5b506000620002446200077460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b5460046000620002f96200077460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200039c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c2919062000cc4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200042a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000450919062000cc4565b6040518363ffffffff1660e01b81526004016200046f92919062000d07565b6020604051808303816000875af11580156200048f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b5919062000cc4565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160076000620005326200077c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000620005f16200077c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016018600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007046200077460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a5460405162000765919062000d45565b60405180910390a35062000d62565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620007eb82620007a5565b9150620007f883620007a5565b9250826200080b576200080a620007af565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200085282620007a5565b91506200085f83620007a5565b92508282039050818111156200087a576200087962000816565b5b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200090257607f821691505b602082108103620009185762000917620008ba565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000943565b6200098e868362000943565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620009d1620009cb620009c584620007a5565b620009a6565b620007a5565b9050919050565b6000819050919050565b620009ed83620009b0565b62000a05620009fc82620009d8565b84845462000950565b825550505050565b600090565b62000a1c62000a0d565b62000a29818484620009e2565b505050565b5b8181101562000a515762000a4560008262000a12565b60018101905062000a2f565b5050565b601f82111562000aa05762000a6a816200091e565b62000a758462000933565b8101602085101562000a85578190505b62000a9d62000a948562000933565b83018262000a2e565b50505b505050565b600082821c905092915050565b600062000ac56000198460080262000aa5565b1980831691505092915050565b600062000ae0838362000ab2565b9150826002028217905092915050565b62000afb8262000880565b67ffffffffffffffff81111562000b175762000b166200088b565b5b62000b238254620008e9565b62000b3082828562000a55565b600060209050601f83116001811462000b68576000841562000b53578287015190505b62000b5f858262000ad2565b86555062000bcf565b601f19841662000b78866200091e565b60005b8281101562000ba25784890151825560018201915060208501945060208101905062000b7b565b8683101562000bc2578489015162000bbe601f89168262000ab2565b8355505b6001600288020188555050505b505050505050565b600062000be482620007a5565b915062000bf183620007a5565b925082820262000c0181620007a5565b9150828204841483151762000c1b5762000c1a62000816565b5b5092915050565b600062000c2f82620007a5565b915062000c3c83620007a5565b92508262000c4f5762000c4e620007af565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c8c8262000c5f565b9050919050565b62000c9e8162000c7f565b811462000caa57600080fd5b50565b60008151905062000cbe8162000c93565b92915050565b60006020828403121562000cdd5762000cdc62000c5a565b5b600062000ced8482850162000cad565b91505092915050565b62000d018162000c7f565b82525050565b600060408201905062000d1e600083018562000cf6565b62000d2d602083018462000cf6565b9392505050565b62000d3f81620007a5565b82525050565b600060208201905062000d5c600083018462000d34565b92915050565b60805160a051615cd062000da46000396000818161151b0152612c8e015260008181610dfe01528181613b4d01528181613c2e0152613c550152615cd06000f3fe6080604052600436106103035760003560e01c80636ea7167811610190578063c0b0fda2116100dc578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610ba1578063f2fde38b14610bca578063f6b1897514610bf3578063f872858a14610c0a5761030a565b8063dd62ed3e14610b12578063ea2f0b3714610b4f578063f0f165af14610b785761030a565b8063c0b0fda2146109f2578063c49b9a8014610a1d578063c867d60b14610a46578063cea2695814610a83578063d9d1ec6c14610aac578063dd46706414610ae95761030a565b80639260aa4811610149578063a32db14011610123578063a32db14014610936578063a457c2d714610961578063a69df4b51461099e578063a9059cbb146109b55761030a565b80639260aa48146108b757806395d89b41146108e0578063a073d37f1461090b5761030a565b80636ea71678146107b957806370a08231146107e2578063715018a61461081f57806379058d17146108365780637d1db4a5146108615780638da5cb5b1461088c5761030a565b80633b124fe71161024f5780634a74bb0211610208578063557ed1ba116101e2578063557ed1ba1461070d57806359cada8e14610738578063602bc62b14610763578063691e7b101461078e5761030a565b80634a74bb021461067c5780634c44f03c146106a75780635342acb4146106d05761030a565b80633b124fe7146105805780633bd5d173146105ab5780633c9f861d146105d45780633f3cf56c146105ff578063437823ec1461062857806349bd5a5e146106515761030a565b806318160ddd116102bc57806323b872dd1161029657806323b872dd146104b0578063313ce567146104ed5780633936e8b91461051857806339509351146105435761030a565b806318160ddd146104335780631da1db5e1461045e57806320671fe2146104875761030a565b8063061c82d01461030f57806306fdde031461033857806307cd0a8014610363578063095ea7b3146103a057806313114a9d146103dd5780631694505e146104085761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061033660048036038101906103319190614a5d565b610c35565b005b34801561034457600080fd5b5061034d610cd4565b60405161035a9190614b1a565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190614a5d565b610d66565b6040516103979190614b4b565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190614bc4565b610dd4565b6040516103d49190614c1f565b60405180910390f35b3480156103e957600080fd5b506103f2610df2565b6040516103ff9190614b4b565b60405180910390f35b34801561041457600080fd5b5061041d610dfc565b60405161042a9190614c99565b60405180910390f35b34801561043f57600080fd5b50610448610e20565b6040516104559190614b4b565b60405180910390f35b34801561046a57600080fd5b5061048560048036038101906104809190614a5d565b610e2a565b005b34801561049357600080fd5b506104ae60048036038101906104a99190614a5d565b610f48565b005b3480156104bc57600080fd5b506104d760048036038101906104d29190614cb4565b610ff6565b6040516104e49190614c1f565b60405180910390f35b3480156104f957600080fd5b506105026110cf565b60405161050f9190614d23565b60405180910390f35b34801561052457600080fd5b5061052d6110e6565b60405161053a9190614d5f565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190614bc4565b61110c565b6040516105779190614c1f565b60405180910390f35b34801561058c57600080fd5b506105956111bf565b6040516105a29190614b4b565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190614a5d565b6111c5565b005b3480156105e057600080fd5b506105e9611341565b6040516105f69190614b4b565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190614d7a565b61134b565b005b34801561063457600080fd5b5061064f600480360381019061064a9190614dba565b611429565b005b34801561065d57600080fd5b50610666611519565b6040516106739190614df6565b60405180910390f35b34801561068857600080fd5b5061069161153d565b60405161069e9190614c1f565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190614a5d565b611550565b005b3480156106dc57600080fd5b506106f760048036038101906106f29190614dba565b61161c565b6040516107049190614c1f565b60405180910390f35b34801561071957600080fd5b50610722611672565b60405161072f9190614b4b565b60405180910390f35b34801561074457600080fd5b5061074d61167a565b60405161075a9190614b4b565b60405180910390f35b34801561076f57600080fd5b50610778611684565b6040516107859190614b4b565b60405180910390f35b34801561079a57600080fd5b506107a361168e565b6040516107b09190614d5f565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db9190614a5d565b6116b4565b005b3480156107ee57600080fd5b5061080960048036038101906108049190614dba565b611753565b6040516108169190614b4b565b60405180910390f35b34801561082b57600080fd5b5061083461183e565b005b34801561084257600080fd5b5061084b611991565b6040516108589190614b4b565b60405180910390f35b34801561086d57600080fd5b5061087661199b565b6040516108839190614b4b565b60405180910390f35b34801561089857600080fd5b506108a16119a1565b6040516108ae9190614df6565b60405180910390f35b3480156108c357600080fd5b506108de60048036038101906108d99190614bc4565b6119ca565b005b3480156108ec57600080fd5b506108f5611b15565b6040516109029190614b1a565b60405180910390f35b34801561091757600080fd5b50610920611ba7565b60405161092d9190614b4b565b60405180910390f35b34801561094257600080fd5b5061094b611bb1565b6040516109589190614b4b565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190614bc4565b611bb7565b6040516109959190614c1f565b60405180910390f35b3480156109aa57600080fd5b506109b3611c84565b005b3480156109c157600080fd5b506109dc60048036038101906109d79190614bc4565b611e58565b6040516109e99190614c1f565b60405180910390f35b3480156109fe57600080fd5b50610a07611e76565b604051610a149190614b4b565b60405180910390f35b348015610a2957600080fd5b50610a446004803603810190610a3f9190614e3d565b611e7c565b005b348015610a5257600080fd5b50610a6d6004803603810190610a689190614dba565b611f65565b604051610a7a9190614c1f565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190614a5d565b611f85565b005b348015610ab857600080fd5b50610ad36004803603810190610ace9190614e6a565b612024565b604051610ae09190614b4b565b60405180910390f35b348015610af557600080fd5b50610b106004803603810190610b0b9190614a5d565b6120aa565b005b348015610b1e57600080fd5b50610b396004803603810190610b349190614eaa565b612271565b604051610b469190614b4b565b60405180910390f35b348015610b5b57600080fd5b50610b766004803603810190610b719190614dba565b6122f8565b005b348015610b8457600080fd5b50610b9f6004803603810190610b9a9190614a5d565b6123e8565b005b348015610bad57600080fd5b50610bc86004803603810190610bc39190614a5d565b612487565b005b348015610bd657600080fd5b50610bf16004803603810190610bec9190614dba565b612526565b005b348015610bff57600080fd5b50610c086126e7565b005b348015610c1657600080fd5b50610c1f612799565b604051610c2c9190614c1f565b60405180910390f35b610c3d6127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190614f36565b60405180910390fd5b8060128190555050565b6060600f8054610ce390614f85565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0f90614f85565b8015610d5c5780601f10610d3157610100808354040283529160200191610d5c565b820191906000526020600020905b815481529060010190602001808311610d3f57829003601f168201915b5050505050905090565b6000600b54821115610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490615028565b60405180910390fd5b6000610db76127b4565b9050610dcc81846127df90919063ffffffff16565b915050919050565b6000610de8610de16127ac565b8484612829565b6001905092915050565b6000600c54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600a54905090565b610e326127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690614f36565b60405180910390fd5b6000479050601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60648484610f0e9190615077565b610f1891906150e8565b9081150290604051600060405180830381858888f19350505050158015610f43573d6000803e3d6000fd5b505050565b610f506127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd490614f36565b60405180910390fd5b633b9aca0081610fed9190615077565b601e8190555050565b60006110038484846129f2565b6110c48461100f6127ac565b6110bf85604051806060016040528060288152602001615c4e60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110756127ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dce9092919063ffffffff16565b612829565b600190509392505050565b6000601160009054906101000a900460ff16905090565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006111b56111196127ac565b846111b0856006600061112a6127ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b612829565b6001905092915050565b60125481565b60006111cf6127ac565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561125e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112559061518b565b60405180910390fd5b600061126983612e90565b50505050505090506112c381600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061131b81600b54612ef890919063ffffffff16565b600b8190555061133683600c54612e3290919063ffffffff16565b600c81905550505050565b6000600d54905090565b6113536127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790614f36565b60405180910390fd5b61141f6002826113f091906151ab565b600a6113fc9190615312565b61141184600a54612f4290919063ffffffff16565b6127df90919063ffffffff16565b601d819055505050565b6114316127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b590614f36565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b602060169054906101000a900460ff1681565b6115586127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc90614f36565b60405180910390fd5b600081905060648111156115f857603291505b6000826064611607919061535d565b90508160198190555080601a81905550505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600b54905090565b6000600254905090565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116bc6127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174090614f36565b60405180910390fd5b8060168190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117ee57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611839565b611836600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d66565b90505b919050565b6118466127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca90614f36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600e54905090565b601d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3090615403565b60405180910390fd5b600061dead90506000611a4e84838584612fbc565b611b0f84611a5a6127ac565b611b0a86604051806060016040528060288152602001615c4e60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611ac06127ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dce9092919063ffffffff16565b612829565b50505050565b606060108054611b2490614f85565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5090614f85565b8015611b9d5780601f10611b7257610100808354040283529160200191611b9d565b820191906000526020600020905b815481529060010190602001808311611b8057829003601f168201915b5050505050905090565b6000601e54905090565b60165481565b6000611c7a611bc46127ac565b84611c7585604051806060016040528060258152602001615c766025913960066000611bee6127ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dce9092919063ffffffff16565b612829565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90615495565b60405180910390fd5b6002544211611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f90615501565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611e6c611e656127ac565b84846129f2565b6001905092915050565b60145481565b611e846127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0890614f36565b60405180910390fd5b80602060166101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611f5a9190614c1f565b60405180910390a150565b60186020528060005260406000206000915054906101000a900460ff1681565b611f8d6127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201190614f36565b60405180910390fd5b8060148190555050565b6000600a5483111561206b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120629061556d565b60405180910390fd5b8161208c57600061207b84612e90565b5050505050509050809150506120a4565b600061209784612e90565b5050505050915050809150505b92915050565b6120b26127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461213f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213690614f36565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426121ed91906151ab565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123006127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461238d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238490614f36565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6123f06127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461247d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247490614f36565b60405180910390fd5b80601e8190555050565b61248f6127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251390614f36565b60405180910390fd5b80601c8190555050565b61252e6127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b290614f36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361262a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612621906155ff565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126ef6127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277390614f36565b60405180910390fd5b601354601281905550601554601481905550601754601681905550565b602060149054906101000a900460ff1681565b600033905090565b60008060006127c1612fe9565b915091506127d881836127df90919063ffffffff16565b9250505090565b600061282183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061329c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288f90615691565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fe90615723565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129e59190614b4b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a58906157b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac790615847565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b745750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bbf57601d54811115612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb5906158d9565b60405180910390fd5b5b6000612bca30611753565b90506000601e548210159050602060149054906101000a900460ff168015612c3c5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c6b57601c54612c5f84612c5187611753565b612e3290919063ffffffff16565b1115612c6a57600080fd5b5b808015612c855750602060159054906101000a900460ff16155b8015612cdd57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cf55750602060169054906101000a900460ff165b15612d0957601e549150612d08826132ff565b5b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612db05750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612dba57600090505b612dc6868686846133f8565b505050505050565b6000838311158290612e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0d9190614b1a565b60405180910390fd5b5060008385612e25919061535d565b9050809150509392505050565b6000808284612e4191906151ab565b905083811015612e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7d90615945565b60405180910390fd5b8091505092915050565b6000806000806000806000806000806000612eaa8c613709565b93509350935093506000806000612ecb8f878787612ec66127b4565b613788565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b6000612f3a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612dce565b905092915050565b6000808303612f545760009050612fb6565b60008284612f629190615077565b9050828482612f7191906150e8565b14612fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa8906159d7565b60405180910390fd5b809150505b92915050565b80612fca57612fc961383c565b5b612fd5848484613898565b80612fe357612fe2613a91565b5b50505050565b6000806000600b5490506000600a54905060005b60098054905081101561325f57826004600060098481548110613023576130226159f7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061311157508160056000600984815481106130a9576130a86159f7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561312857600b54600a5494509450505050613298565b6131b86004600060098481548110613143576131426159f7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612ef890919063ffffffff16565b925061324a60056000600984815481106131d5576131d46159f7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612ef890919063ffffffff16565b9150808061325790615a26565b915050612ffd565b50613277600a54600b546127df90919063ffffffff16565b82101561328f57600b54600a54935093505050613298565b81819350935050505b9091565b600080831182906132e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132da9190614b1a565b60405180910390fd5b50600083856132f291906150e8565b9050809150509392505050565b6001602060156101000a81548160ff02191690831515021790555061332381613aae565b6000479050600060646019548361333a9190615077565b61334491906150e8565b905060006064601a54846133589190615077565b61336291906150e8565b905061337983600e54612e3290919063ffffffff16565b600e819055506133ab601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ceb565b6133d7602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613ceb565b5050506000602060156101000a81548160ff02191690831515021790555050565b806134065761340561383c565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134a95750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134be576134b9848484613d36565b6136f5565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135615750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561357657613571848484613fc2565b6136f4565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561361a5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561362f5761362a84848461424e565b6136f3565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136d15750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136e6576136e1848484614445565b6136f2565b6136f184848461424e565b5b5b5b5b8061370357613702613a91565b5b50505050565b600080600080600061371a86614766565b9050600061372787614797565b90506000613734886147c8565b9050600061376f8261376185613753888e612ef890919063ffffffff16565b612ef890919063ffffffff16565b612ef890919063ffffffff16565b9050808484849750975097509750505050509193509193565b6000806000806137a1858a612f4290919063ffffffff16565b905060006137b8868a612f4290919063ffffffff16565b905060006137cf878a612f4290919063ffffffff16565b905060006137e6888a612f4290919063ffffffff16565b905060006138218261381385613805888a612ef890919063ffffffff16565b612ef890919063ffffffff16565b612ef890919063ffffffff16565b90508481859750975097505050505050955095509592505050565b600060125414801561385057506000601454145b801561385e57506000601654145b613896576012546013819055506014546015819055506016546017819055506000601281905550600060148190555060006016819055505b565b60006138a26127b4565b905060008060008060008060006138b889612e90565b965096509650965096509650965060006138db8984612f4290919063ffffffff16565b905061392f88600460008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139c56000600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a11826147f9565b613a1d8682868861499e565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000604051613a7b9190615aa9565b60405180910390a3505050505050505050505050565b601354601281905550601554601481905550601754601681905550565b6000600267ffffffffffffffff811115613acb57613aca615ac4565b5b604051908082528060200260200182016040528015613af95781602001602082028036833780820191505090505b5090503081600081518110613b1157613b106159f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bda9190615b08565b81600181518110613bee57613bed6159f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c53307f000000000000000000000000000000000000000000000000000000000000000084612829565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cb5959493929190615bf3565b600060405180830381600087803b158015613ccf57600080fd5b505af1158015613ce3573d6000803e3d6000fd5b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613d31573d6000803e3d6000fd5b505050565b6000613d406127b4565b90506000806000806000806000613d5689612e90565b96509650965096509650965096506000613d798984612f4290919063ffffffff16565b9050613dcd8a600560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e6288600460008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ef787600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f43826147f9565b613f4f8682868661499e565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613fac9190614b4b565b60405180910390a3505050505050505050505050565b6000613fcc6127b4565b90506000806000806000806000613fe289612e90565b965096509650965096509650965060006140058984612f4290919063ffffffff16565b905061405988600460008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140ee85600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600560008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061418387600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141cf826147f9565b6141db8682868661499e565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516142389190614b4b565b60405180910390a3505050505050505050505050565b60006142586127b4565b9050600080600080600080600061426e89612e90565b965096509650965096509650965060006142918984612f4290919063ffffffff16565b90506142e588600460008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061437a87600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143c6826147f9565b6143d28682868661499e565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161442f9190614b4b565b60405180910390a3505050505050505050505050565b600061444f6127b4565b9050600080600080600080600061446589612e90565b965096509650965096509650965060006144888984612f4290919063ffffffff16565b90506144dc8a600560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061457188600460008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061460685600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600560008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061469b87600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146e7826147f9565b6146f38682868661499e565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516147509190614b4b565b60405180910390a3505050505050505050505050565b6000614790606461478260125485612f4290919063ffffffff16565b6127df90919063ffffffff16565b9050919050565b60006147c160646147b360145485612f4290919063ffffffff16565b6127df90919063ffffffff16565b9050919050565b60006147f260646147e460165485612f4290919063ffffffff16565b6127df90919063ffffffff16565b9050919050565b60006148036127b4565b9050600061481a8284612f4290919063ffffffff16565b905061486e81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156149995761495583600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6149c5836149b786600b54612ef890919063ffffffff16565b612ef890919063ffffffff16565b600b819055506149e082600c54612e3290919063ffffffff16565b600c819055506149fb81600d54612e3290919063ffffffff16565b600d81905550614a1681600a54612ef890919063ffffffff16565b600a8190555050505050565b600080fd5b6000819050919050565b614a3a81614a27565b8114614a4557600080fd5b50565b600081359050614a5781614a31565b92915050565b600060208284031215614a7357614a72614a22565b5b6000614a8184828501614a48565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614ac4578082015181840152602081019050614aa9565b60008484015250505050565b6000601f19601f8301169050919050565b6000614aec82614a8a565b614af68185614a95565b9350614b06818560208601614aa6565b614b0f81614ad0565b840191505092915050565b60006020820190508181036000830152614b348184614ae1565b905092915050565b614b4581614a27565b82525050565b6000602082019050614b606000830184614b3c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614b9182614b66565b9050919050565b614ba181614b86565b8114614bac57600080fd5b50565b600081359050614bbe81614b98565b92915050565b60008060408385031215614bdb57614bda614a22565b5b6000614be985828601614baf565b9250506020614bfa85828601614a48565b9150509250929050565b60008115159050919050565b614c1981614c04565b82525050565b6000602082019050614c346000830184614c10565b92915050565b6000819050919050565b6000614c5f614c5a614c5584614b66565b614c3a565b614b66565b9050919050565b6000614c7182614c44565b9050919050565b6000614c8382614c66565b9050919050565b614c9381614c78565b82525050565b6000602082019050614cae6000830184614c8a565b92915050565b600080600060608486031215614ccd57614ccc614a22565b5b6000614cdb86828701614baf565b9350506020614cec86828701614baf565b9250506040614cfd86828701614a48565b9150509250925092565b600060ff82169050919050565b614d1d81614d07565b82525050565b6000602082019050614d386000830184614d14565b92915050565b6000614d4982614b66565b9050919050565b614d5981614d3e565b82525050565b6000602082019050614d746000830184614d50565b92915050565b60008060408385031215614d9157614d90614a22565b5b6000614d9f85828601614a48565b9250506020614db085828601614a48565b9150509250929050565b600060208284031215614dd057614dcf614a22565b5b6000614dde84828501614baf565b91505092915050565b614df081614b86565b82525050565b6000602082019050614e0b6000830184614de7565b92915050565b614e1a81614c04565b8114614e2557600080fd5b50565b600081359050614e3781614e11565b92915050565b600060208284031215614e5357614e52614a22565b5b6000614e6184828501614e28565b91505092915050565b60008060408385031215614e8157614e80614a22565b5b6000614e8f85828601614a48565b9250506020614ea085828601614e28565b9150509250929050565b60008060408385031215614ec157614ec0614a22565b5b6000614ecf85828601614baf565b9250506020614ee085828601614baf565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f20602083614a95565b9150614f2b82614eea565b602082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f9d57607f821691505b602082108103614fb057614faf614f56565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000615012602a83614a95565b915061501d82614fb6565b604082019050919050565b6000602082019050818103600083015261504181615005565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061508282614a27565b915061508d83614a27565b925082820261509b81614a27565b915082820484148315176150b2576150b1615048565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150f382614a27565b91506150fe83614a27565b92508261510e5761510d6150b9565b5b828204905092915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000615175602c83614a95565b915061518082615119565b604082019050919050565b600060208201905081810360008301526151a481615168565b9050919050565b60006151b682614a27565b91506151c183614a27565b92508282019050808211156151d9576151d8615048565b5b92915050565b60008160011c9050919050565b6000808291508390505b60018511156152365780860481111561521257615211615048565b5b60018516156152215780820291505b808102905061522f856151df565b94506151f6565b94509492505050565b60008261524f576001905061530b565b8161525d576000905061530b565b8160018114615273576002811461527d576152ac565b600191505061530b565b60ff84111561528f5761528e615048565b5b8360020a9150848211156152a6576152a5615048565b5b5061530b565b5060208310610133831016604e8410600b84101617156152e15782820a9050838111156152dc576152db615048565b5b61530b565b6152ee84848460016151ec565b9250905081840481111561530557615304615048565b5b81810290505b9392505050565b600061531d82614a27565b915061532883614a27565b92506153557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461523f565b905092915050565b600061536882614a27565b915061537383614a27565b925082820390508181111561538b5761538a615048565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006153ed602183614a95565b91506153f882615391565b604082019050919050565b6000602082019050818103600083015261541c816153e0565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061547f602383614a95565b915061548a82615423565b604082019050919050565b600060208201905081810360008301526154ae81615472565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b60006154eb601f83614a95565b91506154f6826154b5565b602082019050919050565b6000602082019050818103600083015261551a816154de565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615557601f83614a95565b915061556282615521565b602082019050919050565b600060208201905081810360008301526155868161554a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155e9602683614a95565b91506155f48261558d565b604082019050919050565b60006020820190508181036000830152615618816155dc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061567b602483614a95565b91506156868261561f565b604082019050919050565b600060208201905081810360008301526156aa8161566e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061570d602283614a95565b9150615718826156b1565b604082019050919050565b6000602082019050818103600083015261573c81615700565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061579f602583614a95565b91506157aa82615743565b604082019050919050565b600060208201905081810360008301526157ce81615792565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615831602383614a95565b915061583c826157d5565b604082019050919050565b6000602082019050818103600083015261586081615824565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006158c3602883614a95565b91506158ce82615867565b604082019050919050565b600060208201905081810360008301526158f2816158b6565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061592f601b83614a95565b915061593a826158f9565b602082019050919050565b6000602082019050818103600083015261595e81615922565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006159c1602183614a95565b91506159cc82615965565b604082019050919050565b600060208201905081810360008301526159f0816159b4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000615a3182614a27565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a6357615a62615048565b5b600182019050919050565b6000819050919050565b6000615a93615a8e615a8984615a6e565b614c3a565b614a27565b9050919050565b615aa381615a78565b82525050565b6000602082019050615abe6000830184615a9a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615b0281614b98565b92915050565b600060208284031215615b1e57615b1d614a22565b5b6000615b2c84828501615af3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b6a81614b86565b82525050565b6000615b7c8383615b61565b60208301905092915050565b6000602082019050919050565b6000615ba082615b35565b615baa8185615b40565b9350615bb583615b51565b8060005b83811015615be6578151615bcd8882615b70565b9750615bd883615b88565b925050600181019050615bb9565b5085935050505092915050565b600060a082019050615c086000830188614b3c565b615c156020830187615a9a565b8181036040830152615c278186615b95565b9050615c366060830185614de7565b615c436080830184614b3c565b969550505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e5675b7812c623e0fa7a1a95dbc76114cc58caa2ed5491c3a5228f47591308ff64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80636ea7167811610190578063c0b0fda2116100dc578063dd62ed3e11610095578063f1d5f5171161006f578063f1d5f51714610ba1578063f2fde38b14610bca578063f6b1897514610bf3578063f872858a14610c0a5761030a565b8063dd62ed3e14610b12578063ea2f0b3714610b4f578063f0f165af14610b785761030a565b8063c0b0fda2146109f2578063c49b9a8014610a1d578063c867d60b14610a46578063cea2695814610a83578063d9d1ec6c14610aac578063dd46706414610ae95761030a565b80639260aa4811610149578063a32db14011610123578063a32db14014610936578063a457c2d714610961578063a69df4b51461099e578063a9059cbb146109b55761030a565b80639260aa48146108b757806395d89b41146108e0578063a073d37f1461090b5761030a565b80636ea71678146107b957806370a08231146107e2578063715018a61461081f57806379058d17146108365780637d1db4a5146108615780638da5cb5b1461088c5761030a565b80633b124fe71161024f5780634a74bb0211610208578063557ed1ba116101e2578063557ed1ba1461070d57806359cada8e14610738578063602bc62b14610763578063691e7b101461078e5761030a565b80634a74bb021461067c5780634c44f03c146106a75780635342acb4146106d05761030a565b80633b124fe7146105805780633bd5d173146105ab5780633c9f861d146105d45780633f3cf56c146105ff578063437823ec1461062857806349bd5a5e146106515761030a565b806318160ddd116102bc57806323b872dd1161029657806323b872dd146104b0578063313ce567146104ed5780633936e8b91461051857806339509351146105435761030a565b806318160ddd146104335780631da1db5e1461045e57806320671fe2146104875761030a565b8063061c82d01461030f57806306fdde031461033857806307cd0a8014610363578063095ea7b3146103a057806313114a9d146103dd5780631694505e146104085761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061033660048036038101906103319190614a5d565b610c35565b005b34801561034457600080fd5b5061034d610cd4565b60405161035a9190614b1a565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190614a5d565b610d66565b6040516103979190614b4b565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190614bc4565b610dd4565b6040516103d49190614c1f565b60405180910390f35b3480156103e957600080fd5b506103f2610df2565b6040516103ff9190614b4b565b60405180910390f35b34801561041457600080fd5b5061041d610dfc565b60405161042a9190614c99565b60405180910390f35b34801561043f57600080fd5b50610448610e20565b6040516104559190614b4b565b60405180910390f35b34801561046a57600080fd5b5061048560048036038101906104809190614a5d565b610e2a565b005b34801561049357600080fd5b506104ae60048036038101906104a99190614a5d565b610f48565b005b3480156104bc57600080fd5b506104d760048036038101906104d29190614cb4565b610ff6565b6040516104e49190614c1f565b60405180910390f35b3480156104f957600080fd5b506105026110cf565b60405161050f9190614d23565b60405180910390f35b34801561052457600080fd5b5061052d6110e6565b60405161053a9190614d5f565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190614bc4565b61110c565b6040516105779190614c1f565b60405180910390f35b34801561058c57600080fd5b506105956111bf565b6040516105a29190614b4b565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190614a5d565b6111c5565b005b3480156105e057600080fd5b506105e9611341565b6040516105f69190614b4b565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190614d7a565b61134b565b005b34801561063457600080fd5b5061064f600480360381019061064a9190614dba565b611429565b005b34801561065d57600080fd5b50610666611519565b6040516106739190614df6565b60405180910390f35b34801561068857600080fd5b5061069161153d565b60405161069e9190614c1f565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190614a5d565b611550565b005b3480156106dc57600080fd5b506106f760048036038101906106f29190614dba565b61161c565b6040516107049190614c1f565b60405180910390f35b34801561071957600080fd5b50610722611672565b60405161072f9190614b4b565b60405180910390f35b34801561074457600080fd5b5061074d61167a565b60405161075a9190614b4b565b60405180910390f35b34801561076f57600080fd5b50610778611684565b6040516107859190614b4b565b60405180910390f35b34801561079a57600080fd5b506107a361168e565b6040516107b09190614d5f565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db9190614a5d565b6116b4565b005b3480156107ee57600080fd5b5061080960048036038101906108049190614dba565b611753565b6040516108169190614b4b565b60405180910390f35b34801561082b57600080fd5b5061083461183e565b005b34801561084257600080fd5b5061084b611991565b6040516108589190614b4b565b60405180910390f35b34801561086d57600080fd5b5061087661199b565b6040516108839190614b4b565b60405180910390f35b34801561089857600080fd5b506108a16119a1565b6040516108ae9190614df6565b60405180910390f35b3480156108c357600080fd5b506108de60048036038101906108d99190614bc4565b6119ca565b005b3480156108ec57600080fd5b506108f5611b15565b6040516109029190614b1a565b60405180910390f35b34801561091757600080fd5b50610920611ba7565b60405161092d9190614b4b565b60405180910390f35b34801561094257600080fd5b5061094b611bb1565b6040516109589190614b4b565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190614bc4565b611bb7565b6040516109959190614c1f565b60405180910390f35b3480156109aa57600080fd5b506109b3611c84565b005b3480156109c157600080fd5b506109dc60048036038101906109d79190614bc4565b611e58565b6040516109e99190614c1f565b60405180910390f35b3480156109fe57600080fd5b50610a07611e76565b604051610a149190614b4b565b60405180910390f35b348015610a2957600080fd5b50610a446004803603810190610a3f9190614e3d565b611e7c565b005b348015610a5257600080fd5b50610a6d6004803603810190610a689190614dba565b611f65565b604051610a7a9190614c1f565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190614a5d565b611f85565b005b348015610ab857600080fd5b50610ad36004803603810190610ace9190614e6a565b612024565b604051610ae09190614b4b565b60405180910390f35b348015610af557600080fd5b50610b106004803603810190610b0b9190614a5d565b6120aa565b005b348015610b1e57600080fd5b50610b396004803603810190610b349190614eaa565b612271565b604051610b469190614b4b565b60405180910390f35b348015610b5b57600080fd5b50610b766004803603810190610b719190614dba565b6122f8565b005b348015610b8457600080fd5b50610b9f6004803603810190610b9a9190614a5d565b6123e8565b005b348015610bad57600080fd5b50610bc86004803603810190610bc39190614a5d565b612487565b005b348015610bd657600080fd5b50610bf16004803603810190610bec9190614dba565b612526565b005b348015610bff57600080fd5b50610c086126e7565b005b348015610c1657600080fd5b50610c1f612799565b604051610c2c9190614c1f565b60405180910390f35b610c3d6127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc190614f36565b60405180910390fd5b8060128190555050565b6060600f8054610ce390614f85565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0f90614f85565b8015610d5c5780601f10610d3157610100808354040283529160200191610d5c565b820191906000526020600020905b815481529060010190602001808311610d3f57829003601f168201915b5050505050905090565b6000600b54821115610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490615028565b60405180910390fd5b6000610db76127b4565b9050610dcc81846127df90919063ffffffff16565b915050919050565b6000610de8610de16127ac565b8484612829565b6001905092915050565b6000600c54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600a54905090565b610e326127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690614f36565b60405180910390fd5b6000479050601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60648484610f0e9190615077565b610f1891906150e8565b9081150290604051600060405180830381858888f19350505050158015610f43573d6000803e3d6000fd5b505050565b610f506127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd490614f36565b60405180910390fd5b633b9aca0081610fed9190615077565b601e8190555050565b60006110038484846129f2565b6110c48461100f6127ac565b6110bf85604051806060016040528060288152602001615c4e60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110756127ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dce9092919063ffffffff16565b612829565b600190509392505050565b6000601160009054906101000a900460ff16905090565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006111b56111196127ac565b846111b0856006600061112a6127ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b612829565b6001905092915050565b60125481565b60006111cf6127ac565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561125e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112559061518b565b60405180910390fd5b600061126983612e90565b50505050505090506112c381600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061131b81600b54612ef890919063ffffffff16565b600b8190555061133683600c54612e3290919063ffffffff16565b600c81905550505050565b6000600d54905090565b6113536127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790614f36565b60405180910390fd5b61141f6002826113f091906151ab565b600a6113fc9190615312565b61141184600a54612f4290919063ffffffff16565b6127df90919063ffffffff16565b601d819055505050565b6114316127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b590614f36565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7f0000000000000000000000004d01c6db1bf4249f35e80070daf89f6ffdd0157081565b602060169054906101000a900460ff1681565b6115586127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dc90614f36565b60405180910390fd5b600081905060648111156115f857603291505b6000826064611607919061535d565b90508160198190555080601a81905550505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600b54905090565b6000600254905090565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116bc6127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174090614f36565b60405180910390fd5b8060168190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117ee57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611839565b611836600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d66565b90505b919050565b6118466127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca90614f36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600e54905090565b601d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3090615403565b60405180910390fd5b600061dead90506000611a4e84838584612fbc565b611b0f84611a5a6127ac565b611b0a86604051806060016040528060288152602001615c4e60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611ac06127ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dce9092919063ffffffff16565b612829565b50505050565b606060108054611b2490614f85565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5090614f85565b8015611b9d5780601f10611b7257610100808354040283529160200191611b9d565b820191906000526020600020905b815481529060010190602001808311611b8057829003601f168201915b5050505050905090565b6000601e54905090565b60165481565b6000611c7a611bc46127ac565b84611c7585604051806060016040528060258152602001615c766025913960066000611bee6127ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dce9092919063ffffffff16565b612829565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90615495565b60405180910390fd5b6002544211611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f90615501565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611e6c611e656127ac565b84846129f2565b6001905092915050565b60145481565b611e846127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0890614f36565b60405180910390fd5b80602060166101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611f5a9190614c1f565b60405180910390a150565b60186020528060005260406000206000915054906101000a900460ff1681565b611f8d6127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201190614f36565b60405180910390fd5b8060148190555050565b6000600a5483111561206b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120629061556d565b60405180910390fd5b8161208c57600061207b84612e90565b5050505050509050809150506120a4565b600061209784612e90565b5050505050915050809150505b92915050565b6120b26127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461213f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213690614f36565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426121ed91906151ab565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123006127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461238d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238490614f36565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6123f06127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461247d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247490614f36565b60405180910390fd5b80601e8190555050565b61248f6127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461251c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251390614f36565b60405180910390fd5b80601c8190555050565b61252e6127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b290614f36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361262a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612621906155ff565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126ef6127ac565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277390614f36565b60405180910390fd5b601354601281905550601554601481905550601754601681905550565b602060149054906101000a900460ff1681565b600033905090565b60008060006127c1612fe9565b915091506127d881836127df90919063ffffffff16565b9250505090565b600061282183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061329c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288f90615691565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fe90615723565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129e59190614b4b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a58906157b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac790615847565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b745750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bbf57601d54811115612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb5906158d9565b60405180910390fd5b5b6000612bca30611753565b90506000601e548210159050602060149054906101000a900460ff168015612c3c5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c6b57601c54612c5f84612c5187611753565b612e3290919063ffffffff16565b1115612c6a57600080fd5b5b808015612c855750602060159054906101000a900460ff16155b8015612cdd57507f0000000000000000000000004d01c6db1bf4249f35e80070daf89f6ffdd0157073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cf55750602060169054906101000a900460ff165b15612d0957601e549150612d08826132ff565b5b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612db05750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612dba57600090505b612dc6868686846133f8565b505050505050565b6000838311158290612e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0d9190614b1a565b60405180910390fd5b5060008385612e25919061535d565b9050809150509392505050565b6000808284612e4191906151ab565b905083811015612e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7d90615945565b60405180910390fd5b8091505092915050565b6000806000806000806000806000806000612eaa8c613709565b93509350935093506000806000612ecb8f878787612ec66127b4565b613788565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b6000612f3a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612dce565b905092915050565b6000808303612f545760009050612fb6565b60008284612f629190615077565b9050828482612f7191906150e8565b14612fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa8906159d7565b60405180910390fd5b809150505b92915050565b80612fca57612fc961383c565b5b612fd5848484613898565b80612fe357612fe2613a91565b5b50505050565b6000806000600b5490506000600a54905060005b60098054905081101561325f57826004600060098481548110613023576130226159f7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061311157508160056000600984815481106130a9576130a86159f7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561312857600b54600a5494509450505050613298565b6131b86004600060098481548110613143576131426159f7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612ef890919063ffffffff16565b925061324a60056000600984815481106131d5576131d46159f7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612ef890919063ffffffff16565b9150808061325790615a26565b915050612ffd565b50613277600a54600b546127df90919063ffffffff16565b82101561328f57600b54600a54935093505050613298565b81819350935050505b9091565b600080831182906132e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132da9190614b1a565b60405180910390fd5b50600083856132f291906150e8565b9050809150509392505050565b6001602060156101000a81548160ff02191690831515021790555061332381613aae565b6000479050600060646019548361333a9190615077565b61334491906150e8565b905060006064601a54846133589190615077565b61336291906150e8565b905061337983600e54612e3290919063ffffffff16565b600e819055506133ab601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ceb565b6133d7602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613ceb565b5050506000602060156101000a81548160ff02191690831515021790555050565b806134065761340561383c565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134a95750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134be576134b9848484613d36565b6136f5565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135615750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561357657613571848484613fc2565b6136f4565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561361a5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561362f5761362a84848461424e565b6136f3565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136d15750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136e6576136e1848484614445565b6136f2565b6136f184848461424e565b5b5b5b5b8061370357613702613a91565b5b50505050565b600080600080600061371a86614766565b9050600061372787614797565b90506000613734886147c8565b9050600061376f8261376185613753888e612ef890919063ffffffff16565b612ef890919063ffffffff16565b612ef890919063ffffffff16565b9050808484849750975097509750505050509193509193565b6000806000806137a1858a612f4290919063ffffffff16565b905060006137b8868a612f4290919063ffffffff16565b905060006137cf878a612f4290919063ffffffff16565b905060006137e6888a612f4290919063ffffffff16565b905060006138218261381385613805888a612ef890919063ffffffff16565b612ef890919063ffffffff16565b612ef890919063ffffffff16565b90508481859750975097505050505050955095509592505050565b600060125414801561385057506000601454145b801561385e57506000601654145b613896576012546013819055506014546015819055506016546017819055506000601281905550600060148190555060006016819055505b565b60006138a26127b4565b905060008060008060008060006138b889612e90565b965096509650965096509650965060006138db8984612f4290919063ffffffff16565b905061392f88600460008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139c56000600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a11826147f9565b613a1d8682868861499e565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000604051613a7b9190615aa9565b60405180910390a3505050505050505050505050565b601354601281905550601554601481905550601754601681905550565b6000600267ffffffffffffffff811115613acb57613aca615ac4565b5b604051908082528060200260200182016040528015613af95781602001602082028036833780820191505090505b5090503081600081518110613b1157613b106159f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bda9190615b08565b81600181518110613bee57613bed6159f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c53307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612829565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cb5959493929190615bf3565b600060405180830381600087803b158015613ccf57600080fd5b505af1158015613ce3573d6000803e3d6000fd5b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613d31573d6000803e3d6000fd5b505050565b6000613d406127b4565b90506000806000806000806000613d5689612e90565b96509650965096509650965096506000613d798984612f4290919063ffffffff16565b9050613dcd8a600560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e6288600460008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ef787600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f43826147f9565b613f4f8682868661499e565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051613fac9190614b4b565b60405180910390a3505050505050505050505050565b6000613fcc6127b4565b90506000806000806000806000613fe289612e90565b965096509650965096509650965060006140058984612f4290919063ffffffff16565b905061405988600460008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140ee85600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600560008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061418387600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141cf826147f9565b6141db8682868661499e565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516142389190614b4b565b60405180910390a3505050505050505050505050565b60006142586127b4565b9050600080600080600080600061426e89612e90565b965096509650965096509650965060006142918984612f4290919063ffffffff16565b90506142e588600460008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061437a87600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143c6826147f9565b6143d28682868661499e565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161442f9190614b4b565b60405180910390a3505050505050505050505050565b600061444f6127b4565b9050600080600080600080600061446589612e90565b965096509650965096509650965060006144888984612f4290919063ffffffff16565b90506144dc8a600560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061457188600460008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef890919063ffffffff16565b600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061460685600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600560008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061469b87600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146e7826147f9565b6146f38682868661499e565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516147509190614b4b565b60405180910390a3505050505050505050505050565b6000614790606461478260125485612f4290919063ffffffff16565b6127df90919063ffffffff16565b9050919050565b60006147c160646147b360145485612f4290919063ffffffff16565b6127df90919063ffffffff16565b9050919050565b60006147f260646147e460165485612f4290919063ffffffff16565b6127df90919063ffffffff16565b9050919050565b60006148036127b4565b9050600061481a8284612f4290919063ffffffff16565b905061486e81600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156149995761495583600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3290919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6149c5836149b786600b54612ef890919063ffffffff16565b612ef890919063ffffffff16565b600b819055506149e082600c54612e3290919063ffffffff16565b600c819055506149fb81600d54612e3290919063ffffffff16565b600d81905550614a1681600a54612ef890919063ffffffff16565b600a8190555050505050565b600080fd5b6000819050919050565b614a3a81614a27565b8114614a4557600080fd5b50565b600081359050614a5781614a31565b92915050565b600060208284031215614a7357614a72614a22565b5b6000614a8184828501614a48565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614ac4578082015181840152602081019050614aa9565b60008484015250505050565b6000601f19601f8301169050919050565b6000614aec82614a8a565b614af68185614a95565b9350614b06818560208601614aa6565b614b0f81614ad0565b840191505092915050565b60006020820190508181036000830152614b348184614ae1565b905092915050565b614b4581614a27565b82525050565b6000602082019050614b606000830184614b3c565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614b9182614b66565b9050919050565b614ba181614b86565b8114614bac57600080fd5b50565b600081359050614bbe81614b98565b92915050565b60008060408385031215614bdb57614bda614a22565b5b6000614be985828601614baf565b9250506020614bfa85828601614a48565b9150509250929050565b60008115159050919050565b614c1981614c04565b82525050565b6000602082019050614c346000830184614c10565b92915050565b6000819050919050565b6000614c5f614c5a614c5584614b66565b614c3a565b614b66565b9050919050565b6000614c7182614c44565b9050919050565b6000614c8382614c66565b9050919050565b614c9381614c78565b82525050565b6000602082019050614cae6000830184614c8a565b92915050565b600080600060608486031215614ccd57614ccc614a22565b5b6000614cdb86828701614baf565b9350506020614cec86828701614baf565b9250506040614cfd86828701614a48565b9150509250925092565b600060ff82169050919050565b614d1d81614d07565b82525050565b6000602082019050614d386000830184614d14565b92915050565b6000614d4982614b66565b9050919050565b614d5981614d3e565b82525050565b6000602082019050614d746000830184614d50565b92915050565b60008060408385031215614d9157614d90614a22565b5b6000614d9f85828601614a48565b9250506020614db085828601614a48565b9150509250929050565b600060208284031215614dd057614dcf614a22565b5b6000614dde84828501614baf565b91505092915050565b614df081614b86565b82525050565b6000602082019050614e0b6000830184614de7565b92915050565b614e1a81614c04565b8114614e2557600080fd5b50565b600081359050614e3781614e11565b92915050565b600060208284031215614e5357614e52614a22565b5b6000614e6184828501614e28565b91505092915050565b60008060408385031215614e8157614e80614a22565b5b6000614e8f85828601614a48565b9250506020614ea085828601614e28565b9150509250929050565b60008060408385031215614ec157614ec0614a22565b5b6000614ecf85828601614baf565b9250506020614ee085828601614baf565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f20602083614a95565b9150614f2b82614eea565b602082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f9d57607f821691505b602082108103614fb057614faf614f56565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000615012602a83614a95565b915061501d82614fb6565b604082019050919050565b6000602082019050818103600083015261504181615005565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061508282614a27565b915061508d83614a27565b925082820261509b81614a27565b915082820484148315176150b2576150b1615048565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150f382614a27565b91506150fe83614a27565b92508261510e5761510d6150b9565b5b828204905092915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000615175602c83614a95565b915061518082615119565b604082019050919050565b600060208201905081810360008301526151a481615168565b9050919050565b60006151b682614a27565b91506151c183614a27565b92508282019050808211156151d9576151d8615048565b5b92915050565b60008160011c9050919050565b6000808291508390505b60018511156152365780860481111561521257615211615048565b5b60018516156152215780820291505b808102905061522f856151df565b94506151f6565b94509492505050565b60008261524f576001905061530b565b8161525d576000905061530b565b8160018114615273576002811461527d576152ac565b600191505061530b565b60ff84111561528f5761528e615048565b5b8360020a9150848211156152a6576152a5615048565b5b5061530b565b5060208310610133831016604e8410600b84101617156152e15782820a9050838111156152dc576152db615048565b5b61530b565b6152ee84848460016151ec565b9250905081840481111561530557615304615048565b5b81810290505b9392505050565b600061531d82614a27565b915061532883614a27565b92506153557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461523f565b905092915050565b600061536882614a27565b915061537383614a27565b925082820390508181111561538b5761538a615048565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006153ed602183614a95565b91506153f882615391565b604082019050919050565b6000602082019050818103600083015261541c816153e0565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061547f602383614a95565b915061548a82615423565b604082019050919050565b600060208201905081810360008301526154ae81615472565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b60006154eb601f83614a95565b91506154f6826154b5565b602082019050919050565b6000602082019050818103600083015261551a816154de565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615557601f83614a95565b915061556282615521565b602082019050919050565b600060208201905081810360008301526155868161554a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155e9602683614a95565b91506155f48261558d565b604082019050919050565b60006020820190508181036000830152615618816155dc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061567b602483614a95565b91506156868261561f565b604082019050919050565b600060208201905081810360008301526156aa8161566e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061570d602283614a95565b9150615718826156b1565b604082019050919050565b6000602082019050818103600083015261573c81615700565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061579f602583614a95565b91506157aa82615743565b604082019050919050565b600060208201905081810360008301526157ce81615792565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615831602383614a95565b915061583c826157d5565b604082019050919050565b6000602082019050818103600083015261586081615824565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006158c3602883614a95565b91506158ce82615867565b604082019050919050565b600060208201905081810360008301526158f2816158b6565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061592f601b83614a95565b915061593a826158f9565b602082019050919050565b6000602082019050818103600083015261595e81615922565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006159c1602183614a95565b91506159cc82615965565b604082019050919050565b600060208201905081810360008301526159f0816159b4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000615a3182614a27565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a6357615a62615048565b5b600182019050919050565b6000819050919050565b6000615a93615a8e615a8984615a6e565b614c3a565b614a27565b9050919050565b615aa381615a78565b82525050565b6000602082019050615abe6000830184615a9a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615b0281614b98565b92915050565b600060208284031215615b1e57615b1d614a22565b5b6000615b2c84828501615af3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b6a81614b86565b82525050565b6000615b7c8383615b61565b60208301905092915050565b6000602082019050919050565b6000615ba082615b35565b615baa8185615b40565b9350615bb583615b51565b8060005b83811015615be6578151615bcd8882615b70565b9750615bd883615b88565b925050600181019050615bb9565b5085935050505092915050565b600060a082019050615c086000830188614b3c565b615c156020830187615a9a565b8181036040830152615c278186615b95565b9050615c366060830185614de7565b615c436080830184614b3c565b969550505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e5675b7812c623e0fa7a1a95dbc76114cc58caa2ed5491c3a5228f47591308ff64736f6c63430008110033

Deployed Bytecode Sourcemap

15380:22193:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35418:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18645:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21910:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19650:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20645:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17353:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19017:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35900:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35760:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19819:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18831:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17063:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20140:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16278:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21076:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20744:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36754:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35173:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17411:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17496:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36250:488;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35038:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6768:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18922:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6564:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17184:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35634:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19120:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6156:148;;;;;;;;;;;;;:::i;:::-;;20844:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16945:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5942:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22520:487;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18736:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20948:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16453:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20366:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7104:305;;;;;;;;;;;;;:::i;:::-;;19324:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16367:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37148:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16590:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35524:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21466:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6866:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19499:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35296:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36974:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36138:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6312:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34843:187;;;;;;;;;;;;;:::i;:::-;;17307:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35418:98;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35502:6:::1;35492:7;:16;;;;35418:98:::0;:::o;18645:83::-;18682:13;18715:5;18708:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18645:83;:::o;21910:251::-;21974:7;22013;;22002;:18;;21994:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22078:19;22101:10;:8;:10::i;:::-;22078:33;;22129:24;22141:11;22129:7;:11;;:24;;;;:::i;:::-;22122:31;;;21910:251;;;:::o;19650:161::-;19725:4;19742:39;19751:12;:10;:12::i;:::-;19765:7;19774:6;19742:8;:39::i;:::-;19799:4;19792:11;;19650:161;;;;:::o;20645:87::-;20687:7;20714:10;;20707:17;;20645:87;:::o;17353:51::-;;;:::o;19017:95::-;19070:7;19097;;19090:14;;19017:95;:::o;35900:227::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35989:17:::1;36009:21;35989:41;;36053:16;;;;;;;;;;;36045:34;;:70;36111:3;36092:16;36080:9;:28;;;;:::i;:::-;:34;;;;:::i;:::-;36045:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35974:153;35900:227:::0;:::o;35760:132::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35879:5:::1;35870:6;:14;;;;:::i;:::-;35844:23;:40;;;;35760:132:::0;:::o;19819:313::-;19917:4;19934:36;19944:6;19952:9;19963:6;19934:9;:36::i;:::-;19981:121;19990:6;19998:12;:10;:12::i;:::-;20012:89;20050:6;20012:89;;;;;;;;;;;;;;;;;:11;:19;20024:6;20012:19;;;;;;;;;;;;;;;:33;20032:12;:10;:12::i;:::-;20012:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;19981:8;:121::i;:::-;20120:4;20113:11;;19819:313;;;;;:::o;18831:83::-;18872:5;18897:9;;;;;;;;;;;18890:16;;18831:83;:::o;17063:93::-;;;;;;;;;;;;;:::o;20140:218::-;20228:4;20245:83;20254:12;:10;:12::i;:::-;20268:7;20277:50;20316:10;20277:11;:25;20289:12;:10;:12::i;:::-;20277:25;;;;;;;;;;;;;;;:34;20303:7;20277:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20245:8;:83::i;:::-;20346:4;20339:11;;20140:218;;;;:::o;16278:26::-;;;;:::o;21076:378::-;21128:14;21145:12;:10;:12::i;:::-;21128:29;;21177:11;:19;21189:6;21177:19;;;;;;;;;;;;;;;;;;;;;;;;;21176:20;21168:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21257:15;21282:19;21293:7;21282:10;:19::i;:::-;21256:45;;;;;;;;21330:28;21350:7;21330;:15;21338:6;21330:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21312:7;:15;21320:6;21312:15;;;;;;;;;;;;;;;:46;;;;21379:20;21391:7;21379;;:11;;:20;;;;:::i;:::-;21369:7;:30;;;;21423:23;21438:7;21423:10;;:14;;:23;;;;:::i;:::-;21410:10;:36;;;;21117:337;;21076:378;:::o;20744:88::-;20786:7;20813:11;;20806:18;;20744:88;:::o;36754:212::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36871:87:::1;36945:1;36928:13;36920:26;;;;:::i;:::-;36915:2;:32;;;;:::i;:::-;36871:25;36883:12;36871:7;;:11;;:25;;;;:::i;:::-;:29;;:87;;;;:::i;:::-;36856:12;:102;;;;36754:212:::0;;:::o;35173:111::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35272:4:::1;35242:18;:27;35261:7;35242:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;35173:111:::0;:::o;17411:38::-;;;:::o;17496:40::-;;;;;;;;;;;;;:::o;36250:488::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36427:35:::1;36465:10;36427:48;;36522:3;36492:27;:33;36488:80;;;36554:2;36541:15;;36488:80;36580:29;36618:10;36612:3;:16;;;;:::i;:::-;36580:48;;36658:27;36639:16;:46;;;;36709:21;36696:10;:34;;;;36321:417;;36250:488:::0;:::o;35038:123::-;35102:4;35126:18;:27;35145:7;35126:27;;;;;;;;;;;;;;;;;;;;;;;;;35119:34;;35038:123;;;:::o;6768:90::-;6808:7;6835:15;6828:22;;6768:90;:::o;18922:89::-;18969:7;18996;;18989:14;;18922:89;:::o;6564:90::-;6610:7;6637:9;;6630:16;;6564:90;:::o;17184:87::-;;;;;;;;;;;;;:::o;35634:118::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35738:6:::1;35717:18;:27;;;;35634:118:::0;:::o;19120:196::-;19186:7;19210:11;:20;19222:7;19210:20;;;;;;;;;;;;;;;;;;;;;;;;;19206:49;;;19239:7;:16;19247:7;19239:16;;;;;;;;;;;;;;;;19232:23;;;;19206:49;19273:35;19291:7;:16;19299:7;19291:16;;;;;;;;;;;;;;;;19273:17;:35::i;:::-;19266:42;;19120:196;;;;:::o;6156:148::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6263:1:::1;6226:40;;6247:6;::::0;::::1;;;;;;;;6226:40;;;;;;;;;;;;6294:1;6277:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6156:148::o:0;20844:96::-;20893:7;20920:12;;20913:19;;20844:96;:::o;16945:43::-;;;;:::o;5942:79::-;5980:7;6007:6;;;;;;;;;;;6000:13;;5942:79;:::o;22520:487::-;22626:1;22606:22;;:8;:22;;;22598:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22681:15;22699:42;22681:60;;22756:12;22791:52;22810:8;22819:7;22827;22835;22791:18;:52::i;:::-;22869:126;22878:8;22888:12;:10;:12::i;:::-;22902:92;22942:7;22902:92;;;;;;;;;;;;;;;;;:11;:21;22914:8;22902:21;;;;;;;;;;;;;;;:35;22924:12;:10;:12::i;:::-;22902:35;;;;;;;;;;;;;;;;:39;;:92;;;;;:::i;:::-;22869:8;:126::i;:::-;22583:424;;22520:487;;:::o;18736:87::-;18775:13;18808:7;18801:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18736:87;:::o;20948:120::-;21010:7;21037:23;;21030:30;;20948:120;:::o;16453:37::-;;;;:::o;20366:269::-;20459:4;20476:129;20485:12;:10;:12::i;:::-;20499:7;20508:96;20547:15;20508:96;;;;;;;;;;;;;;;;;:11;:25;20520:12;:10;:12::i;:::-;20508:25;;;;;;;;;;;;;;;:34;20534:7;20508:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;20476:8;:129::i;:::-;20623:4;20616:11;;20366:269;;;;:::o;7104:305::-;7174:10;7156:28;;:14;;;;;;;;;;;:28;;;7148:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7261:9;;7243:15;:27;7235:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7352:14;;;;;;;;;;;7323:44;;7344:6;;;;;;;;;;7323:44;;;;;;;;;;;;7387:14;;;;;;;;;;;7378:6;;:23;;;;;;;;;;;;;;;;;;7104:305::o;19324:167::-;19402:4;19419:42;19429:12;:10;:12::i;:::-;19443:9;19454:6;19419:9;:42::i;:::-;19479:4;19472:11;;19324:167;;;;:::o;16367:27::-;;;;:::o;37148:171::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37249:8:::1;37225:21;;:32;;;;;;;;;;;;;;;;;;37273:38;37302:8;37273:38;;;;;;:::i;:::-;;;;;;;;37148:171:::0;:::o;16590:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;35524:102::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35611:7:::1;35600:8;:18;;;;35524:102:::0;:::o;21466:436::-;21554:7;21593;;21582;:18;;21574:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21652:17;21647:248;;21687:15;21712:19;21723:7;21712:10;:19::i;:::-;21686:45;;;;;;;;21753:7;21746:14;;;;;21647:248;21795:23;21827:19;21838:7;21827:10;:19::i;:::-;21793:53;;;;;;;;21868:15;21861:22;;;21466:436;;;;;:::o;6866:226::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6947:6:::1;::::0;::::1;;;;;;;;6930:14;;:23;;;;;;;;;;;;;;;;;;6981:1;6964:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;7024:4;7006:15;:22;;;;:::i;:::-;6994:9;:34;;;;7081:1;7044:40;;7065:6;::::0;::::1;;;;;;;;7044:40;;;;;;;;;;;;6866:226:::0;:::o;19499:143::-;19580:7;19607:11;:18;19619:5;19607:18;;;;;;;;;;;;;;;:27;19626:7;19607:27;;;;;;;;;;;;;;;;19600:34;;19499:143;;;;:::o;35296:110::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35393:5:::1;35363:18;:27;35382:7;35363:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35296:110:::0;:::o;36974:166::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37108:24:::1;37082:23;:50;;;;36974:166:::0;:::o;36138:102::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36224:8:::1;36210:10;:22;;;;36138:102:::0;:::o;6312:244::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6421:1:::1;6401:22;;:8;:22;;::::0;6393:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6511:8;6482:38;;6503:6;::::0;::::1;;;;;;;;6482:38;;;;;;;;;;;;6540:8;6531:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6312:244:::0;:::o;34843:187::-;6079:12;:10;:12::i;:::-;6069:22;;:6;;;;;;;;;;:22;;;6061:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34913:15:::1;;34903:7;:25;;;;34950:16;;34939:8;:27;;;;34998:24;;34977:18;:45;;;;34843:187::o:0;17307:35::-;;;;;;;;;;;;;:::o;348:115::-;401:15;444:10;429:26;;348:115;:::o;32674:163::-;32715:7;32736:15;32753;32772:19;:17;:19::i;:::-;32735:56;;;;32809:20;32821:7;32809;:11;;:20;;;;:::i;:::-;32802:27;;;;32674:163;:::o;2100:132::-;2158:7;2185:39;2189:1;2192;2185:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2178:46;;2100:132;;;;:::o;22173:337::-;22283:1;22266:19;;:5;:19;;;22258:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22364:1;22345:21;;:7;:21;;;22337:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22448:6;22418:11;:18;22430:5;22418:18;;;;;;;;;;;;;;;:27;22437:7;22418:27;;;;;;;;;;;;;;;:36;;;;22486:7;22470:32;;22479:5;22470:32;;;22495:6;22470:32;;;;;;:::i;:::-;;;;;;;;22173:337;;;:::o;23015:1361::-;23132:1;23114:20;;:6;:20;;;23106:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23216:1;23195:23;;:9;:23;;;23187:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23275:18;:26;23294:6;23275:26;;;;;;;;;;;;;;;;;;;;;;;;;23274:27;:61;;;;;23306:18;:29;23325:9;23306:29;;;;;;;;;;;;;;;;;;;;;;;;;23305:30;23274:61;23271:168;;;23370:12;;23360:6;:22;;23352:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23271:168;23463:28;23494:24;23512:4;23494:9;:24::i;:::-;23463:55;;23529:28;23584:23;;23560:20;:47;;23529:78;;23635:16;;;;;;;;;;;:51;;;;;23656:19;:30;23676:9;23656:30;;;;;;;;;;;;;;;;;;;;;;;;;23655:31;23635:51;23632:124;;;23745:10;;23709:32;23734:6;23709:20;23719:9;23709;:20::i;:::-;:24;;:32;;;;:::i;:::-;:46;;23701:55;;;;;;23632:124;23787:23;:57;;;;;23828:16;;;;;;;;;;;23827:17;23787:57;:97;;;;;23871:13;23861:23;;:6;:23;;;;23787:97;:135;;;;;23901:21;;;;;;;;;;;23787:135;23769:289;;;23972:23;;23949:46;;24010:36;24025:20;24010:14;:36::i;:::-;23769:289;24080:12;24095:4;24080:19;;24207:18;:26;24226:6;24207:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;24237:18;:29;24256:9;24237:29;;;;;;;;;;;;;;;;;;;;;;;;;24207:59;24204:105;;;24292:5;24282:15;;24204:105;24321:47;24336:6;24343:9;24353:6;24360:7;24321:14;:47::i;:::-;23093:1283;;;23015:1361;;;:::o;1640:192::-;1726:7;1759:1;1754;:6;;1762:12;1746:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1786:9;1802:1;1798;:5;;;;:::i;:::-;1786:17;;1823:1;1816:8;;;1640:192;;;;;:::o;1307:181::-;1365:7;1385:9;1401:1;1397;:5;;;;:::i;:::-;1385:17;;1426:1;1421;:6;;1413:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1479:1;1472:8;;;1307:181;;;;:::o;31280:457::-;31339:7;31348;31357;31366;31375;31384;31393;31414:23;31439:12;31453:13;31468:18;31490:20;31502:7;31490:11;:20::i;:::-;31413:97;;;;;;;;31522:15;31539:23;31564:12;31580:57;31592:7;31601:4;31607:5;31614:10;31626;:8;:10::i;:::-;31580:11;:57::i;:::-;31521:116;;;;;;31656:7;31665:15;31682:4;31688:15;31705:4;31711:5;31718:10;31648:81;;;;;;;;;;;;;;;;;;;;;31280:457;;;;;;;;;:::o;1496:136::-;1554:7;1581:43;1585:1;1588;1581:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1574:50;;1496:136;;;;:::o;1840:250::-;1898:7;1927:1;1922;:6;1918:47;;1952:1;1945:8;;;;1918:47;1977:9;1993:1;1989;:5;;;;:::i;:::-;1977:17;;2022:1;2017;2013;:5;;;;:::i;:::-;:10;2005:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:1;2074:8;;;1840:250;;;;;:::o;25523:286::-;25638:7;25634:40;;25660:14;:12;:14::i;:::-;25634:40;25697;25711:6;25719:9;25730:6;25697:13;:40::i;:::-;25764:7;25760:41;;25786:15;:13;:15::i;:::-;25760:41;25523:286;;;;:::o;32845:561::-;32895:7;32904;32924:15;32942:7;;32924:25;;32960:15;32978:7;;32960:25;;33007:9;33002:289;33026:9;:16;;;;33022:1;:20;33002:289;;;33092:7;33068;:21;33076:9;33086:1;33076:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33068:21;;;;;;;;;;;;;;;;:31;:66;;;;33127:7;33103;:21;33111:9;33121:1;33111:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33103:21;;;;;;;;;;;;;;;;:31;33068:66;33064:97;;;33144:7;;33153;;33136:25;;;;;;;;;33064:97;33186:34;33198:7;:21;33206:9;33216:1;33206:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33198:21;;;;;;;;;;;;;;;;33186:7;:11;;:34;;;;:::i;:::-;33176:44;;33245:34;33257:7;:21;33265:9;33275:1;33265:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33257:21;;;;;;;;;;;;;;;;33245:7;:11;;:34;;;;:::i;:::-;33235:44;;33044:3;;;;;:::i;:::-;;;;33002:289;;;;33315:20;33327:7;;33315;;:11;;:20;;;;:::i;:::-;33305:7;:30;33301:61;;;33345:7;;33354;;33337:25;;;;;;;;33301:61;33381:7;33390;33373:25;;;;;;32845:561;;;:::o;2240:278::-;2326:7;2358:1;2354;:5;2361:12;2346:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2385:9;2401:1;2397;:5;;;;:::i;:::-;2385:17;;2509:1;2502:8;;;2240:278;;;;;:::o;24384:516::-;17852:4;17833:16;;:23;;;;;;;;;;;;;;;;;;24469:38:::1;24486:20;24469:16;:38::i;:::-;24518:20;24541:21;24518:44;;24575:24;24636:3;24617:16;;24602:12;:31;;;;:::i;:::-;:37;;;;:::i;:::-;24575:64;;24650:18;24699:3;24686:10;;24671:12;:25;;;;:::i;:::-;:31;;;;:::i;:::-;24650:52;;24732:30;24749:12;24732;;:16;;:30;;;;:::i;:::-;24717:12;:45;;;;24775:59;24799:16;;;;;;;;;;;24817;24775:23;:59::i;:::-;24845:47;24869:10;;;;;;;;;;;24881;24845:23;:47::i;:::-;24458:442;;;17898:5:::0;17879:16;;:24;;;;;;;;;;;;;;;;;;24384:516;:::o;25817:834::-;25928:7;25924:40;;25950:14;:12;:14::i;:::-;25924:40;25989:11;:19;26001:6;25989:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;26013:11;:22;26025:9;26013:22;;;;;;;;;;;;;;;;;;;;;;;;;26012:23;25989:46;25985:597;;;26052:48;26074:6;26082:9;26093:6;26052:21;:48::i;:::-;25985:597;;;26123:11;:19;26135:6;26123:19;;;;;;;;;;;;;;;;;;;;;;;;;26122:20;:46;;;;;26146:11;:22;26158:9;26146:22;;;;;;;;;;;;;;;;;;;;;;;;;26122:46;26118:464;;;26185:46;26205:6;26213:9;26224:6;26185:19;:46::i;:::-;26118:464;;;26254:11;:19;26266:6;26254:19;;;;;;;;;;;;;;;;;;;;;;;;;26253:20;:47;;;;;26278:11;:22;26290:9;26278:22;;;;;;;;;;;;;;;;;;;;;;;;;26277:23;26253:47;26249:333;;;26317:44;26335:6;26343:9;26354:6;26317:17;:44::i;:::-;26249:333;;;26383:11;:19;26395:6;26383:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;26406:11;:22;26418:9;26406:22;;;;;;;;;;;;;;;;;;;;;;;;;26383:45;26379:203;;;26445:48;26467:6;26475:9;26486:6;26445:21;:48::i;:::-;26379:203;;;26526:44;26544:6;26552:9;26563:6;26526:17;:44::i;:::-;26379:203;26249:333;26118:464;25985:597;26606:7;26602:41;;26628:15;:13;:15::i;:::-;26602:41;25817:834;;;;:::o;31745:409::-;31805:7;31814;31823;31832;31852:12;31867:24;31883:7;31867:15;:24::i;:::-;31852:39;;31902:13;31918:25;31935:7;31918:16;:25::i;:::-;31902:41;;31954:18;31975:30;31997:7;31975:21;:30::i;:::-;31954:51;;32016:23;32042:44;32075:10;32042:28;32064:5;32042:17;32054:4;32042:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;:32;;:44;;;;:::i;:::-;32016:70;;32105:15;32122:4;32128:5;32135:10;32097:49;;;;;;;;;;;;31745:409;;;;;:::o;32162:504::-;32292:7;32301;32310;32330:15;32348:24;32360:11;32348:7;:11;;:24;;;;:::i;:::-;32330:42;;32383:12;32398:21;32407:11;32398:4;:8;;:21;;;;:::i;:::-;32383:36;;32430:13;32446:22;32456:11;32446:5;:9;;:22;;;;:::i;:::-;32430:38;;32479:18;32500:27;32515:11;32500:10;:14;;:27;;;;:::i;:::-;32479:48;;32538:23;32564:44;32597:10;32564:28;32586:5;32564:17;32576:4;32564:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;:32;;:44;;;;:::i;:::-;32538:70;;32627:7;32636:15;32653:4;32619:39;;;;;;;;;;;32162:504;;;;;;;;;:::o;34304:346::-;34361:1;34350:7;;:12;:29;;;;;34378:1;34366:8;;:13;34350:29;:56;;;;;34405:1;34383:18;;:23;34350:56;34408:7;34347:68;34453:7;;34435:15;:25;;;;34490:8;;34471:16;:27;;;;34536:18;;34509:24;:45;;;;34585:1;34575:7;:11;;;;34608:1;34597:8;:12;;;;34641:1;34620:18;:22;;;;34304:346;:::o;27296:603::-;27390:19;27413:10;:8;:10::i;:::-;27390:33;;27435:15;27452:23;27477:12;27491:23;27516:12;27530:13;27545:18;27567:19;27578:7;27567:10;:19::i;:::-;27434:152;;;;;;;;;;;;;;27597:13;27614:22;27624:11;27614:5;:9;;:22;;;;:::i;:::-;27597:39;;27665:28;27685:7;27665;:15;27673:6;27665:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27647:7;:15;27655:6;27647:15;;;;;;;;;;;;;;;:46;;;;27725:25;27748:1;27725:7;:18;27733:9;27725:18;;;;;;;;;;;;;;;;:22;;:25;;;;:::i;:::-;27704:7;:18;27712:9;27704:18;;;;;;;;;;;;;;;:46;;;;27761:26;27776:10;27761:14;:26::i;:::-;27798:47;27810:4;27816:5;27823:4;27829:15;27798:11;:47::i;:::-;27878:9;27861:30;;27870:6;27861:30;;;27889:1;27861:30;;;;;;:::i;:::-;;;;;;;;27379:520;;;;;;;;;27296:603;;;:::o;34662:171::-;34716:15;;34706:7;:25;;;;34753:16;;34742:8;:27;;;;34801:24;;34780:18;:45;;;;34662:171::o;24908:605::-;25034:21;25072:1;25058:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25034:40;;25103:4;25085;25090:1;25085:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25129:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25119:4;25124:1;25119:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25164:62;25181:4;25196:15;25214:11;25164:8;:62::i;:::-;25265:15;:66;;;25346:11;25372:1;25416:4;25443;25479:15;25265:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24963:550;24908:605;:::o;37337:129::-;37432:9;:18;;:26;37451:6;37432:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37337:129;;:::o;28624:689::-;28726:19;28749:10;:8;:10::i;:::-;28726:33;;28771:15;28788:23;28813:12;28827:23;28852:12;28866:13;28881:18;28903:19;28914:7;28903:10;:19::i;:::-;28770:152;;;;;;;;;;;;;;28933:13;28950:22;28960:11;28950:5;:9;;:22;;;;:::i;:::-;28933:39;;29001:28;29021:7;29001;:15;29009:6;29001:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28983:7;:15;28991:6;28983:15;;;;;;;;;;;;;;;:46;;;;29058:28;29078:7;29058;:15;29066:6;29058:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29040:7;:15;29048:6;29040:15;;;;;;;;;;;;;;;:46;;;;29118:39;29141:15;29118:7;:18;29126:9;29118:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29097:7;:18;29105:9;29097:18;;;;;;;;;;;;;;;:60;;;;29171:26;29186:10;29171:14;:26::i;:::-;29208:37;29220:4;29226:5;29233:4;29239:5;29208:11;:37::i;:::-;29278:9;29261:44;;29270:6;29261:44;;;29289:15;29261:44;;;;;;:::i;:::-;;;;;;;;28715:598;;;;;;;;;28624:689;;;:::o;27907:709::-;28007:19;28030:10;:8;:10::i;:::-;28007:33;;28052:15;28069:23;28094:12;28108:23;28133:12;28147:13;28162:18;28184:19;28195:7;28184:10;:19::i;:::-;28051:152;;;;;;;;;;;;;;28214:13;28231:22;28241:11;28231:5;:9;;:22;;;;:::i;:::-;28214:39;;28282:28;28302:7;28282;:15;28290:6;28282:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28264:7;:15;28272:6;28264:15;;;;;;;;;;;;;;;:46;;;;28342:39;28365:15;28342:7;:18;28350:9;28342:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28321:7;:18;28329:9;28321:18;;;;;;;;;;;;;;;:60;;;;28413:39;28436:15;28413:7;:18;28421:9;28413:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28392:7;:18;28400:9;28392:18;;;;;;;;;;;;;;;:60;;;;28474:26;28489:10;28474:14;:26::i;:::-;28511:37;28523:4;28529:5;28536:4;28542:5;28511:11;:37::i;:::-;28581:9;28564:44;;28573:6;28564:44;;;28592:15;28564:44;;;;;;:::i;:::-;;;;;;;;27996:620;;;;;;;;;27907:709;;;:::o;26663:625::-;26761:19;26784:10;:8;:10::i;:::-;26761:33;;26806:15;26823:23;26848:12;26862:23;26887:12;26901:13;26916:18;26938:19;26949:7;26938:10;:19::i;:::-;26805:152;;;;;;;;;;;;;;26968:13;26985:22;26995:11;26985:5;:9;;:22;;;;:::i;:::-;26968:39;;27036:28;27056:7;27036;:15;27044:6;27036:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27018:7;:15;27026:6;27018:15;;;;;;;;;;;;;;;:46;;;;27096:39;27119:15;27096:7;:18;27104:9;27096:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27075:7;:18;27083:9;27075:18;;;;;;;;;;;;;;;:60;;;;27146:26;27161:10;27146:14;:26::i;:::-;27183:37;27195:4;27201:5;27208:4;27214:5;27183:11;:37::i;:::-;27253:9;27236:44;;27245:6;27236:44;;;27264:15;27236:44;;;;;;:::i;:::-;;;;;;;;26750:538;;;;;;;;;26663:625;;;:::o;29321:765::-;29423:19;29446:10;:8;:10::i;:::-;29423:33;;29468:15;29485:23;29510:12;29524:23;29549:12;29563:13;29578:18;29600:19;29611:7;29600:10;:19::i;:::-;29467:152;;;;;;;;;;;;;;29630:13;29647:22;29657:11;29647:5;:9;;:22;;;;:::i;:::-;29630:39;;29698:28;29718:7;29698;:15;29706:6;29698:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29680:7;:15;29688:6;29680:15;;;;;;;;;;;;;;;:46;;;;29755:28;29775:7;29755;:15;29763:6;29755:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29737:7;:15;29745:6;29737:15;;;;;;;;;;;;;;;:46;;;;29815:39;29838:15;29815:7;:18;29823:9;29815:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29794:7;:18;29802:9;29794:18;;;;;;;;;;;;;;;:60;;;;29886:39;29909:15;29886:7;:18;29894:9;29886:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29865:7;:18;29873:9;29865:18;;;;;;;;;;;;;;;:60;;;;29944:26;29959:10;29944:14;:26::i;:::-;29981:37;29993:4;29999:5;30006:4;30012:5;29981:11;:37::i;:::-;30051:9;30034:44;;30043:6;30034:44;;;30062:15;30034:44;;;;;;:::i;:::-;;;;;;;;29412:674;;;;;;;;;29321:765;;;:::o;33787:154::-;33851:7;33878:55;33917:5;33878:20;33890:7;;33878;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;33871:62;;33787:154;;;:::o;33953:156::-;34018:7;34045:56;34085:5;34045:21;34057:8;;34045:7;:11;;:21;;;;:::i;:::-;:25;;:56;;;;:::i;:::-;34038:63;;33953:156;;;:::o;34121:171::-;34191:7;34218:66;34268:5;34218:31;34230:18;;34218:7;:11;;:31;;;;:::i;:::-;:35;;:66;;;;:::i;:::-;34211:73;;34121:171;;;:::o;33418:355::-;33481:19;33504:10;:8;:10::i;:::-;33481:33;;33525:18;33546:27;33561:11;33546:10;:14;;:27;;;;:::i;:::-;33525:48;;33609:38;33636:10;33609:7;:22;33625:4;33609:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;33584:7;:22;33600:4;33584:22;;;;;;;;;;;;;;;:63;;;;33661:11;:26;33681:4;33661:26;;;;;;;;;;;;;;;;;;;;;;;;;33658:107;;;33727:38;33754:10;33727:7;:22;33743:4;33727:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;33702:7;:22;33718:4;33702:22;;;;;;;;;;;;;;;:63;;;;33658:107;33470:303;;33418:355;:::o;30098:274::-;30206:28;30228:5;30206:17;30218:4;30206:7;;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;30196:7;:38;;;;30258:20;30273:4;30258:10;;:14;;:20;;;;:::i;:::-;30245:10;:33;;;;30303:22;30319:5;30303:11;;:15;;:22;;;;:::i;:::-;30289:11;:36;;;;30346:18;30358:5;30346:7;;:11;;:18;;;;:::i;:::-;30336:7;:28;;;;30098:274;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:246::-;1386:1;1396:113;1410:6;1407:1;1404:13;1396:113;;;1495:1;1490:3;1486:11;1480:18;1476:1;1471:3;1467:11;1460:39;1432:2;1429:1;1425:10;1420:15;;1396:113;;;1543:1;1534:6;1529:3;1525:16;1518:27;1367:184;1305:246;;;:::o;1557:102::-;1598:6;1649:2;1645:7;1640:2;1633:5;1629:14;1625:28;1615:38;;1557:102;;;:::o;1665:377::-;1753:3;1781:39;1814:5;1781:39;:::i;:::-;1836:71;1900:6;1895:3;1836:71;:::i;:::-;1829:78;;1916:65;1974:6;1969:3;1962:4;1955:5;1951:16;1916:65;:::i;:::-;2006:29;2028:6;2006:29;:::i;:::-;2001:3;1997:39;1990:46;;1757:285;1665:377;;;;:::o;2048:313::-;2161:4;2199:2;2188:9;2184:18;2176:26;;2248:9;2242:4;2238:20;2234:1;2223:9;2219:17;2212:47;2276:78;2349:4;2340:6;2276:78;:::i;:::-;2268:86;;2048:313;;;;:::o;2367:118::-;2454:24;2472:5;2454:24;:::i;:::-;2449:3;2442:37;2367:118;;:::o;2491:222::-;2584:4;2622:2;2611:9;2607:18;2599:26;;2635:71;2703:1;2692:9;2688:17;2679:6;2635:71;:::i;:::-;2491:222;;;;:::o;2719:126::-;2756:7;2796:42;2789:5;2785:54;2774:65;;2719:126;;;:::o;2851:96::-;2888:7;2917:24;2935:5;2917:24;:::i;:::-;2906:35;;2851:96;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:86::-;5771:7;5811:4;5804:5;5800:16;5789:27;;5736:86;;;:::o;5828:112::-;5911:22;5927:5;5911:22;:::i;:::-;5906:3;5899:35;5828:112;;:::o;5946:214::-;6035:4;6073:2;6062:9;6058:18;6050:26;;6086:67;6150:1;6139:9;6135:17;6126:6;6086:67;:::i;:::-;5946:214;;;;:::o;6166:104::-;6211:7;6240:24;6258:5;6240:24;:::i;:::-;6229:35;;6166:104;;;:::o;6276:142::-;6379:32;6405:5;6379:32;:::i;:::-;6374:3;6367:45;6276:142;;:::o;6424:254::-;6533:4;6571:2;6560:9;6556:18;6548:26;;6584:87;6668:1;6657:9;6653:17;6644:6;6584:87;:::i;:::-;6424:254;;;;:::o;6684:474::-;6752:6;6760;6809:2;6797:9;6788:7;6784:23;6780:32;6777:119;;;6815:79;;:::i;:::-;6777:119;6935:1;6960:53;7005:7;6996:6;6985:9;6981:22;6960:53;:::i;:::-;6950:63;;6906:117;7062:2;7088:53;7133:7;7124:6;7113:9;7109:22;7088:53;:::i;:::-;7078:63;;7033:118;6684:474;;;;;:::o;7164:329::-;7223:6;7272:2;7260:9;7251:7;7247:23;7243:32;7240:119;;;7278:79;;:::i;:::-;7240:119;7398:1;7423:53;7468:7;7459:6;7448:9;7444:22;7423:53;:::i;:::-;7413:63;;7369:117;7164:329;;;;:::o;7499:118::-;7586:24;7604:5;7586:24;:::i;:::-;7581:3;7574:37;7499:118;;:::o;7623:222::-;7716:4;7754:2;7743:9;7739:18;7731:26;;7767:71;7835:1;7824:9;7820:17;7811:6;7767:71;:::i;:::-;7623:222;;;;:::o;7851:116::-;7921:21;7936:5;7921:21;:::i;:::-;7914:5;7911:32;7901:60;;7957:1;7954;7947:12;7901:60;7851:116;:::o;7973:133::-;8016:5;8054:6;8041:20;8032:29;;8070:30;8094:5;8070:30;:::i;:::-;7973:133;;;;:::o;8112:323::-;8168:6;8217:2;8205:9;8196:7;8192:23;8188:32;8185:119;;;8223:79;;:::i;:::-;8185:119;8343:1;8368:50;8410:7;8401:6;8390:9;8386:22;8368:50;:::i;:::-;8358:60;;8314:114;8112:323;;;;:::o;8441:468::-;8506:6;8514;8563:2;8551:9;8542:7;8538:23;8534:32;8531:119;;;8569:79;;:::i;:::-;8531:119;8689:1;8714:53;8759:7;8750:6;8739:9;8735:22;8714:53;:::i;:::-;8704:63;;8660:117;8816:2;8842:50;8884:7;8875:6;8864:9;8860:22;8842:50;:::i;:::-;8832:60;;8787:115;8441:468;;;;;:::o;8915:474::-;8983:6;8991;9040:2;9028:9;9019:7;9015:23;9011:32;9008:119;;;9046:79;;:::i;:::-;9008:119;9166:1;9191:53;9236:7;9227:6;9216:9;9212:22;9191:53;:::i;:::-;9181:63;;9137:117;9293:2;9319:53;9364:7;9355:6;9344:9;9340:22;9319:53;:::i;:::-;9309:63;;9264:118;8915:474;;;;;:::o;9395:182::-;9535:34;9531:1;9523:6;9519:14;9512:58;9395:182;:::o;9583:366::-;9725:3;9746:67;9810:2;9805:3;9746:67;:::i;:::-;9739:74;;9822:93;9911:3;9822:93;:::i;:::-;9940:2;9935:3;9931:12;9924:19;;9583:366;;;:::o;9955:419::-;10121:4;10159:2;10148:9;10144:18;10136:26;;10208:9;10202:4;10198:20;10194:1;10183:9;10179:17;10172:47;10236:131;10362:4;10236:131;:::i;:::-;10228:139;;9955:419;;;:::o;10380:180::-;10428:77;10425:1;10418:88;10525:4;10522:1;10515:15;10549:4;10546:1;10539:15;10566:320;10610:6;10647:1;10641:4;10637:12;10627:22;;10694:1;10688:4;10684:12;10715:18;10705:81;;10771:4;10763:6;10759:17;10749:27;;10705:81;10833:2;10825:6;10822:14;10802:18;10799:38;10796:84;;10852:18;;:::i;:::-;10796:84;10617:269;10566:320;;;:::o;10892:229::-;11032:34;11028:1;11020:6;11016:14;11009:58;11101:12;11096:2;11088:6;11084:15;11077:37;10892:229;:::o;11127:366::-;11269:3;11290:67;11354:2;11349:3;11290:67;:::i;:::-;11283:74;;11366:93;11455:3;11366:93;:::i;:::-;11484:2;11479:3;11475:12;11468:19;;11127:366;;;:::o;11499:419::-;11665:4;11703:2;11692:9;11688:18;11680:26;;11752:9;11746:4;11742:20;11738:1;11727:9;11723:17;11716:47;11780:131;11906:4;11780:131;:::i;:::-;11772:139;;11499:419;;;:::o;11924:180::-;11972:77;11969:1;11962:88;12069:4;12066:1;12059:15;12093:4;12090:1;12083:15;12110:410;12150:7;12173:20;12191:1;12173:20;:::i;:::-;12168:25;;12207:20;12225:1;12207:20;:::i;:::-;12202:25;;12262:1;12259;12255:9;12284:30;12302:11;12284:30;:::i;:::-;12273:41;;12463:1;12454:7;12450:15;12447:1;12444:22;12424:1;12417:9;12397:83;12374:139;;12493:18;;:::i;:::-;12374:139;12158:362;12110:410;;;;:::o;12526:180::-;12574:77;12571:1;12564:88;12671:4;12668:1;12661:15;12695:4;12692:1;12685:15;12712:185;12752:1;12769:20;12787:1;12769:20;:::i;:::-;12764:25;;12803:20;12821:1;12803:20;:::i;:::-;12798:25;;12842:1;12832:35;;12847:18;;:::i;:::-;12832:35;12889:1;12886;12882:9;12877:14;;12712:185;;;;:::o;12903:231::-;13043:34;13039:1;13031:6;13027:14;13020:58;13112:14;13107:2;13099:6;13095:15;13088:39;12903:231;:::o;13140:366::-;13282:3;13303:67;13367:2;13362:3;13303:67;:::i;:::-;13296:74;;13379:93;13468:3;13379:93;:::i;:::-;13497:2;13492:3;13488:12;13481:19;;13140:366;;;:::o;13512:419::-;13678:4;13716:2;13705:9;13701:18;13693:26;;13765:9;13759:4;13755:20;13751:1;13740:9;13736:17;13729:47;13793:131;13919:4;13793:131;:::i;:::-;13785:139;;13512:419;;;:::o;13937:191::-;13977:3;13996:20;14014:1;13996:20;:::i;:::-;13991:25;;14030:20;14048:1;14030:20;:::i;:::-;14025:25;;14073:1;14070;14066:9;14059:16;;14094:3;14091:1;14088:10;14085:36;;;14101:18;;:::i;:::-;14085:36;13937:191;;;;:::o;14134:102::-;14176:8;14223:5;14220:1;14216:13;14195:34;;14134:102;;;:::o;14242:848::-;14303:5;14310:4;14334:6;14325:15;;14358:5;14349:14;;14372:712;14393:1;14383:8;14380:15;14372:712;;;14488:4;14483:3;14479:14;14473:4;14470:24;14467:50;;;14497:18;;:::i;:::-;14467:50;14547:1;14537:8;14533:16;14530:451;;;14962:4;14955:5;14951:16;14942:25;;14530:451;15012:4;15006;15002:15;14994:23;;15042:32;15065:8;15042:32;:::i;:::-;15030:44;;14372:712;;;14242:848;;;;;;;:::o;15096:1073::-;15150:5;15341:8;15331:40;;15362:1;15353:10;;15364:5;;15331:40;15390:4;15380:36;;15407:1;15398:10;;15409:5;;15380:36;15476:4;15524:1;15519:27;;;;15560:1;15555:191;;;;15469:277;;15519:27;15537:1;15528:10;;15539:5;;;15555:191;15600:3;15590:8;15587:17;15584:43;;;15607:18;;:::i;:::-;15584:43;15656:8;15653:1;15649:16;15640:25;;15691:3;15684:5;15681:14;15678:40;;;15698:18;;:::i;:::-;15678:40;15731:5;;;15469:277;;15855:2;15845:8;15842:16;15836:3;15830:4;15827:13;15823:36;15805:2;15795:8;15792:16;15787:2;15781:4;15778:12;15774:35;15758:111;15755:246;;;15911:8;15905:4;15901:19;15892:28;;15946:3;15939:5;15936:14;15933:40;;;15953:18;;:::i;:::-;15933:40;15986:5;;15755:246;16026:42;16064:3;16054:8;16048:4;16045:1;16026:42;:::i;:::-;16011:57;;;;16100:4;16095:3;16091:14;16084:5;16081:25;16078:51;;;16109:18;;:::i;:::-;16078:51;16158:4;16151:5;16147:16;16138:25;;15096:1073;;;;;;:::o;16175:285::-;16235:5;16259:23;16277:4;16259:23;:::i;:::-;16251:31;;16303:27;16321:8;16303:27;:::i;:::-;16291:39;;16349:104;16386:66;16376:8;16370:4;16349:104;:::i;:::-;16340:113;;16175:285;;;;:::o;16466:194::-;16506:4;16526:20;16544:1;16526:20;:::i;:::-;16521:25;;16560:20;16578:1;16560:20;:::i;:::-;16555:25;;16604:1;16601;16597:9;16589:17;;16628:1;16622:4;16619:11;16616:37;;;16633:18;;:::i;:::-;16616:37;16466:194;;;;:::o;16666:220::-;16806:34;16802:1;16794:6;16790:14;16783:58;16875:3;16870:2;16862:6;16858:15;16851:28;16666:220;:::o;16892:366::-;17034:3;17055:67;17119:2;17114:3;17055:67;:::i;:::-;17048:74;;17131:93;17220:3;17131:93;:::i;:::-;17249:2;17244:3;17240:12;17233:19;;16892:366;;;:::o;17264:419::-;17430:4;17468:2;17457:9;17453:18;17445:26;;17517:9;17511:4;17507:20;17503:1;17492:9;17488:17;17481:47;17545:131;17671:4;17545:131;:::i;:::-;17537:139;;17264:419;;;:::o;17689:222::-;17829:34;17825:1;17817:6;17813:14;17806:58;17898:5;17893:2;17885:6;17881:15;17874:30;17689:222;:::o;17917:366::-;18059:3;18080:67;18144:2;18139:3;18080:67;:::i;:::-;18073:74;;18156:93;18245:3;18156:93;:::i;:::-;18274:2;18269:3;18265:12;18258:19;;17917:366;;;:::o;18289:419::-;18455:4;18493:2;18482:9;18478:18;18470:26;;18542:9;18536:4;18532:20;18528:1;18517:9;18513:17;18506:47;18570:131;18696:4;18570:131;:::i;:::-;18562:139;;18289:419;;;:::o;18714:181::-;18854:33;18850:1;18842:6;18838:14;18831:57;18714:181;:::o;18901:366::-;19043:3;19064:67;19128:2;19123:3;19064:67;:::i;:::-;19057:74;;19140:93;19229:3;19140:93;:::i;:::-;19258:2;19253:3;19249:12;19242:19;;18901:366;;;:::o;19273:419::-;19439:4;19477:2;19466:9;19462:18;19454:26;;19526:9;19520:4;19516:20;19512:1;19501:9;19497:17;19490:47;19554:131;19680:4;19554:131;:::i;:::-;19546:139;;19273:419;;;:::o;19698:181::-;19838:33;19834:1;19826:6;19822:14;19815:57;19698:181;:::o;19885:366::-;20027:3;20048:67;20112:2;20107:3;20048:67;:::i;:::-;20041:74;;20124:93;20213:3;20124:93;:::i;:::-;20242:2;20237:3;20233:12;20226:19;;19885:366;;;:::o;20257:419::-;20423:4;20461:2;20450:9;20446:18;20438:26;;20510:9;20504:4;20500:20;20496:1;20485:9;20481:17;20474:47;20538:131;20664:4;20538:131;:::i;:::-;20530:139;;20257:419;;;:::o;20682:225::-;20822:34;20818:1;20810:6;20806:14;20799:58;20891:8;20886:2;20878:6;20874:15;20867:33;20682:225;:::o;20913:366::-;21055:3;21076:67;21140:2;21135:3;21076:67;:::i;:::-;21069:74;;21152:93;21241:3;21152:93;:::i;:::-;21270:2;21265:3;21261:12;21254:19;;20913:366;;;:::o;21285:419::-;21451:4;21489:2;21478:9;21474:18;21466:26;;21538:9;21532:4;21528:20;21524:1;21513:9;21509:17;21502:47;21566:131;21692:4;21566:131;:::i;:::-;21558:139;;21285:419;;;:::o;21710:223::-;21850:34;21846:1;21838:6;21834:14;21827:58;21919:6;21914:2;21906:6;21902:15;21895:31;21710:223;:::o;21939:366::-;22081:3;22102:67;22166:2;22161:3;22102:67;:::i;:::-;22095:74;;22178:93;22267:3;22178:93;:::i;:::-;22296:2;22291:3;22287:12;22280:19;;21939:366;;;:::o;22311:419::-;22477:4;22515:2;22504:9;22500:18;22492:26;;22564:9;22558:4;22554:20;22550:1;22539:9;22535:17;22528:47;22592:131;22718:4;22592:131;:::i;:::-;22584:139;;22311:419;;;:::o;22736:221::-;22876:34;22872:1;22864:6;22860:14;22853:58;22945:4;22940:2;22932:6;22928:15;22921:29;22736:221;:::o;22963:366::-;23105:3;23126:67;23190:2;23185:3;23126:67;:::i;:::-;23119:74;;23202:93;23291:3;23202:93;:::i;:::-;23320:2;23315:3;23311:12;23304:19;;22963:366;;;:::o;23335:419::-;23501:4;23539:2;23528:9;23524:18;23516:26;;23588:9;23582:4;23578:20;23574:1;23563:9;23559:17;23552:47;23616:131;23742:4;23616:131;:::i;:::-;23608:139;;23335:419;;;:::o;23760:224::-;23900:34;23896:1;23888:6;23884:14;23877:58;23969:7;23964:2;23956:6;23952:15;23945:32;23760:224;:::o;23990:366::-;24132:3;24153:67;24217:2;24212:3;24153:67;:::i;:::-;24146:74;;24229:93;24318:3;24229:93;:::i;:::-;24347:2;24342:3;24338:12;24331:19;;23990:366;;;:::o;24362:419::-;24528:4;24566:2;24555:9;24551:18;24543:26;;24615:9;24609:4;24605:20;24601:1;24590:9;24586:17;24579:47;24643:131;24769:4;24643:131;:::i;:::-;24635:139;;24362:419;;;:::o;24787:222::-;24927:34;24923:1;24915:6;24911:14;24904:58;24996:5;24991:2;24983:6;24979:15;24972:30;24787:222;:::o;25015:366::-;25157:3;25178:67;25242:2;25237:3;25178:67;:::i;:::-;25171:74;;25254:93;25343:3;25254:93;:::i;:::-;25372:2;25367:3;25363:12;25356:19;;25015:366;;;:::o;25387:419::-;25553:4;25591:2;25580:9;25576:18;25568:26;;25640:9;25634:4;25630:20;25626:1;25615:9;25611:17;25604:47;25668:131;25794:4;25668:131;:::i;:::-;25660:139;;25387:419;;;:::o;25812:227::-;25952:34;25948:1;25940:6;25936:14;25929:58;26021:10;26016:2;26008:6;26004:15;25997:35;25812:227;:::o;26045:366::-;26187:3;26208:67;26272:2;26267:3;26208:67;:::i;:::-;26201:74;;26284:93;26373:3;26284:93;:::i;:::-;26402:2;26397:3;26393:12;26386:19;;26045:366;;;:::o;26417:419::-;26583:4;26621:2;26610:9;26606:18;26598:26;;26670:9;26664:4;26660:20;26656:1;26645:9;26641:17;26634:47;26698:131;26824:4;26698:131;:::i;:::-;26690:139;;26417:419;;;:::o;26842:177::-;26982:29;26978:1;26970:6;26966:14;26959:53;26842:177;:::o;27025:366::-;27167:3;27188:67;27252:2;27247:3;27188:67;:::i;:::-;27181:74;;27264:93;27353:3;27264:93;:::i;:::-;27382:2;27377:3;27373:12;27366:19;;27025:366;;;:::o;27397:419::-;27563:4;27601:2;27590:9;27586:18;27578:26;;27650:9;27644:4;27640:20;27636:1;27625:9;27621:17;27614:47;27678:131;27804:4;27678:131;:::i;:::-;27670:139;;27397:419;;;:::o;27822:220::-;27962:34;27958:1;27950:6;27946:14;27939:58;28031:3;28026:2;28018:6;28014:15;28007:28;27822:220;:::o;28048:366::-;28190:3;28211:67;28275:2;28270:3;28211:67;:::i;:::-;28204:74;;28287:93;28376:3;28287:93;:::i;:::-;28405:2;28400:3;28396:12;28389:19;;28048:366;;;:::o;28420:419::-;28586:4;28624:2;28613:9;28609:18;28601:26;;28673:9;28667:4;28663:20;28659:1;28648:9;28644:17;28637:47;28701:131;28827:4;28701:131;:::i;:::-;28693:139;;28420:419;;;:::o;28845:180::-;28893:77;28890:1;28883:88;28990:4;28987:1;28980:15;29014:4;29011:1;29004:15;29031:233;29070:3;29093:24;29111:5;29093:24;:::i;:::-;29084:33;;29139:66;29132:5;29129:77;29126:103;;29209:18;;:::i;:::-;29126:103;29256:1;29249:5;29245:13;29238:20;;29031:233;;;:::o;29270:85::-;29315:7;29344:5;29333:16;;29270:85;;;:::o;29361:158::-;29419:9;29452:61;29470:42;29479:32;29505:5;29479:32;:::i;:::-;29470:42;:::i;:::-;29452:61;:::i;:::-;29439:74;;29361:158;;;:::o;29525:147::-;29620:45;29659:5;29620:45;:::i;:::-;29615:3;29608:58;29525:147;;:::o;29678:238::-;29779:4;29817:2;29806:9;29802:18;29794:26;;29830:79;29906:1;29895:9;29891:17;29882:6;29830:79;:::i;:::-;29678:238;;;;:::o;29922:180::-;29970:77;29967:1;29960:88;30067:4;30064:1;30057:15;30091:4;30088:1;30081:15;30108:143;30165:5;30196:6;30190:13;30181:22;;30212:33;30239:5;30212:33;:::i;:::-;30108:143;;;;:::o;30257:351::-;30327:6;30376:2;30364:9;30355:7;30351:23;30347:32;30344:119;;;30382:79;;:::i;:::-;30344:119;30502:1;30527:64;30583:7;30574:6;30563:9;30559:22;30527:64;:::i;:::-;30517:74;;30473:128;30257:351;;;;:::o;30614:114::-;30681:6;30715:5;30709:12;30699:22;;30614:114;;;:::o;30734:184::-;30833:11;30867:6;30862:3;30855:19;30907:4;30902:3;30898:14;30883:29;;30734:184;;;;:::o;30924:132::-;30991:4;31014:3;31006:11;;31044:4;31039:3;31035:14;31027:22;;30924:132;;;:::o;31062:108::-;31139:24;31157:5;31139:24;:::i;:::-;31134:3;31127:37;31062:108;;:::o;31176:179::-;31245:10;31266:46;31308:3;31300:6;31266:46;:::i;:::-;31344:4;31339:3;31335:14;31321:28;;31176:179;;;;:::o;31361:113::-;31431:4;31463;31458:3;31454:14;31446:22;;31361:113;;;:::o;31510:732::-;31629:3;31658:54;31706:5;31658:54;:::i;:::-;31728:86;31807:6;31802:3;31728:86;:::i;:::-;31721:93;;31838:56;31888:5;31838:56;:::i;:::-;31917:7;31948:1;31933:284;31958:6;31955:1;31952:13;31933:284;;;32034:6;32028:13;32061:63;32120:3;32105:13;32061:63;:::i;:::-;32054:70;;32147:60;32200:6;32147:60;:::i;:::-;32137:70;;31993:224;31980:1;31977;31973:9;31968:14;;31933:284;;;31937:14;32233:3;32226:10;;31634:608;;;31510:732;;;;:::o;32248:831::-;32511:4;32549:3;32538:9;32534:19;32526:27;;32563:71;32631:1;32620:9;32616:17;32607:6;32563:71;:::i;:::-;32644:80;32720:2;32709:9;32705:18;32696:6;32644:80;:::i;:::-;32771:9;32765:4;32761:20;32756:2;32745:9;32741:18;32734:48;32799:108;32902:4;32893:6;32799:108;:::i;:::-;32791:116;;32917:72;32985:2;32974:9;32970:18;32961:6;32917:72;:::i;:::-;32999:73;33067:3;33056:9;33052:19;33043:6;32999:73;:::i;:::-;32248:831;;;;;;;;:::o

Swarm Source

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