ETH Price: $2,272.44 (-6.14%)

Token

Cash Protocol ($$)
 

Overview

Max Total Supply

100,000 $$

Holders

101

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
140.283379927832386104 $$

Value
$0.00
0x0c4Fb9e10Da925e9F34457A635E87552D512d89F
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PCASH

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*

  /$$$$$$                      /$$             /$$$$$$$                       /$$                                   /$$
 /$$__  $$                    | $$            | $$__  $$                     | $$                                  | $$
| $$  \__/  /$$$$$$   /$$$$$$$| $$$$$$$       | $$  \ $$ /$$$$$$   /$$$$$$  /$$$$$$    /$$$$$$   /$$$$$$$  /$$$$$$ | $$
| $$       |____  $$ /$$_____/| $$__  $$      | $$$$$$$//$$__  $$ /$$__  $$|_  $$_/   /$$__  $$ /$$_____/ /$$__  $$| $$
| $$        /$$$$$$$|  $$$$$$ | $$  \ $$      | $$____/| $$  \__/| $$  \ $$  | $$    | $$  \ $$| $$      | $$  \ $$| $$
| $$    $$ /$$__  $$ \____  $$| $$  | $$      | $$     | $$      | $$  | $$  | $$ /$$| $$  | $$| $$      | $$  | $$| $$
|  $$$$$$/|  $$$$$$$ /$$$$$$$/| $$  | $$      | $$     | $$      |  $$$$$$/  |  $$$$/|  $$$$$$/|  $$$$$$$|  $$$$$$/| $$
 \______/  \_______/|_______/ |__/  |__/      |__/     |__/       \______/    \___/   \______/  \_______/ \______/ |__/
                                                                                                                       
  ||====================================================================||
||//$\\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\//$\\||
||(100)==================| FEDERAL RESERVE NOTE |================(100)||
||\\$//        ~         '------========--------'                \\$//||
||<< /        /$\              // ____ \\                         \ >>||
||>>|  12    //L\\            // ///..) \\         L38036133B   12 |<<||
||<<|        \\ //           || <||  >\  ||                        |>>||
||>>|         \$/            ||  $$ --/  ||        One Hundred     |<<||
||<<|      L38036133B        *\\  |\_/  //* series                 |>>||
||>>|  12                     *\\/___\_//*   1989                  |<<||
||<<\      Treasurer     ______/Franklin\________     Secretary 12 />>||
||//$\                 ~|UNITED STATES OF AMERICA|~               /$\\||
||(100)===================  ONE HUNDRED DOLLARS =================(100)||
||\\$//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\$//||
||====================================================================||                                                                                                                     
                                                                                                                       
The ONLY Protocol to give you real cash $$ for just holding.
USDC Reflections (40% of EVERY transaction) goes to your wallet just for holding!
5/5 Tax Overall (1% Auto Liquidity, 2% USDC Reflections, 2% Marketing/Development)

https://twitter.com/cashprotocoleth
http://cashprotocol.cash/
https://t.me/CashProtocolPortal

*/

// SPDX-License-Identifier: MIT


pragma solidity ^0.7.4;

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);

        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
}

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;

        return c;
    }

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

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

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

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

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

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

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

interface IPancakeSwapPair {
		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 Mint(address indexed sender, uint amount0, uint amount1);
		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 mint(address to) external returns (uint liquidity);
		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;
}

interface IPancakeSwapRouter{
		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);
		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;
}

interface IPancakeSwapFactory {
		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;
}

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {

    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
   
    IERC20 UC = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); 

    IPancakeSwapRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public currentIndex;

    uint256 public dividendsPerShareAccuracyFactor = 10 ** 24;
    uint256 public minPeriod = 3600;
    uint256 public minDistribution = 1 * (10 ** 6);

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0)
        ? IPancakeSwapRouter(_router)
        : IPancakeSwapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function rescueToken(address tokenAddress,address _receiver, uint256 tokens) external onlyToken returns (bool success){
        return IERC20(tokenAddress).transfer(_receiver, tokens);
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = UC.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(UC);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = UC.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            UC.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }

    function claimDividend() external {
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);

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

    constructor() {
        _owner = msg.sender;
    }

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

    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(_owner);
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

abstract contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

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

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

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

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

contract PCASH is ERC20Detailed, Ownable {

    using SafeMath for uint256;
    using SafeMathInt for int256;

    uint256 public buyLiquidityFee = 10;
    uint256 public buyMarketingFee = 20;
    uint256 public buyRewardsFee = 20;

    uint256 public sellLiquidityFee = 10;
    uint256 public sellMarketingFee = 30;
    uint256 public sellRewardsFee = 10;

    uint256 public AmountLiquidityFee;
    uint256 public AmountMarketingFee;
    uint256 public AmountRewardsFee;

    uint256 public feeDenominator = 1000;

    address public _marketingWalletAddress = 0x0865DDF0bcb1C8a8E0fbc883b218c8c42bd4d5db;
    address public _liquidityReciever;

    address private constant deadWallet = 0x000000000000000000000000000000000000dEaD;
    address private constant ZeroWallet = 0x0000000000000000000000000000000000000000;

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

    uint256 public constant DECIMALS = 18;

    uint256 public _totalSupply = 100000 * (10 ** DECIMALS);

    uint256 public swapTokensAtAmount = _totalSupply.mul(50).div(feeDenominator); //0.5%

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

    bool public _enableLiquidity = true;
    bool public _enableSwap = true; 

     modifier validRecipient(address to) {
        require(to != address(0x0));
        _;
    }
  
    DividendDistributor distributor;
    address public PCASHDividendReceiver;

    uint256 distributorGas = 500000;
    
    address public pair;
    IPancakeSwapPair public pairContract;
    IPancakeSwapRouter public router;

    bool inSwap = false;

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() ERC20Detailed("Cash Protocol", "$$", uint8(DECIMALS)) Ownable() {

        router = IPancakeSwapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); 

        pair = IPancakeSwapFactory(router.factory()).createPair(
            router.WETH(),
            address(this)
        );

        _allowances[address(this)][address(router)] = uint256(-1);

        pairContract = IPancakeSwapPair(pair);
        automatedMarketMakerPairs[pair] = true;
        _liquidityReciever = msg.sender;

        distributor = new DividendDistributor(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D );

        PCASHDividendReceiver = address(distributor);

        isDividendExempt[owner()] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[deadWallet] = true;
        isDividendExempt[ZeroWallet] = true;
        
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;

        _balances[owner()] = _totalSupply;
        emit Transfer(address(0x0), owner(), _totalSupply);
    }

    function transfer(address to, uint256 value)
        external
        override
        validRecipient(to)
        returns (bool)
    {
        _transferFrom(msg.sender, to, value);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external override validRecipient(to) returns (bool) {
        
        if (_allowances[from][msg.sender] != uint256(-1)) {
            _allowances[from][msg.sender] = _allowances[from][
                msg.sender
            ].sub(value, "Insufficient Allowance");
        }
        _transferFrom(from, to, value);
        return true;
    }

    function _basicTransfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        _balances[from] = _balances[from].sub(amount);
        _balances[to] = _balances[to].add(amount);
        return true;
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {


        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        if (shouldAddLiquidity()) {
            addLiquidity();
        }

        if (shouldSwapBack()) {
            swapBack();
        }
        
        _balances[sender] = _balances[sender].sub(amount);
        
        uint256 AmountReceived = shouldTakeFee(sender, recipient)
            ? takeFee(sender, recipient, amount)
            : amount;

        _balances[recipient] = _balances[recipient].add(AmountReceived);

        if(!isDividendExempt[sender]){ try distributor.setShare(sender, balanceOf(sender)) {} catch {} }
        if(!isDividendExempt[recipient]){ try distributor.setShare(recipient, balanceOf(recipient)) {} catch {} }

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(sender,recipient,AmountReceived);
        return true;
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal  returns (uint256) {

        uint256 feeAmount;
        uint LFEE;
        uint MFEE;
        uint RFEE;
        
        if(automatedMarketMakerPairs[sender]){

            LFEE = amount.mul(buyLiquidityFee).div(feeDenominator);
            AmountLiquidityFee += LFEE;
            MFEE = amount.mul(buyMarketingFee).div(feeDenominator);
            AmountMarketingFee += MFEE;
            RFEE = amount.mul(buyRewardsFee).div(feeDenominator);
            AmountRewardsFee += RFEE;

            feeAmount = LFEE.add(MFEE).add(RFEE);
        }
        else if(automatedMarketMakerPairs[recipient]){

            LFEE = amount.mul(sellLiquidityFee).div(feeDenominator);
            AmountLiquidityFee += LFEE;
            MFEE = amount.mul(sellMarketingFee).div(feeDenominator);
            AmountMarketingFee += MFEE;
            RFEE = amount.mul(sellRewardsFee).div(feeDenominator);
            AmountRewardsFee += RFEE;

            feeAmount = LFEE.add(MFEE).add(RFEE);
    
        }

        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }

    function manualSwap() public onlyOwner swapping { 
        if(AmountLiquidityFee > 0) swapForLiquidity(AmountLiquidityFee); 
        if(AmountMarketingFee > 0) swapForMarketing(AmountMarketingFee);
        if(AmountRewardsFee > 0) swapAndSendDivident(AmountRewardsFee);
    }

    function addLiquidity() internal swapping {

        if(AmountLiquidityFee > 0){
            swapForLiquidity(AmountLiquidityFee);
        }

        if(AmountMarketingFee > 0){
            swapForMarketing(AmountMarketingFee);
        }

    }

    function swapBack() internal swapping {
        if(AmountRewardsFee > 0){
            swapAndSendDivident(AmountRewardsFee);
        }      
    }

    function swapAndSendDivident(uint256 _tokens) private {
        uint initialBalance = address(this).balance;
        swapTokensForEth(_tokens);
        uint ReceivedBalance = address(this).balance.sub(initialBalance);
        AmountRewardsFee = AmountRewardsFee.sub(_tokens);
        try distributor.deposit { value: ReceivedBalance } () {} catch {}  
    }

    function shouldTakeFee(address from, address to)
        internal
        view
        returns (bool)
    {
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            return false;
        }        
        else{
            return (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]);
        }
    }

    function shouldAddLiquidity() internal view returns (bool) {

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

        return
            _enableLiquidity && 
            !inSwap && 
            canSwap &&
            !automatedMarketMakerPairs[msg.sender];
    }

    function shouldSwapBack() internal view returns (bool) {
        return 
            _enableSwap &&
            !inSwap &&
            !automatedMarketMakerPairs[msg.sender]; 
    }


    function setAutoAddLiquidity(bool _flag) external onlyOwner {
        if(_flag) {
            _enableLiquidity = _flag;
        } else {
            _enableLiquidity = _flag;
        }
    }

    function setAutoSwapBack(bool _flag) external onlyOwner {
        if(_flag) {
            _enableSwap = _flag;
        } else {
            _enableSwap = _flag;
        }
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        returns (bool)
    {
        uint256 oldValue = _allowances[msg.sender][spender];
        if (subtractedValue >= oldValue) {
            _allowances[msg.sender][spender] = 0;
        } else {
            _allowances[msg.sender][spender] = oldValue.sub(
                subtractedValue
            );
        }
        emit Approval(
            msg.sender,
            spender,
            _allowances[msg.sender][spender]
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        external
        returns (bool)
    {
        _allowances[msg.sender][spender] = _allowances[msg.sender][
            spender
        ].add(addedValue);
        emit Approval(
            msg.sender,
            spender,
            _allowances[msg.sender][spender]
        );
        return true;
    }

    function approve(address spender, uint256 value)
        external
        override
        returns (bool)
    {
        _approve(msg.sender,spender,value);
        return true;
    }

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

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

    function checkFeeExempt(address _addr) external view returns (bool) {
        return _isExcludedFromFees[_addr];
    }

    function setBuyFee(
            uint _newLp,
            uint _newMarketing,
            uint _newReward
        ) public onlyOwner {
      
        buyLiquidityFee = _newLp;
        buyMarketingFee = _newMarketing;
        buyRewardsFee = _newReward;
    }

    function setSellFee(
            uint _newLp,
            uint _newMarketing,
            uint _newReward
        ) public onlyOwner {

        sellLiquidityFee = _newLp;
        sellMarketingFee = _newMarketing;
        sellRewardsFee = _newReward;
    }

    function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(this) && !automatedMarketMakerPairs[holder]);
        isDividendExempt[holder] = exempt;

        if (exempt) {
            distributor.setShare(holder, 0);
        } else {
            distributor.setShare(holder, balanceOf(holder));
        }
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external onlyOwner {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function clearStuckBalance(address _receiver) external onlyOwner {
        uint256 balance = address(this).balance;
        payable(_receiver).transfer(balance);
    }

    function rescueToken(address tokenAddress,address _receiver, uint256 tokens) external onlyOwner returns (bool success){
        return IERC20(tokenAddress).transfer(_receiver, tokens);
    }

    function rescueDToken(address tokenAddress,address _receiver, uint256 tokens) external onlyOwner  returns (bool success) {
        return distributor.rescueToken(tokenAddress, _receiver,tokens);
    }

    function setFeeReceivers(address _marketing,address _liquidity) public onlyOwner {
        _marketingWalletAddress = _marketing;
        _liquidityReciever = _liquidity;
    }

    function setDistributorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000, "Gas must be lower than 750000");
        distributorGas = gas;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return
            _totalSupply.sub(_balances[deadWallet]).sub(_balances[ZeroWallet]);
    }

    function isNotInSwap() external view returns (bool) {
        return !inSwap;
    }

    function manualSync() external {
        IPancakeSwapPair(pair).sync();
    }

    function setLP(address _address) external onlyOwner {
        pairContract = IPancakeSwapPair(_address);
        pair = _address;
    }

    function setAutomaticPairMarket(address _addr,bool _status) public onlyOwner {
        if(_status) {
            require(!automatedMarketMakerPairs[_addr],"Pair Already Set!!");
        }
        automatedMarketMakerPairs[_addr] = _status;
        isDividendExempt[_addr] = true;
    }

    function setWhitelistFee(address _addr,bool _status) external onlyOwner {
        require(_isExcludedFromFees[_addr] != _status, "Error: Not changed");
        _isExcludedFromFees[_addr] = _status;
    }

    function setMinSwapAmount(uint _value) external onlyOwner {
        swapTokensAtAmount = _value;
    }
    
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }
   
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function swapForMarketing(uint _tokens) private {
        uint initalBalance = address(this).balance;
        swapTokensForEth(_tokens);
        uint recieveBalance = address(this).balance.sub(initalBalance);
        AmountMarketingFee = AmountMarketingFee.sub(_tokens);
        payable(_marketingWalletAddress).transfer(recieveBalance);
    }

    function swapForLiquidity(uint _tokens) private {
        uint half = AmountLiquidityFee.div(2);
        uint otherhalf = AmountLiquidityFee.sub(half);
        uint initalBalance = address(this).balance;
        swapTokensForEth(half);
        uint recieveBalance = address(this).balance.sub(initalBalance);
        AmountLiquidityFee = AmountLiquidityFee.sub(_tokens);
        addLiquidity(otherhalf,recieveBalance);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);
        // add the liquidity
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            _liquidityReciever,
            block.timestamp
        );

    }

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

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

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

    }

    receive() external payable {}


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AmountLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PCASHDividendReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_enableLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_enableSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityReciever","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isNotInSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairContract","outputs":[{"internalType":"contract IPancakeSwapPair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueDToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IPancakeSwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setAutoAddLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setAutoSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAutomaticPairMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLp","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"},{"internalType":"uint256","name":"_newReward","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMinSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLp","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"},{"internalType":"uint256","name":"_newReward","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setWhitelistFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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"},{"stateMutability":"payable","type":"receive"}]

6080604052600a60035560146004556014600555600a600655601e600755600a6008556103e8600c55730865ddf0bcb1c8a8e0fbc883b218c8c42bd4d5db600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a0a620186a002601255620000c2600c54620000ae603260125462000b2f60201b62002d681790919060201c565b62000bba60201b62002dee1790919060201c565b6013556001601660006101000a81548160ff0219169083151502179055506001601660016101000a81548160ff0219169083151502179055506207a1206018556000601b60146101000a81548160ff0219169083151502179055503480156200012a57600080fd5b506040518060400160405280600d81526020017f436173682050726f746f636f6c000000000000000000000000000000000000008152506040518060400160405280600281526020017f242400000000000000000000000000000000000000000000000000000000000081525060128260009080519060200190620001b192919062000d01565b508160019080519060200190620001ca92919062000d01565b5080600260006101000a81548160ff021916908360ff16021790555050505033600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002e857600080fd5b505afa158015620002fd573d6000803e3d6000fd5b505050506040513d60208110156200031457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a957600080fd5b505afa158015620003be573d6000803e3d6000fd5b505050506040513d6020811015620003d557600080fd5b8101908080519060200190929190505050306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200045157600080fd5b505af115801562000466573d6000803e3d6000fd5b505050506040513d60208110156200047d57600080fd5b8101908080519060200190929190505050601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160106000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d604051620006d29062000d98565b808273ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f0801580156200070f573d6000803e3d6000fd5b50601660026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160116000620007c962000c0c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160116000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016011600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000620009b462000c0c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506012546014600062000a7462000c0c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000ac262000c0c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012546040518082815260200191505060405180910390a362000dc5565b60008083141562000b44576000905062000bb4565b600082840290508284828162000b5657fe5b041462000baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620070a06021913960400191505060405180910390fd5b809150505b92915050565b600062000c0483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000c3660201b60201c565b905092915050565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808311829062000ce6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000caa57808201518184015260208101905062000c8d565b50505050905090810190601f16801562000cd85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000cf357fe5b049050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000d39576000855562000d85565b82601f1062000d5457805160ff191683800117855562000d85565b8280016001018555821562000d85579182015b8281111562000d8457825182559160200191906001019062000d67565b5b50905062000d94919062000da6565b5090565b611bda80620054c683390190565b5b8082111562000dc157600081600090555060010162000da7565b5090565b6146f18062000dd56000396000f3fe6080604052600436106103855760003560e01c80638f32d59b116101d1578063cfbac92f11610102578063e5711e8b116100a0578063f63743421161006f578063f637434214611314578063f708a64f1461133f578063f83267951461139c578063f887ea40146113c75761038c565b8063e5711e8b146111aa578063ea8b2c441461123b578063f11a24d314611298578063f2fde38b146112c35761038c565b8063d4399790116100dc578063d439979014611036578063dd62ed3e1461109d578063dde04b9514611122578063e2f456051461117f5761038c565b8063cfbac92f14610fa1578063cfe0e61914610fde578063d4057d7e146110095761038c565b8063a8aa1b311161016f578063b62496f511610149578063b62496f514610e53578063b677814c14610eba578063bb8d513114610ee5578063c6501c8914610f105761038c565b8063a8aa1b3114610d74578063a9059cbb14610db5578063ad64598a14610e265761038c565b80639d1944f5116101ab5780639d1944f514610c16578063a457c2d714610c51578063a4b45c0014610cc2578063a715184d14610d335761038c565b80638f32d59b14610b2e5780639213691314610b5b57806395d89b4114610b865761038c565b80633eaaf86b116102b6578063715018a6116102545780637bce5a04116102235780637bce5a0414610a545780637fb6df5814610a7f57806383b4ac6814610ac05780638da5cb5b14610aed5761038c565b8063715018a6146109aa578063753d02a1146109c1578063764d72bf146109d857806377a3b60914610a295761038c565b80634bc6dd18116102905780634bc6dd18146108b05780634d709adf146108ed57806351bc3c851461092e57806370a08231146109455761038c565b80633eaaf86b146107dd5780634144d9e4146108085780634355855a146108495761038c565b80632b112e49116103235780632f34d282116102fd5780632f34d282146106b2578063313ce56714610703578063320d453414610731578063395093511461076c5761038c565b80632b112e49146106175780632d48e896146106425780632e0f2625146106875761038c565b806318160ddd1161035f57806318160ddd146104bd5780631d865c30146104e857806323b872dd1461053757806325519cf2146105c85761038c565b806306fdde0314610391578063095ea7b314610421578063180b0d7e146104925761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6611408565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103e65780820151818401526020810190506103cb565b50505050905090810190601f1680156104135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042d57600080fd5b5061047a6004803603604081101561044457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114aa565b60405180821515815260200191505060405180910390f35b34801561049e57600080fd5b506104a76114c1565b6040518082815260200191505060405180910390f35b3480156104c957600080fd5b506104d26114c7565b6040518082815260200191505060405180910390f35b3480156104f457600080fd5b506105356004803603606081101561050b57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506114d1565b005b34801561054357600080fd5b506105b06004803603606081101561055a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114fc565b60405180821515815260200191505060405180910390f35b3480156105d457600080fd5b50610615600480360360608110156105eb57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061173b565b005b34801561062357600080fd5b5061062c611766565b6040518082815260200191505060405180910390f35b34801561064e57600080fd5b506106856004803603604081101561066557600080fd5b810190808035906020019092919080359060200190929190505050611814565b005b34801561069357600080fd5b5061069c6118be565b6040518082815260200191505060405180910390f35b3480156106be57600080fd5b50610701600480360360208110156106d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118c3565b005b34801561070f57600080fd5b50610718611959565b604051808260ff16815260200191505060405180910390f35b34801561073d57600080fd5b5061076a6004803603602081101561075457600080fd5b8101908080359060200190929190505050611970565b005b34801561077857600080fd5b506107c56004803603604081101561078f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061198b565b60405180821515815260200191505060405180910390f35b3480156107e957600080fd5b506107f2611b87565b6040518082815260200191505060405180910390f35b34801561081457600080fd5b5061081d611b8d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561085557600080fd5b506108986004803603602081101561086c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bb3565b60405180821515815260200191505060405180910390f35b3480156108bc57600080fd5b506108eb600480360360208110156108d357600080fd5b81019080803515159060200190929190505050611bd3565b005b3480156108f957600080fd5b50610902611c27565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561093a57600080fd5b50610943611c4d565b005b34801561095157600080fd5b506109946004803603602081101561096857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cdb565b6040518082815260200191505060405180910390f35b3480156109b657600080fd5b506109bf611d24565b005b3480156109cd57600080fd5b506109d6611dde565b005b3480156109e457600080fd5b50610a27600480360360208110156109fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e62565b005b348015610a3557600080fd5b50610a3e611ec3565b6040518082815260200191505060405180910390f35b348015610a6057600080fd5b50610a69611ec9565b6040518082815260200191505060405180910390f35b348015610a8b57600080fd5b50610a94611ecf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610acc57600080fd5b50610ad5611ef5565b60405180821515815260200191505060405180910390f35b348015610af957600080fd5b50610b02611f0d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b3a57600080fd5b50610b43611f37565b60405180821515815260200191505060405180910390f35b348015610b6757600080fd5b50610b70611f8f565b6040518082815260200191505060405180910390f35b348015610b9257600080fd5b50610b9b611f95565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bdb578082015181840152602081019050610bc0565b50505050905090810190601f168015610c085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c2257600080fd5b50610c4f60048036036020811015610c3957600080fd5b8101908080359060200190929190505050612037565b005b348015610c5d57600080fd5b50610caa60048036036040811015610c7457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120ca565b60405180821515815260200191505060405180910390f35b348015610cce57600080fd5b50610d3160048036036040811015610ce557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061235a565b005b348015610d3f57600080fd5b50610d486123f1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d8057600080fd5b50610d89612417565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dc157600080fd5b50610e0e60048036036040811015610dd857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061243d565b60405180821515815260200191505060405180910390f35b348015610e3257600080fd5b50610e3b612491565b60405180821515815260200191505060405180910390f35b348015610e5f57600080fd5b50610ea260048036036020811015610e7657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124a4565b60405180821515815260200191505060405180910390f35b348015610ec657600080fd5b50610ecf6124c4565b6040518082815260200191505060405180910390f35b348015610ef157600080fd5b50610efa6124ca565b6040518082815260200191505060405180910390f35b348015610f1c57600080fd5b50610f8960048036036060811015610f3357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124d0565b60405180821515815260200191505060405180910390f35b348015610fad57600080fd5b50610fdc60048036036020811015610fc457600080fd5b810190808035151590602001909291905050506125d8565b005b348015610fea57600080fd5b50610ff361262c565b6040518082815260200191505060405180910390f35b34801561101557600080fd5b5061101e612632565b60405180821515815260200191505060405180910390f35b34801561104257600080fd5b506110856004803603602081101561105957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612645565b60405180821515815260200191505060405180910390f35b3480156110a957600080fd5b5061110c600480360360408110156110c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061269b565b6040518082815260200191505060405180910390f35b34801561112e57600080fd5b5061117d6004803603604081101561114557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612722565b005b34801561118b57600080fd5b50611194612854565b6040518082815260200191505060405180910390f35b3480156111b657600080fd5b50611223600480360360608110156111cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061285a565b60405180821515815260200191505060405180910390f35b34801561124757600080fd5b506112966004803603604081101561125e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612922565b005b3480156112a457600080fd5b506112ad612aad565b6040518082815260200191505060405180910390f35b3480156112cf57600080fd5b50611312600480360360208110156112e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ab3565b005b34801561132057600080fd5b50611329612ad0565b6040518082815260200191505060405180910390f35b34801561134b57600080fd5b5061139a6004803603604081101561136257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612ad6565b005b3480156113a857600080fd5b506113b1612d3c565b6040518082815260200191505060405180910390f35b3480156113d357600080fd5b506113dc612d42565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114a05780601f10611475576101008083540402835291602001916114a0565b820191906000526020600020905b81548152906001019060200180831161148357829003601f168201915b5050505050905090565b60006114b7338484612e38565b6001905092915050565b600c5481565b6000601254905090565b6114d9611f37565b6114e257600080fd5b826006819055508160078190555080600881905550505050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561153957600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611723576116a2836040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461302f9092919063ffffffff16565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61172e8585856130ef565b5060019150509392505050565b611743611f37565b61174c57600080fd5b826003819055508160048190555080600581905550505050565b600061180f601460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118016014600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546012546135a690919063ffffffff16565b6135a690919063ffffffff16565b905090565b61181c611f37565b61182557600080fd5b601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156118a257600080fd5b505af11580156118b6573d6000803e3d6000fd5b505050505050565b601281565b6118cb611f37565b6118d457600080fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260009054906101000a900460ff16905090565b611978611f37565b61198157600080fd5b8060138190555050565b6000611a1c82601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f090919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60125481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b611bdb611f37565b611be457600080fd5b8015611c095780601660016101000a81548160ff021916908315150217905550611c24565b80601660016101000a81548160ff0219169083151502179055505b50565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c55611f37565b611c5e57600080fd5b6001601b60146101000a81548160ff02191690831515021790555060006009541115611c9057611c8f600954613678565b5b6000600a541115611ca757611ca6600a546136fc565b5b6000600b541115611cbe57611cbd600b546137aa565b5b6000601b60146101000a81548160ff021916908315150217905550565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d2c611f37565b611d3557600080fd5b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e4857600080fd5b505af1158015611e5c573d6000803e3d6000fd5b50505050565b611e6a611f37565b611e7357600080fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ebe573d6000803e3d6000fd5b505050565b60055481565b60045481565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601b60149054906101000a900460ff1615905090565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60075481565b606060018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561202d5780601f106120025761010080835404028352916020019161202d565b820191906000526020600020905b81548152906001019060200180831161201057829003601f168201915b5050505050905090565b61203f611f37565b61204857600080fd5b620b71b081106120c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f476173206d757374206265206c6f776572207468616e2037353030303000000081525060200191505060405180910390fd5b8060188190555050565b600080601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083106121da576000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061226e565b6121ed83826135a690919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b612362611f37565b61236b57600080fd5b81600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561247a57600080fd5b6124853385856130ef565b50600191505092915050565b601660009054906101000a900460ff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60085481565b60006124da611f37565b6124e357600080fd5b601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e5711e8b8585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561259457600080fd5b505af11580156125a8573d6000803e3d6000fd5b505050506040513d60208110156125be57600080fd5b810190808051906020019092919050505090509392505050565b6125e0611f37565b6125e957600080fd5b801561260e5780601660006101000a81548160ff021916908315150217905550612629565b80601660006101000a81548160ff0219169083151502179055505b50565b600a5481565b601660019054906101000a900460ff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61272a611f37565b61273357600080fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156127f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4572726f723a204e6f74206368616e676564000000000000000000000000000081525060200191505060405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b6000612864611f37565b61286d57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156128de57600080fd5b505af11580156128f2573d6000803e3d6000fd5b505050506040513d602081101561290857600080fd5b810190808051906020019092919050505090509392505050565b61292a611f37565b61293357600080fd5b80156129fa57601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5061697220416c7265616479205365742121000000000000000000000000000081525060200191505060405180910390fd5b5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60035481565b612abb611f37565b612ac457600080fd5b612acd81613875565b50565b60065481565b612ade611f37565b612ae757600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b6d5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612b7657600080fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015612c8457601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612c6757600080fd5b505af1158015612c7b573d6000803e3d6000fd5b50505050612d38565b601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683612ccc85611cdb565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612d1f57600080fd5b505af1158015612d33573d6000803e3d6000fd5b505050505b5050565b60095481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080831415612d7b5760009050612de8565b6000828402905082848281612d8c57fe5b0414612de3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806146776021913960400191505060405180910390fd5b809150505b92915050565b6000612e3083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061396f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ebe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806146986024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806146556022913960400191505060405180910390fd5b80601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60008383111582906130dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130a1578082015181840152602081019050613086565b50505050905090810190601f1680156130ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000601b60149054906101000a900460ff161561311857613111848484613a35565b905061359f565b613120613b6c565b1561312e5761312d613c13565b5b613136613c79565b1561314457613143613cff565b5b61319682601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135a690919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006131e58585613d4e565b6131ef57826131fb565b6131fa858585613ea9565b5b905061324f81601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f090919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661339a57601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968661332b88611cdb565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561337e57600080fd5b505af192505050801561338f575060015b61339857613399565b5b5b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134a257601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968561343387611cdb565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561348657600080fd5b505af1925050508015613497575060015b6134a0576134a1565b5b5b601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796018546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561351957600080fd5b505af192505050801561352a575060015b61353357613534565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019150505b9392505050565b60006135e883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061302f565b905092915050565b60008082840190508381101561366e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006136906002600954612dee90919063ffffffff16565b905060006136a9826009546135a690919063ffffffff16565b905060004790506136b983614230565b60006136ce82476135a690919063ffffffff16565b90506136e5856009546135a690919063ffffffff16565b6009819055506136f583826144e4565b5050505050565b600047905061370a82614230565b600061371f82476135a690919063ffffffff16565b905061373683600a546135a690919063ffffffff16565b600a81905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156137a4573d6000803e3d6000fd5b50505050565b60004790506137b882614230565b60006137cd82476135a690919063ffffffff16565b90506137e483600b546135a690919063ffffffff16565b600b81905550601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561385457600080fd5b505af193505050508015613866575060015b61386f57613870565b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156138af57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290613a1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139e05780820151818401526020810190506139c5565b50505050905090810190601f168015613a0d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613a2757fe5b049050809150509392505050565b6000613a8982601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135a690919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b1e82601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f090919063ffffffff16565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b600080613b7830611cdb565b905060006013548210159050601660009054906101000a900460ff168015613bad5750601b60149054906101000a900460ff16155b8015613bb65750805b8015613c0c5750601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b9250505090565b6001601b60146101000a81548160ff02191690831515021790555060006009541115613c4557613c44600954613678565b5b6000600a541115613c5c57613c5b600a546136fc565b5b6000601b60146101000a81548160ff021916908315150217905550565b6000601660019054906101000a900460ff168015613ca45750601b60149054906101000a900460ff16155b8015613cfa5750601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905090565b6001601b60146101000a81548160ff0219169083151502179055506000600b541115613d3157613d30600b546137aa565b5b6000601b60146101000a81548160ff021916908315150217905550565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613df15750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613dff5760009050613ea3565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613ea05750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90505b92915050565b6000806000806000601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613fe057613f2c600c54613f1e60035489612d6890919063ffffffff16565b612dee90919063ffffffff16565b925082600960008282540192505081905550613f67600c54613f5960045489612d6890919063ffffffff16565b612dee90919063ffffffff16565b915081600a60008282540192505081905550613fa2600c54613f9460055489612d6890919063ffffffff16565b612dee90919063ffffffff16565b905080600b60008282540192505081905550613fd981613fcb84866135f090919063ffffffff16565b6135f090919063ffffffff16565b935061410c565b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561410b5761405b600c5461404d60065489612d6890919063ffffffff16565b612dee90919063ffffffff16565b925082600960008282540192505081905550614096600c5461408860075489612d6890919063ffffffff16565b612dee90919063ffffffff16565b915081600a600082825401925050819055506140d1600c546140c360085489612d6890919063ffffffff16565b612dee90919063ffffffff16565b905080600b60008282540192505081905550614108816140fa84866135f090919063ffffffff16565b6135f090919063ffffffff16565b93505b5b60008411156142105761416784601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f090919063ffffffff16565b601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35b61422384876135a690919063ffffffff16565b9450505050509392505050565b6000600267ffffffffffffffff8111801561424a57600080fd5b506040519080825280602002602001820160405280156142795781602001602082028036833780820191505090505b509050308160008151811061428a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561432c57600080fd5b505afa158015614340573d6000803e3d6000fd5b505050506040513d602081101561435657600080fd5b81019080805190602001909291905050508160018151811061437457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143db30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e38565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561449f578082015181840152602081019050614484565b505050509050019650505050505050600060405180830381600087803b1580156144c857600080fd5b505af11580156144dc573d6000803e3d6000fd5b505050505050565b61451130601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e38565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156145fd57600080fd5b505af1158015614611573d6000803e3d6000fd5b50505050506040513d606081101561462857600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050505056fe45524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a264697066735822122022d361f05485da670540c1b4b3b928b041e9723a046eed01167b9230a28c0cd664736f6c63430007060033608060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555069d3c21bcecceda1000000600c55610e10600d55620f4240600e5534801561008057600080fd5b50604051611bda380380611bda833981810160405260208110156100a357600080fd5b8101908080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561010357737a250d5630b4cf539739df2c5dacb4c659f2488d610105565b805b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611a45806101956000396000f3fe6080604052600436106100f35760003560e01c8063ce7c2ac21161008a578063efca2eed11610059578063efca2eed1461040d578063f0fc6bca14610438578063ffb2c4791461044f578063ffd49c841461048a576100f3565b8063ce7c2ac2146102d4578063d0e30db014610347578063e2d2e21914610351578063e5711e8b1461037c576100f3565b80632d48e896116100c65780632d48e8961461020e5780633a98ef39146102535780634fab0ae81461027e578063997664d7146102a9576100f3565b806311ce023d146100f857806314b6ca961461012357806326987b601461017e57806328fd3198146101a9575b600080fd5b34801561010457600080fd5b5061010d6104b5565b6040518082815260200191505060405180910390f35b34801561012f57600080fd5b5061017c6004803603604081101561014657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506104bb565b005b34801561018a57600080fd5b5061019361077a565b6040518082815260200191505060405180910390f35b3480156101b557600080fd5b506101f8600480360360208110156101cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610780565b6040518082815260200191505060405180910390f35b34801561021a57600080fd5b506102516004803603604081101561023157600080fd5b81019080803590602001909291908035906020019092919050505061089a565b005b34801561025f57600080fd5b50610268610904565b6040518082815260200191505060405180910390f35b34801561028a57600080fd5b5061029361090a565b6040518082815260200191505060405180910390f35b3480156102b557600080fd5b506102be610910565b6040518082815260200191505060405180910390f35b3480156102e057600080fd5b50610323600480360360208110156102f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610916565b60405180848152602001838152602001828152602001935050505060405180910390f35b61034f610940565b005b34801561035d57600080fd5b50610366610e3b565b6040518082815260200191505060405180910390f35b34801561038857600080fd5b506103f56004803603606081101561039f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e41565b60405180821515815260200191505060405180910390f35b34801561041957600080fd5b50610422610f51565b6040518082815260200191505060405180910390f35b34801561044457600080fd5b5061044d610f57565b005b34801561045b57600080fd5b506104886004803603602081101561047257600080fd5b8101908080359060200190929190505050610f62565b005b34801561049657600080fd5b5061049f6110dc565b6040518082815260200191505060405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461051357600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154111561056857610567826110e2565b5b6000811180156105ba57506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156105cd576105c8826113a8565b61062f565b60008114801561061f57506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b1561062e5761062d82611457565b5b5b6106988161068a600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460075461163090919063ffffffff16565b61167a90919063ffffffff16565b60078190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550610730600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611702565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600b5481565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156107d55760009050610895565b6000610822600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611702565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905080821161087d57600092505050610895565b610890818361163090919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108f257600080fd5b81600d8190555080600e819055505050565b60075481565b600e5481565b60085481565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461099857600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610a2357600080fd5b505afa158015610a37573d6000803e3d6000fd5b505050506040513d6020811015610a4d57600080fd5b810190808051906020019092919050505090506000600267ffffffffffffffff81118015610a7a57600080fd5b50604051908082528060200260200182016040528015610aa95781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1457600080fd5b505afa158015610b28573d6000803e3d6000fd5b505050506040513d6020811015610b3e57600080fd5b810190808051906020019092919050505081600081518110610b5c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610bc657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b815260040180858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610cbe578082015181840152602081019050610ca3565b50505050905001955050505050506000604051808303818588803b158015610ce557600080fd5b505af1158015610cf9573d6000803e3d6000fd5b50505050506000610dd683600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610d8d57600080fd5b505afa158015610da1573d6000803e3d6000fd5b505050506040513d6020811015610db757600080fd5b810190808051906020019092919050505061163090919063ffffffff16565b9050610ded8160085461167a90919063ffffffff16565b600881905550610e30610e1f600754610e1184600c5461173490919063ffffffff16565b6117ba90919063ffffffff16565b600a5461167a90919063ffffffff16565b600a81905550505050565b600a5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e9c57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610f0d57600080fd5b505af1158015610f21573d6000803e3d6000fd5b505050506040513d6020811015610f3757600080fd5b810190808051906020019092919050505090509392505050565b60095481565b610f60336110e2565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fba57600080fd5b600060038054905090506000811415610fd357506110d9565b6000805a905060005b8483108015610fea57508381105b156110d45783600b5410611001576000600b819055505b6110436003600b548154811061101357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611804565b1561108b5761108a6003600b548154811061105a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110e2565b5b6110b06110a15a8461163090919063ffffffff16565b8461167a90919063ffffffff16565b92505a9150600b600081548092919060010191905055508080600101915050610fdc565b505050505b50565b600d5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415611132576113a5565b600061113d82610780565b905060008111156113a35761115d8160095461167a90919063ffffffff16565b600981905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111f657600080fd5b505af115801561120a573d6000803e3d6000fd5b505050506040513d602081101561122057600080fd5b81019080805190602001909291905050505042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112cb81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461167a90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061135c600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611702565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60036001600380549050038154811061146c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106114e357fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546004600060036001600380549050038154811061158457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060038054806115f857fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600061167283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611868565b905092915050565b6000808284019050838110156116f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061172d600c5461171f600a548561173490919063ffffffff16565b6117ba90919063ffffffff16565b9050919050565b60008083141561174757600090506117b4565b600082840290508284828161175857fe5b04146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806119ef6021913960400191505060405180910390fd5b809150505b92915050565b60006117fc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611928565b905092915050565b600042600d54600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011080156118615750600e5461185f83610780565b115b9050919050565b6000838311158290611915576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118da5780820151818401526020810190506118bf565b50505050905090810190601f1680156119075780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561199957808201518184015260208101905061197e565b50505050905090810190601f1680156119c65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816119e057fe5b04905080915050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212208794d92173cfde5091efb485a8cda5105c790656da1059ca2b8d87df974f3ea664736f6c63430007060033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638f32d59b116101d1578063cfbac92f11610102578063e5711e8b116100a0578063f63743421161006f578063f637434214611314578063f708a64f1461133f578063f83267951461139c578063f887ea40146113c75761038c565b8063e5711e8b146111aa578063ea8b2c441461123b578063f11a24d314611298578063f2fde38b146112c35761038c565b8063d4399790116100dc578063d439979014611036578063dd62ed3e1461109d578063dde04b9514611122578063e2f456051461117f5761038c565b8063cfbac92f14610fa1578063cfe0e61914610fde578063d4057d7e146110095761038c565b8063a8aa1b311161016f578063b62496f511610149578063b62496f514610e53578063b677814c14610eba578063bb8d513114610ee5578063c6501c8914610f105761038c565b8063a8aa1b3114610d74578063a9059cbb14610db5578063ad64598a14610e265761038c565b80639d1944f5116101ab5780639d1944f514610c16578063a457c2d714610c51578063a4b45c0014610cc2578063a715184d14610d335761038c565b80638f32d59b14610b2e5780639213691314610b5b57806395d89b4114610b865761038c565b80633eaaf86b116102b6578063715018a6116102545780637bce5a04116102235780637bce5a0414610a545780637fb6df5814610a7f57806383b4ac6814610ac05780638da5cb5b14610aed5761038c565b8063715018a6146109aa578063753d02a1146109c1578063764d72bf146109d857806377a3b60914610a295761038c565b80634bc6dd18116102905780634bc6dd18146108b05780634d709adf146108ed57806351bc3c851461092e57806370a08231146109455761038c565b80633eaaf86b146107dd5780634144d9e4146108085780634355855a146108495761038c565b80632b112e49116103235780632f34d282116102fd5780632f34d282146106b2578063313ce56714610703578063320d453414610731578063395093511461076c5761038c565b80632b112e49146106175780632d48e896146106425780632e0f2625146106875761038c565b806318160ddd1161035f57806318160ddd146104bd5780631d865c30146104e857806323b872dd1461053757806325519cf2146105c85761038c565b806306fdde0314610391578063095ea7b314610421578063180b0d7e146104925761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6611408565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103e65780820151818401526020810190506103cb565b50505050905090810190601f1680156104135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042d57600080fd5b5061047a6004803603604081101561044457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114aa565b60405180821515815260200191505060405180910390f35b34801561049e57600080fd5b506104a76114c1565b6040518082815260200191505060405180910390f35b3480156104c957600080fd5b506104d26114c7565b6040518082815260200191505060405180910390f35b3480156104f457600080fd5b506105356004803603606081101561050b57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506114d1565b005b34801561054357600080fd5b506105b06004803603606081101561055a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114fc565b60405180821515815260200191505060405180910390f35b3480156105d457600080fd5b50610615600480360360608110156105eb57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061173b565b005b34801561062357600080fd5b5061062c611766565b6040518082815260200191505060405180910390f35b34801561064e57600080fd5b506106856004803603604081101561066557600080fd5b810190808035906020019092919080359060200190929190505050611814565b005b34801561069357600080fd5b5061069c6118be565b6040518082815260200191505060405180910390f35b3480156106be57600080fd5b50610701600480360360208110156106d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118c3565b005b34801561070f57600080fd5b50610718611959565b604051808260ff16815260200191505060405180910390f35b34801561073d57600080fd5b5061076a6004803603602081101561075457600080fd5b8101908080359060200190929190505050611970565b005b34801561077857600080fd5b506107c56004803603604081101561078f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061198b565b60405180821515815260200191505060405180910390f35b3480156107e957600080fd5b506107f2611b87565b6040518082815260200191505060405180910390f35b34801561081457600080fd5b5061081d611b8d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561085557600080fd5b506108986004803603602081101561086c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bb3565b60405180821515815260200191505060405180910390f35b3480156108bc57600080fd5b506108eb600480360360208110156108d357600080fd5b81019080803515159060200190929190505050611bd3565b005b3480156108f957600080fd5b50610902611c27565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561093a57600080fd5b50610943611c4d565b005b34801561095157600080fd5b506109946004803603602081101561096857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cdb565b6040518082815260200191505060405180910390f35b3480156109b657600080fd5b506109bf611d24565b005b3480156109cd57600080fd5b506109d6611dde565b005b3480156109e457600080fd5b50610a27600480360360208110156109fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e62565b005b348015610a3557600080fd5b50610a3e611ec3565b6040518082815260200191505060405180910390f35b348015610a6057600080fd5b50610a69611ec9565b6040518082815260200191505060405180910390f35b348015610a8b57600080fd5b50610a94611ecf565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610acc57600080fd5b50610ad5611ef5565b60405180821515815260200191505060405180910390f35b348015610af957600080fd5b50610b02611f0d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b3a57600080fd5b50610b43611f37565b60405180821515815260200191505060405180910390f35b348015610b6757600080fd5b50610b70611f8f565b6040518082815260200191505060405180910390f35b348015610b9257600080fd5b50610b9b611f95565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bdb578082015181840152602081019050610bc0565b50505050905090810190601f168015610c085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c2257600080fd5b50610c4f60048036036020811015610c3957600080fd5b8101908080359060200190929190505050612037565b005b348015610c5d57600080fd5b50610caa60048036036040811015610c7457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506120ca565b60405180821515815260200191505060405180910390f35b348015610cce57600080fd5b50610d3160048036036040811015610ce557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061235a565b005b348015610d3f57600080fd5b50610d486123f1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d8057600080fd5b50610d89612417565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dc157600080fd5b50610e0e60048036036040811015610dd857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061243d565b60405180821515815260200191505060405180910390f35b348015610e3257600080fd5b50610e3b612491565b60405180821515815260200191505060405180910390f35b348015610e5f57600080fd5b50610ea260048036036020811015610e7657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124a4565b60405180821515815260200191505060405180910390f35b348015610ec657600080fd5b50610ecf6124c4565b6040518082815260200191505060405180910390f35b348015610ef157600080fd5b50610efa6124ca565b6040518082815260200191505060405180910390f35b348015610f1c57600080fd5b50610f8960048036036060811015610f3357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124d0565b60405180821515815260200191505060405180910390f35b348015610fad57600080fd5b50610fdc60048036036020811015610fc457600080fd5b810190808035151590602001909291905050506125d8565b005b348015610fea57600080fd5b50610ff361262c565b6040518082815260200191505060405180910390f35b34801561101557600080fd5b5061101e612632565b60405180821515815260200191505060405180910390f35b34801561104257600080fd5b506110856004803603602081101561105957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612645565b60405180821515815260200191505060405180910390f35b3480156110a957600080fd5b5061110c600480360360408110156110c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061269b565b6040518082815260200191505060405180910390f35b34801561112e57600080fd5b5061117d6004803603604081101561114557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612722565b005b34801561118b57600080fd5b50611194612854565b6040518082815260200191505060405180910390f35b3480156111b657600080fd5b50611223600480360360608110156111cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061285a565b60405180821515815260200191505060405180910390f35b34801561124757600080fd5b506112966004803603604081101561125e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612922565b005b3480156112a457600080fd5b506112ad612aad565b6040518082815260200191505060405180910390f35b3480156112cf57600080fd5b50611312600480360360208110156112e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ab3565b005b34801561132057600080fd5b50611329612ad0565b6040518082815260200191505060405180910390f35b34801561134b57600080fd5b5061139a6004803603604081101561136257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612ad6565b005b3480156113a857600080fd5b506113b1612d3c565b6040518082815260200191505060405180910390f35b3480156113d357600080fd5b506113dc612d42565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114a05780601f10611475576101008083540402835291602001916114a0565b820191906000526020600020905b81548152906001019060200180831161148357829003601f168201915b5050505050905090565b60006114b7338484612e38565b6001905092915050565b600c5481565b6000601254905090565b6114d9611f37565b6114e257600080fd5b826006819055508160078190555080600881905550505050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561153957600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611723576116a2836040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461302f9092919063ffffffff16565b601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61172e8585856130ef565b5060019150509392505050565b611743611f37565b61174c57600080fd5b826003819055508160048190555080600581905550505050565b600061180f601460008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118016014600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546012546135a690919063ffffffff16565b6135a690919063ffffffff16565b905090565b61181c611f37565b61182557600080fd5b601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156118a257600080fd5b505af11580156118b6573d6000803e3d6000fd5b505050505050565b601281565b6118cb611f37565b6118d457600080fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260009054906101000a900460ff16905090565b611978611f37565b61198157600080fd5b8060138190555050565b6000611a1c82601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f090919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60125481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b611bdb611f37565b611be457600080fd5b8015611c095780601660016101000a81548160ff021916908315150217905550611c24565b80601660016101000a81548160ff0219169083151502179055505b50565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c55611f37565b611c5e57600080fd5b6001601b60146101000a81548160ff02191690831515021790555060006009541115611c9057611c8f600954613678565b5b6000600a541115611ca757611ca6600a546136fc565b5b6000600b541115611cbe57611cbd600b546137aa565b5b6000601b60146101000a81548160ff021916908315150217905550565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611d2c611f37565b611d3557600080fd5b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e4857600080fd5b505af1158015611e5c573d6000803e3d6000fd5b50505050565b611e6a611f37565b611e7357600080fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ebe573d6000803e3d6000fd5b505050565b60055481565b60045481565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601b60149054906101000a900460ff1615905090565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60075481565b606060018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561202d5780601f106120025761010080835404028352916020019161202d565b820191906000526020600020905b81548152906001019060200180831161201057829003601f168201915b5050505050905090565b61203f611f37565b61204857600080fd5b620b71b081106120c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f476173206d757374206265206c6f776572207468616e2037353030303000000081525060200191505060405180910390fd5b8060188190555050565b600080601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083106121da576000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061226e565b6121ed83826135a690919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b612362611f37565b61236b57600080fd5b81600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561247a57600080fd5b6124853385856130ef565b50600191505092915050565b601660009054906101000a900460ff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60085481565b60006124da611f37565b6124e357600080fd5b601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e5711e8b8585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561259457600080fd5b505af11580156125a8573d6000803e3d6000fd5b505050506040513d60208110156125be57600080fd5b810190808051906020019092919050505090509392505050565b6125e0611f37565b6125e957600080fd5b801561260e5780601660006101000a81548160ff021916908315150217905550612629565b80601660006101000a81548160ff0219169083151502179055505b50565b600a5481565b601660019054906101000a900460ff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61272a611f37565b61273357600080fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156127f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4572726f723a204e6f74206368616e676564000000000000000000000000000081525060200191505060405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b6000612864611f37565b61286d57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156128de57600080fd5b505af11580156128f2573d6000803e3d6000fd5b505050506040513d602081101561290857600080fd5b810190808051906020019092919050505090509392505050565b61292a611f37565b61293357600080fd5b80156129fa57601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5061697220416c7265616479205365742121000000000000000000000000000081525060200191505060405180910390fd5b5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60035481565b612abb611f37565b612ac457600080fd5b612acd81613875565b50565b60065481565b612ade611f37565b612ae757600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b6d5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612b7657600080fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015612c8457601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612c6757600080fd5b505af1158015612c7b573d6000803e3d6000fd5b50505050612d38565b601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683612ccc85611cdb565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612d1f57600080fd5b505af1158015612d33573d6000803e3d6000fd5b505050505b5050565b60095481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080831415612d7b5760009050612de8565b6000828402905082848281612d8c57fe5b0414612de3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806146776021913960400191505060405180910390fd5b809150505b92915050565b6000612e3083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061396f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ebe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806146986024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806146556022913960400191505060405180910390fd5b80601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60008383111582906130dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130a1578082015181840152602081019050613086565b50505050905090810190601f1680156130ce5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000601b60149054906101000a900460ff161561311857613111848484613a35565b905061359f565b613120613b6c565b1561312e5761312d613c13565b5b613136613c79565b1561314457613143613cff565b5b61319682601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135a690919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006131e58585613d4e565b6131ef57826131fb565b6131fa858585613ea9565b5b905061324f81601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f090919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661339a57601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968661332b88611cdb565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561337e57600080fd5b505af192505050801561338f575060015b61339857613399565b5b5b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134a257601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968561343387611cdb565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561348657600080fd5b505af1925050508015613497575060015b6134a0576134a1565b5b5b601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796018546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561351957600080fd5b505af192505050801561352a575060015b61353357613534565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019150505b9392505050565b60006135e883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061302f565b905092915050565b60008082840190508381101561366e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006136906002600954612dee90919063ffffffff16565b905060006136a9826009546135a690919063ffffffff16565b905060004790506136b983614230565b60006136ce82476135a690919063ffffffff16565b90506136e5856009546135a690919063ffffffff16565b6009819055506136f583826144e4565b5050505050565b600047905061370a82614230565b600061371f82476135a690919063ffffffff16565b905061373683600a546135a690919063ffffffff16565b600a81905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156137a4573d6000803e3d6000fd5b50505050565b60004790506137b882614230565b60006137cd82476135a690919063ffffffff16565b90506137e483600b546135a690919063ffffffff16565b600b81905550601660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561385457600080fd5b505af193505050508015613866575060015b61386f57613870565b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156138af57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290613a1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139e05780820151818401526020810190506139c5565b50505050905090810190601f168015613a0d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613a2757fe5b049050809150509392505050565b6000613a8982601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135a690919063ffffffff16565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b1e82601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f090919063ffffffff16565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b600080613b7830611cdb565b905060006013548210159050601660009054906101000a900460ff168015613bad5750601b60149054906101000a900460ff16155b8015613bb65750805b8015613c0c5750601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b9250505090565b6001601b60146101000a81548160ff02191690831515021790555060006009541115613c4557613c44600954613678565b5b6000600a541115613c5c57613c5b600a546136fc565b5b6000601b60146101000a81548160ff021916908315150217905550565b6000601660019054906101000a900460ff168015613ca45750601b60149054906101000a900460ff16155b8015613cfa5750601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905090565b6001601b60146101000a81548160ff0219169083151502179055506000600b541115613d3157613d30600b546137aa565b5b6000601b60146101000a81548160ff021916908315150217905550565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613df15750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613dff5760009050613ea3565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613ea05750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90505b92915050565b6000806000806000601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613fe057613f2c600c54613f1e60035489612d6890919063ffffffff16565b612dee90919063ffffffff16565b925082600960008282540192505081905550613f67600c54613f5960045489612d6890919063ffffffff16565b612dee90919063ffffffff16565b915081600a60008282540192505081905550613fa2600c54613f9460055489612d6890919063ffffffff16565b612dee90919063ffffffff16565b905080600b60008282540192505081905550613fd981613fcb84866135f090919063ffffffff16565b6135f090919063ffffffff16565b935061410c565b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561410b5761405b600c5461404d60065489612d6890919063ffffffff16565b612dee90919063ffffffff16565b925082600960008282540192505081905550614096600c5461408860075489612d6890919063ffffffff16565b612dee90919063ffffffff16565b915081600a600082825401925050819055506140d1600c546140c360085489612d6890919063ffffffff16565b612dee90919063ffffffff16565b905080600b60008282540192505081905550614108816140fa84866135f090919063ffffffff16565b6135f090919063ffffffff16565b93505b5b60008411156142105761416784601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f090919063ffffffff16565b601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35b61422384876135a690919063ffffffff16565b9450505050509392505050565b6000600267ffffffffffffffff8111801561424a57600080fd5b506040519080825280602002602001820160405280156142795781602001602082028036833780820191505090505b509050308160008151811061428a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561432c57600080fd5b505afa158015614340573d6000803e3d6000fd5b505050506040513d602081101561435657600080fd5b81019080805190602001909291905050508160018151811061437457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143db30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e38565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561449f578082015181840152602081019050614484565b505050509050019650505050505050600060405180830381600087803b1580156144c857600080fd5b505af11580156144dc573d6000803e3d6000fd5b505050505050565b61451130601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612e38565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156145fd57600080fd5b505af1158015614611573d6000803e3d6000fd5b50505050506040513d606081101561462857600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050505050505056fe45524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a264697066735822122022d361f05485da670540c1b4b3b928b041e9723a046eed01167b9230a28c0cd664736f6c63430007060033

Deployed Bytecode Sourcemap

21138:16034:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20862:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31105:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21633:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35014:102;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32092:264;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24391:447;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31818:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33884:167;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32744:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22168:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34239:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21048:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34898:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30709:388;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22214:55;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21678:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22111:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29743:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22840:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27547:279;;;;;;;;;;;;;:::i;:::-;;35127:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20073:126;;;;;;;;;;;;;:::i;:::-;;34152:79;;;;;;;;;;;;;:::i;:::-;;32934:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21342:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21300:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22725:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34059:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19808:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19973:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21427:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20953:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33708:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30129:572;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33522:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21768:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22814:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24168:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22500:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22046:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21593:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21470:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33312:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29539:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21553:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22542:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31690:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29933:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34684:206;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22278:76;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33112:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34385:291;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21258:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20207:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21384:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32364:372;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21513:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22883:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20862:83;20899:13;20932:5;20925:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20862:83;:::o;31105:189::-;31208:4;31230:34;31239:10;31250:7;31258:5;31230:8;:34::i;:::-;31282:4;31275:11;;31105:189;;;;:::o;21633:36::-;;;;:::o;35014:102::-;35069:7;35096:12;;35089:19;;35014:102;:::o;32092:264::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;32261:6:::1;32242:16;:25;;;;32297:13;32278:16;:32;;;;32338:10;32321:14;:27;;;;32092:264:::0;;;:::o;24391:447::-;24534:4;24521:2;22652:3;22638:18;;:2;:18;;;;22630:27;;;;;;24606:2:::1;24565:11;:17;24577:4;24565:17;;;;;;;;;;;;;;;:29;24583:10;24565:29;;;;;;;;;;;;;;;;:44;24561:207;;24658:98;24724:5;24658:98;;;;;;;;;;;;;;;;::::0;:11:::1;:17;24670:4;24658:17;;;;;;;;;;;;;;;:61;24694:10;24658:61;;;;;;;;;;;;;;;;:65;;:98;;;;;:::i;:::-;24626:11;:17;24638:4;24626:17;;;;;;;;;;;;;;;:29;24644:10;24626:29;;;;;;;;;;;;;;;:130;;;;24561:207;24778:30;24792:4;24798:2;24802:5;24778:13;:30::i;:::-;;24826:4;24819:11;;24391:447:::0;;;;;;:::o;31818:266::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;31991:6:::1;31973:15;:24;;;;32026:13;32008:15;:31;;;;32066:10;32050:13;:26;;;;31818:266:::0;;;:::o;33884:167::-;33937:7;33977:66;34021:9;:21;21935:42;34021:21;;;;;;;;;;;;;;;;33977:39;33994:9;:21;21848:42;33994:21;;;;;;;;;;;;;;;;33977:12;;:16;;:39;;;;:::i;:::-;:43;;:66;;;;:::i;:::-;33957:86;;33884:167;:::o;32744:182::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;32853:11:::1;;;;;;;;;;;:35;;;32889:10;32901:16;32853:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32744:182:::0;;:::o;22168:37::-;22203:2;22168:37;:::o;34239:138::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;34334:8:::1;34302:12;;:41;;;;;;;;;;;;;;;;;;34361:8;34354:4;;:15;;;;;;;;;;;;;;;;;;34239:138:::0;:::o;21048:83::-;21089:5;21114:9;;;;;;;;;;;21107:16;;21048:83;:::o;34898:104::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;34988:6:::1;34967:18;:27;;;;34898:104:::0;:::o;30709:388::-;30809:4;30866:72;30927:10;30866:11;:23;30878:10;30866:23;;;;;;;;;;;;;;;:56;30904:7;30866:56;;;;;;;;;;;;;;;;:60;;:72;;;;:::i;:::-;30831:11;:23;30843:10;30831:23;;;;;;;;;;;;;;;:32;30855:7;30831:32;;;;;;;;;;;;;;;:107;;;;31002:7;30954:113;;30977:10;30954:113;;;31024:11;:23;31036:10;31024:23;;;;;;;;;;;;;;;:32;31048:7;31024:32;;;;;;;;;;;;;;;;30954:113;;;;;;;;;;;;;;;;;;31085:4;31078:11;;30709:388;;;;:::o;22214:55::-;;;;:::o;21678:83::-;;;;;;;;;;;;;:::o;22111:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;29743:182::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;29813:5:::1;29810:108;;;29849:5;29835:11;;:19;;;;;;;;;;;;;;;;;;29810:108;;;29901:5;29887:11;;:19;;;;;;;;;;;;;;;;;;29810:108;29743:182:::0;:::o;22840:36::-;;;;;;;;;;;;;:::o;27547:279::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;22992:4:::1;22983:6;;:13;;;;;;;;;;;;;;;;;;27631:1:::2;27610:18;;:22;27607:63;;;27634:36;27651:18;;27634:16;:36::i;:::-;27607:63;27706:1;27685:18;;:22;27682:63;;;27709:36;27726:18;;27709:16;:36::i;:::-;27682:63;27778:1;27759:16;;:20;27756:62;;;27781:37;27801:16;;27781:19;:37::i;:::-;27756:62;23028:5:::1;23019:6;;:14;;;;;;;;;;;;;;;;;;27547:279::o:0;35127:119::-;35193:7;35220:9;:18;35230:7;35220:18;;;;;;;;;;;;;;;;35213:25;;35127:119;;;:::o;20073:126::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;20154:6:::1;;;;;;;;;;;20135:26;;;;;;;;;;;;20189:1;20172:6;;:19;;;;;;;;;;;;;;;;;;20073:126::o:0;34152:79::-;34211:4;;;;;;;;;;;34194:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34152:79::o;32934:170::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;33010:15:::1;33028:21;33010:39;;33068:9;33060:27;;:36;33088:7;33060:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;19956:1;32934:170:::0;:::o;21342:33::-;;;;:::o;21300:35::-;;;;:::o;22725:36::-;;;;;;;;;;;;;:::o;34059:85::-;34105:4;34130:6;;;;;;;;;;;34129:7;34122:14;;34059:85;:::o;19808:79::-;19846:7;19873:6;;;;;;;;;;;19866:13;;19808:79;:::o;19973:92::-;20013:4;20051:6;;;;;;;;;;;20037:20;;:10;:20;;;20030:27;;19973:92;:::o;21427:36::-;;;;:::o;20953:87::-;20992:13;21025:7;21018:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20953:87;:::o;33708:168::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;33797:6:::1;33791:3;:12;33783:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33865:3;33848:14;:20;;;;33708:168:::0;:::o;30129:572::-;30234:4;30256:16;30275:11;:23;30287:10;30275:23;;;;;;;;;;;;;;;:32;30299:7;30275:32;;;;;;;;;;;;;;;;30256:51;;30341:8;30322:15;:27;30318:225;;30401:1;30366:11;:23;30378:10;30366:23;;;;;;;;;;;;;;;:32;30390:7;30366:32;;;;;;;;;;;;;;;:36;;;;30318:225;;;30470:61;30501:15;30470:8;:12;;:61;;;;:::i;:::-;30435:11;:23;30447:10;30435:23;;;;;;;;;;;;;;;:32;30459:7;30435:32;;;;;;;;;;;;;;;:96;;;;30318:225;30606:7;30558:113;;30581:10;30558:113;;;30628:11;:23;30640:10;30628:23;;;;;;;;;;;;;;;:32;30652:7;30628:32;;;;;;;;;;;;;;;;30558:113;;;;;;;;;;;;;;;;;;30689:4;30682:11;;;30129:572;;;;:::o;33522:178::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;33640:10:::1;33614:23;;:36;;;;;;;;;;;;;;;;;;33682:10;33661:18;;:31;;;;;;;;;;;;;;;;;;33522:178:::0;;:::o;21768:33::-;;;;;;;;;;;;;:::o;22814:19::-;;;;;;;;;;;;;:::o;24168:215::-;24295:4;24273:2;22652:3;22638:18;;:2;:18;;;;22630:27;;;;;;24317:36:::1;24331:10;24343:2;24347:5;24317:13;:36::i;:::-;;24371:4;24364:11;;24168:215:::0;;;;;:::o;22500:35::-;;;;;;;;;;;;;:::o;22046:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;21593:31::-;;;;:::o;21470:34::-;;;;:::o;33312:202::-;33419:12;19935:9;:7;:9::i;:::-;19927:18;;;;;;33451:11:::1;;;;;;;;;;;:23;;;33475:12;33489:9;33499:6;33451:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;33444:62;;33312:202:::0;;;;;:::o;29539:196::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;29613:5:::1;29610:118;;;29654:5;29635:16;;:24;;;;;;;;;;;;;;;;;;29610:118;;;29711:5;29692:16;;:24;;;;;;;;;;;;;;;;;;29610:118;29539:196:::0;:::o;21553:33::-;;;;:::o;22542:30::-;;;;;;;;;;;;;:::o;31690:120::-;31752:4;31776:19;:26;31796:5;31776:26;;;;;;;;;;;;;;;;;;;;;;;;;31769:33;;31690:120;;;:::o;29933:188::-;30053:7;30085:11;:19;30097:6;30085:19;;;;;;;;;;;;;;;:28;30105:7;30085:28;;;;;;;;;;;;;;;;30078:35;;29933:188;;;;:::o;34684:206::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;34805:7:::1;34775:37;;:19;:26;34795:5;34775:26;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;;34767:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34875:7;34846:19;:26;34866:5;34846:26;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;34684:206:::0;;:::o;22278:76::-;;;;:::o;33112:192::-;33217:12;19935:9;:7;:9::i;:::-;19927:18;;;;;;33255:12:::1;33248:29;;;33278:9;33289:6;33248:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;33241:55;;33112:192:::0;;;;;:::o;34385:291::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;34476:7:::1;34473:102;;;34509:25;:32;34535:5;34509:32;;;;;;;;;;;;;;;;;;;;;;;;;34508:33;34500:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34473:102;34620:7;34585:25;:32;34611:5;34585:32;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;34664:4;34638:16;:23;34655:5;34638:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;34385:291:::0;;:::o;21258:35::-;;;;:::o;20207:109::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;20280:28:::1;20299:8;20280:18;:28::i;:::-;20207:109:::0;:::o;21384:36::-;;;;:::o;32364:372::-;19935:9;:7;:9::i;:::-;19927:18;;;;;;32478:4:::1;32460:23;;:6;:23;;;;:61;;;;;32488:25;:33;32514:6;32488:33;;;;;;;;;;;;;;;;;;;;;;;;;32487:34;32460:61;32452:70;;;::::0;::::1;;32560:6;32533:16;:24;32550:6;32533:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;32583:6;32579:150;;;32606:11;;;;;;;;;;;:20;;;32627:6;32635:1;32606:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32579:150;;;32670:11;;;;;;;;;;;:20;;;32691:6;32699:17;32709:6;32699:9;:17::i;:::-;32670:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32579:150;32364:372:::0;;:::o;21513:33::-;;;;:::o;22883:32::-;;;;;;;;;;;;;:::o;4490:250::-;4548:7;4577:1;4572;:6;4568:47;;;4602:1;4595:8;;;;4568:47;4627:9;4643:1;4639;:5;4627:17;;4672:1;4667;4663;:5;;;;;;:10;4655:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4731:1;4724:8;;;4490:250;;;;;:::o;4748:132::-;4806:7;4833:39;4837:1;4840;4833:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;4826:46;;4748:132;;;;:::o;31302:380::-;31455:1;31438:19;;:5;:19;;;;31430:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31536:1;31517:21;;:7;:21;;;;31509:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31620:6;31590:11;:18;31602:5;31590:18;;;;;;;;;;;;;;;:27;31609:7;31590:27;;;;;;;;;;;;;;;:36;;;;31658:7;31642:32;;31651:5;31642:32;;;31667:6;31642:32;;;;;;;;;;;;;;;;;;31302:380;;;:::o;4256:226::-;4376:7;4409:1;4404;:6;;4412:12;4396:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4436:9;4452:1;4448;:5;4436:17;;4473:1;4466:8;;;4256:226;;;;;:::o;25116:1054::-;25242:4;25267:6;;;;;;;;;;;25263:87;;;25297:41;25312:6;25320:9;25331:6;25297:14;:41::i;:::-;25290:48;;;;25263:87;25366:20;:18;:20::i;:::-;25362:67;;;25403:14;:12;:14::i;:::-;25362:67;25445:16;:14;:16::i;:::-;25441:59;;;25478:10;:8;:10::i;:::-;25441:59;25540:29;25562:6;25540:9;:17;25550:6;25540:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;25520:9;:17;25530:6;25520:17;;;;;;;;;;;;;;;:49;;;;25590:22;25615:32;25629:6;25637:9;25615:13;:32::i;:::-;:104;;25713:6;25615:104;;;25663:34;25671:6;25679:9;25690:6;25663:7;:34::i;:::-;25615:104;25590:129;;25755:40;25780:14;25755:9;:20;25765:9;25755:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;25732:9;:20;25742:9;25732:20;;;;;;;;;;;;;;;:63;;;;25812:16;:24;25829:6;25812:24;;;;;;;;;;;;;;;;;;;;;;;;;25808:96;;25843:11;;;;;;;;;;;:20;;;25864:6;25872:17;25882:6;25872:9;:17::i;:::-;25843:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25839:63;;;;;;25808:96;25918:16;:27;25935:9;25918:27;;;;;;;;;;;;;;;;;;;;;;;;;25914:105;;25952:11;;;;;;;;;;;:20;;;25973:9;25984:20;25994:9;25984;:20::i;:::-;25952:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25948:69;;;;;;25914:105;26035:11;;;;;;;;;;;:19;;;26055:14;;26035:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26031:51;;;;;;26115:9;26099:41;;26108:6;26099:41;;;26125:14;26099:41;;;;;;;;;;;;;;;;;;26158:4;26151:11;;;25116:1054;;;;;;:::o;4112:136::-;4170:7;4197:43;4201:1;4204;4197:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4190:50;;4112:136;;;;:::o;3923:181::-;3981:7;4001:9;4017:1;4013;:5;4001:17;;4042:1;4037;:6;;4029:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4095:1;4088:8;;;3923:181;;;;:::o;35611:431::-;35670:9;35682:25;35705:1;35682:18;;:22;;:25;;;;:::i;:::-;35670:37;;35718:14;35735:28;35758:4;35735:18;;:22;;:28;;;;:::i;:::-;35718:45;;35774:18;35795:21;35774:42;;35827:22;35844:4;35827:16;:22::i;:::-;35860:19;35882:40;35908:13;35882:21;:25;;:40;;;;:::i;:::-;35860:62;;35954:31;35977:7;35954:18;;:22;;:31;;;;:::i;:::-;35933:18;:52;;;;35996:38;36009:9;36019:14;35996:12;:38::i;:::-;35611:431;;;;;:::o;35254:349::-;35313:18;35334:21;35313:42;;35366:25;35383:7;35366:16;:25::i;:::-;35402:19;35424:40;35450:13;35424:21;:25;;:40;;;;:::i;:::-;35402:62;;35496:31;35519:7;35496:18;;:22;;:31;;;;:::i;:::-;35475:18;:52;;;;35546:23;;;;;;;;;;;35538:41;;:57;35580:14;35538:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35254:349;;;:::o;28254:363::-;28319:19;28341:21;28319:43;;28373:25;28390:7;28373:16;:25::i;:::-;28409:20;28432:41;28458:14;28432:21;:25;;:41;;;;:::i;:::-;28409:64;;28503:29;28524:7;28503:16;;:20;;:29;;;;:::i;:::-;28484:16;:48;;;;28547:11;;;;;;;;;;;:19;;;28576:15;28547:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28543:65;;;;;;28254:363;;;:::o;20324:187::-;20418:1;20398:22;;:8;:22;;;;20390:31;;;;;;20466:8;20437:38;;20458:6;;;;;;;;;;;20437:38;;;;;;;;;;;;20495:8;20486:6;;:17;;;;;;;;;;;;;;;;;;20324:187;:::o;4888:225::-;5008:7;5040:1;5036;:5;5043:12;5028:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5067:9;5083:1;5079;:5;;;;;;5067:17;;5104:1;5097:8;;;4888:225;;;;;:::o;24846:262::-;24964:4;24999:27;25019:6;24999:9;:15;25009:4;24999:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;24981:9;:15;24991:4;24981:15;;;;;;;;;;;;;;;:45;;;;25053:25;25071:6;25053:9;:13;25063:2;25053:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;25037:9;:13;25047:2;25037:13;;;;;;;;;;;;;;;:41;;;;25096:4;25089:11;;24846:262;;;;;:::o;28978:357::-;29031:4;29050:28;29081:24;29099:4;29081:9;:24::i;:::-;29050:55;;29116:12;29155:18;;29131:20;:42;;29116:57;;29206:16;;;;;;;;;;;:41;;;;;29241:6;;;;;;;;;;;29240:7;29206:41;:66;;;;;29265:7;29206:66;:121;;;;;29290:25;:37;29316:10;29290:37;;;;;;;;;;;;;;;;;;;;;;;;;29289:38;29206:121;29186:141;;;;28978:357;:::o;27834:254::-;22992:4;22983:6;;:13;;;;;;;;;;;;;;;;;;27913:1:::1;27892:18;;:22;27889:89;;;27930:36;27947:18;;27930:16;:36::i;:::-;27889:89;28014:1;27993:18;;:22;27990:89;;;28031:36;28048:18;;28031:16;:36::i;:::-;27990:89;23028:5:::0;23019:6;;:14;;;;;;;;;;;;;;;;;;27834:254::o;29343:186::-;29392:4;29430:11;;;;;;;;;;;:35;;;;;29459:6;;;;;;;;;;;29458:7;29430:35;:90;;;;;29483:25;:37;29509:10;29483:37;;;;;;;;;;;;;;;;;;;;;;;;;29482:38;29430:90;29409:111;;29343:186;:::o;28096:150::-;22992:4;22983:6;;:13;;;;;;;;;;;;;;;;;;28167:1:::1;28148:16;;:20;28145:88;;;28184:37;28204:16;;28184:19;:37::i;:::-;28145:88;23028:5:::0;23019:6;;:14;;;;;;;;;;;;;;;;;;28096:150::o;28625:345::-;28724:4;28749:19;:25;28769:4;28749:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28778:19;:23;28798:2;28778:23;;;;;;;;;;;;;;;;;;;;;;;;;28749:52;28746:217;;;28824:5;28817:12;;;;28746:217;28886:25;:31;28912:4;28886:31;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;28921:25;:29;28947:2;28921:29;;;;;;;;;;;;;;;;;;;;;;;;;28886:64;28878:73;;28625:345;;;;;:::o;26178:1361::-;26299:7;26321:17;26349:9;26369;26389;26422:25;:33;26448:6;26422:33;;;;;;;;;;;;;;;;;;;;;;;;;26419:887;;;26480:47;26512:14;;26480:27;26491:15;;26480:6;:10;;:27;;;;:::i;:::-;:31;;:47;;;;:::i;:::-;26473:54;;26564:4;26542:18;;:26;;;;;;;;;;;26590:47;26622:14;;26590:27;26601:15;;26590:6;:10;;:27;;;;:::i;:::-;:31;;:47;;;;:::i;:::-;26583:54;;26674:4;26652:18;;:26;;;;;;;;;;;26700:45;26730:14;;26700:25;26711:13;;26700:6;:10;;:25;;;;:::i;:::-;:29;;:45;;;;:::i;:::-;26693:52;;26780:4;26760:16;;:24;;;;;;;;;;;26813;26832:4;26813:14;26822:4;26813;:8;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;26801:36;;26419:887;;;26867:25;:36;26893:9;26867:36;;;;;;;;;;;;;;;;;;;;;;;;;26864:442;;;26928:48;26961:14;;26928:28;26939:16;;26928:6;:10;;:28;;;;:::i;:::-;:32;;:48;;;;:::i;:::-;26921:55;;27013:4;26991:18;;:26;;;;;;;;;;;27039:48;27072:14;;27039:28;27050:16;;27039:6;:10;;:28;;;;:::i;:::-;:32;;:48;;;;:::i;:::-;27032:55;;27124:4;27102:18;;:26;;;;;;;;;;;27150:46;27181:14;;27150:26;27161:14;;27150:6;:10;;:26;;;;:::i;:::-;:30;;:46;;;;:::i;:::-;27143:53;;27231:4;27211:16;;:24;;;;;;;;;;;27264;27283:4;27264:14;27273:4;27264;:8;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;27252:36;;26864:442;26419:887;27333:1;27321:9;:13;27318:173;;;27378:39;27407:9;27378;:24;27396:4;27378:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;27351:9;:24;27369:4;27351:24;;;;;;;;;;;;;;;:66;;;;27462:4;27437:42;;27446:6;27437:42;;;27469:9;27437:42;;;;;;;;;;;;;;;;;;27318:173;27510:21;27521:9;27510:6;:10;;:21;;;;:::i;:::-;27503:28;;;;;;26178:1361;;;;;:::o;36564:564::-;36690:21;36728:1;36714:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36690:40;;36759:4;36741;36746:1;36741:7;;;;;;;;;;;;;:23;;;;;;;;;;;36785:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36775:4;36780:1;36775:7;;;;;;;;;;;;;:23;;;;;;;;;;;36811:53;36828:4;36843:6;;;;;;;;;;;36852:11;36811:8;:53::i;:::-;36903:6;;;;;;;;;;;:57;;;36975:11;37001:1;37045:4;37072;37092:15;36903:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36564:564;;:::o;36050:506::-;36198:53;36215:4;36230:6;;;;;;;;;;;36239:11;36198:8;:53::i;:::-;36292:6;;;;;;;;;;;:22;;;36322:9;36355:4;36375:11;36401:1;36444;36487:18;;;;;;;;;;;36520:15;36292:254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36050:506;;:::o

Swarm Source

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