ETH Price: $3,499.96 (+2.43%)
Gas: 15 Gwei

Token

Burnomics (BURN)
 

Overview

Max Total Supply

82,567,904 BURN

Holders

70

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000014508624 BURN

Value
$0.00
0x77e6186d1dbb68336beea1d1a790d9b3ec3a7996
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:
Burnomics

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-30
*/

// SPDX-License-Identifier: Unlicensed

/**
    Website: burnomics.com 
    Twitter: https://twitter.com/burnomics_eth
    Telegram: https://t.me/burnomics_eth
    Docs: https://docs.burnomics.com/
*/

pragma solidity ^0.8.4;

abstract contract Context {

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

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

interface IERC20 {

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

}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {

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

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

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

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

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

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

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

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

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

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

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


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

    // Burn Stats

    uint256 public totalBurned = 0;
    uint256 public totalBurnRewards = 0;

    uint256 public burnCapDivisor = 10; // Divisor for burn reward cap per tx
    uint256 public burnSub1EthCap = 100000000000000000; // cap in gwei if rewards < 1 Eth
    
    string private _name = "Burnomics";
    string private _symbol = "BURN";
    uint8 private _decimals = 18;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;

    address payable private devMarketingWallet;
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;

    uint256 public _buyLiquidityFees = 10;
    uint256 public _buyDevFees = 5;
    uint256 public _buyBurnFees = 10;

    uint256 public _sellLiquidityFees = 10;
    uint256 public _sellDevFees = 5;
    uint256 public _sellBurnFees = 10;

    uint256 public _liquidityShares = 1;
    uint256 public _devShares = 2;
    uint256 public _burnShares = 2;

    uint256 public _totalTaxIfBuying = 25;
    uint256 public _totalTaxIfSelling = 25;
    uint256 public _totalDistributionShares = 5;

    // Fees / MaxWallet / TxLimit exemption mappings
    
    mapping (address => bool) public checkExcludedFromFees;
    mapping (address => bool) public checkWalletLimitExcept;
    mapping (address => bool) public checkTxLimitExcept;
    mapping (address => bool) public checkMarketPair;

    // Supply / Max Tx tokenomics

    uint256 private _totalSupply = 100 * 10**6 * 10**18;
    uint256 public _maxTxAmount = 1 * 10**6 * 10**18;
    uint256 public _walletMax = 2 * 10**6 * 10**18;
    uint256 private minimumTokensBeforeSwap = 2 * 10**5 * 10**18;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;

    // Swap and liquify flags (for taxes)
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;
    bool public enableTrading;

    // events & modifiers

    event BurnedTokensForEth (
        address account,
        uint256 burnAmount,
        uint256 ethRecievedAmount
    );


    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
constructor () {
        devMarketingWallet = payable(msg.sender);
        
        uniswapV2Router= IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), uniswapV2Router.WETH());
        _approve(address(this), address(uniswapV2Router), _totalSupply);

        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        checkExcludedFromFees[owner()] = true;
        checkExcludedFromFees[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFees.add(_buyDevFees).add(_buyBurnFees);
        _totalTaxIfSelling = _sellLiquidityFees.add(_sellDevFees).add(_sellBurnFees);
        _totalDistributionShares = _liquidityShares.add(_devShares).add(_burnShares);

        checkWalletLimitExcept[owner()] = true;
        checkWalletLimitExcept[address(uniswapPair)] = true;
        checkWalletLimitExcept[address(this)] = true;
        
        checkTxLimitExcept[owner()] = true;
        checkTxLimitExcept[address(this)] = true;

        checkMarketPair[address(uniswapPair)] = true;

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");



        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

    }

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

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

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

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

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

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

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        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 addMarketPair(address account) public onlyOwner {
        checkMarketPair[account] = true;
    }

    function setcheckTxLimitExcept(address holder, bool exempt) external onlyOwner {
        checkTxLimitExcept[holder] = exempt;
    }
    
    function setcheckExcludedFromFees(address account, bool newValue) public onlyOwner {
        checkExcludedFromFees[account] = newValue;
    }

    function setBuyFee(uint256 newLiquidityTax, uint256 newDevTax, uint256 newBurnTax) external onlyOwner() {
        _buyLiquidityFees = newLiquidityTax;
        _buyDevFees = newDevTax;
        _buyBurnFees = newBurnTax;

        _totalTaxIfBuying = _buyLiquidityFees.add(_buyDevFees).add(_buyBurnFees);
    }

    function setSellFee(uint256 newLiquidityTax, uint256 newDevTax, uint256 newBurnTax) external onlyOwner() {
        _sellLiquidityFees = newLiquidityTax;
        _sellDevFees = newDevTax;
        _sellBurnFees = newBurnTax;

        _totalTaxIfSelling = _sellLiquidityFees.add(_sellDevFees).add(_sellBurnFees);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newDevShare, uint256 newBurnShare) external onlyOwner() {
        _liquidityShares = newLiquidityShare;
        _devShares = newDevShare;
        _burnShares = newBurnShare;

        _totalDistributionShares = _liquidityShares.add(_devShares).add(_burnShares);
    }
    
    function adjustMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount <= (100 * 10**6 * 10**18), "Max wallet should be less");
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function setcheckWalletLimitExcept(address holder, bool exempt) external onlyOwner {
        checkWalletLimitExcept[holder] = exempt;
    }

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

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function setDevMarketingWallet(address newAddress) external onlyOwner() {
        devMarketingWallet = payable(newAddress);
    }


    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }

    function openTrading() external onlyOwner(){
        require(!enableTrading, "trading opened");
        addLiquidity(balanceOf(address(this)), address(this).balance);
        enableTrading = true;     
    }

    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

     //to recieve ETH from uniswapV2Router when swapping
    receive() external payable {}

    // msg.sender burns tokens and recieve uniswap rate TAX FREE, instead of selling.
    function burnForEth(uint256 amount) public returns (bool) {
        require(balanceOf(_msgSender()) >= amount, "not enough funds to burn");

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uint[] memory a = uniswapV2Router.getAmountsOut(amount, path);

        uint256 cap;
        if (address(this).balance <= 1 ether) {
            cap = burnSub1EthCap;
        } else {
            cap = address(this).balance / burnCapDivisor;
        }

        require(a[a.length - 1] <= cap, "amount greater than cap");
        require(address(this).balance >= a[a.length - 1], "not enough funds in contract");

        transferToAddressETH(_msgSender(), a[a.length - 1]);
        _burn(_msgSender(), amount);
        
        totalBurnRewards += a[a.length - 1];
        totalBurned += amount;

        emit BurnedTokensForEth(_msgSender(), amount, a[a.length - 1]);
        return true;
    }

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

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

    function _transfer(address sender, address recipient, uint256 amount) internal virtual  {

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

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

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !checkMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly && enableTrading)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(amount < contractTokenBalance? amount:contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (checkExcludedFromFees[sender] || checkExcludedFromFees[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);
            if(!enableTrading) finalAmount = takeFee(sender, recipient, amount);

            if(checkWalletLimit && !checkWalletLimitExcept[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

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

            emit Transfer(sender, recipient, finalAmount);

        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {

        if(!enableTrading) return;
        
        uint256 ethBalanceBeforeSwap = address(this).balance;
        uint256 tokensForLP = tAmount.mul(_liquidityShares).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance.sub(ethBalanceBeforeSwap);

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShares.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShares).div(totalETHFee).div(2);
        uint256 amountETHBurn = amountReceived.mul(_burnShares).div(totalETHFee);
        uint256 amountETHDev = amountReceived.sub(amountETHLiquidity).sub(amountETHBurn);

        if(amountETHDev > 0)
            transferToAddressETH(devMarketingWallet, amountETHDev);


        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }

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

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

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

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


    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(checkMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(checkMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }

    function getStats() public view returns (uint256, uint256, uint256) {
        return (totalBurned, totalBurnRewards, address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethRecievedAmount","type":"uint256"}],"name":"BurnedTokensForEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBurnFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyDevFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellBurnFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"adjustMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnCapDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnForEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnSub1EthCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkTxLimitExcept","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"checkWalletLimitExcept","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStats","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newDevTax","type":"uint256"},{"internalType":"uint256","name":"newBurnTax","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDevMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newDevShare","type":"uint256"},{"internalType":"uint256","name":"newBurnShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newDevTax","type":"uint256"},{"internalType":"uint256","name":"newBurnTax","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setcheckExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setcheckTxLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setcheckWalletLimitExcept","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040525f6002555f600355600a60045567016345785d8a00006005556040518060400160405280600981526020017f4275726e6f6d69637300000000000000000000000000000000000000000000008152506006908162000063919062000f0a565b506040518060400160405280600481526020017f4255524e0000000000000000000000000000000000000000000000000000000081525060079081620000aa919062000f0a565b50601260085f6101000a81548160ff021916908360ff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff16815250600a600c556005600d55600a600e55600a600f556005601055600a6011556001601255600260135560026014556019601555601960165560056017556a52b7d2dcc80cd2e4000000601c5569d3c21bcecceda1000000601d556a01a784379d99db42000000601e55692a5a058fc295ed000000601f556001602160156101000a81548160ff0219169083151502179055505f602160166101000a81548160ff0219169083151502179055506001602160176101000a81548160ff021916908315150217905550348015620001cd575f80fd5b505f620001df62000a4b60201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35033600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d60205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200037a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003a0919062001053565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000427573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200044d919062001053565b6040518363ffffffff1660e01b81526004016200046c92919062001094565b6020604051808303815f875af115801562000489573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004af919062001053565b60215f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005243060205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601c5462000a5260201b60201c565b601c54600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160185f620005d962000c1d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160185f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620006ac600e546200069d600d54600c5462000c4460201b90919060201c565b62000c4460201b90919060201c565b601581905550620006e1601154620006d2601054600f5462000c4460201b90919060201c565b62000c4460201b90919060201c565b601681905550620007166014546200070760135460125462000c4460201b90919060201c565b62000c4460201b90919060201c565b601781905550600160195f6200073162000c1d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160195f60215f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160195f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001601a5f6200086062000c1d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001601a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001601b5f60215f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550601c5460095f6200099062000a4b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550620009dd62000a4b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601c5460405162000a3d9190620010d0565b60405180910390a3620012f8565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000ac3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aba906200116f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2b9062001203565b60405180910390fd5b80600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c109190620010d0565b60405180910390a3505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80828462000c54919062001250565b90508381101562000c9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c9390620012d8565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000d2257607f821691505b60208210810362000d385762000d3762000cdd565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d9c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d5f565b62000da8868362000d5f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000df262000dec62000de68462000dc0565b62000dc9565b62000dc0565b9050919050565b5f819050919050565b62000e0d8362000dd2565b62000e2562000e1c8262000df9565b84845462000d6b565b825550505050565b5f90565b62000e3b62000e2d565b62000e4881848462000e02565b505050565b5b8181101562000e6f5762000e635f8262000e31565b60018101905062000e4e565b5050565b601f82111562000ebe5762000e888162000d3e565b62000e938462000d50565b8101602085101562000ea3578190505b62000ebb62000eb28562000d50565b83018262000e4d565b50505b505050565b5f82821c905092915050565b5f62000ee05f198460080262000ec3565b1980831691505092915050565b5f62000efa838362000ecf565b9150826002028217905092915050565b62000f158262000ca6565b67ffffffffffffffff81111562000f315762000f3062000cb0565b5b62000f3d825462000d0a565b62000f4a82828562000e73565b5f60209050601f83116001811462000f80575f841562000f6b578287015190505b62000f77858262000eed565b86555062000fe6565b601f19841662000f908662000d3e565b5f5b8281101562000fb95784890151825560018201915060208501945060208101905062000f92565b8683101562000fd9578489015162000fd5601f89168262000ecf565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200101d8262000ff2565b9050919050565b6200102f8162001011565b81146200103a575f80fd5b50565b5f815190506200104d8162001024565b92915050565b5f602082840312156200106b576200106a62000fee565b5b5f6200107a848285016200103d565b91505092915050565b6200108e8162001011565b82525050565b5f604082019050620010a95f83018562001083565b620010b8602083018462001083565b9392505050565b620010ca8162000dc0565b82525050565b5f602082019050620010e55f830184620010bf565b92915050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f62001157602483620010eb565b91506200116482620010fb565b604082019050919050565b5f6020820190508181035f830152620011888162001149565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f620011eb602283620010eb565b9150620011f8826200118f565b604082019050919050565b5f6020820190508181035f8301526200121c81620011dd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200125c8262000dc0565b9150620012698362000dc0565b925082820190508082111562001284576200128362001223565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620012c0601b83620010eb565b9150620012cd826200128a565b602082019050919050565b5f6020820190508181035f830152620012f181620012b2565b9050919050565b608051615136620013185f395f8181611266015261129101526151365ff3fe6080604052600436106103a5575f3560e01c8063807c2d9c116101e6578063c2d4640e1161010c578063dd62ed3e1161009f578063f2fde38b1161006e578063f2fde38b14610d8e578063f872858a14610db6578063fabf706314610de0578063fb34a33614610e1c576103ac565b8063dd62ed3e14610cd8578063e207a92b14610d14578063f0cd1dac14610d3c578063f1d5f51714610d66576103ac565b8063c816841b116100db578063c816841b14610c44578063c9567bf914610c6e578063d89135cd14610c84578063da00097d14610cae576103ac565b8063c2d4640e14610b8c578063c49b9a8014610bb4578063c59d484714610bdc578063c78a789b14610c08576103ac565b80639e3fa32311610184578063a5d69d1f11610153578063a5d69d1f14610ac2578063a9059cbb14610aea578063af254b7214610b26578063b6c3af3414610b62576103ac565b80639e3fa32314610a08578063a08e671f14610a32578063a40dcda314610a5c578063a457c2d714610a86576103ac565b80638da5cb5b116101c05780638da5cb5b146109765780638f03aad5146109a0578063914eb66a146109c857806395d89b41146109de576103ac565b8063807c2d9c146108f857806382eefb43146109225780638a8c523c1461094c576103ac565b80633b97084a116102cb57806355324fa91161026957806370a082311161023857806370a082311461084057806374e8414e1461087c5780637b3a3ec6146108a45780637d1db4a5146108ce576103ac565b806355324fa91461078a57806357e6adcb146107c65780635e252455146107ee578063667b511c14610818576103ac565b80634a728e24116102a55780634a728e24146106d05780634a74bb02146106fa5780634f1c2aa414610724578063526012e81461074e576103ac565b80633b97084a146106545780633d98b9af1461067c5780633f251688146106a6576103ac565b80632563ae83116103435780632f0a5fd4116103125780632f0a5fd41461059a578063313ce567146105c457806331eca57e146105ee5780633950935114610618576103ac565b80632563ae83146104f657806327c8f8351461051e5780632b112e49146105485780632cdae5cb14610572576103ac565b806318160ddd1161037f57806318160ddd146104405780631d865c301461046a57806323b872dd1461049257806325519cf2146104ce576103ac565b806306fdde03146103b0578063095ea7b3146103da5780631694505e14610416576103ac565b366103ac57005b5f80fd5b3480156103bb575f80fd5b506103c4610e46565b6040516103d19190613eab565b60405180910390f35b3480156103e5575f80fd5b5061040060048036038101906103fb9190613f69565b610ed6565b60405161040d9190613fc1565b60405180910390f35b348015610421575f80fd5b5061042a610ef3565b6040516104379190614035565b60405180910390f35b34801561044b575f80fd5b50610454610f18565b604051610461919061405d565b60405180910390f35b348015610475575f80fd5b50610490600480360381019061048b9190614076565b610f21565b005b34801561049d575f80fd5b506104b860048036038101906104b391906140c6565b611000565b6040516104c59190613fc1565b60405180910390f35b3480156104d9575f80fd5b506104f460048036038101906104ef9190614076565b6110d4565b005b348015610501575f80fd5b5061051c60048036038101906105179190614140565b6111b3565b005b348015610529575f80fd5b50610532611264565b60405161053f919061417a565b60405180910390f35b348015610553575f80fd5b5061055c611288565b604051610569919061405d565b60405180910390f35b34801561057d575f80fd5b5061059860048036038101906105939190614193565b6112cb565b005b3480156105a5575f80fd5b506105ae6113b7565b6040516105bb919061405d565b60405180910390f35b3480156105cf575f80fd5b506105d86113bd565b6040516105e591906141ec565b60405180910390f35b3480156105f9575f80fd5b506106026113d2565b60405161060f919061405d565b60405180910390f35b348015610623575f80fd5b5061063e60048036038101906106399190613f69565b6113d8565b60405161064b9190613fc1565b60405180910390f35b34801561065f575f80fd5b5061067a60048036038101906106759190614205565b611486565b005b348015610687575f80fd5b50610690611524565b60405161069d919061405d565b60405180910390f35b3480156106b1575f80fd5b506106ba61152a565b6040516106c7919061405d565b60405180910390f35b3480156106db575f80fd5b506106e4611530565b6040516106f1919061405d565b60405180910390f35b348015610705575f80fd5b5061070e611536565b60405161071b9190613fc1565b60405180910390f35b34801561072f575f80fd5b50610738611549565b604051610745919061405d565b60405180910390f35b348015610759575f80fd5b50610774600480360381019061076f9190614230565b61154f565b6040516107819190613fc1565b60405180910390f35b348015610795575f80fd5b506107b060048036038101906107ab9190614230565b61156c565b6040516107bd9190613fc1565b60405180910390f35b3480156107d1575f80fd5b506107ec60048036038101906107e79190614193565b611589565b005b3480156107f9575f80fd5b50610802611675565b60405161080f919061405d565b60405180910390f35b348015610823575f80fd5b5061083e60048036038101906108399190614193565b61167b565b005b34801561084b575f80fd5b5061086660048036038101906108619190614230565b611767565b604051610873919061405d565b60405180910390f35b348015610887575f80fd5b506108a2600480360381019061089d9190614230565b6117ad565b005b3480156108af575f80fd5b506108b8611884565b6040516108c5919061405d565b60405180910390f35b3480156108d9575f80fd5b506108e261188a565b6040516108ef919061405d565b60405180910390f35b348015610903575f80fd5b5061090c611890565b604051610919919061405d565b60405180910390f35b34801561092d575f80fd5b50610936611896565b604051610943919061405d565b60405180910390f35b348015610957575f80fd5b5061096061189c565b60405161096d9190613fc1565b60405180910390f35b348015610981575f80fd5b5061098a6118af565b604051610997919061417a565b60405180910390f35b3480156109ab575f80fd5b506109c660048036038101906109c19190614205565b6118d6565b005b3480156109d3575f80fd5b506109dc6119c2565b005b3480156109e9575f80fd5b506109f2611b10565b6040516109ff9190613eab565b60405180910390f35b348015610a13575f80fd5b50610a1c611ba0565b604051610a29919061405d565b60405180910390f35b348015610a3d575f80fd5b50610a46611ba6565b604051610a53919061405d565b60405180910390f35b348015610a67575f80fd5b50610a70611bac565b604051610a7d919061405d565b60405180910390f35b348015610a91575f80fd5b50610aac6004803603810190610aa79190613f69565b611bb2565b604051610ab99190613fc1565b60405180910390f35b348015610acd575f80fd5b50610ae86004803603810190610ae39190614140565b611c7a565b005b348015610af5575f80fd5b50610b106004803603810190610b0b9190613f69565b611d2b565b604051610b1d9190613fc1565b60405180910390f35b348015610b31575f80fd5b50610b4c6004803603810190610b479190614205565b611d48565b604051610b599190613fc1565b60405180910390f35b348015610b6d575f80fd5b50610b766121c7565b604051610b83919061405d565b60405180910390f35b348015610b97575f80fd5b50610bb26004803603810190610bad9190614076565b6121cd565b005b348015610bbf575f80fd5b50610bda6004803603810190610bd59190614140565b6122ac565b005b348015610be7575f80fd5b50610bf0612394565b604051610bff9392919061425b565b60405180910390f35b348015610c13575f80fd5b50610c2e6004803603810190610c299190614230565b6123a9565b604051610c3b9190613fc1565b60405180910390f35b348015610c4f575f80fd5b50610c586123c6565b604051610c65919061417a565b60405180910390f35b348015610c79575f80fd5b50610c826123eb565b005b348015610c8f575f80fd5b50610c986124fe565b604051610ca5919061405d565b60405180910390f35b348015610cb9575f80fd5b50610cc2612504565b604051610ccf9190613fc1565b60405180910390f35b348015610ce3575f80fd5b50610cfe6004803603810190610cf99190614290565b612517565b604051610d0b919061405d565b60405180910390f35b348015610d1f575f80fd5b50610d3a6004803603810190610d359190614230565b612599565b005b348015610d47575f80fd5b50610d50612685565b604051610d5d919061405d565b60405180910390f35b348015610d71575f80fd5b50610d8c6004803603810190610d879190614205565b61268b565b005b348015610d99575f80fd5b50610db46004803603810190610daf9190614230565b612729565b005b348015610dc1575f80fd5b50610dca6128e6565b604051610dd79190613fc1565b60405180910390f35b348015610deb575f80fd5b50610e066004803603810190610e019190614230565b6128f9565b604051610e139190613fc1565b60405180910390f35b348015610e27575f80fd5b50610e30612916565b604051610e3d919061405d565b60405180910390f35b606060068054610e55906142fb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e81906142fb565b8015610ecc5780601f10610ea357610100808354040283529160200191610ecc565b820191905f5260205f20905b815481529060010190602001808311610eaf57829003601f168201915b5050505050905090565b5f610ee9610ee261291c565b8484612923565b6001905092915050565b60205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601c54905090565b610f2961291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac90614375565b60405180910390fd5b82600f819055508160108190555080601181905550610ff5601154610fe7601054600f54612ae690919063ffffffff16565b612ae690919063ffffffff16565b601681905550505050565b5f61100c848484612b43565b6110c98461101861291c565b6110c4856040518060600160405280602881526020016150b460289139600a5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61107b61291c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131469092919063ffffffff16565b612923565b600190509392505050565b6110dc61291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90614375565b60405180910390fd5b82600c8190555081600d8190555080600e819055506111a8600e5461119a600d54600c54612ae690919063ffffffff16565b612ae690919063ffffffff16565b601581905550505050565b6111bb61291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90614375565b60405180910390fd5b80602160176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6112c66112b57f0000000000000000000000000000000000000000000000000000000000000000611767565b601c546131a890919063ffffffff16565b905090565b6112d361291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690614375565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600f5481565b5f60085f9054906101000a900460ff16905090565b60055481565b5f61147c6113e461291c565b8461147785600a5f6113f461291c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae690919063ffffffff16565b612923565b6001905092915050565b61148e61291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190614375565b60405180910390fd5b80601f8190555050565b60115481565b60135481565b600d5481565b602160159054906101000a900460ff1681565b60145481565b6019602052805f5260405f205f915054906101000a900460ff1681565b601b602052805f5260405f205f915054906101000a900460ff1681565b61159161291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161490614375565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600e5481565b61168361291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690614375565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6117b561291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183890614375565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b601d5481565b601e5481565b60165481565b602160189054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118de61291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190614375565b60405180910390fd5b6a52b7d2dcc80cd2e40000008111156119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af906143dd565b60405180910390fd5b80601d8190555050565b6119ca61291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90614375565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060078054611b1f906142fb565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4b906142fb565b8015611b965780601f10611b6d57610100808354040283529160200191611b96565b820191905f5260205f20905b815481529060010190602001808311611b7957829003601f168201915b5050505050905090565b60125481565b60175481565b60105481565b5f611c70611bbe61291c565b84611c6b856040518060600160405280602581526020016150dc60259139600a5f611be761291c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131469092919063ffffffff16565b612923565b6001905092915050565b611c8261291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0590614375565b60405180910390fd5b80602160166101000a81548160ff02191690831515021790555050565b5f611d3e611d3761291c565b8484612b43565b6001905092915050565b5f81611d5a611d5561291c565b611767565b1015611d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9290614445565b60405180910390fd5b5f600267ffffffffffffffff811115611db757611db6614463565b5b604051908082528060200260200182016040528015611de55781602001602082028036833780820191505090505b50905030815f81518110611dfc57611dfb614490565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ea0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ec491906144d1565b81600181518110611ed857611ed7614490565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f85846040518363ffffffff1660e01b8152600401611f6f9291906145b3565b5f60405180830381865afa158015611f89573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611fb19190614708565b90505f670de0b6b3a76400004711611fcd576005549050611fde565b60045447611fdb91906147a9565b90505b808260018451611fee91906147d9565b81518110611fff57611ffe614490565b5b60200260200101511115612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f90614856565b60405180910390fd5b816001835161205791906147d9565b8151811061206857612067614490565b5b60200260200101514710156120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a9906148be565b60405180910390fd5b6120ea6120bd61291c565b83600185516120cc91906147d9565b815181106120dd576120dc614490565b5b60200260200101516131f1565b6120fb6120f561291c565b86613239565b816001835161210a91906147d9565b8151811061211b5761211a614490565b5b602002602001015160035f82825461213391906148dc565b925050819055508460025f82825461214b91906148dc565b925050819055507f6ca5c7c2d43ebd8c6d3049382038bb2df58288440912f41fcd488a779ed9438161217b61291c565b86846001865161218b91906147d9565b8151811061219c5761219b614490565b5b60200260200101516040516121b39392919061492f565b60405180910390a160019350505050919050565b600c5481565b6121d561291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225890614375565b60405180910390fd5b8260128190555081601381905550806014819055506122a1601454612293601354601254612ae690919063ffffffff16565b612ae690919063ffffffff16565b601781905550505050565b6122b461291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233790614375565b60405180910390fd5b80602160156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123899190613fc1565b60405180910390a150565b5f805f60025460035447925092509250909192565b601a602052805f5260405f205f915054906101000a900460ff1681565b60215f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123f361291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461247f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247690614375565b60405180910390fd5b602160189054906101000a900460ff16156124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c6906149ae565b60405180910390fd5b6124e16124db30611767565b476133f1565b6001602160186101000a81548160ff021916908315150217905550565b60025481565b602160169054906101000a900460ff1681565b5f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6125a161291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461262d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262490614375565b60405180910390fd5b6001601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60155481565b61269361291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690614375565b60405180910390fd5b80601e8190555050565b61273161291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b490614375565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361282b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282290614a3c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602160179054906101000a900460ff1681565b6018602052805f5260405f205f915054906101000a900460ff1681565b60035481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298890614aca565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f690614b58565b60405180910390fd5b80600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ad9919061405d565b60405180910390a3505050565b5f808284612af491906148dc565b905083811015612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3090614bc0565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba890614c4e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1690614cdc565b60405180910390fd5b602160149054906101000a900460ff1615612c4557612c3f8383836134d1565b50613141565b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612ce35750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d2e57601d54811115612d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2490614d6a565b60405180910390fd5b5b5f612d3830611767565b90505f601f548210159050808015612d5d5750602160149054906101000a900460ff16155b8015612db05750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612dc85750602160159054906101000a900460ff165b15612e1857602160169054906101000a900460ff168015612df55750602160189054906101000a900460ff165b15612e0057601f5491505b612e17828410612e105782612e12565b835b61369b565b5b612e9f836040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131469092919063ffffffff16565b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612f7c575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612f9057612f8b868686613877565b612f92565b835b9050602160189054906101000a900460ff16612fb657612fb3868686613877565b90505b602160179054906101000a900460ff168015613019575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561304757601e5461303c8261302e88611767565b612ae690919063ffffffff16565b1115613046575f80fd5b5b6130978160095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae690919063ffffffff16565b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613135919061405d565b60405180910390a35050505b505050565b5f83831115829061318d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131849190613eab565b60405180910390fd5b505f838561319b91906147d9565b9050809150509392505050565b5f6131e983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613146565b905092915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015613234573d5f803e3d5ffd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329e90614df8565b60405180910390fd5b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561332b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332290614e86565b60405180910390fd5b81810360095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555081601c5f82825461338091906147d9565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133e4919061405d565b60405180910390a3505050565b61341d3060205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612923565b60205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f806134676118af565b426040518863ffffffff1660e01b815260040161348996959493929190614edd565b60606040518083038185885af11580156134a5573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906134ca9190614f3c565b5050505050565b5f613559826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131469092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506135ea8260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae690919063ffffffff16565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613688919061405d565b60405180910390a3600190509392505050565b6001602160146101000a81548160ff021916908315150217905550602160189054906101000a900460ff161561385a575f4790505f61370c60026136fe6017546136f060125488613a9190919063ffffffff16565b613b0890919063ffffffff16565b613b0890919063ffffffff16565b90505f61372282856131a890919063ffffffff16565b905061372d81613b51565b5f61374184476131a890919063ffffffff16565b90505f61376e61375d6002601254613b0890919063ffffffff16565b6017546131a890919063ffffffff16565b90505f6137ab600261379d8461378f60125488613a9190919063ffffffff16565b613b0890919063ffffffff16565b613b0890919063ffffffff16565b90505f6137d5836137c760145487613a9190919063ffffffff16565b613b0890919063ffffffff16565b90505f6137fd826137ef85886131a890919063ffffffff16565b6131a890919063ffffffff16565b90505f81111561383357613832600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826131f1565b5b5f8311801561384157505f87115b156138515761385087846133f1565b5b50505050505050505b5f602160146101000a81548160ff02191690831515021790555050565b5f805f9050601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156138fa576138f360646138e560155486613a9190919063ffffffff16565b613b0890919063ffffffff16565b9050613975565b601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561397457613971606461396360165486613a9190919063ffffffff16565b613b0890919063ffffffff16565b90505b5b5f811115613a74576139cd8160095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae690919063ffffffff16565b60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a6b919061405d565b60405180910390a35b613a8781846131a890919063ffffffff16565b9150509392505050565b5f808303613aa1575f9050613b02565b5f8284613aae9190614f8c565b9050828482613abd91906147a9565b14613afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af49061503d565b60405180910390fd5b809150505b92915050565b5f613b4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613dc0565b905092915050565b5f600267ffffffffffffffff811115613b6d57613b6c614463565b5b604051908082528060200260200182016040528015613b9b5781602001602082028036833780820191505090505b50905030815f81518110613bb257613bb1614490565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c7a91906144d1565b81600181518110613c8e57613c8d614490565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cf43060205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612923565b60205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613d5695949392919061505b565b5f604051808303815f87803b158015613d6d575f80fd5b505af1158015613d7f573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613db49291906145b3565b60405180910390a15050565b5f8083118290613e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dfd9190613eab565b60405180910390fd5b505f8385613e1491906147a9565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613e58578082015181840152602081019050613e3d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613e7d82613e21565b613e878185613e2b565b9350613e97818560208601613e3b565b613ea081613e63565b840191505092915050565b5f6020820190508181035f830152613ec38184613e73565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f0582613edc565b9050919050565b613f1581613efb565b8114613f1f575f80fd5b50565b5f81359050613f3081613f0c565b92915050565b5f819050919050565b613f4881613f36565b8114613f52575f80fd5b50565b5f81359050613f6381613f3f565b92915050565b5f8060408385031215613f7f57613f7e613ed4565b5b5f613f8c85828601613f22565b9250506020613f9d85828601613f55565b9150509250929050565b5f8115159050919050565b613fbb81613fa7565b82525050565b5f602082019050613fd45f830184613fb2565b92915050565b5f819050919050565b5f613ffd613ff8613ff384613edc565b613fda565b613edc565b9050919050565b5f61400e82613fe3565b9050919050565b5f61401f82614004565b9050919050565b61402f81614015565b82525050565b5f6020820190506140485f830184614026565b92915050565b61405781613f36565b82525050565b5f6020820190506140705f83018461404e565b92915050565b5f805f6060848603121561408d5761408c613ed4565b5b5f61409a86828701613f55565b93505060206140ab86828701613f55565b92505060406140bc86828701613f55565b9150509250925092565b5f805f606084860312156140dd576140dc613ed4565b5b5f6140ea86828701613f22565b93505060206140fb86828701613f22565b925050604061410c86828701613f55565b9150509250925092565b61411f81613fa7565b8114614129575f80fd5b50565b5f8135905061413a81614116565b92915050565b5f6020828403121561415557614154613ed4565b5b5f6141628482850161412c565b91505092915050565b61417481613efb565b82525050565b5f60208201905061418d5f83018461416b565b92915050565b5f80604083850312156141a9576141a8613ed4565b5b5f6141b685828601613f22565b92505060206141c78582860161412c565b9150509250929050565b5f60ff82169050919050565b6141e6816141d1565b82525050565b5f6020820190506141ff5f8301846141dd565b92915050565b5f6020828403121561421a57614219613ed4565b5b5f61422784828501613f55565b91505092915050565b5f6020828403121561424557614244613ed4565b5b5f61425284828501613f22565b91505092915050565b5f60608201905061426e5f83018661404e565b61427b602083018561404e565b614288604083018461404e565b949350505050565b5f80604083850312156142a6576142a5613ed4565b5b5f6142b385828601613f22565b92505060206142c485828601613f22565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061431257607f821691505b602082108103614325576143246142ce565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61435f602083613e2b565b915061436a8261432b565b602082019050919050565b5f6020820190508181035f83015261438c81614353565b9050919050565b7f4d61782077616c6c65742073686f756c64206265206c657373000000000000005f82015250565b5f6143c7601983613e2b565b91506143d282614393565b602082019050919050565b5f6020820190508181035f8301526143f4816143bb565b9050919050565b7f6e6f7420656e6f7567682066756e647320746f206275726e00000000000000005f82015250565b5f61442f601883613e2b565b915061443a826143fb565b602082019050919050565b5f6020820190508181035f83015261445c81614423565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506144cb81613f0c565b92915050565b5f602082840312156144e6576144e5613ed4565b5b5f6144f3848285016144bd565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61452e81613efb565b82525050565b5f61453f8383614525565b60208301905092915050565b5f602082019050919050565b5f614561826144fc565b61456b8185614506565b935061457683614516565b805f5b838110156145a657815161458d8882614534565b97506145988361454b565b925050600181019050614579565b5085935050505092915050565b5f6040820190506145c65f83018561404e565b81810360208301526145d88184614557565b90509392505050565b5f80fd5b6145ee82613e63565b810181811067ffffffffffffffff8211171561460d5761460c614463565b5b80604052505050565b5f61461f613ecb565b905061462b82826145e5565b919050565b5f67ffffffffffffffff82111561464a57614649614463565b5b602082029050602081019050919050565b5f80fd5b5f8151905061466d81613f3f565b92915050565b5f61468561468084614630565b614616565b905080838252602082019050602084028301858111156146a8576146a761465b565b5b835b818110156146d157806146bd888261465f565b8452602084019350506020810190506146aa565b5050509392505050565b5f82601f8301126146ef576146ee6145e1565b5b81516146ff848260208601614673565b91505092915050565b5f6020828403121561471d5761471c613ed4565b5b5f82015167ffffffffffffffff81111561473a57614739613ed8565b5b614746848285016146db565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6147b382613f36565b91506147be83613f36565b9250826147ce576147cd61474f565b5b828204905092915050565b5f6147e382613f36565b91506147ee83613f36565b92508282039050818111156148065761480561477c565b5b92915050565b7f616d6f756e742067726561746572207468616e206361700000000000000000005f82015250565b5f614840601783613e2b565b915061484b8261480c565b602082019050919050565b5f6020820190508181035f83015261486d81614834565b9050919050565b7f6e6f7420656e6f7567682066756e647320696e20636f6e7472616374000000005f82015250565b5f6148a8601c83613e2b565b91506148b382614874565b602082019050919050565b5f6020820190508181035f8301526148d58161489c565b9050919050565b5f6148e682613f36565b91506148f183613f36565b92508282019050808211156149095761490861477c565b5b92915050565b5f61491982614004565b9050919050565b6149298161490f565b82525050565b5f6060820190506149425f830186614920565b61494f602083018561404e565b61495c604083018461404e565b949350505050565b7f74726164696e67206f70656e65640000000000000000000000000000000000005f82015250565b5f614998600e83613e2b565b91506149a382614964565b602082019050919050565b5f6020820190508181035f8301526149c58161498c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614a26602683613e2b565b9150614a31826149cc565b604082019050919050565b5f6020820190508181035f830152614a5381614a1a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614ab4602483613e2b565b9150614abf82614a5a565b604082019050919050565b5f6020820190508181035f830152614ae181614aa8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614b42602283613e2b565b9150614b4d82614ae8565b604082019050919050565b5f6020820190508181035f830152614b6f81614b36565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614baa601b83613e2b565b9150614bb582614b76565b602082019050919050565b5f6020820190508181035f830152614bd781614b9e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614c38602583613e2b565b9150614c4382614bde565b604082019050919050565b5f6020820190508181035f830152614c6581614c2c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614cc6602383613e2b565b9150614cd182614c6c565b604082019050919050565b5f6020820190508181035f830152614cf381614cba565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f614d54602883613e2b565b9150614d5f82614cfa565b604082019050919050565b5f6020820190508181035f830152614d8181614d48565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f614de2602183613e2b565b9150614ded82614d88565b604082019050919050565b5f6020820190508181035f830152614e0f81614dd6565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f614e70602283613e2b565b9150614e7b82614e16565b604082019050919050565b5f6020820190508181035f830152614e9d81614e64565b9050919050565b5f819050919050565b5f614ec7614ec2614ebd84614ea4565b613fda565b613f36565b9050919050565b614ed781614ead565b82525050565b5f60c082019050614ef05f83018961416b565b614efd602083018861404e565b614f0a6040830187614ece565b614f176060830186614ece565b614f24608083018561416b565b614f3160a083018461404e565b979650505050505050565b5f805f60608486031215614f5357614f52613ed4565b5b5f614f608682870161465f565b9350506020614f718682870161465f565b9250506040614f828682870161465f565b9150509250925092565b5f614f9682613f36565b9150614fa183613f36565b9250828202614faf81613f36565b91508282048414831517614fc657614fc561477c565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f615027602183613e2b565b915061503282614fcd565b604082019050919050565b5f6020820190508181035f8301526150548161501b565b9050919050565b5f60a08201905061506e5f83018861404e565b61507b6020830187614ece565b818103604083015261508d8186614557565b905061509c606083018561416b565b6150a9608083018461404e565b969550505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122049f3229d62e0657cf64ab24fb497dd3eba68758ed316deaa94cb70c53a089c4a64736f6c63430008150033

Deployed Bytecode

0x6080604052600436106103a5575f3560e01c8063807c2d9c116101e6578063c2d4640e1161010c578063dd62ed3e1161009f578063f2fde38b1161006e578063f2fde38b14610d8e578063f872858a14610db6578063fabf706314610de0578063fb34a33614610e1c576103ac565b8063dd62ed3e14610cd8578063e207a92b14610d14578063f0cd1dac14610d3c578063f1d5f51714610d66576103ac565b8063c816841b116100db578063c816841b14610c44578063c9567bf914610c6e578063d89135cd14610c84578063da00097d14610cae576103ac565b8063c2d4640e14610b8c578063c49b9a8014610bb4578063c59d484714610bdc578063c78a789b14610c08576103ac565b80639e3fa32311610184578063a5d69d1f11610153578063a5d69d1f14610ac2578063a9059cbb14610aea578063af254b7214610b26578063b6c3af3414610b62576103ac565b80639e3fa32314610a08578063a08e671f14610a32578063a40dcda314610a5c578063a457c2d714610a86576103ac565b80638da5cb5b116101c05780638da5cb5b146109765780638f03aad5146109a0578063914eb66a146109c857806395d89b41146109de576103ac565b8063807c2d9c146108f857806382eefb43146109225780638a8c523c1461094c576103ac565b80633b97084a116102cb57806355324fa91161026957806370a082311161023857806370a082311461084057806374e8414e1461087c5780637b3a3ec6146108a45780637d1db4a5146108ce576103ac565b806355324fa91461078a57806357e6adcb146107c65780635e252455146107ee578063667b511c14610818576103ac565b80634a728e24116102a55780634a728e24146106d05780634a74bb02146106fa5780634f1c2aa414610724578063526012e81461074e576103ac565b80633b97084a146106545780633d98b9af1461067c5780633f251688146106a6576103ac565b80632563ae83116103435780632f0a5fd4116103125780632f0a5fd41461059a578063313ce567146105c457806331eca57e146105ee5780633950935114610618576103ac565b80632563ae83146104f657806327c8f8351461051e5780632b112e49146105485780632cdae5cb14610572576103ac565b806318160ddd1161037f57806318160ddd146104405780631d865c301461046a57806323b872dd1461049257806325519cf2146104ce576103ac565b806306fdde03146103b0578063095ea7b3146103da5780631694505e14610416576103ac565b366103ac57005b5f80fd5b3480156103bb575f80fd5b506103c4610e46565b6040516103d19190613eab565b60405180910390f35b3480156103e5575f80fd5b5061040060048036038101906103fb9190613f69565b610ed6565b60405161040d9190613fc1565b60405180910390f35b348015610421575f80fd5b5061042a610ef3565b6040516104379190614035565b60405180910390f35b34801561044b575f80fd5b50610454610f18565b604051610461919061405d565b60405180910390f35b348015610475575f80fd5b50610490600480360381019061048b9190614076565b610f21565b005b34801561049d575f80fd5b506104b860048036038101906104b391906140c6565b611000565b6040516104c59190613fc1565b60405180910390f35b3480156104d9575f80fd5b506104f460048036038101906104ef9190614076565b6110d4565b005b348015610501575f80fd5b5061051c60048036038101906105179190614140565b6111b3565b005b348015610529575f80fd5b50610532611264565b60405161053f919061417a565b60405180910390f35b348015610553575f80fd5b5061055c611288565b604051610569919061405d565b60405180910390f35b34801561057d575f80fd5b5061059860048036038101906105939190614193565b6112cb565b005b3480156105a5575f80fd5b506105ae6113b7565b6040516105bb919061405d565b60405180910390f35b3480156105cf575f80fd5b506105d86113bd565b6040516105e591906141ec565b60405180910390f35b3480156105f9575f80fd5b506106026113d2565b60405161060f919061405d565b60405180910390f35b348015610623575f80fd5b5061063e60048036038101906106399190613f69565b6113d8565b60405161064b9190613fc1565b60405180910390f35b34801561065f575f80fd5b5061067a60048036038101906106759190614205565b611486565b005b348015610687575f80fd5b50610690611524565b60405161069d919061405d565b60405180910390f35b3480156106b1575f80fd5b506106ba61152a565b6040516106c7919061405d565b60405180910390f35b3480156106db575f80fd5b506106e4611530565b6040516106f1919061405d565b60405180910390f35b348015610705575f80fd5b5061070e611536565b60405161071b9190613fc1565b60405180910390f35b34801561072f575f80fd5b50610738611549565b604051610745919061405d565b60405180910390f35b348015610759575f80fd5b50610774600480360381019061076f9190614230565b61154f565b6040516107819190613fc1565b60405180910390f35b348015610795575f80fd5b506107b060048036038101906107ab9190614230565b61156c565b6040516107bd9190613fc1565b60405180910390f35b3480156107d1575f80fd5b506107ec60048036038101906107e79190614193565b611589565b005b3480156107f9575f80fd5b50610802611675565b60405161080f919061405d565b60405180910390f35b348015610823575f80fd5b5061083e60048036038101906108399190614193565b61167b565b005b34801561084b575f80fd5b5061086660048036038101906108619190614230565b611767565b604051610873919061405d565b60405180910390f35b348015610887575f80fd5b506108a2600480360381019061089d9190614230565b6117ad565b005b3480156108af575f80fd5b506108b8611884565b6040516108c5919061405d565b60405180910390f35b3480156108d9575f80fd5b506108e261188a565b6040516108ef919061405d565b60405180910390f35b348015610903575f80fd5b5061090c611890565b604051610919919061405d565b60405180910390f35b34801561092d575f80fd5b50610936611896565b604051610943919061405d565b60405180910390f35b348015610957575f80fd5b5061096061189c565b60405161096d9190613fc1565b60405180910390f35b348015610981575f80fd5b5061098a6118af565b604051610997919061417a565b60405180910390f35b3480156109ab575f80fd5b506109c660048036038101906109c19190614205565b6118d6565b005b3480156109d3575f80fd5b506109dc6119c2565b005b3480156109e9575f80fd5b506109f2611b10565b6040516109ff9190613eab565b60405180910390f35b348015610a13575f80fd5b50610a1c611ba0565b604051610a29919061405d565b60405180910390f35b348015610a3d575f80fd5b50610a46611ba6565b604051610a53919061405d565b60405180910390f35b348015610a67575f80fd5b50610a70611bac565b604051610a7d919061405d565b60405180910390f35b348015610a91575f80fd5b50610aac6004803603810190610aa79190613f69565b611bb2565b604051610ab99190613fc1565b60405180910390f35b348015610acd575f80fd5b50610ae86004803603810190610ae39190614140565b611c7a565b005b348015610af5575f80fd5b50610b106004803603810190610b0b9190613f69565b611d2b565b604051610b1d9190613fc1565b60405180910390f35b348015610b31575f80fd5b50610b4c6004803603810190610b479190614205565b611d48565b604051610b599190613fc1565b60405180910390f35b348015610b6d575f80fd5b50610b766121c7565b604051610b83919061405d565b60405180910390f35b348015610b97575f80fd5b50610bb26004803603810190610bad9190614076565b6121cd565b005b348015610bbf575f80fd5b50610bda6004803603810190610bd59190614140565b6122ac565b005b348015610be7575f80fd5b50610bf0612394565b604051610bff9392919061425b565b60405180910390f35b348015610c13575f80fd5b50610c2e6004803603810190610c299190614230565b6123a9565b604051610c3b9190613fc1565b60405180910390f35b348015610c4f575f80fd5b50610c586123c6565b604051610c65919061417a565b60405180910390f35b348015610c79575f80fd5b50610c826123eb565b005b348015610c8f575f80fd5b50610c986124fe565b604051610ca5919061405d565b60405180910390f35b348015610cb9575f80fd5b50610cc2612504565b604051610ccf9190613fc1565b60405180910390f35b348015610ce3575f80fd5b50610cfe6004803603810190610cf99190614290565b612517565b604051610d0b919061405d565b60405180910390f35b348015610d1f575f80fd5b50610d3a6004803603810190610d359190614230565b612599565b005b348015610d47575f80fd5b50610d50612685565b604051610d5d919061405d565b60405180910390f35b348015610d71575f80fd5b50610d8c6004803603810190610d879190614205565b61268b565b005b348015610d99575f80fd5b50610db46004803603810190610daf9190614230565b612729565b005b348015610dc1575f80fd5b50610dca6128e6565b604051610dd79190613fc1565b60405180910390f35b348015610deb575f80fd5b50610e066004803603810190610e019190614230565b6128f9565b604051610e139190613fc1565b60405180910390f35b348015610e27575f80fd5b50610e30612916565b604051610e3d919061405d565b60405180910390f35b606060068054610e55906142fb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e81906142fb565b8015610ecc5780601f10610ea357610100808354040283529160200191610ecc565b820191905f5260205f20905b815481529060010190602001808311610eaf57829003601f168201915b5050505050905090565b5f610ee9610ee261291c565b8484612923565b6001905092915050565b60205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601c54905090565b610f2961291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac90614375565b60405180910390fd5b82600f819055508160108190555080601181905550610ff5601154610fe7601054600f54612ae690919063ffffffff16565b612ae690919063ffffffff16565b601681905550505050565b5f61100c848484612b43565b6110c98461101861291c565b6110c4856040518060600160405280602881526020016150b460289139600a5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61107b61291c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131469092919063ffffffff16565b612923565b600190509392505050565b6110dc61291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90614375565b60405180910390fd5b82600c8190555081600d8190555080600e819055506111a8600e5461119a600d54600c54612ae690919063ffffffff16565b612ae690919063ffffffff16565b601581905550505050565b6111bb61291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90614375565b60405180910390fd5b80602160176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b5f6112c66112b57f000000000000000000000000000000000000000000000000000000000000dead611767565b601c546131a890919063ffffffff16565b905090565b6112d361291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690614375565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600f5481565b5f60085f9054906101000a900460ff16905090565b60055481565b5f61147c6113e461291c565b8461147785600a5f6113f461291c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae690919063ffffffff16565b612923565b6001905092915050565b61148e61291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190614375565b60405180910390fd5b80601f8190555050565b60115481565b60135481565b600d5481565b602160159054906101000a900460ff1681565b60145481565b6019602052805f5260405f205f915054906101000a900460ff1681565b601b602052805f5260405f205f915054906101000a900460ff1681565b61159161291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161490614375565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600e5481565b61168361291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690614375565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6117b561291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183890614375565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b601d5481565b601e5481565b60165481565b602160189054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118de61291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190614375565b60405180910390fd5b6a52b7d2dcc80cd2e40000008111156119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af906143dd565b60405180910390fd5b80601d8190555050565b6119ca61291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90614375565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060078054611b1f906142fb565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4b906142fb565b8015611b965780601f10611b6d57610100808354040283529160200191611b96565b820191905f5260205f20905b815481529060010190602001808311611b7957829003601f168201915b5050505050905090565b60125481565b60175481565b60105481565b5f611c70611bbe61291c565b84611c6b856040518060600160405280602581526020016150dc60259139600a5f611be761291c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131469092919063ffffffff16565b612923565b6001905092915050565b611c8261291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0590614375565b60405180910390fd5b80602160166101000a81548160ff02191690831515021790555050565b5f611d3e611d3761291c565b8484612b43565b6001905092915050565b5f81611d5a611d5561291c565b611767565b1015611d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9290614445565b60405180910390fd5b5f600267ffffffffffffffff811115611db757611db6614463565b5b604051908082528060200260200182016040528015611de55781602001602082028036833780820191505090505b50905030815f81518110611dfc57611dfb614490565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ea0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ec491906144d1565b81600181518110611ed857611ed7614490565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f60205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f85846040518363ffffffff1660e01b8152600401611f6f9291906145b3565b5f60405180830381865afa158015611f89573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611fb19190614708565b90505f670de0b6b3a76400004711611fcd576005549050611fde565b60045447611fdb91906147a9565b90505b808260018451611fee91906147d9565b81518110611fff57611ffe614490565b5b60200260200101511115612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f90614856565b60405180910390fd5b816001835161205791906147d9565b8151811061206857612067614490565b5b60200260200101514710156120b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a9906148be565b60405180910390fd5b6120ea6120bd61291c565b83600185516120cc91906147d9565b815181106120dd576120dc614490565b5b60200260200101516131f1565b6120fb6120f561291c565b86613239565b816001835161210a91906147d9565b8151811061211b5761211a614490565b5b602002602001015160035f82825461213391906148dc565b925050819055508460025f82825461214b91906148dc565b925050819055507f6ca5c7c2d43ebd8c6d3049382038bb2df58288440912f41fcd488a779ed9438161217b61291c565b86846001865161218b91906147d9565b8151811061219c5761219b614490565b5b60200260200101516040516121b39392919061492f565b60405180910390a160019350505050919050565b600c5481565b6121d561291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225890614375565b60405180910390fd5b8260128190555081601381905550806014819055506122a1601454612293601354601254612ae690919063ffffffff16565b612ae690919063ffffffff16565b601781905550505050565b6122b461291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233790614375565b60405180910390fd5b80602160156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123899190613fc1565b60405180910390a150565b5f805f60025460035447925092509250909192565b601a602052805f5260405f205f915054906101000a900460ff1681565b60215f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123f361291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461247f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247690614375565b60405180910390fd5b602160189054906101000a900460ff16156124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c6906149ae565b60405180910390fd5b6124e16124db30611767565b476133f1565b6001602160186101000a81548160ff021916908315150217905550565b60025481565b602160169054906101000a900460ff1681565b5f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6125a161291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461262d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262490614375565b60405180910390fd5b6001601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60155481565b61269361291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690614375565b60405180910390fd5b80601e8190555050565b61273161291c565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b490614375565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361282b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282290614a3c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602160179054906101000a900460ff1681565b6018602052805f5260405f205f915054906101000a900460ff1681565b60035481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298890614aca565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f690614b58565b60405180910390fd5b80600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ad9919061405d565b60405180910390a3505050565b5f808284612af491906148dc565b905083811015612b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3090614bc0565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba890614c4e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1690614cdc565b60405180910390fd5b602160149054906101000a900460ff1615612c4557612c3f8383836134d1565b50613141565b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612ce35750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d2e57601d54811115612d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2490614d6a565b60405180910390fd5b5b5f612d3830611767565b90505f601f548210159050808015612d5d5750602160149054906101000a900460ff16155b8015612db05750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612dc85750602160159054906101000a900460ff165b15612e1857602160169054906101000a900460ff168015612df55750602160189054906101000a900460ff165b15612e0057601f5491505b612e17828410612e105782612e12565b835b61369b565b5b612e9f836040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131469092919063ffffffff16565b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612f7c575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612f9057612f8b868686613877565b612f92565b835b9050602160189054906101000a900460ff16612fb657612fb3868686613877565b90505b602160179054906101000a900460ff168015613019575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561304757601e5461303c8261302e88611767565b612ae690919063ffffffff16565b1115613046575f80fd5b5b6130978160095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae690919063ffffffff16565b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613135919061405d565b60405180910390a35050505b505050565b5f83831115829061318d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131849190613eab565b60405180910390fd5b505f838561319b91906147d9565b9050809150509392505050565b5f6131e983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613146565b905092915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015613234573d5f803e3d5ffd5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329e90614df8565b60405180910390fd5b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561332b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332290614e86565b60405180910390fd5b81810360095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555081601c5f82825461338091906147d9565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133e4919061405d565b60405180910390a3505050565b61341d3060205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612923565b60205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f806134676118af565b426040518863ffffffff1660e01b815260040161348996959493929190614edd565b60606040518083038185885af11580156134a5573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906134ca9190614f3c565b5050505050565b5f613559826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546131469092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506135ea8260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae690919063ffffffff16565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613688919061405d565b60405180910390a3600190509392505050565b6001602160146101000a81548160ff021916908315150217905550602160189054906101000a900460ff161561385a575f4790505f61370c60026136fe6017546136f060125488613a9190919063ffffffff16565b613b0890919063ffffffff16565b613b0890919063ffffffff16565b90505f61372282856131a890919063ffffffff16565b905061372d81613b51565b5f61374184476131a890919063ffffffff16565b90505f61376e61375d6002601254613b0890919063ffffffff16565b6017546131a890919063ffffffff16565b90505f6137ab600261379d8461378f60125488613a9190919063ffffffff16565b613b0890919063ffffffff16565b613b0890919063ffffffff16565b90505f6137d5836137c760145487613a9190919063ffffffff16565b613b0890919063ffffffff16565b90505f6137fd826137ef85886131a890919063ffffffff16565b6131a890919063ffffffff16565b90505f81111561383357613832600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826131f1565b5b5f8311801561384157505f87115b156138515761385087846133f1565b5b50505050505050505b5f602160146101000a81548160ff02191690831515021790555050565b5f805f9050601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156138fa576138f360646138e560155486613a9190919063ffffffff16565b613b0890919063ffffffff16565b9050613975565b601b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561397457613971606461396360165486613a9190919063ffffffff16565b613b0890919063ffffffff16565b90505b5b5f811115613a74576139cd8160095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612ae690919063ffffffff16565b60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a6b919061405d565b60405180910390a35b613a8781846131a890919063ffffffff16565b9150509392505050565b5f808303613aa1575f9050613b02565b5f8284613aae9190614f8c565b9050828482613abd91906147a9565b14613afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af49061503d565b60405180910390fd5b809150505b92915050565b5f613b4983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613dc0565b905092915050565b5f600267ffffffffffffffff811115613b6d57613b6c614463565b5b604051908082528060200260200182016040528015613b9b5781602001602082028036833780820191505090505b50905030815f81518110613bb257613bb1614490565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c7a91906144d1565b81600181518110613c8e57613c8d614490565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cf43060205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612923565b60205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613d5695949392919061505b565b5f604051808303815f87803b158015613d6d575f80fd5b505af1158015613d7f573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613db49291906145b3565b60405180910390a15050565b5f8083118290613e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dfd9190613eab565b60405180910390fd5b505f8385613e1491906147a9565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613e58578082015181840152602081019050613e3d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613e7d82613e21565b613e878185613e2b565b9350613e97818560208601613e3b565b613ea081613e63565b840191505092915050565b5f6020820190508181035f830152613ec38184613e73565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f0582613edc565b9050919050565b613f1581613efb565b8114613f1f575f80fd5b50565b5f81359050613f3081613f0c565b92915050565b5f819050919050565b613f4881613f36565b8114613f52575f80fd5b50565b5f81359050613f6381613f3f565b92915050565b5f8060408385031215613f7f57613f7e613ed4565b5b5f613f8c85828601613f22565b9250506020613f9d85828601613f55565b9150509250929050565b5f8115159050919050565b613fbb81613fa7565b82525050565b5f602082019050613fd45f830184613fb2565b92915050565b5f819050919050565b5f613ffd613ff8613ff384613edc565b613fda565b613edc565b9050919050565b5f61400e82613fe3565b9050919050565b5f61401f82614004565b9050919050565b61402f81614015565b82525050565b5f6020820190506140485f830184614026565b92915050565b61405781613f36565b82525050565b5f6020820190506140705f83018461404e565b92915050565b5f805f6060848603121561408d5761408c613ed4565b5b5f61409a86828701613f55565b93505060206140ab86828701613f55565b92505060406140bc86828701613f55565b9150509250925092565b5f805f606084860312156140dd576140dc613ed4565b5b5f6140ea86828701613f22565b93505060206140fb86828701613f22565b925050604061410c86828701613f55565b9150509250925092565b61411f81613fa7565b8114614129575f80fd5b50565b5f8135905061413a81614116565b92915050565b5f6020828403121561415557614154613ed4565b5b5f6141628482850161412c565b91505092915050565b61417481613efb565b82525050565b5f60208201905061418d5f83018461416b565b92915050565b5f80604083850312156141a9576141a8613ed4565b5b5f6141b685828601613f22565b92505060206141c78582860161412c565b9150509250929050565b5f60ff82169050919050565b6141e6816141d1565b82525050565b5f6020820190506141ff5f8301846141dd565b92915050565b5f6020828403121561421a57614219613ed4565b5b5f61422784828501613f55565b91505092915050565b5f6020828403121561424557614244613ed4565b5b5f61425284828501613f22565b91505092915050565b5f60608201905061426e5f83018661404e565b61427b602083018561404e565b614288604083018461404e565b949350505050565b5f80604083850312156142a6576142a5613ed4565b5b5f6142b385828601613f22565b92505060206142c485828601613f22565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061431257607f821691505b602082108103614325576143246142ce565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61435f602083613e2b565b915061436a8261432b565b602082019050919050565b5f6020820190508181035f83015261438c81614353565b9050919050565b7f4d61782077616c6c65742073686f756c64206265206c657373000000000000005f82015250565b5f6143c7601983613e2b565b91506143d282614393565b602082019050919050565b5f6020820190508181035f8301526143f4816143bb565b9050919050565b7f6e6f7420656e6f7567682066756e647320746f206275726e00000000000000005f82015250565b5f61442f601883613e2b565b915061443a826143fb565b602082019050919050565b5f6020820190508181035f83015261445c81614423565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506144cb81613f0c565b92915050565b5f602082840312156144e6576144e5613ed4565b5b5f6144f3848285016144bd565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61452e81613efb565b82525050565b5f61453f8383614525565b60208301905092915050565b5f602082019050919050565b5f614561826144fc565b61456b8185614506565b935061457683614516565b805f5b838110156145a657815161458d8882614534565b97506145988361454b565b925050600181019050614579565b5085935050505092915050565b5f6040820190506145c65f83018561404e565b81810360208301526145d88184614557565b90509392505050565b5f80fd5b6145ee82613e63565b810181811067ffffffffffffffff8211171561460d5761460c614463565b5b80604052505050565b5f61461f613ecb565b905061462b82826145e5565b919050565b5f67ffffffffffffffff82111561464a57614649614463565b5b602082029050602081019050919050565b5f80fd5b5f8151905061466d81613f3f565b92915050565b5f61468561468084614630565b614616565b905080838252602082019050602084028301858111156146a8576146a761465b565b5b835b818110156146d157806146bd888261465f565b8452602084019350506020810190506146aa565b5050509392505050565b5f82601f8301126146ef576146ee6145e1565b5b81516146ff848260208601614673565b91505092915050565b5f6020828403121561471d5761471c613ed4565b5b5f82015167ffffffffffffffff81111561473a57614739613ed8565b5b614746848285016146db565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6147b382613f36565b91506147be83613f36565b9250826147ce576147cd61474f565b5b828204905092915050565b5f6147e382613f36565b91506147ee83613f36565b92508282039050818111156148065761480561477c565b5b92915050565b7f616d6f756e742067726561746572207468616e206361700000000000000000005f82015250565b5f614840601783613e2b565b915061484b8261480c565b602082019050919050565b5f6020820190508181035f83015261486d81614834565b9050919050565b7f6e6f7420656e6f7567682066756e647320696e20636f6e7472616374000000005f82015250565b5f6148a8601c83613e2b565b91506148b382614874565b602082019050919050565b5f6020820190508181035f8301526148d58161489c565b9050919050565b5f6148e682613f36565b91506148f183613f36565b92508282019050808211156149095761490861477c565b5b92915050565b5f61491982614004565b9050919050565b6149298161490f565b82525050565b5f6060820190506149425f830186614920565b61494f602083018561404e565b61495c604083018461404e565b949350505050565b7f74726164696e67206f70656e65640000000000000000000000000000000000005f82015250565b5f614998600e83613e2b565b91506149a382614964565b602082019050919050565b5f6020820190508181035f8301526149c58161498c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614a26602683613e2b565b9150614a31826149cc565b604082019050919050565b5f6020820190508181035f830152614a5381614a1a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614ab4602483613e2b565b9150614abf82614a5a565b604082019050919050565b5f6020820190508181035f830152614ae181614aa8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614b42602283613e2b565b9150614b4d82614ae8565b604082019050919050565b5f6020820190508181035f830152614b6f81614b36565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614baa601b83613e2b565b9150614bb582614b76565b602082019050919050565b5f6020820190508181035f830152614bd781614b9e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614c38602583613e2b565b9150614c4382614bde565b604082019050919050565b5f6020820190508181035f830152614c6581614c2c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614cc6602383613e2b565b9150614cd182614c6c565b604082019050919050565b5f6020820190508181035f830152614cf381614cba565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f614d54602883613e2b565b9150614d5f82614cfa565b604082019050919050565b5f6020820190508181035f830152614d8181614d48565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f614de2602183613e2b565b9150614ded82614d88565b604082019050919050565b5f6020820190508181035f830152614e0f81614dd6565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f614e70602283613e2b565b9150614e7b82614e16565b604082019050919050565b5f6020820190508181035f830152614e9d81614e64565b9050919050565b5f819050919050565b5f614ec7614ec2614ebd84614ea4565b613fda565b613f36565b9050919050565b614ed781614ead565b82525050565b5f60c082019050614ef05f83018961416b565b614efd602083018861404e565b614f0a6040830187614ece565b614f176060830186614ece565b614f24608083018561416b565b614f3160a083018461404e565b979650505050505050565b5f805f60608486031215614f5357614f52613ed4565b5b5f614f608682870161465f565b9350506020614f718682870161465f565b9250506040614f828682870161465f565b9150509250925092565b5f614f9682613f36565b9150614fa183613f36565b9250828202614faf81613f36565b91508282048414831517614fc657614fc561477c565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f615027602183613e2b565b915061503282614fcd565b604082019050919050565b5f6020820190508181035f8301526150548161501b565b9050919050565b5f60a08201905061506e5f83018861404e565b61507b6020830187614ece565b818103604083015261508d8186614557565b905061509c606083018561416b565b6150a9608083018461404e565b969550505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122049f3229d62e0657cf64ab24fb497dd3eba68758ed316deaa94cb70c53a089c4a64736f6c63430008150033

Deployed Bytecode Sourcemap

14404:16242:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19029:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20200:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16260:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19309:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21456:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25171:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22349:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15095:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23539:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20984:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15307:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19217:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14712:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19695:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22729:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15390:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15474:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15229:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16420:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15510:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15811:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15931:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22470:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15266:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20839:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19417:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22861:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14633:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16083:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16138:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15593:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16561:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5941:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22141:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6166:145;;;;;;;;;;;;;:::i;:::-;;19121:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15432:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15638:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15352:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19922:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23181:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24996:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23991:997;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15185:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21789:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23002:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30495:148;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;15873:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16308:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23314:211;;;;;;;;;;;;;:::i;:::-;;14552:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16467:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19544:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20724:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15549:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22619:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6319:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16519:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15750:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14589:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19029:84;19067:13;19100:5;19093:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19029:84;:::o;20200:161::-;20275:4;20292:39;20301:12;:10;:12::i;:::-;20315:7;20324:6;20292:8;:39::i;:::-;20349:4;20342:11;;20200:161;;;;:::o;16260:41::-;;;;;;;;;;;;;:::o;19309:100::-;19362:7;19389:12;;19382:19;;19309:100;:::o;21456:321::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21593:15:::1;21572:18;:36;;;;21634:9;21619:12;:24;;;;21670:10;21654:13;:26;;;;21714:55;21755:13;;21714:36;21737:12;;21714:18;;:22;;:36;;;;:::i;:::-;:40;;:55;;;;:::i;:::-;21693:18;:76;;;;21456:321:::0;;;:::o;25171:313::-;25269:4;25286:36;25296:6;25304:9;25315:6;25286:9;:36::i;:::-;25333:121;25342:6;25350:12;:10;:12::i;:::-;25364:89;25402:6;25364:89;;;;;;;;;;;;;;;;;:11;:19;25376:6;25364:19;;;;;;;;;;;;;;;:33;25384:12;:10;:12::i;:::-;25364:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;25333:8;:121::i;:::-;25472:4;25465:11;;25171:313;;;;;:::o;21135:::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21270:15:::1;21250:17;:35;;;;21310:9;21296:11;:23;;;;21345:10;21330:12;:25;;;;21388:52;21427:12;;21388:34;21410:11;;21388:17;;:21;;:34;;;;:::i;:::-;:38;;:52;;;;:::i;:::-;21368:17;:72;;;;21135:313:::0;;;:::o;22349:113::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22446:8:::1;22427:16;;:27;;;;;;;;;;;;;;;;;;22349:113:::0;:::o;15095:81::-;;;:::o;23539:128::-;23592:7;23619:40;23636:22;23646:11;23636:9;:22::i;:::-;23619:12;;:16;;:40;;;;:::i;:::-;23612:47;;23539:128;:::o;20984:143::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21111:8:::1;21078:21;:30;21100:7;21078:30;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;20984:143:::0;;:::o;15307:38::-;;;;:::o;19217:84::-;19259:5;19284:9;;;;;;;;;;;19277:16;;19217:84;:::o;14712:50::-;;;;:::o;19695:219::-;19784:4;19801:83;19810:12;:10;:12::i;:::-;19824:7;19833:50;19872:10;19833:11;:25;19845:12;:10;:12::i;:::-;19833:25;;;;;;;;;;;;;;;:34;19859:7;19833:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19801:8;:83::i;:::-;19902:4;19895:11;;19695:219;;;;:::o;22729:124::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22837:8:::1;22811:23;:34;;;;22729:124:::0;:::o;15390:33::-;;;;:::o;15474:29::-;;;;:::o;15229:30::-;;;;:::o;16420:40::-;;;;;;;;;;;;;:::o;15510:30::-;;;;:::o;15811:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;15931:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;22470:141::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22597:6:::1;22564:22;:30;22587:6;22564:30;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22470:141:::0;;:::o;15266:32::-;;;;:::o;20839:133::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20958:6:::1;20929:18;:26;20948:6;20929:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;20839:133:::0;;:::o;19417:119::-;19483:7;19510:9;:18;19520:7;19510:18;;;;;;;;;;;;;;;;19503:25;;19417:119;;;:::o;22861:131::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22973:10:::1;22944:18;;:40;;;;;;;;;;;;;;;;;;22861:131:::0;:::o;14633:34::-;;;;:::o;16083:48::-;;;;:::o;16138:46::-;;;;:::o;15593:38::-;;;;:::o;16561:25::-;;;;;;;;;;;;;:::o;5941:79::-;5979:7;6006:6;;;;;;;;;;;5999:13;;5941:79;:::o;22141:200::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22245:20:::1;22229:11;:37;;22221:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22322:11;22307:12;:26;;;;22141:200:::0;:::o;6166:145::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6270:1:::1;6233:40;;6254:6;::::0;::::1;;;;;;;;6233:40;;;;;;;;;;;;6301:1;6284:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6166:145::o:0;19121:88::-;19161:13;19194:7;19187:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19121:88;:::o;15432:35::-;;;;:::o;15638:43::-;;;;:::o;15352:31::-;;;;:::o;19922:270::-;20016:4;20033:129;20042:12;:10;:12::i;:::-;20056:7;20065:96;20104:15;20065:96;;;;;;;;;;;;;;;;;:11;:25;20077:12;:10;:12::i;:::-;20065:25;;;;;;;;;;;;;;;:34;20091:7;20065:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;20033:8;:129::i;:::-;20180:4;20173:11;;19922:270;;;;:::o;23181:125::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23290:8:::1;23262:25;;:36;;;;;;;;;;;;;;;;;;23181:125:::0;:::o;24996:167::-;25074:4;25091:42;25101:12;:10;:12::i;:::-;25115:9;25126:6;25091:9;:42::i;:::-;25151:4;25144:11;;24996:167;;;;:::o;23991:997::-;24043:4;24095:6;24068:23;24078:12;:10;:12::i;:::-;24068:9;:23::i;:::-;:33;;24060:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24143:21;24181:1;24167:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24143:40;;24212:4;24194;24199:1;24194:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24238:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24228:4;24233:1;24228:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;24273:15;24291;;;;;;;;;;;:29;;;24321:6;24329:4;24291:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24273:61;;24347:11;24398:7;24373:21;:32;24369:162;;24428:14;;24422:20;;24369:162;;;24505:14;;24481:21;:38;;;;:::i;:::-;24475:44;;24369:162;24570:3;24551:1;24564;24553;:8;:12;;;;:::i;:::-;24551:15;;;;;;;;:::i;:::-;;;;;;;;:22;;24543:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24645:1;24658;24647;:8;:12;;;;:::i;:::-;24645:15;;;;;;;;:::i;:::-;;;;;;;;24620:21;:40;;24612:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;24706:51;24727:12;:10;:12::i;:::-;24741:1;24754;24743;:8;:12;;;;:::i;:::-;24741:15;;;;;;;;:::i;:::-;;;;;;;;24706:20;:51::i;:::-;24768:27;24774:12;:10;:12::i;:::-;24788:6;24768:5;:27::i;:::-;24836:1;24849;24838;:8;:12;;;;:::i;:::-;24836:15;;;;;;;;:::i;:::-;;;;;;;;24816:16;;:35;;;;;;;:::i;:::-;;;;;;;;24877:6;24862:11;;:21;;;;;;;:::i;:::-;;;;;;;;24901:57;24920:12;:10;:12::i;:::-;24934:6;24942:1;24955;24944;:8;:12;;;;:::i;:::-;24942:15;;;;;;;;:::i;:::-;;;;;;;;24901:57;;;;;;;;:::i;:::-;;;;;;;;24976:4;24969:11;;;;;23991:997;;;:::o;15185:37::-;;;;:::o;21789:340::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21943:17:::1;21924:16;:36;;;;21984:11;21971:10;:24;;;;22020:12;22006:11;:26;;;;22072:49;22109:11;;22072:32;22093:10;;22072:16;;:20;;:32;;;;:::i;:::-;:36;;:49;;;;:::i;:::-;22045:24;:76;;;;21789:340:::0;;;:::o;23002:171::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23103:8:::1;23079:21;;:32;;;;;;;;;;;;;;;;;;23127:38;23156:8;23127:38;;;;;;:::i;:::-;;;;;;;;23002:171:::0;:::o;30495:148::-;30536:7;30545;30554;30582:11;;30595:16;;30613:21;30574:61;;;;;;30495:148;;;:::o;15873:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;16308:26::-;;;;;;;;;;;;;:::o;23314:211::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23377:13:::1;;;;;;;;;;;23376:14;23368:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;23420:61;23433:24;23451:4;23433:9;:24::i;:::-;23459:21;23420:12;:61::i;:::-;23508:4;23492:13;;:20;;;;;;;;;;;;;;;;;;23314:211::o:0;14552:30::-;;;;:::o;16467:45::-;;;;;;;;;;;;;:::o;19544:143::-;19625:7;19652:11;:18;19664:5;19652:18;;;;;;;;;;;;;;;:27;19671:7;19652:27;;;;;;;;;;;;;;;;19645:34;;19544:143;;;;:::o;20724:107::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20819:4:::1;20792:15;:24;20808:7;20792:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;20724:107:::0;:::o;15549:37::-;;;;:::o;22619:102::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22705:8:::1;22691:10;:22;;;;22619:102:::0;:::o;6319:244::-;6085:12;:10;:12::i;:::-;6075:22;;:6;;;;;;;;;;:22;;;6067:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6428:1:::1;6408:22;;:8;:22;;::::0;6400:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6518:8;6489:38;;6510:6;::::0;::::1;;;;;;;;6489:38;;;;;;;;;;;;6547:8;6538:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6319:244:::0;:::o;16519:35::-;;;;;;;;;;;;;:::o;15750:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;14589:35::-;;;;:::o;273:115::-;326:15;369:10;354:26;;273:115;:::o;20369:347::-;20489:1;20472:19;;:5;:19;;;20464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20570:1;20551:21;;:7;:21;;;20543:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20654:6;20624:11;:18;20636:5;20624:18;;;;;;;;;;;;;;;:27;20643:7;20624:27;;;;;;;;;;;;;;;:36;;;;20692:7;20676:32;;20685:5;20676:32;;;20701:6;20676:32;;;;;;:::i;:::-;;;;;;;;20369:347;;;:::o;1343:181::-;1401:7;1421:9;1437:1;1433;:5;;;;:::i;:::-;1421:17;;1462:1;1457;:6;;1449:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1515:1;1508:8;;;1343:181;;;;:::o;25492:1828::-;25619:1;25601:20;;:6;:20;;;25593:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;25703:1;25682:23;;:9;:23;;;25674:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25761:16;;;;;;;;;;;25758:1555;;;25804:41;25819:6;25827:9;25838:6;25804:14;:41::i;:::-;;25758:1555;;;25901:18;:26;25920:6;25901:26;;;;;;;;;;;;;;;;;;;;;;;;;25900:27;:61;;;;;25932:18;:29;25951:9;25932:29;;;;;;;;;;;;;;;;;;;;;;;;;25931:30;25900:61;25897:176;;;26000:12;;25990:6;:22;;25982:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25897:176;26101:28;26132:24;26150:4;26132:9;:24::i;:::-;26101:55;;26171:28;26226:23;;26202:20;:47;;26171:78;;26282:23;:44;;;;;26310:16;;;;;;;;;;;26309:17;26282:44;:72;;;;;26331:15;:23;26347:6;26331:23;;;;;;;;;;;;;;;;;;;;;;;;;26330:24;26282:72;:97;;;;;26358:21;;;;;;;;;;;26282:97;26278:363;;;26417:25;;;;;;;;;;;:42;;;;;26446:13;;;;;;;;;;;26417:42;26414:114;;;26505:23;;26482:46;;26414:114;26547:74;26571:20;26562:6;:29;:58;;26600:20;26562:58;;;26593:6;26562:58;26547:14;:74::i;:::-;26278:363;26677:53;26699:6;26677:53;;;;;;;;;;;;;;;;;:9;:17;26687:6;26677:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;26657:9;:17;26667:6;26657:17;;;;;;;;;;;;;;;:73;;;;26747:19;26770:21;:29;26792:6;26770:29;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;26803:21;:32;26825:9;26803:32;;;;;;;;;;;;;;;;;;;;;;;;;26770:65;26769:156;;26891:34;26899:6;26907:9;26918:6;26891:7;:34::i;:::-;26769:156;;;26882:6;26769:156;26747:178;;26944:13;;;;;;;;;;;26940:67;;26973:34;26981:6;26989:9;27000:6;26973:7;:34::i;:::-;26959:48;;26940:67;27027:16;;;;;;;;;;;:54;;;;;27048:22;:33;27071:9;27048:33;;;;;;;;;;;;;;;;;;;;;;;;;27047:34;27027:54;27024:136;;;27149:10;;27108:37;27133:11;27108:20;27118:9;27108;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;27100:60;;;;;;27024:136;27200:37;27225:11;27200:9;:20;27210:9;27200:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;27177:9;:20;27187:9;27177:20;;;;;;;;;;;;;;;:60;;;;27276:9;27259:40;;27268:6;27259:40;;;27287:11;27259:40;;;;;;:::i;:::-;;;;;;;;25882:1431;;;25758:1555;25492:1828;;;:::o;1676:192::-;1762:7;1795:1;1790;:6;;1798:12;1782:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1822:9;1838:1;1834;:5;;;;:::i;:::-;1822:17;;1859:1;1852:8;;;1676:192;;;;;:::o;1532:136::-;1590:7;1617:43;1621:1;1624;1617:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1610:50;;1532:136;;;;:::o;23675:126::-;23767:9;:18;;:26;23786:6;23767:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23675:126;;:::o;18547:474::-;18650:1;18631:21;;:7;:21;;;18623:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18707:22;18732:9;:18;18742:7;18732:18;;;;;;;;;;;;;;;;18707:43;;18787:6;18769:14;:24;;18761:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18906:6;18889:14;:23;18868:9;:18;18878:7;18868:18;;;;;;;;;;;;;;;:44;;;;18950:6;18934:12;;:22;;;;;;;:::i;:::-;;;;;;;;19000:1;18974:37;;18983:7;18974:37;;;19004:6;18974:37;;;;;;:::i;:::-;;;;;;;;18612:409;18547:474;;:::o;29405:444::-;29486:62;29503:4;29518:15;;;;;;;;;;;29536:11;29486:8;:62::i;:::-;29589:15;;;;;;;;;;;:31;;;29628:9;29661:4;29681:11;29707:1;29750;29793:7;:5;:7::i;:::-;29815:15;29589:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29405:444;;:::o;27328:330::-;27421:4;27458:53;27480:6;27458:53;;;;;;;;;;;;;;;;;:9;:17;27468:6;27458:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;27438:9;:17;27448:6;27438:17;;;;;;;;;;;;;;;:73;;;;27545:32;27570:6;27545:9;:20;27555:9;27545:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;27522:9;:20;27532:9;27522:20;;;;;;;;;;;;;;;:55;;;;27610:9;27593:35;;27602:6;27593:35;;;27621:6;27593:35;;;;;;:::i;:::-;;;;;;;;27646:4;27639:11;;27328:330;;;;;:::o;27666:1057::-;17191:4;17172:16;;:23;;;;;;;;;;;;;;;;;;27744:13:::1;;;;;;;;;;;27740:26:::0;27759:7:::1;27740:26;27786:28;27817:21;27786:52;;27849:19;27871:66;27935:1;27871:59;27905:24;;27871:29;27883:16;;27871:7;:11;;:29;;;;:::i;:::-;:33;;:59;;;;:::i;:::-;:63;;:66;;;;:::i;:::-;27849:88;;27948:21;27972:24;27984:11;27972:7;:11;;:24;;;;:::i;:::-;27948:48;;28009:31;28026:13;28009:16;:31::i;:::-;28051:22;28076:47;28102:20;28076:21;:25;;:47;;;;:::i;:::-;28051:72;;28136:19;28158:53;28187:23;28208:1;28187:16;;:20;;:23;;;;:::i;:::-;28158:24;;:28;;:53;;;;:::i;:::-;28136:75;;28232:26;28261:60;28319:1;28261:53;28302:11;28261:36;28280:16;;28261:14;:18;;:36;;;;:::i;:::-;:40;;:53;;;;:::i;:::-;:57;;:60;;;;:::i;:::-;28232:89;;28332:21;28356:48;28392:11;28356:31;28375:11;;28356:14;:18;;:31;;;;:::i;:::-;:35;;:48;;;;:::i;:::-;28332:72;;28415:20;28438:57;28481:13;28438:38;28457:18;28438:14;:18;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;28415:80;;28526:1;28511:12;:16;28508:88;;;28542:54;28563:18;;;;;;;;;;;28583:12;28542:20;:54::i;:::-;28508:88;28635:1;28614:18;:22;:41;;;;;28654:1;28640:11;:15;28614:41;28611:104;;;28670:45;28683:11;28696:18;28670:12;:45::i;:::-;28611:104;27727:996;;;;;;;;17206:1;17237:5:::0;17218:16;;:24;;;;;;;;;;;;;;;;;;27666:1057;:::o;29859:628::-;29945:7;29975:17;29995:1;29975:21;;30020:15;:23;30036:6;30020:23;;;;;;;;;;;;;;;;;;;;;;;;;30017:229;;;30072:38;30106:3;30072:29;30083:17;;30072:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;30060:50;;30017:229;;;30140:15;:26;30156:9;30140:26;;;;;;;;;;;;;;;;;;;;;;;;;30137:109;;;30195:39;30230:3;30195:30;30206:18;;30195:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;30183:51;;30137:109;30017:229;30281:1;30269:9;:13;30266:173;;;30326:39;30355:9;30326;:24;30344:4;30326:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;30299:9;:24;30317:4;30299:24;;;;;;;;;;;;;;;:66;;;;30410:4;30385:42;;30394:6;30385:42;;;30417:9;30385:42;;;;;;:::i;:::-;;;;;;;;30266:173;30458:21;30469:9;30458:6;:10;;:21;;;;:::i;:::-;30451:28;;;29859:628;;;;;:::o;1876:250::-;1934:7;1963:1;1958;:6;1954:47;;1988:1;1981:8;;;;1954:47;2013:9;2029:1;2025;:5;;;;:::i;:::-;2013:17;;2058:1;2053;2049;:5;;;;:::i;:::-;:10;2041:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2117:1;2110:8;;;1876:250;;;;;:::o;2134:132::-;2192:7;2219:39;2223:1;2226;2219:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2212:46;;2134:132;;;;:::o;28731:666::-;28857:21;28895:1;28881:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28857:40;;28926:4;28908;28913:1;28908:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28952:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28942:4;28947:1;28942:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28987:62;29004:4;29019:15;;;;;;;;;;;29037:11;28987:8;:62::i;:::-;29088:15;;;;;;;;;;;:66;;;29169:11;29195:1;29239:4;29266;29302:15;29088:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29354:35;29371:11;29384:4;29354:35;;;;;;;:::i;:::-;;;;;;;;28786:611;28731:666;:::o;2274:278::-;2360:7;2392:1;2388;:5;2395:12;2380:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2419:9;2435:1;2431;:5;;;;:::i;:::-;2419:17;;2543:1;2536:8;;;2274:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:::-;5478:6;5486;5494;5543:2;5531:9;5522:7;5518:23;5514:32;5511:119;;;5549:79;;:::i;:::-;5511:119;5669:1;5694:53;5739:7;5730:6;5719:9;5715:22;5694:53;:::i;:::-;5684:63;;5640:117;5796:2;5822:53;5867:7;5858:6;5847:9;5843:22;5822:53;:::i;:::-;5812:63;;5767:118;5924:2;5950:53;5995:7;5986:6;5975:9;5971:22;5950:53;:::i;:::-;5940:63;;5895:118;5401:619;;;;;:::o;6026:116::-;6096:21;6111:5;6096:21;:::i;:::-;6089:5;6086:32;6076:60;;6132:1;6129;6122:12;6076:60;6026:116;:::o;6148:133::-;6191:5;6229:6;6216:20;6207:29;;6245:30;6269:5;6245:30;:::i;:::-;6148:133;;;;:::o;6287:323::-;6343:6;6392:2;6380:9;6371:7;6367:23;6363:32;6360:119;;;6398:79;;:::i;:::-;6360:119;6518:1;6543:50;6585:7;6576:6;6565:9;6561:22;6543:50;:::i;:::-;6533:60;;6489:114;6287:323;;;;:::o;6616:118::-;6703:24;6721:5;6703:24;:::i;:::-;6698:3;6691:37;6616:118;;:::o;6740:222::-;6833:4;6871:2;6860:9;6856:18;6848:26;;6884:71;6952:1;6941:9;6937:17;6928:6;6884:71;:::i;:::-;6740:222;;;;:::o;6968:468::-;7033:6;7041;7090:2;7078:9;7069:7;7065:23;7061:32;7058:119;;;7096:79;;:::i;:::-;7058:119;7216:1;7241:53;7286:7;7277:6;7266:9;7262:22;7241:53;:::i;:::-;7231:63;;7187:117;7343:2;7369:50;7411:7;7402:6;7391:9;7387:22;7369:50;:::i;:::-;7359:60;;7314:115;6968:468;;;;;:::o;7442:86::-;7477:7;7517:4;7510:5;7506:16;7495:27;;7442:86;;;:::o;7534:112::-;7617:22;7633:5;7617:22;:::i;:::-;7612:3;7605:35;7534:112;;:::o;7652:214::-;7741:4;7779:2;7768:9;7764:18;7756:26;;7792:67;7856:1;7845:9;7841:17;7832:6;7792:67;:::i;:::-;7652:214;;;;:::o;7872:329::-;7931:6;7980:2;7968:9;7959:7;7955:23;7951:32;7948:119;;;7986:79;;:::i;:::-;7948:119;8106:1;8131:53;8176:7;8167:6;8156:9;8152:22;8131:53;:::i;:::-;8121:63;;8077:117;7872:329;;;;:::o;8207:::-;8266:6;8315:2;8303:9;8294:7;8290:23;8286:32;8283:119;;;8321:79;;:::i;:::-;8283:119;8441:1;8466:53;8511:7;8502:6;8491:9;8487:22;8466:53;:::i;:::-;8456:63;;8412:117;8207:329;;;;:::o;8542:442::-;8691:4;8729:2;8718:9;8714:18;8706:26;;8742:71;8810:1;8799:9;8795:17;8786:6;8742:71;:::i;:::-;8823:72;8891:2;8880:9;8876:18;8867:6;8823:72;:::i;:::-;8905;8973:2;8962:9;8958:18;8949:6;8905:72;:::i;:::-;8542:442;;;;;;:::o;8990:474::-;9058:6;9066;9115:2;9103:9;9094:7;9090:23;9086:32;9083:119;;;9121:79;;:::i;:::-;9083:119;9241:1;9266:53;9311:7;9302:6;9291:9;9287:22;9266:53;:::i;:::-;9256:63;;9212:117;9368:2;9394:53;9439:7;9430:6;9419:9;9415:22;9394:53;:::i;:::-;9384:63;;9339:118;8990:474;;;;;:::o;9470:180::-;9518:77;9515:1;9508:88;9615:4;9612:1;9605:15;9639:4;9636:1;9629:15;9656:320;9700:6;9737:1;9731:4;9727:12;9717:22;;9784:1;9778:4;9774:12;9805:18;9795:81;;9861:4;9853:6;9849:17;9839:27;;9795:81;9923:2;9915:6;9912:14;9892:18;9889:38;9886:84;;9942:18;;:::i;:::-;9886:84;9707:269;9656:320;;;:::o;9982:182::-;10122:34;10118:1;10110:6;10106:14;10099:58;9982:182;:::o;10170:366::-;10312:3;10333:67;10397:2;10392:3;10333:67;:::i;:::-;10326:74;;10409:93;10498:3;10409:93;:::i;:::-;10527:2;10522:3;10518:12;10511:19;;10170:366;;;:::o;10542:419::-;10708:4;10746:2;10735:9;10731:18;10723:26;;10795:9;10789:4;10785:20;10781:1;10770:9;10766:17;10759:47;10823:131;10949:4;10823:131;:::i;:::-;10815:139;;10542:419;;;:::o;10967:175::-;11107:27;11103:1;11095:6;11091:14;11084:51;10967:175;:::o;11148:366::-;11290:3;11311:67;11375:2;11370:3;11311:67;:::i;:::-;11304:74;;11387:93;11476:3;11387:93;:::i;:::-;11505:2;11500:3;11496:12;11489:19;;11148:366;;;:::o;11520:419::-;11686:4;11724:2;11713:9;11709:18;11701:26;;11773:9;11767:4;11763:20;11759:1;11748:9;11744:17;11737:47;11801:131;11927:4;11801:131;:::i;:::-;11793:139;;11520:419;;;:::o;11945:174::-;12085:26;12081:1;12073:6;12069:14;12062:50;11945:174;:::o;12125:366::-;12267:3;12288:67;12352:2;12347:3;12288:67;:::i;:::-;12281:74;;12364:93;12453:3;12364:93;:::i;:::-;12482:2;12477:3;12473:12;12466:19;;12125:366;;;:::o;12497:419::-;12663:4;12701:2;12690:9;12686:18;12678:26;;12750:9;12744:4;12740:20;12736:1;12725:9;12721:17;12714:47;12778:131;12904:4;12778:131;:::i;:::-;12770:139;;12497:419;;;:::o;12922:180::-;12970:77;12967:1;12960:88;13067:4;13064:1;13057:15;13091:4;13088:1;13081:15;13108:180;13156:77;13153:1;13146:88;13253:4;13250:1;13243:15;13277:4;13274:1;13267:15;13294:143;13351:5;13382:6;13376:13;13367:22;;13398:33;13425:5;13398:33;:::i;:::-;13294:143;;;;:::o;13443:351::-;13513:6;13562:2;13550:9;13541:7;13537:23;13533:32;13530:119;;;13568:79;;:::i;:::-;13530:119;13688:1;13713:64;13769:7;13760:6;13749:9;13745:22;13713:64;:::i;:::-;13703:74;;13659:128;13443:351;;;;:::o;13800:114::-;13867:6;13901:5;13895:12;13885:22;;13800:114;;;:::o;13920:184::-;14019:11;14053:6;14048:3;14041:19;14093:4;14088:3;14084:14;14069:29;;13920:184;;;;:::o;14110:132::-;14177:4;14200:3;14192:11;;14230:4;14225:3;14221:14;14213:22;;14110:132;;;:::o;14248:108::-;14325:24;14343:5;14325:24;:::i;:::-;14320:3;14313:37;14248:108;;:::o;14362:179::-;14431:10;14452:46;14494:3;14486:6;14452:46;:::i;:::-;14530:4;14525:3;14521:14;14507:28;;14362:179;;;;:::o;14547:113::-;14617:4;14649;14644:3;14640:14;14632:22;;14547:113;;;:::o;14696:732::-;14815:3;14844:54;14892:5;14844:54;:::i;:::-;14914:86;14993:6;14988:3;14914:86;:::i;:::-;14907:93;;15024:56;15074:5;15024:56;:::i;:::-;15103:7;15134:1;15119:284;15144:6;15141:1;15138:13;15119:284;;;15220:6;15214:13;15247:63;15306:3;15291:13;15247:63;:::i;:::-;15240:70;;15333:60;15386:6;15333:60;:::i;:::-;15323:70;;15179:224;15166:1;15163;15159:9;15154:14;;15119:284;;;15123:14;15419:3;15412:10;;14820:608;;;14696:732;;;;:::o;15434:483::-;15605:4;15643:2;15632:9;15628:18;15620:26;;15656:71;15724:1;15713:9;15709:17;15700:6;15656:71;:::i;:::-;15774:9;15768:4;15764:20;15759:2;15748:9;15744:18;15737:48;15802:108;15905:4;15896:6;15802:108;:::i;:::-;15794:116;;15434:483;;;;;:::o;15923:117::-;16032:1;16029;16022:12;16046:281;16129:27;16151:4;16129:27;:::i;:::-;16121:6;16117:40;16259:6;16247:10;16244:22;16223:18;16211:10;16208:34;16205:62;16202:88;;;16270:18;;:::i;:::-;16202:88;16310:10;16306:2;16299:22;16089:238;16046:281;;:::o;16333:129::-;16367:6;16394:20;;:::i;:::-;16384:30;;16423:33;16451:4;16443:6;16423:33;:::i;:::-;16333:129;;;:::o;16468:311::-;16545:4;16635:18;16627:6;16624:30;16621:56;;;16657:18;;:::i;:::-;16621:56;16707:4;16699:6;16695:17;16687:25;;16767:4;16761;16757:15;16749:23;;16468:311;;;:::o;16785:117::-;16894:1;16891;16884:12;16908:143;16965:5;16996:6;16990:13;16981:22;;17012:33;17039:5;17012:33;:::i;:::-;16908:143;;;;:::o;17074:732::-;17181:5;17206:81;17222:64;17279:6;17222:64;:::i;:::-;17206:81;:::i;:::-;17197:90;;17307:5;17336:6;17329:5;17322:21;17370:4;17363:5;17359:16;17352:23;;17423:4;17415:6;17411:17;17403:6;17399:30;17452:3;17444:6;17441:15;17438:122;;;17471:79;;:::i;:::-;17438:122;17586:6;17569:231;17603:6;17598:3;17595:15;17569:231;;;17678:3;17707:48;17751:3;17739:10;17707:48;:::i;:::-;17702:3;17695:61;17785:4;17780:3;17776:14;17769:21;;17645:155;17629:4;17624:3;17620:14;17613:21;;17569:231;;;17573:21;17187:619;;17074:732;;;;;:::o;17829:385::-;17911:5;17960:3;17953:4;17945:6;17941:17;17937:27;17927:122;;17968:79;;:::i;:::-;17927:122;18078:6;18072:13;18103:105;18204:3;18196:6;18189:4;18181:6;18177:17;18103:105;:::i;:::-;18094:114;;17917:297;17829:385;;;;:::o;18220:554::-;18315:6;18364:2;18352:9;18343:7;18339:23;18335:32;18332:119;;;18370:79;;:::i;:::-;18332:119;18511:1;18500:9;18496:17;18490:24;18541:18;18533:6;18530:30;18527:117;;;18563:79;;:::i;:::-;18527:117;18668:89;18749:7;18740:6;18729:9;18725:22;18668:89;:::i;:::-;18658:99;;18461:306;18220:554;;;;:::o;18780:180::-;18828:77;18825:1;18818:88;18925:4;18922:1;18915:15;18949:4;18946:1;18939:15;18966:180;19014:77;19011:1;19004:88;19111:4;19108:1;19101:15;19135:4;19132:1;19125:15;19152:185;19192:1;19209:20;19227:1;19209:20;:::i;:::-;19204:25;;19243:20;19261:1;19243:20;:::i;:::-;19238:25;;19282:1;19272:35;;19287:18;;:::i;:::-;19272:35;19329:1;19326;19322:9;19317:14;;19152:185;;;;:::o;19343:194::-;19383:4;19403:20;19421:1;19403:20;:::i;:::-;19398:25;;19437:20;19455:1;19437:20;:::i;:::-;19432:25;;19481:1;19478;19474:9;19466:17;;19505:1;19499:4;19496:11;19493:37;;;19510:18;;:::i;:::-;19493:37;19343:194;;;;:::o;19543:173::-;19683:25;19679:1;19671:6;19667:14;19660:49;19543:173;:::o;19722:366::-;19864:3;19885:67;19949:2;19944:3;19885:67;:::i;:::-;19878:74;;19961:93;20050:3;19961:93;:::i;:::-;20079:2;20074:3;20070:12;20063:19;;19722:366;;;:::o;20094:419::-;20260:4;20298:2;20287:9;20283:18;20275:26;;20347:9;20341:4;20337:20;20333:1;20322:9;20318:17;20311:47;20375:131;20501:4;20375:131;:::i;:::-;20367:139;;20094:419;;;:::o;20519:178::-;20659:30;20655:1;20647:6;20643:14;20636:54;20519:178;:::o;20703:366::-;20845:3;20866:67;20930:2;20925:3;20866:67;:::i;:::-;20859:74;;20942:93;21031:3;20942:93;:::i;:::-;21060:2;21055:3;21051:12;21044:19;;20703:366;;;:::o;21075:419::-;21241:4;21279:2;21268:9;21264:18;21256:26;;21328:9;21322:4;21318:20;21314:1;21303:9;21299:17;21292:47;21356:131;21482:4;21356:131;:::i;:::-;21348:139;;21075:419;;;:::o;21500:191::-;21540:3;21559:20;21577:1;21559:20;:::i;:::-;21554:25;;21593:20;21611:1;21593:20;:::i;:::-;21588:25;;21636:1;21633;21629:9;21622:16;;21657:3;21654:1;21651:10;21648:36;;;21664:18;;:::i;:::-;21648:36;21500:191;;;;:::o;21697:134::-;21755:9;21788:37;21819:5;21788:37;:::i;:::-;21775:50;;21697:134;;;:::o;21837:147::-;21932:45;21971:5;21932:45;:::i;:::-;21927:3;21920:58;21837:147;;:::o;21990:458::-;22147:4;22185:2;22174:9;22170:18;22162:26;;22198:79;22274:1;22263:9;22259:17;22250:6;22198:79;:::i;:::-;22287:72;22355:2;22344:9;22340:18;22331:6;22287:72;:::i;:::-;22369;22437:2;22426:9;22422:18;22413:6;22369:72;:::i;:::-;21990:458;;;;;;:::o;22454:164::-;22594:16;22590:1;22582:6;22578:14;22571:40;22454:164;:::o;22624:366::-;22766:3;22787:67;22851:2;22846:3;22787:67;:::i;:::-;22780:74;;22863:93;22952:3;22863:93;:::i;:::-;22981:2;22976:3;22972:12;22965:19;;22624:366;;;:::o;22996:419::-;23162:4;23200:2;23189:9;23185:18;23177:26;;23249:9;23243:4;23239:20;23235:1;23224:9;23220:17;23213:47;23277:131;23403:4;23277:131;:::i;:::-;23269:139;;22996:419;;;:::o;23421:225::-;23561:34;23557:1;23549:6;23545:14;23538:58;23630:8;23625:2;23617:6;23613:15;23606:33;23421:225;:::o;23652:366::-;23794:3;23815:67;23879:2;23874:3;23815:67;:::i;:::-;23808:74;;23891:93;23980:3;23891:93;:::i;:::-;24009:2;24004:3;24000:12;23993:19;;23652:366;;;:::o;24024:419::-;24190:4;24228:2;24217:9;24213:18;24205:26;;24277:9;24271:4;24267:20;24263:1;24252:9;24248:17;24241:47;24305:131;24431:4;24305:131;:::i;:::-;24297:139;;24024:419;;;:::o;24449:223::-;24589:34;24585:1;24577:6;24573:14;24566:58;24658:6;24653:2;24645:6;24641:15;24634:31;24449:223;:::o;24678:366::-;24820:3;24841:67;24905:2;24900:3;24841:67;:::i;:::-;24834:74;;24917:93;25006:3;24917:93;:::i;:::-;25035:2;25030:3;25026:12;25019:19;;24678:366;;;:::o;25050:419::-;25216:4;25254:2;25243:9;25239:18;25231:26;;25303:9;25297:4;25293:20;25289:1;25278:9;25274:17;25267:47;25331:131;25457:4;25331:131;:::i;:::-;25323:139;;25050:419;;;:::o;25475:221::-;25615:34;25611:1;25603:6;25599:14;25592:58;25684:4;25679:2;25671:6;25667:15;25660:29;25475:221;:::o;25702:366::-;25844:3;25865:67;25929:2;25924:3;25865:67;:::i;:::-;25858:74;;25941:93;26030:3;25941:93;:::i;:::-;26059:2;26054:3;26050:12;26043:19;;25702:366;;;:::o;26074:419::-;26240:4;26278:2;26267:9;26263:18;26255:26;;26327:9;26321:4;26317:20;26313:1;26302:9;26298:17;26291:47;26355:131;26481:4;26355:131;:::i;:::-;26347:139;;26074:419;;;:::o;26499:177::-;26639:29;26635:1;26627:6;26623:14;26616:53;26499:177;:::o;26682:366::-;26824:3;26845:67;26909:2;26904:3;26845:67;:::i;:::-;26838:74;;26921:93;27010:3;26921:93;:::i;:::-;27039:2;27034:3;27030:12;27023:19;;26682:366;;;:::o;27054:419::-;27220:4;27258:2;27247:9;27243:18;27235:26;;27307:9;27301:4;27297:20;27293:1;27282:9;27278:17;27271:47;27335:131;27461:4;27335:131;:::i;:::-;27327:139;;27054:419;;;:::o;27479:224::-;27619:34;27615:1;27607:6;27603:14;27596:58;27688:7;27683:2;27675:6;27671:15;27664:32;27479:224;:::o;27709:366::-;27851:3;27872:67;27936:2;27931:3;27872:67;:::i;:::-;27865:74;;27948:93;28037:3;27948:93;:::i;:::-;28066:2;28061:3;28057:12;28050:19;;27709:366;;;:::o;28081:419::-;28247:4;28285:2;28274:9;28270:18;28262:26;;28334:9;28328:4;28324:20;28320:1;28309:9;28305:17;28298:47;28362:131;28488:4;28362:131;:::i;:::-;28354:139;;28081:419;;;:::o;28506:222::-;28646:34;28642:1;28634:6;28630:14;28623:58;28715:5;28710:2;28702:6;28698:15;28691:30;28506:222;:::o;28734:366::-;28876:3;28897:67;28961:2;28956:3;28897:67;:::i;:::-;28890:74;;28973:93;29062:3;28973:93;:::i;:::-;29091:2;29086:3;29082:12;29075:19;;28734:366;;;:::o;29106:419::-;29272:4;29310:2;29299:9;29295:18;29287:26;;29359:9;29353:4;29349:20;29345:1;29334:9;29330:17;29323:47;29387:131;29513:4;29387:131;:::i;:::-;29379:139;;29106:419;;;:::o;29531:227::-;29671:34;29667:1;29659:6;29655:14;29648:58;29740:10;29735:2;29727:6;29723:15;29716:35;29531:227;:::o;29764:366::-;29906:3;29927:67;29991:2;29986:3;29927:67;:::i;:::-;29920:74;;30003:93;30092:3;30003:93;:::i;:::-;30121:2;30116:3;30112:12;30105:19;;29764:366;;;:::o;30136:419::-;30302:4;30340:2;30329:9;30325:18;30317:26;;30389:9;30383:4;30379:20;30375:1;30364:9;30360:17;30353:47;30417:131;30543:4;30417:131;:::i;:::-;30409:139;;30136:419;;;:::o;30561:220::-;30701:34;30697:1;30689:6;30685:14;30678:58;30770:3;30765:2;30757:6;30753:15;30746:28;30561:220;:::o;30787:366::-;30929:3;30950:67;31014:2;31009:3;30950:67;:::i;:::-;30943:74;;31026:93;31115:3;31026:93;:::i;:::-;31144:2;31139:3;31135:12;31128:19;;30787:366;;;:::o;31159:419::-;31325:4;31363:2;31352:9;31348:18;31340:26;;31412:9;31406:4;31402:20;31398:1;31387:9;31383:17;31376:47;31440:131;31566:4;31440:131;:::i;:::-;31432:139;;31159:419;;;:::o;31584:221::-;31724:34;31720:1;31712:6;31708:14;31701:58;31793:4;31788:2;31780:6;31776:15;31769:29;31584:221;:::o;31811:366::-;31953:3;31974:67;32038:2;32033:3;31974:67;:::i;:::-;31967:74;;32050:93;32139:3;32050:93;:::i;:::-;32168:2;32163:3;32159:12;32152:19;;31811:366;;;:::o;32183:419::-;32349:4;32387:2;32376:9;32372:18;32364:26;;32436:9;32430:4;32426:20;32422:1;32411:9;32407:17;32400:47;32464:131;32590:4;32464:131;:::i;:::-;32456:139;;32183:419;;;:::o;32608:85::-;32653:7;32682:5;32671:16;;32608:85;;;:::o;32699:158::-;32757:9;32790:61;32808:42;32817:32;32843:5;32817:32;:::i;:::-;32808:42;:::i;:::-;32790:61;:::i;:::-;32777:74;;32699:158;;;:::o;32863:147::-;32958:45;32997:5;32958:45;:::i;:::-;32953:3;32946:58;32863:147;;:::o;33016:807::-;33265:4;33303:3;33292:9;33288:19;33280:27;;33317:71;33385:1;33374:9;33370:17;33361:6;33317:71;:::i;:::-;33398:72;33466:2;33455:9;33451:18;33442:6;33398:72;:::i;:::-;33480:80;33556:2;33545:9;33541:18;33532:6;33480:80;:::i;:::-;33570;33646:2;33635:9;33631:18;33622:6;33570:80;:::i;:::-;33660:73;33728:3;33717:9;33713:19;33704:6;33660:73;:::i;:::-;33743;33811:3;33800:9;33796:19;33787:6;33743:73;:::i;:::-;33016:807;;;;;;;;;:::o;33829:663::-;33917:6;33925;33933;33982:2;33970:9;33961:7;33957:23;33953:32;33950:119;;;33988:79;;:::i;:::-;33950:119;34108:1;34133:64;34189:7;34180:6;34169:9;34165:22;34133:64;:::i;:::-;34123:74;;34079:128;34246:2;34272:64;34328:7;34319:6;34308:9;34304:22;34272:64;:::i;:::-;34262:74;;34217:129;34385:2;34411:64;34467:7;34458:6;34447:9;34443:22;34411:64;:::i;:::-;34401:74;;34356:129;33829:663;;;;;:::o;34498:410::-;34538:7;34561:20;34579:1;34561:20;:::i;:::-;34556:25;;34595:20;34613:1;34595:20;:::i;:::-;34590:25;;34650:1;34647;34643:9;34672:30;34690:11;34672:30;:::i;:::-;34661:41;;34851:1;34842:7;34838:15;34835:1;34832:22;34812:1;34805:9;34785:83;34762:139;;34881:18;;:::i;:::-;34762:139;34546:362;34498:410;;;;:::o;34914:220::-;35054:34;35050:1;35042:6;35038:14;35031:58;35123:3;35118:2;35110:6;35106:15;35099:28;34914:220;:::o;35140:366::-;35282:3;35303:67;35367:2;35362:3;35303:67;:::i;:::-;35296:74;;35379:93;35468:3;35379:93;:::i;:::-;35497:2;35492:3;35488:12;35481:19;;35140:366;;;:::o;35512:419::-;35678:4;35716:2;35705:9;35701:18;35693:26;;35765:9;35759:4;35755:20;35751:1;35740:9;35736:17;35729:47;35793:131;35919:4;35793:131;:::i;:::-;35785:139;;35512:419;;;:::o;35937:831::-;36200:4;36238:3;36227:9;36223:19;36215:27;;36252:71;36320:1;36309:9;36305:17;36296:6;36252:71;:::i;:::-;36333:80;36409:2;36398:9;36394:18;36385:6;36333:80;:::i;:::-;36460:9;36454:4;36450:20;36445:2;36434:9;36430:18;36423:48;36488:108;36591:4;36582:6;36488:108;:::i;:::-;36480:116;;36606:72;36674:2;36663:9;36659:18;36650:6;36606:72;:::i;:::-;36688:73;36756:3;36745:9;36741:19;36732:6;36688:73;:::i;:::-;35937:831;;;;;;;;:::o

Swarm Source

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