ETH Price: $3,365.50 (-3.48%)

Token

PEACOCKCOIN (PEKC)
 

Overview

Max Total Supply

100,000,000,000,000,000 PEKC

Holders

717 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,465,675,882.816858225 PEKC

Value
$0.00
0x9299ecb4e1169e7459915bb5bebf46a773d9af1f
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Peacockcoin is a deflationary yield token on Binance Smart Chain and Ethereum with multi-dimensional NFTs. Peacockcoin facilitate influencers, pioneering contemporary, digital, and cryptonative artists's work. Peacockcoin project develop farm featuring works of a wide variety of artists.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PEKC

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

/*

 Welcome To PEACOCKCOIN.FINANCE
 Peacockcoin is a deflationary yield token on two blockchains : Ethereum and  Binance Smart Chain with multi-dimensional NFTs.

 Join us on telegram : https://t.me/peacockcoin
 
 PeacockCoin is built upon the fundamentals of Buyback and increasing the investor's value
    
 Main features are
    
 1) 2% tax is collected and distributed to holders for HOLDING
 2) 6% buyback and marketing tax is collected : 3% of it is sent for marketing fund and other 3% is used to buyback the tokens

*/


// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.4;

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

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


interface IERC20 {

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

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;
    }
    
    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 PEKC is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable public marketingAddress = payable(0x9Cc2AB4722fa5E1fca86f3AF34Ea08417A3bEeF4); // Marketing Address
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    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 = 100000000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "PEACOCKCOIN";
    string private _symbol = "PEKC";
    uint8 private _decimals = 9;


    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 6;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public marketingDivisor = 3; // 2 Marketing + 1 Dev
    
    uint256 public _maxTxAmount = 500000000 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 200000 * 10**6 * 10**9; 
    uint256 private buyBackUpperLimit = 1 * 10**18;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public buyBackEnabled = true;

    
    event RewardLiquidityProviders(uint256 tokenAmount);
    event BuyBackEnabledUpdated(bool enabled);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    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;
        
        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 totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }
    
    function buyBackUpperLimitAmount() public view returns (uint256) {
        return buyBackUpperLimit;
    }
    
    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 reflectionFromToken(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 tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {

        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapTokens(contractTokenBalance);    
            }
	        uint256 balance = address(this).balance;
            if (buyBackEnabled && balance > uint256(1 * 10**18)) {
                
                if (balance > buyBackUpperLimit)
                    balance = buyBackUpperLimit;
                
                buyBackTokens(balance.div(100));
            }
        }
        
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
       
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(contractTokenBalance);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);

        //Send to Marketing address
        transferToAddressETH(marketingAddress, transferredBalance.div(_liquidityFee).mul(marketingDivisor));
        
    }
    

    function buyBackTokens(uint256 amount) private lockTheSwap {
    	if (amount > 0) {
    	    swapETHForTokens(amount);
	    }
    }
    
    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
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }
    
    function swapETHForTokens(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

      // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0, // accept any amount of Tokens
            path,
            deadAddress, // Burn address
            block.timestamp.add(300)
        );
        
        emit SwapETHForTokens(amount, path);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    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]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

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

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

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

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

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

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

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

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _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 calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    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 setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
    
    function setMarketingDivisor(uint256 divisor) external onlyOwner() {
        marketingDivisor = divisor;
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }
    
     function setBuybackUpperLimit(uint256 buyBackLimit) external onlyOwner() {
        buyBackUpperLimit = buyBackLimit * 10**18;
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner() {
        marketingAddress = payable(_marketingAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function setBuyBackEnabled(bool _enabled) public onlyOwner {
        buyBackEnabled = _enabled;
        emit BuyBackEnabledUpdated(_enabled);
    }
    
    function transferToAddressETH(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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":[],"name":"_liquidityFee","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":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","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":"account","type":"address"}],"name":"includeInReward","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":"account","type":"address"}],"name":"isExcludedFromReward","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":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMarketingDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","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":[],"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":"tokenFromReflection","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":"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"}]

60e0604052739cc2ab4722fa5e1fca86f3af34ea08417a3beef4600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506a52b7d2dcc80cd2e4000000600a55600a54600019620000b29190620008a0565b600019620000c19190620007f1565b600b556040518060400160405280600b81526020017f504541434f434b434f494e000000000000000000000000000000000000000000815250600d90805190602001906200011192919062000692565b506040518060400160405280600481526020017f50454b4300000000000000000000000000000000000000000000000000000000815250600e90805190602001906200015f92919062000692565b506009600f60006101000a81548160ff021916908360ff1602179055506002601055601054601155600660125560125460135560036014556969e10de76676d0800000601555680ad78ebc5ac6200000601655670de0b6b3a76400006017556000601860016101000a81548160ff0219169083151502179055506001601860026101000a81548160ff0219169083151502179055503480156200020157600080fd5b506000620002146200066160201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b5460046000620002c96200066160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036757600080fd5b505afa1580156200037c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a2919062000759565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200040557600080fd5b505afa1580156200041a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000440919062000759565b6040518363ffffffff1660e01b81526004016200045f929190620007a7565b602060405180830381600087803b1580156200047a57600080fd5b505af11580156200048f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b5919062000759565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160076000620005386200066960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005f16200066160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620006529190620007d4565b60405180910390a3506200097f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006a0906200086a565b90600052602060002090601f016020900481019282620006c4576000855562000710565b82601f10620006df57805160ff191683800117855562000710565b8280016001018555821562000710579182015b828111156200070f578251825591602001919060010190620006f2565b5b5090506200071f919062000723565b5090565b5b808211156200073e57600081600090555060010162000724565b5090565b600081519050620007538162000965565b92915050565b6000602082840312156200076c57600080fd5b60006200077c8482850162000742565b91505092915050565b62000790816200082c565b82525050565b620007a18162000860565b82525050565b6000604082019050620007be600083018562000785565b620007cd602083018462000785565b9392505050565b6000602082019050620007eb600083018462000796565b92915050565b6000620007fe8262000860565b91506200080b8362000860565b925082821015620008215762000820620008d8565b5b828203905092915050565b6000620008398262000840565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200088357607f821691505b602082108114156200089a576200089962000936565b5b50919050565b6000620008ad8262000860565b9150620008ba8362000860565b925082620008cd57620008cc62000907565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b62000970816200082c565b81146200097c57600080fd5b50565b60805160601c60a05160601c60c05160601c615e03620009e9600039600081816116fa0152612ea8015260008181610cd201528181613ae101528181613bf701528181613c1e01528181613e290152613fb0015260008181610dd90152613ff00152615e036000f3fe6080604052600436106102b25760003560e01c80636bc87c3a11610175578063a5ece941116100dc578063d6b513cf11610095578063ea2f0b371161006f578063ea2f0b3714610ad3578063ec28438a14610afc578063f0f165af14610b25578063f2fde38b14610b4e576102b9565b8063d6b513cf14610a42578063dd46706414610a6d578063dd62ed3e14610a96576102b9565b8063a5ece94114610946578063a69df4b514610971578063a9059cbb14610988578063b0cb81f1146109c5578063bdc653ef146109ee578063c49b9a8014610a19576102b9565b80638da5cb5b1161012e5780638da5cb5b146108365780638ee88c5314610861578063906e9dd01461088a57806395d89b41146108b3578063a073d37f146108de578063a457c2d714610909576102b9565b80636bc87c3a1461072657806370a0823114610751578063715018a61461078e5780637d1db4a5146107a557806382d2a4bb146107d057806388f82020146107f9576102b9565b806339509351116102195780634a74bb02116101d25780634a74bb021461061457806352390c021461063f5780635342acb414610668578063557ed1ba146106a5578063602bc62b146106d05780636053a0e3146106fb576102b9565b806339509351146104f25780633b124fe71461052f5780633bd5d1731461055a578063437823ec146105835780634549b039146105ac57806349bd5a5e146105e9576102b9565b806323b872dd1161026b57806323b872dd146103d057806327c8f8351461040d57806329370cc6146104385780632d83811914610461578063313ce5671461049e5780633685d419146104c9576102b9565b8063061c82d0146102be57806306fdde03146102e7578063095ea7b31461031257806313114a9d1461034f5780631694505e1461037a57806318160ddd146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190614e60565b610b77565b005b3480156102f357600080fd5b506102fc610c16565b60405161030991906152d4565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190614dfb565b610ca8565b6040516103469190615252565b60405180910390f35b34801561035b57600080fd5b50610364610cc6565b60405161037191906154f6565b60405180910390f35b34801561038657600080fd5b5061038f610cd0565b60405161039c919061526d565b60405180910390f35b3480156103b157600080fd5b506103ba610cf4565b6040516103c791906154f6565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190614dac565b610cfe565b6040516104049190615252565b60405180910390f35b34801561041957600080fd5b50610422610dd7565b60405161042f919061521c565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190614e37565b610dfb565b005b34801561046d57600080fd5b5061048860048036038101906104839190614e60565b610ee4565b60405161049591906154f6565b60405180910390f35b3480156104aa57600080fd5b506104b3610f52565b6040516104c0919061559b565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190614d1e565b610f69565b005b3480156104fe57600080fd5b5061051960048036038101906105149190614dfb565b611350565b6040516105269190615252565b60405180910390f35b34801561053b57600080fd5b50610544611403565b60405161055191906154f6565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190614e60565b611409565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190614d1e565b611584565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190614e89565b611674565b6040516105e091906154f6565b60405180910390f35b3480156105f557600080fd5b506105fe6116f8565b60405161060b919061521c565b60405180910390f35b34801561062057600080fd5b5061062961171c565b6040516106369190615252565b60405180910390f35b34801561064b57600080fd5b5061066660048036038101906106619190614d1e565b61172f565b005b34801561067457600080fd5b5061068f600480360381019061068a9190614d1e565b6119e3565b60405161069c9190615252565b60405180910390f35b3480156106b157600080fd5b506106ba611a39565b6040516106c791906154f6565b60405180910390f35b3480156106dc57600080fd5b506106e5611a41565b6040516106f291906154f6565b60405180910390f35b34801561070757600080fd5b50610710611a4b565b60405161071d9190615252565b60405180910390f35b34801561073257600080fd5b5061073b611a5e565b60405161074891906154f6565b60405180910390f35b34801561075d57600080fd5b5061077860048036038101906107739190614d1e565b611a64565b60405161078591906154f6565b60405180910390f35b34801561079a57600080fd5b506107a3611b4f565b005b3480156107b157600080fd5b506107ba611ca2565b6040516107c791906154f6565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f29190614e60565b611ca8565b005b34801561080557600080fd5b50610820600480360381019061081b9190614d1e565b611d5a565b60405161082d9190615252565b60405180910390f35b34801561084257600080fd5b5061084b611db0565b604051610858919061521c565b60405180910390f35b34801561086d57600080fd5b5061088860048036038101906108839190614e60565b611dd9565b005b34801561089657600080fd5b506108b160048036038101906108ac9190614d1e565b611e78565b005b3480156108bf57600080fd5b506108c8611f51565b6040516108d591906152d4565b60405180910390f35b3480156108ea57600080fd5b506108f3611fe3565b60405161090091906154f6565b60405180910390f35b34801561091557600080fd5b50610930600480360381019061092b9190614dfb565b611fed565b60405161093d9190615252565b60405180910390f35b34801561095257600080fd5b5061095b6120ba565b6040516109689190615237565b60405180910390f35b34801561097d57600080fd5b506109866120e0565b005b34801561099457600080fd5b506109af60048036038101906109aa9190614dfb565b6122b4565b6040516109bc9190615252565b60405180910390f35b3480156109d157600080fd5b506109ec60048036038101906109e79190614e60565b6122d2565b005b3480156109fa57600080fd5b50610a03612371565b604051610a1091906154f6565b60405180910390f35b348015610a2557600080fd5b50610a406004803603810190610a3b9190614e37565b61237b565b005b348015610a4e57600080fd5b50610a57612464565b604051610a6491906154f6565b60405180910390f35b348015610a7957600080fd5b50610a946004803603810190610a8f9190614e60565b61246a565b005b348015610aa257600080fd5b50610abd6004803603810190610ab89190614d70565b612631565b604051610aca91906154f6565b60405180910390f35b348015610adf57600080fd5b50610afa6004803603810190610af59190614d1e565b6126b8565b005b348015610b0857600080fd5b50610b236004803603810190610b1e9190614e60565b6127a8565b005b348015610b3157600080fd5b50610b4c6004803603810190610b479190614e60565b612847565b005b348015610b5a57600080fd5b50610b756004803603810190610b709190614d1e565b6128e6565b005b610b7f612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0390615416565b60405180910390fd5b8060108190555050565b6060600d8054610c25906157f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906157f0565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b5050505050905090565b6000610cbc610cb5612aa8565b8484612ab0565b6001905092915050565b6000600c54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600a54905090565b6000610d0b848484612c7b565b610dcc84610d17612aa8565b610dc785604051806060016040528060288152602001615d8160289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d7d612aa8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130319092919063ffffffff16565b612ab0565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610e03612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8790615416565b60405180910390fd5b80601860026101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c081604051610ed99190615252565b60405180910390a150565b6000600b54821115610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2290615316565b60405180910390fd5b6000610f35613095565b9050610f4a81846130c090919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b610f71612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff590615416565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661108a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108190615396565b60405180910390fd5b60005b60098054905081101561134c578173ffffffffffffffffffffffffffffffffffffffff16600982815481106110eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611339576009600160098054905061114691906156ec565b8154811061117d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600982815481106111e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060098054806112ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561134c565b808061134490615822565b91505061108d565b5050565b60006113f961135d612aa8565b846113f4856006600061136e612aa8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b612ab0565b6001905092915050565b60105481565b6000611413612aa8565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611499906154b6565b60405180910390fd5b60006114ad83613168565b5050505050905061150681600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c490919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061155e81600b546131c490919063ffffffff16565b600b8190555061157983600c5461310a90919063ffffffff16565b600c81905550505050565b61158c612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090615416565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a548311156116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b2906153b6565b60405180910390fd5b816116db5760006116cb84613168565b50505050509050809150506116f2565b60006116e684613168565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601860019054906101000a900460ff1681565b611737612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90615416565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184890615396565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611925576118e1600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee4565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600254905090565b601860029054906101000a900460ff1681565b60125481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aff57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b4a565b611b47600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee4565b90505b919050565b611b57612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90615416565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b611cb0612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3490615416565b60405180910390fd5b670de0b6b3a764000081611d519190615692565b60178190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611de1612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590615416565b60405180910390fd5b8060128190555050565b611e80612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0490615416565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600e8054611f60906157f0565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8c906157f0565b8015611fd95780601f10611fae57610100808354040283529160200191611fd9565b820191906000526020600020905b815481529060010190602001808311611fbc57829003601f168201915b5050505050905090565b6000601654905090565b60006120b0611ffa612aa8565b846120ab85604051806060016040528060258152602001615da96025913960066000612024612aa8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130319092919063ffffffff16565b612ab0565b6001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612170576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612167906154d6565b60405180910390fd5b60025442116121b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ab90615496565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006122c86122c1612aa8565b8484612c7b565b6001905092915050565b6122da612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235e90615416565b60405180910390fd5b8060148190555050565b6000601754905090565b612383612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240790615416565b60405180910390fd5b80601860016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516124599190615252565b60405180910390a150565b60145481565b612472612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f690615416565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426125ad919061560b565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126c0612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490615416565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6127b0612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461283d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283490615416565b60405180910390fd5b8060158190555050565b61284f612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d390615416565b60405180910390fd5b8060168190555050565b6128ee612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290615416565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e290615336565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1790615476565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8790615356565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c6e91906154f6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290615456565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d52906152f6565b60405180910390fd5b60008111612d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9590615436565b60405180910390fd5b612da6611db0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e145750612de4611db0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e5f57601554811115612e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e55906153d6565b60405180910390fd5b5b6000612e6a30611a64565b905060006016548210159050601860009054906101000a900460ff16158015612e9f5750601860019054906101000a900460ff165b8015612ef657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15612f6c578015612f10576016549150612f0f8261320e565b5b6000479050601860029054906101000a900460ff168015612f385750670de0b6b3a764000081115b15612f6a57601754811115612f4d5760175490505b612f69612f646064836130c090919063ffffffff16565b6132c2565b5b505b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130135750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561301d57600090505b6130298686868461330e565b505050505050565b6000838311158290613079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307091906152d4565b60405180910390fd5b506000838561308891906156ec565b9050809150509392505050565b60008060006130a2613565565b915091506130b981836130c090919063ffffffff16565b9250505090565b600061310283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138b0565b905092915050565b6000808284613119919061560b565b90508381101561315e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315590615376565b60405180910390fd5b8091505092915050565b600080600080600080600080600061317f8a613913565b925092509250600080600061319d8d8686613198613095565b61396d565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061320683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613031565b905092915050565b6001601860006101000a81548160ff0219169083151502179055506000479050613237826139f6565b600061324c82476131c490919063ffffffff16565b90506132a2600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661329d60145461328f601254866130c090919063ffffffff16565b613ced90919063ffffffff16565b613d68565b50506000601860006101000a81548160ff02191690831515021790555050565b6001601860006101000a81548160ff02191690831515021790555060008111156132f0576132ef81613db3565b5b6000601860006101000a81548160ff02191690831515021790555050565b8061331c5761331b6140b2565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133bf5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133d4576133cf8484846140f5565b613551565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134775750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561348c57613487848484614355565b613550565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561352e5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135435761353e8484846145b5565b61354f565b61354e8484846148aa565b5b5b5b8061355f5761355e614a75565b5b50505050565b6000806000600b5490506000600a54905060005b600980549050811015613873578260046000600984815481106135c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806136d95750816005600060098481548110613671577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156136f057600b54600a54945094505050506138ac565b6137a66004600060098481548110613731577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846131c490919063ffffffff16565b925061385e60056000600984815481106137e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836131c490919063ffffffff16565b9150808061386b90615822565b915050613579565b5061388b600a54600b546130c090919063ffffffff16565b8210156138a357600b54600a549350935050506138ac565b81819350935050505b9091565b600080831182906138f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ee91906152d4565b60405180910390fd5b50600083856139069190615661565b9050809150509392505050565b60008060008061392285614a89565b9050600061392f86614aba565b905060006139588261394a858a6131c490919063ffffffff16565b6131c490919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806139868589613ced90919063ffffffff16565b9050600061399d8689613ced90919063ffffffff16565b905060006139b48789613ced90919063ffffffff16565b905060006139dd826139cf85876131c490919063ffffffff16565b6131c490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613a39577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613a675781602001602082028036833780820191505090505b5090503081600081518110613aa5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613b4557600080fd5b505afa158015613b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7d9190614d47565b81600181518110613bb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c1c307f000000000000000000000000000000000000000000000000000000000000000084612ab0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c7e959493929190615541565b600060405180830381600087803b158015613c9857600080fd5b505af1158015613cac573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613ce1929190615511565b60405180910390a15050565b600080831415613d005760009050613d62565b60008284613d0e9190615692565b9050828482613d1d9190615661565b14613d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d54906153f6565b60405180910390fd5b809150505b92915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613dae573d6000803e3d6000fd5b505050565b6000600267ffffffffffffffff811115613df6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613e245781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e8d57600080fd5b505afa158015613ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec59190614d47565b81600081518110613eff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110613f74577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000000061402461012c4261310a90919063ffffffff16565b6040518663ffffffff1660e01b81526004016140439493929190615288565b6000604051808303818588803b15801561405c57600080fd5b505af1158015614070573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516140a6929190615511565b60405180910390a15050565b60006010541480156140c657506000601254145b156140d0576140f3565b601054601181905550601254601381905550600060108190555060006012819055505b565b60008060008060008061410787613168565b95509550955095509550955061416587600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c490919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141fa86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061428f85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142db81614aeb565b6142e58483614c90565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161434291906154f6565b60405180910390a3505050505050505050565b60008060008060008061436787613168565b9550955095509550955095506143c586600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061445a83600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ef85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061453b81614aeb565b6145458483614c90565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145a291906154f6565b60405180910390a3505050505050505050565b6000806000806000806145c787613168565b95509550955095509550955061462587600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c490919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146ba86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061474f83600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147e485600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061483081614aeb565b61483a8483614c90565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161489791906154f6565b60405180910390a3505050505050505050565b6000806000806000806148bc87613168565b95509550955095509550955061491a86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149af85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149fb81614aeb565b614a058483614c90565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614a6291906154f6565b60405180910390a3505050505050505050565b601154601081905550601354601281905550565b6000614ab36064614aa560105485613ced90919063ffffffff16565b6130c090919063ffffffff16565b9050919050565b6000614ae46064614ad660125485613ced90919063ffffffff16565b6130c090919063ffffffff16565b9050919050565b6000614af5613095565b90506000614b0c8284613ced90919063ffffffff16565b9050614b6081600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614c8b57614c4783600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614ca582600b546131c490919063ffffffff16565b600b81905550614cc081600c5461310a90919063ffffffff16565b600c819055505050565b600081359050614cd981615d3b565b92915050565b600081519050614cee81615d3b565b92915050565b600081359050614d0381615d52565b92915050565b600081359050614d1881615d69565b92915050565b600060208284031215614d3057600080fd5b6000614d3e84828501614cca565b91505092915050565b600060208284031215614d5957600080fd5b6000614d6784828501614cdf565b91505092915050565b60008060408385031215614d8357600080fd5b6000614d9185828601614cca565b9250506020614da285828601614cca565b9150509250929050565b600080600060608486031215614dc157600080fd5b6000614dcf86828701614cca565b9350506020614de086828701614cca565b9250506040614df186828701614d09565b9150509250925092565b60008060408385031215614e0e57600080fd5b6000614e1c85828601614cca565b9250506020614e2d85828601614d09565b9150509250929050565b600060208284031215614e4957600080fd5b6000614e5784828501614cf4565b91505092915050565b600060208284031215614e7257600080fd5b6000614e8084828501614d09565b91505092915050565b60008060408385031215614e9c57600080fd5b6000614eaa85828601614d09565b9250506020614ebb85828601614cf4565b9150509250929050565b6000614ed18383614eec565b60208301905092915050565b614ee681615732565b82525050565b614ef581615720565b82525050565b614f0481615720565b82525050565b6000614f15826155c6565b614f1f81856155e9565b9350614f2a836155b6565b8060005b83811015614f5b578151614f428882614ec5565b9750614f4d836155dc565b925050600181019050614f2e565b5085935050505092915050565b614f7181615744565b82525050565b614f8081615787565b82525050565b614f8f816157ab565b82525050565b6000614fa0826155d1565b614faa81856155fa565b9350614fba8185602086016157bd565b614fc3816158f8565b840191505092915050565b6000614fdb6023836155fa565b9150614fe682615909565b604082019050919050565b6000614ffe602a836155fa565b915061500982615958565b604082019050919050565b60006150216026836155fa565b915061502c826159a7565b604082019050919050565b60006150446022836155fa565b915061504f826159f6565b604082019050919050565b6000615067601b836155fa565b915061507282615a45565b602082019050919050565b600061508a601b836155fa565b915061509582615a6e565b602082019050919050565b60006150ad601f836155fa565b91506150b882615a97565b602082019050919050565b60006150d06028836155fa565b91506150db82615ac0565b604082019050919050565b60006150f36021836155fa565b91506150fe82615b0f565b604082019050919050565b60006151166020836155fa565b915061512182615b5e565b602082019050919050565b60006151396029836155fa565b915061514482615b87565b604082019050919050565b600061515c6025836155fa565b915061516782615bd6565b604082019050919050565b600061517f6024836155fa565b915061518a82615c25565b604082019050919050565b60006151a2601f836155fa565b91506151ad82615c74565b602082019050919050565b60006151c5602c836155fa565b91506151d082615c9d565b604082019050919050565b60006151e86023836155fa565b91506151f382615cec565b604082019050919050565b61520781615770565b82525050565b6152168161577a565b82525050565b60006020820190506152316000830184614efb565b92915050565b600060208201905061524c6000830184614edd565b92915050565b60006020820190506152676000830184614f68565b92915050565b60006020820190506152826000830184614f77565b92915050565b600060808201905061529d6000830187614f86565b81810360208301526152af8186614f0a565b90506152be6040830185614efb565b6152cb60608301846151fe565b95945050505050565b600060208201905081810360008301526152ee8184614f95565b905092915050565b6000602082019050818103600083015261530f81614fce565b9050919050565b6000602082019050818103600083015261532f81614ff1565b9050919050565b6000602082019050818103600083015261534f81615014565b9050919050565b6000602082019050818103600083015261536f81615037565b9050919050565b6000602082019050818103600083015261538f8161505a565b9050919050565b600060208201905081810360008301526153af8161507d565b9050919050565b600060208201905081810360008301526153cf816150a0565b9050919050565b600060208201905081810360008301526153ef816150c3565b9050919050565b6000602082019050818103600083015261540f816150e6565b9050919050565b6000602082019050818103600083015261542f81615109565b9050919050565b6000602082019050818103600083015261544f8161512c565b9050919050565b6000602082019050818103600083015261546f8161514f565b9050919050565b6000602082019050818103600083015261548f81615172565b9050919050565b600060208201905081810360008301526154af81615195565b9050919050565b600060208201905081810360008301526154cf816151b8565b9050919050565b600060208201905081810360008301526154ef816151db565b9050919050565b600060208201905061550b60008301846151fe565b92915050565b600060408201905061552660008301856151fe565b81810360208301526155388184614f0a565b90509392505050565b600060a08201905061555660008301886151fe565b6155636020830187614f86565b81810360408301526155758186614f0a565b90506155846060830185614efb565b61559160808301846151fe565b9695505050505050565b60006020820190506155b0600083018461520d565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061561682615770565b915061562183615770565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156156565761565561586b565b5b828201905092915050565b600061566c82615770565b915061567783615770565b9250826156875761568661589a565b5b828204905092915050565b600061569d82615770565b91506156a883615770565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156156e1576156e061586b565b5b828202905092915050565b60006156f782615770565b915061570283615770565b9250828210156157155761571461586b565b5b828203905092915050565b600061572b82615750565b9050919050565b600061573d82615750565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061579282615799565b9050919050565b60006157a482615750565b9050919050565b60006157b682615770565b9050919050565b60005b838110156157db5780820151818401526020810190506157c0565b838111156157ea576000848401525b50505050565b6000600282049050600182168061580857607f821691505b6020821081141561581c5761581b6158c9565b5b50919050565b600061582d82615770565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156158605761585f61586b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b615d4481615720565b8114615d4f57600080fd5b50565b615d5b81615744565b8114615d6657600080fd5b50565b615d7281615770565b8114615d7d57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a67efaa20bf52684ace1aebfb3bbea5271f117f68708cb14d61da8db10c851bb64736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80636bc87c3a11610175578063a5ece941116100dc578063d6b513cf11610095578063ea2f0b371161006f578063ea2f0b3714610ad3578063ec28438a14610afc578063f0f165af14610b25578063f2fde38b14610b4e576102b9565b8063d6b513cf14610a42578063dd46706414610a6d578063dd62ed3e14610a96576102b9565b8063a5ece94114610946578063a69df4b514610971578063a9059cbb14610988578063b0cb81f1146109c5578063bdc653ef146109ee578063c49b9a8014610a19576102b9565b80638da5cb5b1161012e5780638da5cb5b146108365780638ee88c5314610861578063906e9dd01461088a57806395d89b41146108b3578063a073d37f146108de578063a457c2d714610909576102b9565b80636bc87c3a1461072657806370a0823114610751578063715018a61461078e5780637d1db4a5146107a557806382d2a4bb146107d057806388f82020146107f9576102b9565b806339509351116102195780634a74bb02116101d25780634a74bb021461061457806352390c021461063f5780635342acb414610668578063557ed1ba146106a5578063602bc62b146106d05780636053a0e3146106fb576102b9565b806339509351146104f25780633b124fe71461052f5780633bd5d1731461055a578063437823ec146105835780634549b039146105ac57806349bd5a5e146105e9576102b9565b806323b872dd1161026b57806323b872dd146103d057806327c8f8351461040d57806329370cc6146104385780632d83811914610461578063313ce5671461049e5780633685d419146104c9576102b9565b8063061c82d0146102be57806306fdde03146102e7578063095ea7b31461031257806313114a9d1461034f5780631694505e1461037a57806318160ddd146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190614e60565b610b77565b005b3480156102f357600080fd5b506102fc610c16565b60405161030991906152d4565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190614dfb565b610ca8565b6040516103469190615252565b60405180910390f35b34801561035b57600080fd5b50610364610cc6565b60405161037191906154f6565b60405180910390f35b34801561038657600080fd5b5061038f610cd0565b60405161039c919061526d565b60405180910390f35b3480156103b157600080fd5b506103ba610cf4565b6040516103c791906154f6565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190614dac565b610cfe565b6040516104049190615252565b60405180910390f35b34801561041957600080fd5b50610422610dd7565b60405161042f919061521c565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190614e37565b610dfb565b005b34801561046d57600080fd5b5061048860048036038101906104839190614e60565b610ee4565b60405161049591906154f6565b60405180910390f35b3480156104aa57600080fd5b506104b3610f52565b6040516104c0919061559b565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190614d1e565b610f69565b005b3480156104fe57600080fd5b5061051960048036038101906105149190614dfb565b611350565b6040516105269190615252565b60405180910390f35b34801561053b57600080fd5b50610544611403565b60405161055191906154f6565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190614e60565b611409565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190614d1e565b611584565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190614e89565b611674565b6040516105e091906154f6565b60405180910390f35b3480156105f557600080fd5b506105fe6116f8565b60405161060b919061521c565b60405180910390f35b34801561062057600080fd5b5061062961171c565b6040516106369190615252565b60405180910390f35b34801561064b57600080fd5b5061066660048036038101906106619190614d1e565b61172f565b005b34801561067457600080fd5b5061068f600480360381019061068a9190614d1e565b6119e3565b60405161069c9190615252565b60405180910390f35b3480156106b157600080fd5b506106ba611a39565b6040516106c791906154f6565b60405180910390f35b3480156106dc57600080fd5b506106e5611a41565b6040516106f291906154f6565b60405180910390f35b34801561070757600080fd5b50610710611a4b565b60405161071d9190615252565b60405180910390f35b34801561073257600080fd5b5061073b611a5e565b60405161074891906154f6565b60405180910390f35b34801561075d57600080fd5b5061077860048036038101906107739190614d1e565b611a64565b60405161078591906154f6565b60405180910390f35b34801561079a57600080fd5b506107a3611b4f565b005b3480156107b157600080fd5b506107ba611ca2565b6040516107c791906154f6565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f29190614e60565b611ca8565b005b34801561080557600080fd5b50610820600480360381019061081b9190614d1e565b611d5a565b60405161082d9190615252565b60405180910390f35b34801561084257600080fd5b5061084b611db0565b604051610858919061521c565b60405180910390f35b34801561086d57600080fd5b5061088860048036038101906108839190614e60565b611dd9565b005b34801561089657600080fd5b506108b160048036038101906108ac9190614d1e565b611e78565b005b3480156108bf57600080fd5b506108c8611f51565b6040516108d591906152d4565b60405180910390f35b3480156108ea57600080fd5b506108f3611fe3565b60405161090091906154f6565b60405180910390f35b34801561091557600080fd5b50610930600480360381019061092b9190614dfb565b611fed565b60405161093d9190615252565b60405180910390f35b34801561095257600080fd5b5061095b6120ba565b6040516109689190615237565b60405180910390f35b34801561097d57600080fd5b506109866120e0565b005b34801561099457600080fd5b506109af60048036038101906109aa9190614dfb565b6122b4565b6040516109bc9190615252565b60405180910390f35b3480156109d157600080fd5b506109ec60048036038101906109e79190614e60565b6122d2565b005b3480156109fa57600080fd5b50610a03612371565b604051610a1091906154f6565b60405180910390f35b348015610a2557600080fd5b50610a406004803603810190610a3b9190614e37565b61237b565b005b348015610a4e57600080fd5b50610a57612464565b604051610a6491906154f6565b60405180910390f35b348015610a7957600080fd5b50610a946004803603810190610a8f9190614e60565b61246a565b005b348015610aa257600080fd5b50610abd6004803603810190610ab89190614d70565b612631565b604051610aca91906154f6565b60405180910390f35b348015610adf57600080fd5b50610afa6004803603810190610af59190614d1e565b6126b8565b005b348015610b0857600080fd5b50610b236004803603810190610b1e9190614e60565b6127a8565b005b348015610b3157600080fd5b50610b4c6004803603810190610b479190614e60565b612847565b005b348015610b5a57600080fd5b50610b756004803603810190610b709190614d1e565b6128e6565b005b610b7f612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0390615416565b60405180910390fd5b8060108190555050565b6060600d8054610c25906157f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c51906157f0565b8015610c9e5780601f10610c7357610100808354040283529160200191610c9e565b820191906000526020600020905b815481529060010190602001808311610c8157829003601f168201915b5050505050905090565b6000610cbc610cb5612aa8565b8484612ab0565b6001905092915050565b6000600c54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600a54905090565b6000610d0b848484612c7b565b610dcc84610d17612aa8565b610dc785604051806060016040528060288152602001615d8160289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d7d612aa8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130319092919063ffffffff16565b612ab0565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b610e03612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8790615416565b60405180910390fd5b80601860026101000a81548160ff0219169083151502179055507f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c081604051610ed99190615252565b60405180910390a150565b6000600b54821115610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2290615316565b60405180910390fd5b6000610f35613095565b9050610f4a81846130c090919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b610f71612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff590615416565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661108a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108190615396565b60405180910390fd5b60005b60098054905081101561134c578173ffffffffffffffffffffffffffffffffffffffff16600982815481106110eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611339576009600160098054905061114691906156ec565b8154811061117d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600982815481106111e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060098054806112ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561134c565b808061134490615822565b91505061108d565b5050565b60006113f961135d612aa8565b846113f4856006600061136e612aa8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b612ab0565b6001905092915050565b60105481565b6000611413612aa8565b9050600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611499906154b6565b60405180910390fd5b60006114ad83613168565b5050505050905061150681600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c490919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061155e81600b546131c490919063ffffffff16565b600b8190555061157983600c5461310a90919063ffffffff16565b600c81905550505050565b61158c612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090615416565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a548311156116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b2906153b6565b60405180910390fd5b816116db5760006116cb84613168565b50505050509050809150506116f2565b60006116e684613168565b50505050915050809150505b92915050565b7f0000000000000000000000009a6ef76504b719bc11b29ef1b9f0e82f64582f7681565b601860019054906101000a900460ff1681565b611737612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90615416565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184890615396565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611925576118e1600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee4565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600042905090565b6000600254905090565b601860029054906101000a900460ff1681565b60125481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611aff57600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b4a565b611b47600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee4565b90505b919050565b611b57612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdb90615416565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60155481565b611cb0612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3490615416565b60405180910390fd5b670de0b6b3a764000081611d519190615692565b60178190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611de1612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6590615416565b60405180910390fd5b8060128190555050565b611e80612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0490615416565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600e8054611f60906157f0565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8c906157f0565b8015611fd95780601f10611fae57610100808354040283529160200191611fd9565b820191906000526020600020905b815481529060010190602001808311611fbc57829003601f168201915b5050505050905090565b6000601654905090565b60006120b0611ffa612aa8565b846120ab85604051806060016040528060258152602001615da96025913960066000612024612aa8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130319092919063ffffffff16565b612ab0565b6001905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612170576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612167906154d6565b60405180910390fd5b60025442116121b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ab90615496565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006122c86122c1612aa8565b8484612c7b565b6001905092915050565b6122da612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235e90615416565b60405180910390fd5b8060148190555050565b6000601754905090565b612383612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240790615416565b60405180910390fd5b80601860016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516124599190615252565b60405180910390a150565b60145481565b612472612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f690615416565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426125ad919061560b565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126c0612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490615416565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6127b0612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461283d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283490615416565b60405180910390fd5b8060158190555050565b61284f612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d390615416565b60405180910390fd5b8060168190555050565b6128ee612aa8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290615416565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e290615336565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1790615476565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8790615356565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c6e91906154f6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce290615456565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d52906152f6565b60405180910390fd5b60008111612d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9590615436565b60405180910390fd5b612da6611db0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e145750612de4611db0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e5f57601554811115612e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e55906153d6565b60405180910390fd5b5b6000612e6a30611a64565b905060006016548210159050601860009054906101000a900460ff16158015612e9f5750601860019054906101000a900460ff165b8015612ef657507f0000000000000000000000009a6ef76504b719bc11b29ef1b9f0e82f64582f7673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15612f6c578015612f10576016549150612f0f8261320e565b5b6000479050601860029054906101000a900460ff168015612f385750670de0b6b3a764000081115b15612f6a57601754811115612f4d5760175490505b612f69612f646064836130c090919063ffffffff16565b6132c2565b5b505b600060019050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130135750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561301d57600090505b6130298686868461330e565b505050505050565b6000838311158290613079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307091906152d4565b60405180910390fd5b506000838561308891906156ec565b9050809150509392505050565b60008060006130a2613565565b915091506130b981836130c090919063ffffffff16565b9250505090565b600061310283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138b0565b905092915050565b6000808284613119919061560b565b90508381101561315e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315590615376565b60405180910390fd5b8091505092915050565b600080600080600080600080600061317f8a613913565b925092509250600080600061319d8d8686613198613095565b61396d565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061320683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613031565b905092915050565b6001601860006101000a81548160ff0219169083151502179055506000479050613237826139f6565b600061324c82476131c490919063ffffffff16565b90506132a2600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661329d60145461328f601254866130c090919063ffffffff16565b613ced90919063ffffffff16565b613d68565b50506000601860006101000a81548160ff02191690831515021790555050565b6001601860006101000a81548160ff02191690831515021790555060008111156132f0576132ef81613db3565b5b6000601860006101000a81548160ff02191690831515021790555050565b8061331c5761331b6140b2565b5b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133bf5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133d4576133cf8484846140f5565b613551565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134775750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561348c57613487848484614355565b613550565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561352e5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135435761353e8484846145b5565b61354f565b61354e8484846148aa565b5b5b5b8061355f5761355e614a75565b5b50505050565b6000806000600b5490506000600a54905060005b600980549050811015613873578260046000600984815481106135c5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806136d95750816005600060098481548110613671577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156136f057600b54600a54945094505050506138ac565b6137a66004600060098481548110613731577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846131c490919063ffffffff16565b925061385e60056000600984815481106137e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836131c490919063ffffffff16565b9150808061386b90615822565b915050613579565b5061388b600a54600b546130c090919063ffffffff16565b8210156138a357600b54600a549350935050506138ac565b81819350935050505b9091565b600080831182906138f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138ee91906152d4565b60405180910390fd5b50600083856139069190615661565b9050809150509392505050565b60008060008061392285614a89565b9050600061392f86614aba565b905060006139588261394a858a6131c490919063ffffffff16565b6131c490919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806139868589613ced90919063ffffffff16565b9050600061399d8689613ced90919063ffffffff16565b905060006139b48789613ced90919063ffffffff16565b905060006139dd826139cf85876131c490919063ffffffff16565b6131c490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613a39577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613a675781602001602082028036833780820191505090505b5090503081600081518110613aa5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613b4557600080fd5b505afa158015613b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7d9190614d47565b81600181518110613bb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c1c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612ab0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613c7e959493929190615541565b600060405180830381600087803b158015613c9857600080fd5b505af1158015613cac573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613ce1929190615511565b60405180910390a15050565b600080831415613d005760009050613d62565b60008284613d0e9190615692565b9050828482613d1d9190615661565b14613d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d54906153f6565b60405180910390fd5b809150505b92915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613dae573d6000803e3d6000fd5b505050565b6000600267ffffffffffffffff811115613df6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613e245781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e8d57600080fd5b505afa158015613ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec59190614d47565b81600081518110613eff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110613f74577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de95836000847f000000000000000000000000000000000000000000000000000000000000dead61402461012c4261310a90919063ffffffff16565b6040518663ffffffff1660e01b81526004016140439493929190615288565b6000604051808303818588803b15801561405c57600080fd5b505af1158015614070573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a962482826040516140a6929190615511565b60405180910390a15050565b60006010541480156140c657506000601254145b156140d0576140f3565b601054601181905550601254601381905550600060108190555060006012819055505b565b60008060008060008061410787613168565b95509550955095509550955061416587600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c490919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141fa86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061428f85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142db81614aeb565b6142e58483614c90565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161434291906154f6565b60405180910390a3505050505050505050565b60008060008060008061436787613168565b9550955095509550955095506143c586600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061445a83600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ef85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061453b81614aeb565b6145458483614c90565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145a291906154f6565b60405180910390a3505050505050505050565b6000806000806000806145c787613168565b95509550955095509550955061462587600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c490919063ffffffff16565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146ba86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061474f83600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147e485600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061483081614aeb565b61483a8483614c90565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161489791906154f6565b60405180910390a3505050505050505050565b6000806000806000806148bc87613168565b95509550955095509550955061491a86600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131c490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149af85600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506149fb81614aeb565b614a058483614c90565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614a6291906154f6565b60405180910390a3505050505050505050565b601154601081905550601354601281905550565b6000614ab36064614aa560105485613ced90919063ffffffff16565b6130c090919063ffffffff16565b9050919050565b6000614ae46064614ad660125485613ced90919063ffffffff16565b6130c090919063ffffffff16565b9050919050565b6000614af5613095565b90506000614b0c8284613ced90919063ffffffff16565b9050614b6081600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614c8b57614c4783600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461310a90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614ca582600b546131c490919063ffffffff16565b600b81905550614cc081600c5461310a90919063ffffffff16565b600c819055505050565b600081359050614cd981615d3b565b92915050565b600081519050614cee81615d3b565b92915050565b600081359050614d0381615d52565b92915050565b600081359050614d1881615d69565b92915050565b600060208284031215614d3057600080fd5b6000614d3e84828501614cca565b91505092915050565b600060208284031215614d5957600080fd5b6000614d6784828501614cdf565b91505092915050565b60008060408385031215614d8357600080fd5b6000614d9185828601614cca565b9250506020614da285828601614cca565b9150509250929050565b600080600060608486031215614dc157600080fd5b6000614dcf86828701614cca565b9350506020614de086828701614cca565b9250506040614df186828701614d09565b9150509250925092565b60008060408385031215614e0e57600080fd5b6000614e1c85828601614cca565b9250506020614e2d85828601614d09565b9150509250929050565b600060208284031215614e4957600080fd5b6000614e5784828501614cf4565b91505092915050565b600060208284031215614e7257600080fd5b6000614e8084828501614d09565b91505092915050565b60008060408385031215614e9c57600080fd5b6000614eaa85828601614d09565b9250506020614ebb85828601614cf4565b9150509250929050565b6000614ed18383614eec565b60208301905092915050565b614ee681615732565b82525050565b614ef581615720565b82525050565b614f0481615720565b82525050565b6000614f15826155c6565b614f1f81856155e9565b9350614f2a836155b6565b8060005b83811015614f5b578151614f428882614ec5565b9750614f4d836155dc565b925050600181019050614f2e565b5085935050505092915050565b614f7181615744565b82525050565b614f8081615787565b82525050565b614f8f816157ab565b82525050565b6000614fa0826155d1565b614faa81856155fa565b9350614fba8185602086016157bd565b614fc3816158f8565b840191505092915050565b6000614fdb6023836155fa565b9150614fe682615909565b604082019050919050565b6000614ffe602a836155fa565b915061500982615958565b604082019050919050565b60006150216026836155fa565b915061502c826159a7565b604082019050919050565b60006150446022836155fa565b915061504f826159f6565b604082019050919050565b6000615067601b836155fa565b915061507282615a45565b602082019050919050565b600061508a601b836155fa565b915061509582615a6e565b602082019050919050565b60006150ad601f836155fa565b91506150b882615a97565b602082019050919050565b60006150d06028836155fa565b91506150db82615ac0565b604082019050919050565b60006150f36021836155fa565b91506150fe82615b0f565b604082019050919050565b60006151166020836155fa565b915061512182615b5e565b602082019050919050565b60006151396029836155fa565b915061514482615b87565b604082019050919050565b600061515c6025836155fa565b915061516782615bd6565b604082019050919050565b600061517f6024836155fa565b915061518a82615c25565b604082019050919050565b60006151a2601f836155fa565b91506151ad82615c74565b602082019050919050565b60006151c5602c836155fa565b91506151d082615c9d565b604082019050919050565b60006151e86023836155fa565b91506151f382615cec565b604082019050919050565b61520781615770565b82525050565b6152168161577a565b82525050565b60006020820190506152316000830184614efb565b92915050565b600060208201905061524c6000830184614edd565b92915050565b60006020820190506152676000830184614f68565b92915050565b60006020820190506152826000830184614f77565b92915050565b600060808201905061529d6000830187614f86565b81810360208301526152af8186614f0a565b90506152be6040830185614efb565b6152cb60608301846151fe565b95945050505050565b600060208201905081810360008301526152ee8184614f95565b905092915050565b6000602082019050818103600083015261530f81614fce565b9050919050565b6000602082019050818103600083015261532f81614ff1565b9050919050565b6000602082019050818103600083015261534f81615014565b9050919050565b6000602082019050818103600083015261536f81615037565b9050919050565b6000602082019050818103600083015261538f8161505a565b9050919050565b600060208201905081810360008301526153af8161507d565b9050919050565b600060208201905081810360008301526153cf816150a0565b9050919050565b600060208201905081810360008301526153ef816150c3565b9050919050565b6000602082019050818103600083015261540f816150e6565b9050919050565b6000602082019050818103600083015261542f81615109565b9050919050565b6000602082019050818103600083015261544f8161512c565b9050919050565b6000602082019050818103600083015261546f8161514f565b9050919050565b6000602082019050818103600083015261548f81615172565b9050919050565b600060208201905081810360008301526154af81615195565b9050919050565b600060208201905081810360008301526154cf816151b8565b9050919050565b600060208201905081810360008301526154ef816151db565b9050919050565b600060208201905061550b60008301846151fe565b92915050565b600060408201905061552660008301856151fe565b81810360208301526155388184614f0a565b90509392505050565b600060a08201905061555660008301886151fe565b6155636020830187614f86565b81810360408301526155758186614f0a565b90506155846060830185614efb565b61559160808301846151fe565b9695505050505050565b60006020820190506155b0600083018461520d565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061561682615770565b915061562183615770565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156156565761565561586b565b5b828201905092915050565b600061566c82615770565b915061567783615770565b9250826156875761568661589a565b5b828204905092915050565b600061569d82615770565b91506156a883615770565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156156e1576156e061586b565b5b828202905092915050565b60006156f782615770565b915061570283615770565b9250828210156157155761571461586b565b5b828203905092915050565b600061572b82615750565b9050919050565b600061573d82615750565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061579282615799565b9050919050565b60006157a482615750565b9050919050565b60006157b682615770565b9050919050565b60005b838110156157db5780820151818401526020810190506157c0565b838111156157ea576000848401525b50505050565b6000600282049050600182168061580857607f821691505b6020821081141561581c5761581b6158c9565b5b50919050565b600061582d82615770565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156158605761585f61586b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b615d4481615720565b8114615d4f57600080fd5b50565b615d5b81615744565b8114615d6657600080fd5b50565b615d7281615770565b8114615d7d57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a67efaa20bf52684ace1aebfb3bbea5271f117f68708cb14d61da8db10c851bb64736f6c63430008040033

Deployed Bytecode Sourcemap

15698:19568:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33738:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18529:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19441:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20562:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17131:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18806:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19610:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15939:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34877:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21746:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18715:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22350:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19931:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16679:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20913:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33493:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21302:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17189:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17268:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22007:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33358:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7088:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6986;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17316:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16766:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18909:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6578:148;;;;;;;;;;;;;:::i;:::-;;16942:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34404:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20434:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6353:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33848:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34545:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18620:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20661:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20157:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15818:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7424:305;;;;;;;;;;;;;:::i;:::-;;19115:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34105:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20793:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34694:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16871:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7186:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19290:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33616:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33982:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34225:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6734:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33738:98;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33822:6:::1;33812:7;:16;;;;33738:98:::0;:::o;18529:83::-;18566:13;18599:5;18592:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18529:83;:::o;19441:161::-;19516:4;19533:39;19542:12;:10;:12::i;:::-;19556:7;19565:6;19533:8;:39::i;:::-;19590:4;19583:11;;19441:161;;;;:::o;20562:87::-;20604:7;20631:10;;20624:17;;20562:87;:::o;17131:51::-;;;:::o;18806:95::-;18859:7;18886;;18879:14;;18806:95;:::o;19610:313::-;19708:4;19725:36;19735:6;19743:9;19754:6;19725:9;:36::i;:::-;19772:121;19781:6;19789:12;:10;:12::i;:::-;19803:89;19841:6;19803:89;;;;;;;;;;;;;;;;;:11;:19;19815:6;19803:19;;;;;;;;;;;;;;;:33;19823:12;:10;:12::i;:::-;19803:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;19772:8;:121::i;:::-;19911:4;19904:11;;19610:313;;;;;:::o;15939:81::-;;;:::o;34877:150::-;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34964:8:::1;34947:14;;:25;;;;;;;;;;;;;;;;;;34988:31;35010:8;34988:31;;;;;;:::i;:::-;;;;;;;;34877:150:::0;:::o;21746:253::-;21812:7;21851;;21840;:18;;21832:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21916:19;21939:10;:8;:10::i;:::-;21916:33;;21967:24;21979:11;21967:7;:11;;:24;;;;:::i;:::-;21960:31;;;21746:253;;;:::o;18715:83::-;18756:5;18781:9;;;;;;;;;;;18774:16;;18715:83;:::o;22350:479::-;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22432:11:::1;:20;22444:7;22432:20;;;;;;;;;;;;;;;;;;;;;;;;;22424:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22500:9;22495:327;22519:9;:16;;;;22515:1;:20;22495:327;;;22577:7;22561:23;;:9;22571:1;22561:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;22557:254;;;22620:9;22649:1;22630:9;:16;;;;:20;;;;:::i;:::-;22620:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22605:9;22615:1;22605:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22689:1;22670:7;:16;22678:7;22670:16;;;;;;;;;;;;;;;:20;;;;22732:5;22709:11;:20;22721:7;22709:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22756:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22790:5;;22557:254;22537:3;;;;;:::i;:::-;;;;22495:327;;;;22350:479:::0;:::o;19931:218::-;20019:4;20036:83;20045:12;:10;:12::i;:::-;20059:7;20068:50;20107:10;20068:11;:25;20080:12;:10;:12::i;:::-;20068:25;;;;;;;;;;;;;;;:34;20094:7;20068:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20036:8;:83::i;:::-;20137:4;20130:11;;19931:218;;;;:::o;16679:26::-;;;;:::o;20913:377::-;20965:14;20982:12;:10;:12::i;:::-;20965:29;;21014:11;:19;21026:6;21014:19;;;;;;;;;;;;;;;;;;;;;;;;;21013:20;21005:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21094:15;21118:19;21129:7;21118:10;:19::i;:::-;21093:44;;;;;;;21166:28;21186:7;21166;:15;21174:6;21166:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21148:7;:15;21156:6;21148:15;;;;;;;;;;;;;;;:46;;;;21215:20;21227:7;21215;;:11;;:20;;;;:::i;:::-;21205:7;:30;;;;21259:23;21274:7;21259:10;;:14;;:23;;;;:::i;:::-;21246:10;:36;;;;20913:377;;;:::o;33493:111::-;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33592:4:::1;33562:18;:27;33581:7;33562:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33493:111:::0;:::o;21302:436::-;21392:7;21431;;21420;:18;;21412:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21490:17;21485:246;;21525:15;21549:19;21560:7;21549:10;:19::i;:::-;21524:44;;;;;;;21590:7;21583:14;;;;;21485:246;21632:23;21663:19;21674:7;21663:10;:19::i;:::-;21630:52;;;;;;;21704:15;21697:22;;;21302:436;;;;;:::o;17189:38::-;;;:::o;17268:41::-;;;;;;;;;;;;;:::o;22007:335::-;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22092:11:::1;:20;22104:7;22092:20;;;;;;;;;;;;;;;;;;;;;;;;;22091:21;22083:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22177:1;22158:7;:16;22166:7;22158:16;;;;;;;;;;;;;;;;:20;22155:108;;;22214:37;22234:7;:16;22242:7;22234:16;;;;;;;;;;;;;;;;22214:19;:37::i;:::-;22195:7;:16;22203:7;22195:16;;;;;;;;;;;;;;;:56;;;;22155:108;22296:4;22273:11;:20;22285:7;22273:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;22311:9;22326:7;22311:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22007:335:::0;:::o;33358:123::-;33422:4;33446:18;:27;33465:7;33446:27;;;;;;;;;;;;;;;;;;;;;;;;;33439:34;;33358:123;;;:::o;7088:90::-;7128:7;7155:15;7148:22;;7088:90;:::o;6986:::-;7032:7;7059:9;;7052:16;;6986:90;:::o;17316:33::-;;;;;;;;;;;;;:::o;16766:32::-;;;;:::o;18909:198::-;18975:7;18999:11;:20;19011:7;18999:20;;;;;;;;;;;;;;;;;;;;;;;;;18995:49;;;19028:7;:16;19036:7;19028:16;;;;;;;;;;;;;;;;19021:23;;;;18995:49;19062:37;19082:7;:16;19090:7;19082:16;;;;;;;;;;;;;;;;19062:19;:37::i;:::-;19055:44;;18909:198;;;;:::o;6578:148::-;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6685:1:::1;6648:40;;6669:6;::::0;::::1;;;;;;;;6648:40;;;;;;;;;;;;6716:1;6699:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6578:148::o:0;16942:55::-;;;;:::o;34404:133::-;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34523:6:::1;34508:12;:21;;;;:::i;:::-;34488:17;:41;;;;34404:133:::0;:::o;20434:120::-;20502:4;20526:11;:20;20538:7;20526:20;;;;;;;;;;;;;;;;;;;;;;;;;20519:27;;20434:120;;;:::o;6353:79::-;6391:7;6418:6;;;;;;;;;;;6411:13;;6353:79;:::o;33848:122::-;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33950:12:::1;33934:13;:28;;;;33848:122:::0;:::o;34545:141::-;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34660:17:::1;34633:16;;:45;;;;;;;;;;;;;;;;;;34545:141:::0;:::o;18620:87::-;18659:13;18692:7;18685:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18620:87;:::o;20661:120::-;20723:7;20750:23;;20743:30;;20661:120;:::o;20157:269::-;20250:4;20267:129;20276:12;:10;:12::i;:::-;20290:7;20299:96;20338:15;20299:96;;;;;;;;;;;;;;;;;:11;:25;20311:12;:10;:12::i;:::-;20299:25;;;;;;;;;;;;;;;:34;20325:7;20299:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;20267:8;:129::i;:::-;20414:4;20407:11;;20157:269;;;;:::o;15818:93::-;;;;;;;;;;;;;:::o;7424:305::-;7494:10;7476:28;;:14;;;;;;;;;;;:28;;;7468:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7581:9;;7563:15;:27;7555:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7672:14;;;;;;;;;;;7643:44;;7664:6;;;;;;;;;;7643:44;;;;;;;;;;;;7707:14;;;;;;;;;;;7698:6;;:23;;;;;;;;;;;;;;;;;;7424:305::o;19115:167::-;19193:4;19210:42;19220:12;:10;:12::i;:::-;19234:9;19245:6;19210:9;:42::i;:::-;19270:4;19263:11;;19115:167;;;;:::o;34105:112::-;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34202:7:::1;34183:16;:26;;;;34105:112:::0;:::o;20793:108::-;20849:7;20876:17;;20869:24;;20793:108;:::o;34694:171::-;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34795:8:::1;34771:21;;:32;;;;;;;;;;;;;;;;;;34819:38;34848:8;34819:38;;;;;;:::i;:::-;;;;;;;;34694:171:::0;:::o;16871:35::-;;;;:::o;7186:226::-;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7267:6:::1;::::0;::::1;;;;;;;;7250:14;;:23;;;;;;;;;;;;;;;;;;7301:1;7284:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;7344:4;7326:15;:22;;;;:::i;:::-;7314:9;:34;;;;7401:1;7364:40;;7385:6;::::0;::::1;;;;;;;;7364:40;;;;;;;;;;;;7186:226:::0;:::o;19290:143::-;19371:7;19398:11;:18;19410:5;19398:18;;;;;;;;;;;;;;;:27;19417:7;19398:27;;;;;;;;;;;;;;;;19391:34;;19290:143;;;;:::o;33616:110::-;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33713:5:::1;33683:18;:27;33702:7;33683:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;33616:110:::0;:::o;33982:111::-;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34074:11:::1;34059:12;:26;;;;33982:111:::0;:::o;34225:166::-;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34359:24:::1;34333:23;:50;;;;34225:166:::0;:::o;6734:244::-;6497:12;:10;:12::i;:::-;6487:22;;:6;;;;;;;;;;:22;;;6479:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6843:1:::1;6823:22;;:8;:22;;;;6815:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6933:8;6904:38;;6925:6;::::0;::::1;;;;;;;;6904:38;;;;;;;;;;;;6962:8;6953:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6734:244:::0;:::o;649:115::-;702:15;745:10;730:26;;649:115;:::o;22837:337::-;22947:1;22930:19;;:5;:19;;;;22922:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23028:1;23009:21;;:7;:21;;;;23001:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23112:6;23082:11;:18;23094:5;23082:18;;;;;;;;;;;;;;;:27;23101:7;23082:27;;;;;;;;;;;;;;;:36;;;;23150:7;23134:32;;23143:5;23134:32;;;23159:6;23134:32;;;;;;:::i;:::-;;;;;;;;22837:337;;;:::o;23182:1547::-;23320:1;23304:18;;:4;:18;;;;23296:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23397:1;23383:16;;:2;:16;;;;23375:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23467:1;23458:6;:10;23450:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23536:7;:5;:7::i;:::-;23528:15;;:4;:15;;;;:32;;;;;23553:7;:5;:7::i;:::-;23547:13;;:2;:13;;;;23528:32;23525:139;;;23595:12;;23585:6;:22;;23577:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23525:139;23676:28;23707:24;23725:4;23707:9;:24::i;:::-;23676:55;;23742:28;23797:23;;23773:20;:47;;23742:78;;23846:16;;;;;;;;;;;23845:17;:42;;;;;23866:21;;;;;;;;;;;23845:42;:65;;;;;23897:13;23891:19;;:2;:19;;;23845:65;23841:582;;;23931:23;23927:165;;;23998:23;;23975:46;;24040:32;24051:20;24040:10;:32::i;:::-;23927:165;24103:15;24121:21;24103:39;;24161:14;;;;;;;;;;;:47;;;;;24197:10;24179:7;:29;24161:47;24157:255;;;24261:17;;24251:7;:27;24247:81;;;24311:17;;24301:27;;24247:81;24365:31;24379:16;24391:3;24379:7;:11;;:16;;;;:::i;:::-;24365:13;:31::i;:::-;24157:255;23841:582;;24443:12;24458:4;24443:19;;24570:18;:24;24589:4;24570:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;24598:18;:22;24617:2;24598:22;;;;;;;;;;;;;;;;;;;;;;;;;24570:50;24567:96;;;24646:5;24636:15;;24567:96;24683:38;24698:4;24703:2;24706:6;24713:7;24683:14;:38::i;:::-;23182:1547;;;;;;:::o;2052:192::-;2138:7;2171:1;2166;:6;;2174:12;2158:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2198:9;2214:1;2210;:5;;;;:::i;:::-;2198:17;;2235:1;2228:8;;;2052:192;;;;;:::o;31508:163::-;31549:7;31570:15;31587;31606:19;:17;:19::i;:::-;31569:56;;;;31643:20;31655:7;31643;:11;;:20;;;;:::i;:::-;31636:27;;;;31508:163;:::o;2512:132::-;2570:7;2597:39;2601:1;2604;2597:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2590:46;;2512:132;;;;:::o;1719:181::-;1777:7;1797:9;1813:1;1809;:5;;;;:::i;:::-;1797:17;;1838:1;1833;:6;;1825:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1891:1;1884:8;;;1719:181;;;;:::o;30306:419::-;30365:7;30374;30383;30392;30401;30410;30431:23;30456:12;30470:18;30492:20;30504:7;30492:11;:20::i;:::-;30430:82;;;;;;30524:15;30541:23;30566:12;30582:50;30594:7;30603:4;30609:10;30621;:8;:10::i;:::-;30582:11;:50::i;:::-;30523:109;;;;;;30651:7;30660:15;30677:4;30683:15;30700:4;30706:10;30643:74;;;;;;;;;;;;;;;;;;30306:419;;;;;;;:::o;1908:136::-;1966:7;1993:43;1997:1;2000;1993:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1986:50;;1908:136;;;;:::o;24737:433::-;17903:4;17884:16;;:23;;;;;;;;;;;;;;;;;;24827:22:::1;24852:21;24827:46;;24884:38;24901:20;24884:16;:38::i;:::-;24933:26;24962:41;24988:14;24962:21;:25;;:41;;;;:::i;:::-;24933:70;;25053:99;25074:16;;;;;;;;;;;25092:59;25134:16;;25092:37;25115:13;;25092:18;:22;;:37;;;;:::i;:::-;:41;;:59;;;;:::i;:::-;25053:20;:99::i;:::-;17918:1;;17949:5:::0;17930:16;;:24;;;;;;;;;;;;;;;;;;24737:433;:::o;25184:135::-;17903:4;17884:16;;:23;;;;;;;;;;;;;;;;;;25264:1:::1;25255:6;:10;25251:61;;;25279:24;25296:6;25279:16;:24::i;:::-;25251:61;17949:5:::0;17930:16;;:24;;;;;;;;;;;;;;;;;;25184:135;:::o;27120:704::-;27231:7;27227:40;;27253:14;:12;:14::i;:::-;27227:40;27292:11;:19;27304:6;27292:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;27316:11;:22;27328:9;27316:22;;;;;;;;;;;;;;;;;;;;;;;;;27315:23;27292:46;27288:467;;;27355:48;27377:6;27385:9;27396:6;27355:21;:48::i;:::-;27288:467;;;27426:11;:19;27438:6;27426:19;;;;;;;;;;;;;;;;;;;;;;;;;27425:20;:46;;;;;27449:11;:22;27461:9;27449:22;;;;;;;;;;;;;;;;;;;;;;;;;27425:46;27421:334;;;27488:46;27508:6;27516:9;27527:6;27488:19;:46::i;:::-;27421:334;;;27556:11;:19;27568:6;27556:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;27579:11;:22;27591:9;27579:22;;;;;;;;;;;;;;;;;;;;;;;;;27556:45;27552:203;;;27618:48;27640:6;27648:9;27659:6;27618:21;:48::i;:::-;27552:203;;;27699:44;27717:6;27725:9;27736:6;27699:17;:44::i;:::-;27552:203;27421:334;27288:467;27779:7;27775:41;;27801:15;:13;:15::i;:::-;27775:41;27120:704;;;;:::o;31679:561::-;31729:7;31738;31758:15;31776:7;;31758:25;;31794:15;31812:7;;31794:25;;31841:9;31836:289;31860:9;:16;;;;31856:1;:20;31836:289;;;31926:7;31902;:21;31910:9;31920:1;31910:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31902:21;;;;;;;;;;;;;;;;:31;:66;;;;31961:7;31937;:21;31945:9;31955:1;31945:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31937:21;;;;;;;;;;;;;;;;:31;31902:66;31898:97;;;31978:7;;31987;;31970:25;;;;;;;;;31898:97;32020:34;32032:7;:21;32040:9;32050:1;32040:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32032:21;;;;;;;;;;;;;;;;32020:7;:11;;:34;;;;:::i;:::-;32010:44;;32079:34;32091:7;:21;32099:9;32109:1;32099:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32091:21;;;;;;;;;;;;;;;;32079:7;:11;;:34;;;;:::i;:::-;32069:44;;31878:3;;;;;:::i;:::-;;;;31836:289;;;;32149:20;32161:7;;32149;;:11;;:20;;;;:::i;:::-;32139:7;:30;32135:61;;;32179:7;;32188;;32171:25;;;;;;;;32135:61;32215:7;32224;32207:25;;;;;;31679:561;;;:::o;2652:278::-;2738:7;2770:1;2766;:5;2773:12;2758:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2797:9;2813:1;2809;:5;;;;:::i;:::-;2797:17;;2921:1;2914:8;;;2652:278;;;;;:::o;30733:330::-;30793:7;30802;30811;30831:12;30846:24;30862:7;30846:15;:24::i;:::-;30831:39;;30881:18;30902:30;30924:7;30902:21;:30::i;:::-;30881:51;;30943:23;30969:33;30991:10;30969:17;30981:4;30969:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;30943:59;;31021:15;31038:4;31044:10;31013:42;;;;;;;;;30733:330;;;;;:::o;31071:429::-;31186:7;31195;31204;31224:15;31242:24;31254:11;31242:7;:11;;:24;;;;:::i;:::-;31224:42;;31277:12;31292:21;31301:11;31292:4;:8;;:21;;;;:::i;:::-;31277:36;;31324:18;31345:27;31360:11;31345:10;:14;;:27;;;;:::i;:::-;31324:48;;31383:23;31409:33;31431:10;31409:17;31421:4;31409:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;31383:59;;31461:7;31470:15;31487:4;31453:39;;;;;;;;;;31071:429;;;;;;;;:::o;25331:666::-;25457:21;25495:1;25481:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25457:40;;25526:4;25508;25513:1;25508:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;25552:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25542:4;25547:1;25542:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;25587:62;25604:4;25619:15;25637:11;25587:8;:62::i;:::-;25688:15;:66;;;25769:11;25795:1;25839:4;25866;25902:15;25688:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25954:35;25971:11;25984:4;25954:35;;;;;;;:::i;:::-;;;;;;;;25331:666;;:::o;2252:250::-;2310:7;2339:1;2334;:6;2330:47;;;2364:1;2357:8;;;;2330:47;2389:9;2405:1;2401;:5;;;;:::i;:::-;2389:17;;2434:1;2429;2425;:5;;;;:::i;:::-;:10;2417:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2493:1;2486:8;;;2252:250;;;;;:::o;35039:126::-;35131:9;:18;;:26;35150:6;35131:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35039:126;;:::o;26009:578::-;26130:21;26168:1;26154:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26130:40;;26191:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26181:4;26186:1;26181:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;26242:4;26224;26229:1;26224:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26284:15;:66;;;26358:6;26380:1;26427:4;26446:11;26488:24;26508:3;26488:15;:19;;:24;;;;:::i;:::-;26284:239;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26549:30;26566:6;26574:4;26549:30;;;;;;;:::i;:::-;;;;;;;;26009:578;;:::o;32963:250::-;33020:1;33009:7;;:12;:34;;;;;33042:1;33025:13;;:18;33009:34;33006:46;;;33045:7;;33006:46;33090:7;;33072:15;:25;;;;33132:13;;33108:21;:37;;;;33176:1;33166:7;:11;;;;33204:1;33188:13;:17;;;;32963:250;:::o;28933:563::-;29036:15;29053:23;29078:12;29092:23;29117:12;29131:18;29153:19;29164:7;29153:10;:19::i;:::-;29035:137;;;;;;;;;;;;29198:28;29218:7;29198;:15;29206:6;29198:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29180:7;:15;29188:6;29180:15;;;;;;;;;;;;;;;:46;;;;29255:28;29275:7;29255;:15;29263:6;29255:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29237:7;:15;29245:6;29237:15;;;;;;;;;;;;;;;:46;;;;29315:39;29338:15;29315:7;:18;29323:9;29315:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29294:7;:18;29302:9;29294:18;;;;;;;;;;;;;;;:60;;;;29368:26;29383:10;29368:14;:26::i;:::-;29405:23;29417:4;29423;29405:11;:23::i;:::-;29461:9;29444:44;;29453:6;29444:44;;;29472:15;29444:44;;;;;;:::i;:::-;;;;;;;;28933:563;;;;;;;;;:::o;28342:583::-;28443:15;28460:23;28485:12;28499:23;28524:12;28538:18;28560:19;28571:7;28560:10;:19::i;:::-;28442:137;;;;;;;;;;;;28605:28;28625:7;28605;:15;28613:6;28605:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28587:7;:15;28595:6;28587:15;;;;;;;;;;;;;;;:46;;;;28665:39;28688:15;28665:7;:18;28673:9;28665:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28644:7;:18;28652:9;28644:18;;;;;;;;;;;;;;;:60;;;;28736:39;28759:15;28736:7;:18;28744:9;28736:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28715:7;:18;28723:9;28715:18;;;;;;;;;;;;;;;:60;;;;28797:26;28812:10;28797:14;:26::i;:::-;28834:23;28846:4;28852;28834:11;:23::i;:::-;28890:9;28873:44;;28882:6;28873:44;;;28901:15;28873:44;;;;;;:::i;:::-;;;;;;;;28342:583;;;;;;;;;:::o;29504:639::-;29607:15;29624:23;29649:12;29663:23;29688:12;29702:18;29724:19;29735:7;29724:10;:19::i;:::-;29606:137;;;;;;;;;;;;29769:28;29789:7;29769;:15;29777:6;29769:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29751:7;:15;29759:6;29751:15;;;;;;;;;;;;;;;:46;;;;29826:28;29846:7;29826;:15;29834:6;29826:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29808:7;:15;29816:6;29808:15;;;;;;;;;;;;;;;:46;;;;29886:39;29909:15;29886:7;:18;29894:9;29886:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29865:7;:18;29873:9;29865:18;;;;;;;;;;;;;;;:60;;;;29957:39;29980:15;29957:7;:18;29965:9;29957:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29936:7;:18;29944:9;29936:18;;;;;;;;;;;;;;;:60;;;;30015:26;30030:10;30015:14;:26::i;:::-;30052:23;30064:4;30070;30052:11;:23::i;:::-;30108:9;30091:44;;30100:6;30091:44;;;30119:15;30091:44;;;;;;:::i;:::-;;;;;;;;29504:639;;;;;;;;;:::o;27832:502::-;27931:15;27948:23;27973:12;27987:23;28012:12;28026:18;28048:19;28059:7;28048:10;:19::i;:::-;27930:137;;;;;;;;;;;;28096:28;28116:7;28096;:15;28104:6;28096:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28078:7;:15;28086:6;28078:15;;;;;;;;;;;;;;;:46;;;;28156:39;28179:15;28156:7;:18;28164:9;28156:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28135:7;:18;28143:9;28135:18;;;;;;;;;;;;;;;:60;;;;28206:26;28221:10;28206:14;:26::i;:::-;28243:23;28255:4;28261;28243:11;:23::i;:::-;28299:9;28282:44;;28291:6;28282:44;;;28310:15;28282:44;;;;;;:::i;:::-;;;;;;;;27832:502;;;;;;;;;:::o;33225:125::-;33279:15;;33269:7;:25;;;;33321:21;;33305:13;:37;;;;33225:125::o;32619:154::-;32683:7;32710:55;32749:5;32710:20;32722:7;;32710;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;32703:62;;32619:154;;;:::o;32785:166::-;32855:7;32882:61;32927:5;32882:26;32894:13;;32882:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;32875:68;;32785:166;;;:::o;32252:355::-;32315:19;32338:10;:8;:10::i;:::-;32315:33;;32359:18;32380:27;32395:11;32380:10;:14;;:27;;;;:::i;:::-;32359:48;;32443:38;32470:10;32443:7;:22;32459:4;32443:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;32418:7;:22;32434:4;32418:22;;;;;;;;;;;;;;;:63;;;;32495:11;:26;32515:4;32495:26;;;;;;;;;;;;;;;;;;;;;;;;;32492:107;;;32561:38;32588:10;32561:7;:22;32577:4;32561:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;32536:7;:22;32552:4;32536:22;;;;;;;;;;;;;;;:63;;;;32492:107;32252:355;;;:::o;30151:147::-;30229:17;30241:4;30229:7;;:11;;:17;;;;:::i;:::-;30219:7;:27;;;;30270:20;30285:4;30270:10;;:14;;:20;;;;:::i;:::-;30257:10;:33;;;;30151:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;644:6;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:284::-;923:6;972:2;960:9;951:7;947:23;943:32;940:2;;;988:1;985;978:12;940:2;1031:1;1056:64;1112:7;1103:6;1092:9;1088:22;1056:64;:::i;:::-;1046:74;;1002:128;930:207;;;;:::o;1143:407::-;1211:6;1219;1268:2;1256:9;1247:7;1243:23;1239:32;1236:2;;;1284:1;1281;1274:12;1236:2;1327:1;1352:53;1397:7;1388:6;1377:9;1373:22;1352:53;:::i;:::-;1342:63;;1298:117;1454:2;1480:53;1525:7;1516:6;1505:9;1501:22;1480:53;:::i;:::-;1470:63;;1425:118;1226:324;;;;;:::o;1556:552::-;1633:6;1641;1649;1698:2;1686:9;1677:7;1673:23;1669:32;1666:2;;;1714:1;1711;1704:12;1666:2;1757:1;1782:53;1827:7;1818:6;1807:9;1803:22;1782:53;:::i;:::-;1772:63;;1728:117;1884:2;1910:53;1955:7;1946:6;1935:9;1931:22;1910:53;:::i;:::-;1900:63;;1855:118;2012:2;2038:53;2083:7;2074:6;2063:9;2059:22;2038:53;:::i;:::-;2028:63;;1983:118;1656:452;;;;;:::o;2114:407::-;2182:6;2190;2239:2;2227:9;2218:7;2214:23;2210:32;2207:2;;;2255:1;2252;2245:12;2207:2;2298:1;2323:53;2368:7;2359:6;2348:9;2344:22;2323:53;:::i;:::-;2313:63;;2269:117;2425:2;2451:53;2496:7;2487:6;2476:9;2472:22;2451:53;:::i;:::-;2441:63;;2396:118;2197:324;;;;;:::o;2527:256::-;2583:6;2632:2;2620:9;2611:7;2607:23;2603:32;2600:2;;;2648:1;2645;2638:12;2600:2;2691:1;2716:50;2758:7;2749:6;2738:9;2734:22;2716:50;:::i;:::-;2706:60;;2662:114;2590:193;;;;:::o;2789:262::-;2848:6;2897:2;2885:9;2876:7;2872:23;2868:32;2865:2;;;2913:1;2910;2903:12;2865:2;2956:1;2981:53;3026:7;3017:6;3006:9;3002:22;2981:53;:::i;:::-;2971:63;;2927:117;2855:196;;;;:::o;3057:401::-;3122:6;3130;3179:2;3167:9;3158:7;3154:23;3150:32;3147:2;;;3195:1;3192;3185:12;3147:2;3238:1;3263:53;3308:7;3299:6;3288:9;3284:22;3263:53;:::i;:::-;3253:63;;3209:117;3365:2;3391:50;3433:7;3424:6;3413:9;3409:22;3391:50;:::i;:::-;3381:60;;3336:115;3137:321;;;;;:::o;3464:179::-;3533:10;3554:46;3596:3;3588:6;3554:46;:::i;:::-;3632:4;3627:3;3623:14;3609:28;;3544:99;;;;:::o;3649:142::-;3752:32;3778:5;3752:32;:::i;:::-;3747:3;3740:45;3730:61;;:::o;3797:108::-;3874:24;3892:5;3874:24;:::i;:::-;3869:3;3862:37;3852:53;;:::o;3911:118::-;3998:24;4016:5;3998:24;:::i;:::-;3993:3;3986:37;3976:53;;:::o;4065:732::-;4184:3;4213:54;4261:5;4213:54;:::i;:::-;4283:86;4362:6;4357:3;4283:86;:::i;:::-;4276:93;;4393:56;4443:5;4393:56;:::i;:::-;4472:7;4503:1;4488:284;4513:6;4510:1;4507:13;4488:284;;;4589:6;4583:13;4616:63;4675:3;4660:13;4616:63;:::i;:::-;4609:70;;4702:60;4755:6;4702:60;:::i;:::-;4692:70;;4548:224;4535:1;4532;4528:9;4523:14;;4488:284;;;4492:14;4788:3;4781:10;;4189:608;;;;;;;:::o;4803:109::-;4884:21;4899:5;4884:21;:::i;:::-;4879:3;4872:34;4862:50;;:::o;4918:185::-;5032:64;5090:5;5032:64;:::i;:::-;5027:3;5020:77;5010:93;;:::o;5109:147::-;5204:45;5243:5;5204:45;:::i;:::-;5199:3;5192:58;5182:74;;:::o;5262:364::-;5350:3;5378:39;5411:5;5378:39;:::i;:::-;5433:71;5497:6;5492:3;5433:71;:::i;:::-;5426:78;;5513:52;5558:6;5553:3;5546:4;5539:5;5535:16;5513:52;:::i;:::-;5590:29;5612:6;5590:29;:::i;:::-;5585:3;5581:39;5574:46;;5354:272;;;;;:::o;5632:366::-;5774:3;5795:67;5859:2;5854:3;5795:67;:::i;:::-;5788:74;;5871:93;5960:3;5871:93;:::i;:::-;5989:2;5984:3;5980:12;5973:19;;5778:220;;;:::o;6004:366::-;6146:3;6167:67;6231:2;6226:3;6167:67;:::i;:::-;6160:74;;6243:93;6332:3;6243:93;:::i;:::-;6361:2;6356:3;6352:12;6345:19;;6150:220;;;:::o;6376:366::-;6518:3;6539:67;6603:2;6598:3;6539:67;:::i;:::-;6532:74;;6615:93;6704:3;6615:93;:::i;:::-;6733:2;6728:3;6724:12;6717:19;;6522:220;;;:::o;6748:366::-;6890:3;6911:67;6975:2;6970:3;6911:67;:::i;:::-;6904:74;;6987:93;7076:3;6987:93;:::i;:::-;7105:2;7100:3;7096:12;7089:19;;6894:220;;;:::o;7120:366::-;7262:3;7283:67;7347:2;7342:3;7283:67;:::i;:::-;7276:74;;7359:93;7448:3;7359:93;:::i;:::-;7477:2;7472:3;7468:12;7461:19;;7266:220;;;:::o;7492:366::-;7634:3;7655:67;7719:2;7714:3;7655:67;:::i;:::-;7648:74;;7731:93;7820:3;7731:93;:::i;:::-;7849:2;7844:3;7840:12;7833:19;;7638:220;;;:::o;7864:366::-;8006:3;8027:67;8091:2;8086:3;8027:67;:::i;:::-;8020:74;;8103:93;8192:3;8103:93;:::i;:::-;8221:2;8216:3;8212:12;8205:19;;8010:220;;;:::o;8236:366::-;8378:3;8399:67;8463:2;8458:3;8399:67;:::i;:::-;8392:74;;8475:93;8564:3;8475:93;:::i;:::-;8593:2;8588:3;8584:12;8577:19;;8382:220;;;:::o;8608:366::-;8750:3;8771:67;8835:2;8830:3;8771:67;:::i;:::-;8764:74;;8847:93;8936:3;8847:93;:::i;:::-;8965:2;8960:3;8956:12;8949:19;;8754:220;;;:::o;8980:366::-;9122:3;9143:67;9207:2;9202:3;9143:67;:::i;:::-;9136:74;;9219:93;9308:3;9219:93;:::i;:::-;9337:2;9332:3;9328:12;9321:19;;9126:220;;;:::o;9352:366::-;9494:3;9515:67;9579:2;9574:3;9515:67;:::i;:::-;9508:74;;9591:93;9680:3;9591:93;:::i;:::-;9709:2;9704:3;9700:12;9693:19;;9498:220;;;:::o;9724:366::-;9866:3;9887:67;9951:2;9946:3;9887:67;:::i;:::-;9880:74;;9963:93;10052:3;9963:93;:::i;:::-;10081:2;10076:3;10072:12;10065:19;;9870:220;;;:::o;10096:366::-;10238:3;10259:67;10323:2;10318:3;10259:67;:::i;:::-;10252:74;;10335:93;10424:3;10335:93;:::i;:::-;10453:2;10448:3;10444:12;10437:19;;10242:220;;;:::o;10468:366::-;10610:3;10631:67;10695:2;10690:3;10631:67;:::i;:::-;10624:74;;10707:93;10796:3;10707:93;:::i;:::-;10825:2;10820:3;10816:12;10809:19;;10614:220;;;:::o;10840:366::-;10982:3;11003:67;11067:2;11062:3;11003:67;:::i;:::-;10996:74;;11079:93;11168:3;11079:93;:::i;:::-;11197:2;11192:3;11188:12;11181:19;;10986:220;;;:::o;11212:366::-;11354:3;11375:67;11439:2;11434:3;11375:67;:::i;:::-;11368:74;;11451:93;11540:3;11451:93;:::i;:::-;11569:2;11564:3;11560:12;11553:19;;11358:220;;;:::o;11584:118::-;11671:24;11689:5;11671:24;:::i;:::-;11666:3;11659:37;11649:53;;:::o;11708:112::-;11791:22;11807:5;11791:22;:::i;:::-;11786:3;11779:35;11769:51;;:::o;11826:222::-;11919:4;11957:2;11946:9;11942:18;11934:26;;11970:71;12038:1;12027:9;12023:17;12014:6;11970:71;:::i;:::-;11924:124;;;;:::o;12054:254::-;12163:4;12201:2;12190:9;12186:18;12178:26;;12214:87;12298:1;12287:9;12283:17;12274:6;12214:87;:::i;:::-;12168:140;;;;:::o;12314:210::-;12401:4;12439:2;12428:9;12424:18;12416:26;;12452:65;12514:1;12503:9;12499:17;12490:6;12452:65;:::i;:::-;12406:118;;;;:::o;12530:276::-;12650:4;12688:2;12677:9;12673:18;12665:26;;12701:98;12796:1;12785:9;12781:17;12772:6;12701:98;:::i;:::-;12655:151;;;;:::o;12812:720::-;13047:4;13085:3;13074:9;13070:19;13062:27;;13099:79;13175:1;13164:9;13160:17;13151:6;13099:79;:::i;:::-;13225:9;13219:4;13215:20;13210:2;13199:9;13195:18;13188:48;13253:108;13356:4;13347:6;13253:108;:::i;:::-;13245:116;;13371:72;13439:2;13428:9;13424:18;13415:6;13371:72;:::i;:::-;13453;13521:2;13510:9;13506:18;13497:6;13453:72;:::i;:::-;13052:480;;;;;;;:::o;13538:313::-;13651:4;13689:2;13678:9;13674:18;13666:26;;13738:9;13732:4;13728:20;13724:1;13713:9;13709:17;13702:47;13766:78;13839:4;13830:6;13766:78;:::i;:::-;13758:86;;13656:195;;;;:::o;13857:419::-;14023:4;14061:2;14050:9;14046:18;14038:26;;14110:9;14104:4;14100:20;14096:1;14085:9;14081:17;14074:47;14138:131;14264:4;14138:131;:::i;:::-;14130:139;;14028:248;;;:::o;14282:419::-;14448:4;14486:2;14475:9;14471:18;14463:26;;14535:9;14529:4;14525:20;14521:1;14510:9;14506:17;14499:47;14563:131;14689:4;14563:131;:::i;:::-;14555:139;;14453:248;;;:::o;14707:419::-;14873:4;14911:2;14900:9;14896:18;14888:26;;14960:9;14954:4;14950:20;14946:1;14935:9;14931:17;14924:47;14988:131;15114:4;14988:131;:::i;:::-;14980:139;;14878:248;;;:::o;15132:419::-;15298:4;15336:2;15325:9;15321:18;15313:26;;15385:9;15379:4;15375:20;15371:1;15360:9;15356:17;15349:47;15413:131;15539:4;15413:131;:::i;:::-;15405:139;;15303:248;;;:::o;15557:419::-;15723:4;15761:2;15750:9;15746:18;15738:26;;15810:9;15804:4;15800:20;15796:1;15785:9;15781:17;15774:47;15838:131;15964:4;15838:131;:::i;:::-;15830:139;;15728:248;;;:::o;15982:419::-;16148:4;16186:2;16175:9;16171:18;16163:26;;16235:9;16229:4;16225:20;16221:1;16210:9;16206:17;16199:47;16263:131;16389:4;16263:131;:::i;:::-;16255:139;;16153:248;;;:::o;16407:419::-;16573:4;16611:2;16600:9;16596:18;16588:26;;16660:9;16654:4;16650:20;16646:1;16635:9;16631:17;16624:47;16688:131;16814:4;16688:131;:::i;:::-;16680:139;;16578:248;;;:::o;16832:419::-;16998:4;17036:2;17025:9;17021:18;17013:26;;17085:9;17079:4;17075:20;17071:1;17060:9;17056:17;17049:47;17113:131;17239:4;17113:131;:::i;:::-;17105:139;;17003:248;;;:::o;17257:419::-;17423:4;17461:2;17450:9;17446:18;17438:26;;17510:9;17504:4;17500:20;17496:1;17485:9;17481:17;17474:47;17538:131;17664:4;17538:131;:::i;:::-;17530:139;;17428:248;;;:::o;17682:419::-;17848:4;17886:2;17875:9;17871:18;17863:26;;17935:9;17929:4;17925:20;17921:1;17910:9;17906:17;17899:47;17963:131;18089:4;17963:131;:::i;:::-;17955:139;;17853:248;;;:::o;18107:419::-;18273:4;18311:2;18300:9;18296:18;18288:26;;18360:9;18354:4;18350:20;18346:1;18335:9;18331:17;18324:47;18388:131;18514:4;18388:131;:::i;:::-;18380:139;;18278:248;;;:::o;18532:419::-;18698:4;18736:2;18725:9;18721:18;18713:26;;18785:9;18779:4;18775:20;18771:1;18760:9;18756:17;18749:47;18813:131;18939:4;18813:131;:::i;:::-;18805:139;;18703:248;;;:::o;18957:419::-;19123:4;19161:2;19150:9;19146:18;19138:26;;19210:9;19204:4;19200:20;19196:1;19185:9;19181:17;19174:47;19238:131;19364:4;19238:131;:::i;:::-;19230:139;;19128:248;;;:::o;19382:419::-;19548:4;19586:2;19575:9;19571:18;19563:26;;19635:9;19629:4;19625:20;19621:1;19610:9;19606:17;19599:47;19663:131;19789:4;19663:131;:::i;:::-;19655:139;;19553:248;;;:::o;19807:419::-;19973:4;20011:2;20000:9;19996:18;19988:26;;20060:9;20054:4;20050:20;20046:1;20035:9;20031:17;20024:47;20088:131;20214:4;20088:131;:::i;:::-;20080:139;;19978:248;;;:::o;20232:419::-;20398:4;20436:2;20425:9;20421:18;20413:26;;20485:9;20479:4;20475:20;20471:1;20460:9;20456:17;20449:47;20513:131;20639:4;20513:131;:::i;:::-;20505:139;;20403:248;;;:::o;20657:222::-;20750:4;20788:2;20777:9;20773:18;20765:26;;20801:71;20869:1;20858:9;20854:17;20845:6;20801:71;:::i;:::-;20755:124;;;;:::o;20885:483::-;21056:4;21094:2;21083:9;21079:18;21071:26;;21107:71;21175:1;21164:9;21160:17;21151:6;21107:71;:::i;:::-;21225:9;21219:4;21215:20;21210:2;21199:9;21195:18;21188:48;21253:108;21356:4;21347:6;21253:108;:::i;:::-;21245:116;;21061:307;;;;;:::o;21374:831::-;21637:4;21675:3;21664:9;21660:19;21652:27;;21689:71;21757:1;21746:9;21742:17;21733:6;21689:71;:::i;:::-;21770:80;21846:2;21835:9;21831:18;21822:6;21770:80;:::i;:::-;21897:9;21891:4;21887:20;21882:2;21871:9;21867:18;21860:48;21925:108;22028:4;22019:6;21925:108;:::i;:::-;21917:116;;22043:72;22111:2;22100:9;22096:18;22087:6;22043:72;:::i;:::-;22125:73;22193:3;22182:9;22178:19;22169:6;22125:73;:::i;:::-;21642:563;;;;;;;;:::o;22211:214::-;22300:4;22338:2;22327:9;22323:18;22315:26;;22351:67;22415:1;22404:9;22400:17;22391:6;22351:67;:::i;:::-;22305:120;;;;:::o;22431:132::-;22498:4;22521:3;22513:11;;22551:4;22546:3;22542:14;22534:22;;22503:60;;;:::o;22569:114::-;22636:6;22670:5;22664:12;22654:22;;22643:40;;;:::o;22689:99::-;22741:6;22775:5;22769:12;22759:22;;22748:40;;;:::o;22794:113::-;22864:4;22896;22891:3;22887:14;22879:22;;22869:38;;;:::o;22913:184::-;23012:11;23046:6;23041:3;23034:19;23086:4;23081:3;23077:14;23062:29;;23024:73;;;;:::o;23103:169::-;23187:11;23221:6;23216:3;23209:19;23261:4;23256:3;23252:14;23237:29;;23199:73;;;;:::o;23278:305::-;23318:3;23337:20;23355:1;23337:20;:::i;:::-;23332:25;;23371:20;23389:1;23371:20;:::i;:::-;23366:25;;23525:1;23457:66;23453:74;23450:1;23447:81;23444:2;;;23531:18;;:::i;:::-;23444:2;23575:1;23572;23568:9;23561:16;;23322:261;;;;:::o;23589:185::-;23629:1;23646:20;23664:1;23646:20;:::i;:::-;23641:25;;23680:20;23698:1;23680:20;:::i;:::-;23675:25;;23719:1;23709:2;;23724:18;;:::i;:::-;23709:2;23766:1;23763;23759:9;23754:14;;23631:143;;;;:::o;23780:348::-;23820:7;23843:20;23861:1;23843:20;:::i;:::-;23838:25;;23877:20;23895:1;23877:20;:::i;:::-;23872:25;;24065:1;23997:66;23993:74;23990:1;23987:81;23982:1;23975:9;23968:17;23964:105;23961:2;;;24072:18;;:::i;:::-;23961:2;24120:1;24117;24113:9;24102:20;;23828:300;;;;:::o;24134:191::-;24174:4;24194:20;24212:1;24194:20;:::i;:::-;24189:25;;24228:20;24246:1;24228:20;:::i;:::-;24223:25;;24267:1;24264;24261:8;24258:2;;;24272:18;;:::i;:::-;24258:2;24317:1;24314;24310:9;24302:17;;24179:146;;;;:::o;24331:96::-;24368:7;24397:24;24415:5;24397:24;:::i;:::-;24386:35;;24376:51;;;:::o;24433:104::-;24478:7;24507:24;24525:5;24507:24;:::i;:::-;24496:35;;24486:51;;;:::o;24543:90::-;24577:7;24620:5;24613:13;24606:21;24595:32;;24585:48;;;:::o;24639:126::-;24676:7;24716:42;24709:5;24705:54;24694:65;;24684:81;;;:::o;24771:77::-;24808:7;24837:5;24826:16;;24816:32;;;:::o;24854:86::-;24889:7;24929:4;24922:5;24918:16;24907:27;;24897:43;;;:::o;24946:180::-;25023:9;25056:64;25114:5;25056:64;:::i;:::-;25043:77;;25033:93;;;:::o;25132:140::-;25209:9;25242:24;25260:5;25242:24;:::i;:::-;25229:37;;25219:53;;;:::o;25278:121::-;25336:9;25369:24;25387:5;25369:24;:::i;:::-;25356:37;;25346:53;;;:::o;25405:307::-;25473:1;25483:113;25497:6;25494:1;25491:13;25483:113;;;25582:1;25577:3;25573:11;25567:18;25563:1;25558:3;25554:11;25547:39;25519:2;25516:1;25512:10;25507:15;;25483:113;;;25614:6;25611:1;25608:13;25605:2;;;25694:1;25685:6;25680:3;25676:16;25669:27;25605:2;25454:258;;;;:::o;25718:320::-;25762:6;25799:1;25793:4;25789:12;25779:22;;25846:1;25840:4;25836:12;25867:18;25857:2;;25923:4;25915:6;25911:17;25901:27;;25857:2;25985;25977:6;25974:14;25954:18;25951:38;25948:2;;;26004:18;;:::i;:::-;25948:2;25769:269;;;;:::o;26044:233::-;26083:3;26106:24;26124:5;26106:24;:::i;:::-;26097:33;;26152:66;26145:5;26142:77;26139:2;;;26222:18;;:::i;:::-;26139:2;26269:1;26262:5;26258:13;26251:20;;26087:190;;;:::o;26283:180::-;26331:77;26328:1;26321:88;26428:4;26425:1;26418:15;26452:4;26449:1;26442:15;26469:180;26517:77;26514:1;26507:88;26614:4;26611:1;26604:15;26638:4;26635:1;26628:15;26655:180;26703:77;26700:1;26693:88;26800:4;26797:1;26790:15;26824:4;26821:1;26814:15;26841:102;26882:6;26933:2;26929:7;26924:2;26917:5;26913:14;26909:28;26899:38;;26889:54;;;:::o;26949:222::-;27089:34;27085:1;27077:6;27073:14;27066:58;27158:5;27153:2;27145:6;27141:15;27134:30;27055:116;:::o;27177:229::-;27317:34;27313:1;27305:6;27301:14;27294:58;27386:12;27381:2;27373:6;27369:15;27362:37;27283:123;:::o;27412:225::-;27552:34;27548:1;27540:6;27536:14;27529:58;27621:8;27616:2;27608:6;27604:15;27597:33;27518:119;:::o;27643:221::-;27783:34;27779:1;27771:6;27767:14;27760:58;27852:4;27847:2;27839:6;27835:15;27828:29;27749:115;:::o;27870:177::-;28010:29;28006:1;27998:6;27994:14;27987:53;27976:71;:::o;28053:177::-;28193:29;28189:1;28181:6;28177:14;28170:53;28159:71;:::o;28236:181::-;28376:33;28372:1;28364:6;28360:14;28353:57;28342:75;:::o;28423:227::-;28563:34;28559:1;28551:6;28547:14;28540:58;28632:10;28627:2;28619:6;28615:15;28608:35;28529:121;:::o;28656:220::-;28796:34;28792:1;28784:6;28780:14;28773:58;28865:3;28860:2;28852:6;28848:15;28841:28;28762:114;:::o;28882:182::-;29022:34;29018:1;29010:6;29006:14;28999:58;28988:76;:::o;29070:228::-;29210:34;29206:1;29198:6;29194:14;29187:58;29279:11;29274:2;29266:6;29262:15;29255:36;29176:122;:::o;29304:224::-;29444:34;29440:1;29432:6;29428:14;29421:58;29513:7;29508:2;29500:6;29496:15;29489:32;29410:118;:::o;29534:223::-;29674:34;29670:1;29662:6;29658:14;29651:58;29743:6;29738:2;29730:6;29726:15;29719:31;29640:117;:::o;29763:181::-;29903:33;29899:1;29891:6;29887:14;29880:57;29869:75;:::o;29950:231::-;30090:34;30086:1;30078:6;30074:14;30067:58;30159:14;30154:2;30146:6;30142:15;30135:39;30056:125;:::o;30187:222::-;30327:34;30323:1;30315:6;30311:14;30304:58;30396:5;30391:2;30383:6;30379:15;30372:30;30293:116;:::o;30415:122::-;30488:24;30506:5;30488:24;:::i;:::-;30481:5;30478:35;30468:2;;30527:1;30524;30517:12;30468:2;30458:79;:::o;30543:116::-;30613:21;30628:5;30613:21;:::i;:::-;30606:5;30603:32;30593:2;;30649:1;30646;30639:12;30593:2;30583:76;:::o;30665:122::-;30738:24;30756:5;30738:24;:::i;:::-;30731:5;30728:35;30718:2;;30777:1;30774;30767:12;30718:2;30708:79;:::o

Swarm Source

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