ETH Price: $2,965.36 (-1.82%)
Gas: 2 Gwei

Token

Bonfire (BONFIRE)
 

Overview

Max Total Supply

75,387,399.029962597808760006 BONFIRE

Holders

548

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.773122783977753362 BONFIRE

Value
$0.00
0xa4731140b294b42935ef0957022c52b17cf462cb
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:
BONFIRE

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
/**

WELCOME TO $BONFIRE
ADVANCED BURNENOMICS

https://t.me/bonfireerc
https://x.com/bonfireerc
http://www.bonfireeth.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 BONFIRE 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 = "Bonfire";
    string private _symbol = "BONFIRE";
    uint8 private _decimals = 18;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;

    address payable private devMarketingWallet = payable(0xB136Bee36f67A90F5B37fa76a7aE7F91A36F34c1);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;

    uint256 public _buyLiquidityFees = 4;
    uint256 public _buyDevFees = 45;
    uint256 public _buyBurnFees = 45;
    uint256 public _sellLiquidityFees = 4;
    uint256 public _sellDevFees = 45;
    uint256 public _sellBurnFees = 45;

    uint256 public _liquidityShares = 1;
    uint256 public _devShares = 3;
    uint256 public _burnShares = 4;

    uint256 public _totalTaxIfBuying = 94;
    uint256 public _totalTaxIfSelling = 94;
    uint256 public _totalDistributionShares = 8;

    // 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;

    // 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 () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _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 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)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

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

            uint256 finalAmount = (checkExcludedFromFees[sender] || checkExcludedFromFees[recipient]) ? 
                                         amount : 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 {
        
        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 token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function 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":"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":"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"}]

60a060405260006002556000600355600a60045567016345785d8a00006005556040518060400160405280600781526020017f426f6e6669726500000000000000000000000000000000000000000000000000815250600690805190602001906200006c92919062000b14565b506040518060400160405280600781526020017f424f4e464952450000000000000000000000000000000000000000000000000081525060079080519060200190620000ba92919062000b14565b506012600860006101000a81548160ff021916908360ff16021790555073b136bee36f67a90f5b37fa76a7ae7f91a36f34c1600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506004600c55602d600d55602d600e556004600f55602d601055602d601155600160125560036013556004601455605e601555605e60165560086017556a52b7d2dcc80cd2e4000000601c5569d3c21bcecceda1000000601d556a01a784379d99db42000000601e55692a5a058fc295ed000000601f556001602160156101000a81548160ff0219169083151502179055506000602160166101000a81548160ff0219169083151502179055506001602160176101000a81548160ff0219169083151502179055503480156200023857600080fd5b5060006200024b62000a8060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034957600080fd5b505afa1580156200035e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000384919062000bdb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003e757600080fd5b505afa158015620003fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000422919062000bdb565b6040518363ffffffff1660e01b81526004016200044192919062000c50565b602060405180830381600087803b1580156200045c57600080fd5b505af115801562000471573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000497919062000bdb565b602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601c54600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160186000620005d362000a8860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006b5600e54620006a1600d54600c5462000ab160201b620029921790919060201c565b62000ab160201b620029921790919060201c565b601581905550620006f4601154620006e0601054600f5462000ab160201b620029921790919060201c565b62000ab160201b620029921790919060201c565b601681905550620007336014546200071f60135460125462000ab160201b620029921790919060201c565b62000ab160201b620029921790919060201c565b6017819055506001601960006200074f62000a8860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60006200088862000a8860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601c5460096000620009c262000a8060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000a1062000a8060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601c5460405162000a71919062000c9f565b60405180910390a35062000e3f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000ac2919062000ccd565b90508381101562000b0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b019062000c7d565b60405180910390fd5b8091505092915050565b82805462000b229062000d68565b90600052602060002090601f01602090048101928262000b46576000855562000b92565b82601f1062000b6157805160ff191683800117855562000b92565b8280016001018555821562000b92579182015b8281111562000b9157825182559160200191906001019062000b74565b5b50905062000ba1919062000ba5565b5090565b5b8082111562000bc057600081600090555060010162000ba6565b5090565b60008151905062000bd58162000e25565b92915050565b60006020828403121562000bee57600080fd5b600062000bfe8482850162000bc4565b91505092915050565b62000c128162000d2a565b82525050565b600062000c27601b8362000cbc565b915062000c348262000dfc565b602082019050919050565b62000c4a8162000d5e565b82525050565b600060408201905062000c67600083018562000c07565b62000c76602083018462000c07565b9392505050565b6000602082019050818103600083015262000c988162000c18565b9050919050565b600060208201905062000cb6600083018462000c3f565b92915050565b600082825260208201905092915050565b600062000cda8262000d5e565b915062000ce78362000d5e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d1f5762000d1e62000d9e565b5b828201905092915050565b600062000d378262000d3e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000d8157607f821691505b6020821081141562000d985762000d9762000dcd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b62000e308162000d2a565b811462000e3c57600080fd5b50565b60805160601c61523f62000e656000396000818161125a0152611286015261523f6000f3fe6080604052600436106103905760003560e01c80637d1db4a5116101dc578063c2d4640e11610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610d71578063f872858a14610d9a578063fabf706314610dc5578063fb34a33614610e0257610397565b8063dd62ed3e14610cb7578063e207a92b14610cf4578063f0cd1dac14610d1d578063f1d5f51714610d4857610397565b8063c78a789b116100dc578063c78a789b14610bf9578063c816841b14610c36578063d89135cd14610c61578063da00097d14610c8c57610397565b8063c2d4640e14610b7a578063c49b9a8014610ba3578063c59d484714610bcc57610397565b80639e3fa3231161017a578063a5d69d1f11610149578063a5d69d1f14610aac578063a9059cbb14610ad5578063af254b7214610b12578063b6c3af3414610b4f57610397565b80639e3fa323146109ee578063a08e671f14610a19578063a40dcda314610a44578063a457c2d714610a6f57610397565b80638da5cb5b116101b65780638da5cb5b146109585780638f03aad514610983578063914eb66a146109ac57806395d89b41146109c357610397565b80637d1db4a5146108d7578063807c2d9c1461090257806382eefb431461092d57610397565b806339509351116102c1578063526012e81161025f578063667b511c1161022e578063667b511c1461081d57806370a082311461084657806374e8414e146108835780637b3a3ec6146108ac57610397565b8063526012e81461074f57806355324fa91461078c57806357e6adcb146107c95780635e252455146107f257610397565b80633f2516881161029b5780633f251688146106a35780634a728e24146106ce5780634a74bb02146106f95780634f1c2aa41461072457610397565b806339509351146106125780633b97084a1461064f5780633d98b9af1461067857610397565b80632563ae831161032e5780632cdae5cb116103085780632cdae5cb146105685780632f0a5fd414610591578063313ce567146105bc57806331eca57e146105e757610397565b80632563ae83146104e957806327c8f835146105125780632b112e491461053d57610397565b806318160ddd1161036a57806318160ddd1461042f5780631d865c301461045a57806323b872dd1461048357806325519cf2146104c057610397565b806306fdde031461039c578063095ea7b3146103c75780631694505e1461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e2d565b6040516103be91906146e2565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190614158565b610ebf565b6040516103fb91906146ac565b60405180910390f35b34801561041057600080fd5b50610419610edd565b60405161042691906146c7565b60405180910390f35b34801561043b57600080fd5b50610444610f03565b60405161045191906148e4565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c9190614227565b610f0d565b005b34801561048f57600080fd5b506104aa60048036038101906104a591906140cd565b610fed565b6040516104b791906146ac565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190614227565b6110c6565b005b3480156104f557600080fd5b50610510600480360381019061050b91906141d5565b6111a6565b005b34801561051e57600080fd5b50610527611258565b60405161053491906145f9565b60405180910390f35b34801561054957600080fd5b5061055261127c565b60405161055f91906148e4565b60405180910390f35b34801561057457600080fd5b5061058f600480360381019061058a919061411c565b6112c0565b005b34801561059d57600080fd5b506105a66113b0565b6040516105b391906148e4565b60405180910390f35b3480156105c857600080fd5b506105d16113b6565b6040516105de91906149c0565b60405180910390f35b3480156105f357600080fd5b506105fc6113cd565b60405161060991906148e4565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190614158565b6113d3565b60405161064691906146ac565b60405180910390f35b34801561065b57600080fd5b50610676600480360381019061067191906141fe565b611486565b005b34801561068457600080fd5b5061068d611525565b60405161069a91906148e4565b60405180910390f35b3480156106af57600080fd5b506106b861152b565b6040516106c591906148e4565b60405180910390f35b3480156106da57600080fd5b506106e3611531565b6040516106f091906148e4565b60405180910390f35b34801561070557600080fd5b5061070e611537565b60405161071b91906146ac565b60405180910390f35b34801561073057600080fd5b5061073961154a565b60405161074691906148e4565b60405180910390f35b34801561075b57600080fd5b506107766004803603810190610771919061403f565b611550565b60405161078391906146ac565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae919061403f565b611570565b6040516107c091906146ac565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb919061411c565b611590565b005b3480156107fe57600080fd5b50610807611680565b60405161081491906148e4565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f919061411c565b611686565b005b34801561085257600080fd5b5061086d6004803603810190610868919061403f565b611776565b60405161087a91906148e4565b60405180910390f35b34801561088f57600080fd5b506108aa60048036038101906108a5919061403f565b6117bf565b005b3480156108b857600080fd5b506108c1611898565b6040516108ce91906148e4565b60405180910390f35b3480156108e357600080fd5b506108ec61189e565b6040516108f991906148e4565b60405180910390f35b34801561090e57600080fd5b506109176118a4565b60405161092491906148e4565b60405180910390f35b34801561093957600080fd5b506109426118aa565b60405161094f91906148e4565b60405180910390f35b34801561096457600080fd5b5061096d6118b0565b60405161097a91906145f9565b60405180910390f35b34801561098f57600080fd5b506109aa60048036038101906109a591906141fe565b6118d9565b005b3480156109b857600080fd5b506109c16119c6565b005b3480156109cf57600080fd5b506109d8611b19565b6040516109e591906146e2565b60405180910390f35b3480156109fa57600080fd5b50610a03611bab565b604051610a1091906148e4565b60405180910390f35b348015610a2557600080fd5b50610a2e611bb1565b604051610a3b91906148e4565b60405180910390f35b348015610a5057600080fd5b50610a59611bb7565b604051610a6691906148e4565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190614158565b611bbd565b604051610aa391906146ac565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace91906141d5565b611c8a565b005b348015610ae157600080fd5b50610afc6004803603810190610af79190614158565b611d3c565b604051610b0991906146ac565b60405180910390f35b348015610b1e57600080fd5b50610b396004803603810190610b3491906141fe565b611d5a565b604051610b4691906146ac565b60405180910390f35b348015610b5b57600080fd5b50610b64612336565b604051610b7191906148e4565b60405180910390f35b348015610b8657600080fd5b50610ba16004803603810190610b9c9190614227565b61233c565b005b348015610baf57600080fd5b50610bca6004803603810190610bc591906141d5565b61241c565b005b348015610bd857600080fd5b50610be1612505565b604051610bf093929190614989565b60405180910390f35b348015610c0557600080fd5b50610c206004803603810190610c1b919061403f565b61251c565b604051610c2d91906146ac565b60405180910390f35b348015610c4257600080fd5b50610c4b61253c565b604051610c5891906145f9565b60405180910390f35b348015610c6d57600080fd5b50610c76612562565b604051610c8391906148e4565b60405180910390f35b348015610c9857600080fd5b50610ca1612568565b604051610cae91906146ac565b60405180910390f35b348015610cc357600080fd5b50610cde6004803603810190610cd99190614091565b61257b565b604051610ceb91906148e4565b60405180910390f35b348015610d0057600080fd5b50610d1b6004803603810190610d16919061403f565b612602565b005b348015610d2957600080fd5b50610d326126f2565b604051610d3f91906148e4565b60405180910390f35b348015610d5457600080fd5b50610d6f6004803603810190610d6a91906141fe565b6126f8565b005b348015610d7d57600080fd5b50610d986004803603810190610d93919061403f565b612797565b005b348015610da657600080fd5b50610daf612959565b604051610dbc91906146ac565b60405180910390f35b348015610dd157600080fd5b50610dec6004803603810190610de7919061403f565b61296c565b604051610df991906146ac565b60405180910390f35b348015610e0e57600080fd5b50610e1761298c565b604051610e2491906148e4565b60405180910390f35b606060068054610e3c90614c8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6890614c8a565b8015610eb55780601f10610e8a57610100808354040283529160200191610eb5565b820191906000526020600020905b815481529060010190602001808311610e9857829003601f168201915b5050505050905090565b6000610ed3610ecc6129f0565b84846129f8565b6001905092915050565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601c54905090565b610f156129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9990614844565b60405180910390fd5b82600f819055508160108190555080601181905550610fe2601154610fd4601054600f5461299290919063ffffffff16565b61299290919063ffffffff16565b601681905550505050565b6000610ffa848484612bc3565b6110bb846110066129f0565b6110b6856040518060600160405280602881526020016151bd60289139600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061106c6129f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131a09092919063ffffffff16565b6129f8565b600190509392505050565b6110ce6129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290614844565b60405180910390fd5b82600c8190555081600d8190555080600e8190555061119b600e5461118d600d54600c5461299290919063ffffffff16565b61299290919063ffffffff16565b601581905550505050565b6111ae6129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290614844565b60405180910390fd5b80602160176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006112bb6112aa7f0000000000000000000000000000000000000000000000000000000000000000611776565b601c5461320490919063ffffffff16565b905090565b6112c86129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90614844565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b6000600860009054906101000a900460ff16905090565b60055481565b600061147c6113e06129f0565b8461147785600a60006113f16129f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299290919063ffffffff16565b6129f8565b6001905092915050565b61148e6129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151290614844565b60405180910390fd5b80601f8190555050565b60115481565b60135481565b600d5481565b602160159054906101000a900460ff1681565b60145481565b60196020528060005260406000206000915054906101000a900460ff1681565b601b6020528060005260406000206000915054906101000a900460ff1681565b6115986129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c90614844565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b61168e6129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290614844565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117c76129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90614844565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b601d5481565b601e5481565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118e16129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461196e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196590614844565b60405180910390fd5b6a52b7d2dcc80cd2e40000008111156119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b3906147c4565b60405180910390fd5b80601d8190555050565b6119ce6129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5290614844565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060078054611b2890614c8a565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5490614c8a565b8015611ba15780601f10611b7657610100808354040283529160200191611ba1565b820191906000526020600020905b815481529060010190602001808311611b8457829003601f168201915b5050505050905090565b60125481565b60175481565b60105481565b6000611c80611bca6129f0565b84611c7b856040518060600160405280602581526020016151e560259139600a6000611bf46129f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131a09092919063ffffffff16565b6129f8565b6001905092915050565b611c926129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1690614844565b60405180910390fd5b80602160166101000a81548160ff02191690831515021790555050565b6000611d50611d496129f0565b8484612bc3565b6001905092915050565b600081611d6d611d686129f0565b611776565b1015611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da5906147e4565b60405180910390fd5b6000600267ffffffffffffffff811115611df1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611e1f5781602001602082028036833780820191505090505b5090503081600081518110611e5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611eff57600080fd5b505afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190614068565b81600181518110611f71577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f85846040518363ffffffff1660e01b815260040161200a9291906148ff565b60006040518083038186803b15801561202257600080fd5b505afa158015612036573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061205f9190614194565b90506000670de0b6b3a7640000471161207c57600554905061208d565b6004544761208a9190614ad7565b90505b80826001845161209d9190614b62565b815181106120d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151111561211d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211490614804565b60405180910390fd5b816001835161212c9190614b62565b81518110612163577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101514710156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a4906148a4565b60405180910390fd5b61220b6121b86129f0565b83600185516121c79190614b62565b815181106121fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161324e565b61221c6122166129f0565b86613299565b816001835161222b9190614b62565b81518110612262577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516003600082825461227b9190614a81565b9250508190555084600260008282546122949190614a81565b925050819055507f6ca5c7c2d43ebd8c6d3049382038bb2df58288440912f41fcd488a779ed943816122c46129f0565b8684600186516122d49190614b62565b8151811061230b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160405161232293929190614614565b60405180910390a160019350505050919050565b600c5481565b6123446129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c890614844565b60405180910390fd5b82601281905550816013819055508060148190555061241160145461240360135460125461299290919063ffffffff16565b61299290919063ffffffff16565b601781905550505050565b6124246129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a890614844565b60405180910390fd5b80602160156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516124fa91906146ac565b60405180910390a150565b600080600060025460035447925092509250909192565b601a6020528060005260406000206000915054906101000a900460ff1681565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b602160169054906101000a900460ff1681565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61260a6129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268e90614844565b60405180910390fd5b6001601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b6127006129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461278d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278490614844565b60405180910390fd5b80601e8190555050565b61279f6129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461282c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282390614844565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561289c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289390614744565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602160179054906101000a900460ff1681565b60186020528060005260406000206000915054906101000a900460ff1681565b60035481565b60008082846129a19190614a81565b9050838110156129e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dd90614784565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5f906148c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acf90614764565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bb691906148e4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a90614884565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a90614704565b60405180910390fd5b602160149054906101000a900460ff1615612cc957612cc383838361345a565b5061319b565b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d6d5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612db857601d54811115612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae906147a4565b60405180910390fd5b5b6000612dc330611776565b90506000601f548210159050808015612de95750602160149054906101000a900460ff16155b8015612e3f5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e575750602160159054906101000a900460ff165b15612e8157602160169054906101000a900460ff1615612e7757601f5491505b612e808261362d565b5b612f0a836040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131a09092919063ffffffff16565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ff05750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61300457612fff868686613800565b613006565b835b9050602160179054906101000a900460ff16801561306e5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561309d57601e546130918261308388611776565b61299290919063ffffffff16565b111561309c57600080fd5b5b6130ef81600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299290919063ffffffff16565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161318f91906148e4565b60405180910390a35050505b505050565b60008383111582906131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df91906146e2565b60405180910390fd5b50600083856131f79190614b62565b9050809150509392505050565b600061324683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131a0565b905092915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613294573d6000803e3d6000fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330090614864565b60405180910390fd5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338790614724565b60405180910390fd5b818103600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081601c60008282546133e89190614b62565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161344d91906148e4565b60405180910390a3505050565b60006134e5826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131a09092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357a82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299290919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161361a91906148e4565b60405180910390a3600190509392505050565b6001602160146101000a81548160ff0219169083151502179055506000479050600061368b600261367d60175461366f60125488613a2790919063ffffffff16565b613aa290919063ffffffff16565b613aa290919063ffffffff16565b905060006136a2828561320490919063ffffffff16565b90506136ad81613aec565b60006136c2844761320490919063ffffffff16565b905060006136f06136df6002601254613aa290919063ffffffff16565b60175461320490919063ffffffff16565b9050600061372e60026137208461371260125488613a2790919063ffffffff16565b613aa290919063ffffffff16565b613aa290919063ffffffff16565b905060006137598361374b60145487613a2790919063ffffffff16565b613aa290919063ffffffff16565b9050600061378282613774858861320490919063ffffffff16565b61320490919063ffffffff16565b905060008111156137ba576137b9600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261324e565b5b6000831180156137ca5750600087115b156137da576137d98784613de9565b5b50505050505050506000602160146101000a81548160ff02191690831515021790555050565b60008060009050601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561388857613881606461387360155486613a2790919063ffffffff16565b613aa290919063ffffffff16565b9050613906565b601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156139055761390260646138f460165486613a2790919063ffffffff16565b613aa290919063ffffffff16565b90505b5b6000811115613a0a5761396181600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299290919063ffffffff16565b600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a0191906148e4565b60405180910390a35b613a1d818461320490919063ffffffff16565b9150509392505050565b600080831415613a3a5760009050613a9c565b60008284613a489190614b08565b9050828482613a579190614ad7565b14613a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8e90614824565b60405180910390fd5b809150505b92915050565b6000613ae483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613edd565b905092915050565b6000600267ffffffffffffffff811115613b2f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613b5d5781602001602082028036833780820191505090505b5090503081600081518110613b9b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c3d57600080fd5b505afa158015613c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c759190614068565b81600181518110613caf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d1630602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129f8565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d7a95949392919061492f565b600060405180830381600087803b158015613d9457600080fd5b505af1158015613da8573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613ddd9291906148ff565b60405180910390a15050565b613e1630602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129f8565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e626118b0565b426040518863ffffffff1660e01b8152600401613e849695949392919061464b565b6060604051808303818588803b158015613e9d57600080fd5b505af1158015613eb1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ed69190614276565b5050505050565b60008083118290613f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f1b91906146e2565b60405180910390fd5b5060008385613f339190614ad7565b9050809150509392505050565b6000613f53613f4e84614a00565b6149db565b90508083825260208201905082856020860282011115613f7257600080fd5b60005b85811015613fa25781613f88888261402a565b845260208401935060208301925050600181019050613f75565b5050509392505050565b600081359050613fbb81615177565b92915050565b600081519050613fd081615177565b92915050565b600082601f830112613fe757600080fd5b8151613ff7848260208601613f40565b91505092915050565b60008135905061400f8161518e565b92915050565b600081359050614024816151a5565b92915050565b600081519050614039816151a5565b92915050565b60006020828403121561405157600080fd5b600061405f84828501613fac565b91505092915050565b60006020828403121561407a57600080fd5b600061408884828501613fc1565b91505092915050565b600080604083850312156140a457600080fd5b60006140b285828601613fac565b92505060206140c385828601613fac565b9150509250929050565b6000806000606084860312156140e257600080fd5b60006140f086828701613fac565b935050602061410186828701613fac565b925050604061411286828701614015565b9150509250925092565b6000806040838503121561412f57600080fd5b600061413d85828601613fac565b925050602061414e85828601614000565b9150509250929050565b6000806040838503121561416b57600080fd5b600061417985828601613fac565b925050602061418a85828601614015565b9150509250929050565b6000602082840312156141a657600080fd5b600082015167ffffffffffffffff8111156141c057600080fd5b6141cc84828501613fd6565b91505092915050565b6000602082840312156141e757600080fd5b60006141f584828501614000565b91505092915050565b60006020828403121561421057600080fd5b600061421e84828501614015565b91505092915050565b60008060006060848603121561423c57600080fd5b600061424a86828701614015565b935050602061425b86828701614015565b925050604061426c86828701614015565b9150509250925092565b60008060006060848603121561428b57600080fd5b60006142998682870161402a565b93505060206142aa8682870161402a565b92505060406142bb8682870161402a565b9150509250925092565b60006142d183836142ec565b60208301905092915050565b6142e681614beb565b82525050565b6142f581614b96565b82525050565b61430481614b96565b82525050565b600061431582614a3c565b61431f8185614a5f565b935061432a83614a2c565b8060005b8381101561435b57815161434288826142c5565b975061434d83614a52565b92505060018101905061432e565b5085935050505092915050565b61437181614ba8565b82525050565b61438081614bfd565b82525050565b61438f81614c21565b82525050565b60006143a082614a47565b6143aa8185614a70565b93506143ba818560208601614c57565b6143c381614da9565b840191505092915050565b60006143db602383614a70565b91506143e682614dba565b604082019050919050565b60006143fe602283614a70565b915061440982614e09565b604082019050919050565b6000614421602683614a70565b915061442c82614e58565b604082019050919050565b6000614444602283614a70565b915061444f82614ea7565b604082019050919050565b6000614467601b83614a70565b915061447282614ef6565b602082019050919050565b600061448a602883614a70565b915061449582614f1f565b604082019050919050565b60006144ad601983614a70565b91506144b882614f6e565b602082019050919050565b60006144d0601883614a70565b91506144db82614f97565b602082019050919050565b60006144f3601783614a70565b91506144fe82614fc0565b602082019050919050565b6000614516602183614a70565b915061452182614fe9565b604082019050919050565b6000614539602083614a70565b915061454482615038565b602082019050919050565b600061455c602183614a70565b915061456782615061565b604082019050919050565b600061457f602583614a70565b915061458a826150b0565b604082019050919050565b60006145a2601c83614a70565b91506145ad826150ff565b602082019050919050565b60006145c5602483614a70565b91506145d082615128565b604082019050919050565b6145e481614bd4565b82525050565b6145f381614bde565b82525050565b600060208201905061460e60008301846142fb565b92915050565b600060608201905061462960008301866142dd565b61463660208301856145db565b61464360408301846145db565b949350505050565b600060c08201905061466060008301896142fb565b61466d60208301886145db565b61467a6040830187614386565b6146876060830186614386565b61469460808301856142fb565b6146a160a08301846145db565b979650505050505050565b60006020820190506146c16000830184614368565b92915050565b60006020820190506146dc6000830184614377565b92915050565b600060208201905081810360008301526146fc8184614395565b905092915050565b6000602082019050818103600083015261471d816143ce565b9050919050565b6000602082019050818103600083015261473d816143f1565b9050919050565b6000602082019050818103600083015261475d81614414565b9050919050565b6000602082019050818103600083015261477d81614437565b9050919050565b6000602082019050818103600083015261479d8161445a565b9050919050565b600060208201905081810360008301526147bd8161447d565b9050919050565b600060208201905081810360008301526147dd816144a0565b9050919050565b600060208201905081810360008301526147fd816144c3565b9050919050565b6000602082019050818103600083015261481d816144e6565b9050919050565b6000602082019050818103600083015261483d81614509565b9050919050565b6000602082019050818103600083015261485d8161452c565b9050919050565b6000602082019050818103600083015261487d8161454f565b9050919050565b6000602082019050818103600083015261489d81614572565b9050919050565b600060208201905081810360008301526148bd81614595565b9050919050565b600060208201905081810360008301526148dd816145b8565b9050919050565b60006020820190506148f960008301846145db565b92915050565b600060408201905061491460008301856145db565b8181036020830152614926818461430a565b90509392505050565b600060a08201905061494460008301886145db565b6149516020830187614386565b8181036040830152614963818661430a565b905061497260608301856142fb565b61497f60808301846145db565b9695505050505050565b600060608201905061499e60008301866145db565b6149ab60208301856145db565b6149b860408301846145db565b949350505050565b60006020820190506149d560008301846145ea565b92915050565b60006149e56149f6565b90506149f18282614cbc565b919050565b6000604051905090565b600067ffffffffffffffff821115614a1b57614a1a614d7a565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614a8c82614bd4565b9150614a9783614bd4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614acc57614acb614ced565b5b828201905092915050565b6000614ae282614bd4565b9150614aed83614bd4565b925082614afd57614afc614d1c565b5b828204905092915050565b6000614b1382614bd4565b9150614b1e83614bd4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b5757614b56614ced565b5b828202905092915050565b6000614b6d82614bd4565b9150614b7883614bd4565b925082821015614b8b57614b8a614ced565b5b828203905092915050565b6000614ba182614bb4565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614bf682614c33565b9050919050565b6000614c0882614c0f565b9050919050565b6000614c1a82614bb4565b9050919050565b6000614c2c82614bd4565b9050919050565b6000614c3e82614c45565b9050919050565b6000614c5082614bb4565b9050919050565b60005b83811015614c75578082015181840152602081019050614c5a565b83811115614c84576000848401525b50505050565b60006002820490506001821680614ca257607f821691505b60208210811415614cb657614cb5614d4b565b5b50919050565b614cc582614da9565b810181811067ffffffffffffffff82111715614ce457614ce3614d7a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c65742073686f756c64206265206c65737300000000000000600082015250565b7f6e6f7420656e6f7567682066756e647320746f206275726e0000000000000000600082015250565b7f616d6f756e742067726561746572207468616e20636170000000000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682066756e647320696e20636f6e747261637400000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b61518081614b96565b811461518b57600080fd5b50565b61519781614ba8565b81146151a257600080fd5b50565b6151ae81614bd4565b81146151b957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207bbd0430e121ece4fdb94349f11503f9285bbce5d5f5aabb3ddd86ddb381a2dc64736f6c63430008040033

Deployed Bytecode

0x6080604052600436106103905760003560e01c80637d1db4a5116101dc578063c2d4640e11610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610d71578063f872858a14610d9a578063fabf706314610dc5578063fb34a33614610e0257610397565b8063dd62ed3e14610cb7578063e207a92b14610cf4578063f0cd1dac14610d1d578063f1d5f51714610d4857610397565b8063c78a789b116100dc578063c78a789b14610bf9578063c816841b14610c36578063d89135cd14610c61578063da00097d14610c8c57610397565b8063c2d4640e14610b7a578063c49b9a8014610ba3578063c59d484714610bcc57610397565b80639e3fa3231161017a578063a5d69d1f11610149578063a5d69d1f14610aac578063a9059cbb14610ad5578063af254b7214610b12578063b6c3af3414610b4f57610397565b80639e3fa323146109ee578063a08e671f14610a19578063a40dcda314610a44578063a457c2d714610a6f57610397565b80638da5cb5b116101b65780638da5cb5b146109585780638f03aad514610983578063914eb66a146109ac57806395d89b41146109c357610397565b80637d1db4a5146108d7578063807c2d9c1461090257806382eefb431461092d57610397565b806339509351116102c1578063526012e81161025f578063667b511c1161022e578063667b511c1461081d57806370a082311461084657806374e8414e146108835780637b3a3ec6146108ac57610397565b8063526012e81461074f57806355324fa91461078c57806357e6adcb146107c95780635e252455146107f257610397565b80633f2516881161029b5780633f251688146106a35780634a728e24146106ce5780634a74bb02146106f95780634f1c2aa41461072457610397565b806339509351146106125780633b97084a1461064f5780633d98b9af1461067857610397565b80632563ae831161032e5780632cdae5cb116103085780632cdae5cb146105685780632f0a5fd414610591578063313ce567146105bc57806331eca57e146105e757610397565b80632563ae83146104e957806327c8f835146105125780632b112e491461053d57610397565b806318160ddd1161036a57806318160ddd1461042f5780631d865c301461045a57806323b872dd1461048357806325519cf2146104c057610397565b806306fdde031461039c578063095ea7b3146103c75780631694505e1461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e2d565b6040516103be91906146e2565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190614158565b610ebf565b6040516103fb91906146ac565b60405180910390f35b34801561041057600080fd5b50610419610edd565b60405161042691906146c7565b60405180910390f35b34801561043b57600080fd5b50610444610f03565b60405161045191906148e4565b60405180910390f35b34801561046657600080fd5b50610481600480360381019061047c9190614227565b610f0d565b005b34801561048f57600080fd5b506104aa60048036038101906104a591906140cd565b610fed565b6040516104b791906146ac565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190614227565b6110c6565b005b3480156104f557600080fd5b50610510600480360381019061050b91906141d5565b6111a6565b005b34801561051e57600080fd5b50610527611258565b60405161053491906145f9565b60405180910390f35b34801561054957600080fd5b5061055261127c565b60405161055f91906148e4565b60405180910390f35b34801561057457600080fd5b5061058f600480360381019061058a919061411c565b6112c0565b005b34801561059d57600080fd5b506105a66113b0565b6040516105b391906148e4565b60405180910390f35b3480156105c857600080fd5b506105d16113b6565b6040516105de91906149c0565b60405180910390f35b3480156105f357600080fd5b506105fc6113cd565b60405161060991906148e4565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190614158565b6113d3565b60405161064691906146ac565b60405180910390f35b34801561065b57600080fd5b50610676600480360381019061067191906141fe565b611486565b005b34801561068457600080fd5b5061068d611525565b60405161069a91906148e4565b60405180910390f35b3480156106af57600080fd5b506106b861152b565b6040516106c591906148e4565b60405180910390f35b3480156106da57600080fd5b506106e3611531565b6040516106f091906148e4565b60405180910390f35b34801561070557600080fd5b5061070e611537565b60405161071b91906146ac565b60405180910390f35b34801561073057600080fd5b5061073961154a565b60405161074691906148e4565b60405180910390f35b34801561075b57600080fd5b506107766004803603810190610771919061403f565b611550565b60405161078391906146ac565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae919061403f565b611570565b6040516107c091906146ac565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb919061411c565b611590565b005b3480156107fe57600080fd5b50610807611680565b60405161081491906148e4565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f919061411c565b611686565b005b34801561085257600080fd5b5061086d6004803603810190610868919061403f565b611776565b60405161087a91906148e4565b60405180910390f35b34801561088f57600080fd5b506108aa60048036038101906108a5919061403f565b6117bf565b005b3480156108b857600080fd5b506108c1611898565b6040516108ce91906148e4565b60405180910390f35b3480156108e357600080fd5b506108ec61189e565b6040516108f991906148e4565b60405180910390f35b34801561090e57600080fd5b506109176118a4565b60405161092491906148e4565b60405180910390f35b34801561093957600080fd5b506109426118aa565b60405161094f91906148e4565b60405180910390f35b34801561096457600080fd5b5061096d6118b0565b60405161097a91906145f9565b60405180910390f35b34801561098f57600080fd5b506109aa60048036038101906109a591906141fe565b6118d9565b005b3480156109b857600080fd5b506109c16119c6565b005b3480156109cf57600080fd5b506109d8611b19565b6040516109e591906146e2565b60405180910390f35b3480156109fa57600080fd5b50610a03611bab565b604051610a1091906148e4565b60405180910390f35b348015610a2557600080fd5b50610a2e611bb1565b604051610a3b91906148e4565b60405180910390f35b348015610a5057600080fd5b50610a59611bb7565b604051610a6691906148e4565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190614158565b611bbd565b604051610aa391906146ac565b60405180910390f35b348015610ab857600080fd5b50610ad36004803603810190610ace91906141d5565b611c8a565b005b348015610ae157600080fd5b50610afc6004803603810190610af79190614158565b611d3c565b604051610b0991906146ac565b60405180910390f35b348015610b1e57600080fd5b50610b396004803603810190610b3491906141fe565b611d5a565b604051610b4691906146ac565b60405180910390f35b348015610b5b57600080fd5b50610b64612336565b604051610b7191906148e4565b60405180910390f35b348015610b8657600080fd5b50610ba16004803603810190610b9c9190614227565b61233c565b005b348015610baf57600080fd5b50610bca6004803603810190610bc591906141d5565b61241c565b005b348015610bd857600080fd5b50610be1612505565b604051610bf093929190614989565b60405180910390f35b348015610c0557600080fd5b50610c206004803603810190610c1b919061403f565b61251c565b604051610c2d91906146ac565b60405180910390f35b348015610c4257600080fd5b50610c4b61253c565b604051610c5891906145f9565b60405180910390f35b348015610c6d57600080fd5b50610c76612562565b604051610c8391906148e4565b60405180910390f35b348015610c9857600080fd5b50610ca1612568565b604051610cae91906146ac565b60405180910390f35b348015610cc357600080fd5b50610cde6004803603810190610cd99190614091565b61257b565b604051610ceb91906148e4565b60405180910390f35b348015610d0057600080fd5b50610d1b6004803603810190610d16919061403f565b612602565b005b348015610d2957600080fd5b50610d326126f2565b604051610d3f91906148e4565b60405180910390f35b348015610d5457600080fd5b50610d6f6004803603810190610d6a91906141fe565b6126f8565b005b348015610d7d57600080fd5b50610d986004803603810190610d93919061403f565b612797565b005b348015610da657600080fd5b50610daf612959565b604051610dbc91906146ac565b60405180910390f35b348015610dd157600080fd5b50610dec6004803603810190610de7919061403f565b61296c565b604051610df991906146ac565b60405180910390f35b348015610e0e57600080fd5b50610e1761298c565b604051610e2491906148e4565b60405180910390f35b606060068054610e3c90614c8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6890614c8a565b8015610eb55780601f10610e8a57610100808354040283529160200191610eb5565b820191906000526020600020905b815481529060010190602001808311610e9857829003601f168201915b5050505050905090565b6000610ed3610ecc6129f0565b84846129f8565b6001905092915050565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601c54905090565b610f156129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9990614844565b60405180910390fd5b82600f819055508160108190555080601181905550610fe2601154610fd4601054600f5461299290919063ffffffff16565b61299290919063ffffffff16565b601681905550505050565b6000610ffa848484612bc3565b6110bb846110066129f0565b6110b6856040518060600160405280602881526020016151bd60289139600a60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061106c6129f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131a09092919063ffffffff16565b6129f8565b600190509392505050565b6110ce6129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290614844565b60405180910390fd5b82600c8190555081600d8190555080600e8190555061119b600e5461118d600d54600c5461299290919063ffffffff16565b61299290919063ffffffff16565b601581905550505050565b6111ae6129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290614844565b60405180910390fd5b80602160176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006112bb6112aa7f000000000000000000000000000000000000000000000000000000000000dead611776565b601c5461320490919063ffffffff16565b905090565b6112c86129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c90614844565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b6000600860009054906101000a900460ff16905090565b60055481565b600061147c6113e06129f0565b8461147785600a60006113f16129f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299290919063ffffffff16565b6129f8565b6001905092915050565b61148e6129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151290614844565b60405180910390fd5b80601f8190555050565b60115481565b60135481565b600d5481565b602160159054906101000a900460ff1681565b60145481565b60196020528060005260406000206000915054906101000a900460ff1681565b601b6020528060005260406000206000915054906101000a900460ff1681565b6115986129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c90614844565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b61168e6129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290614844565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117c76129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90614844565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b601d5481565b601e5481565b60165481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118e16129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461196e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196590614844565b60405180910390fd5b6a52b7d2dcc80cd2e40000008111156119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b3906147c4565b60405180910390fd5b80601d8190555050565b6119ce6129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5290614844565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060078054611b2890614c8a565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5490614c8a565b8015611ba15780601f10611b7657610100808354040283529160200191611ba1565b820191906000526020600020905b815481529060010190602001808311611b8457829003601f168201915b5050505050905090565b60125481565b60175481565b60105481565b6000611c80611bca6129f0565b84611c7b856040518060600160405280602581526020016151e560259139600a6000611bf46129f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131a09092919063ffffffff16565b6129f8565b6001905092915050565b611c926129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1690614844565b60405180910390fd5b80602160166101000a81548160ff02191690831515021790555050565b6000611d50611d496129f0565b8484612bc3565b6001905092915050565b600081611d6d611d686129f0565b611776565b1015611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da5906147e4565b60405180910390fd5b6000600267ffffffffffffffff811115611df1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611e1f5781602001602082028036833780820191505090505b5090503081600081518110611e5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611eff57600080fd5b505afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190614068565b81600181518110611f71577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f85846040518363ffffffff1660e01b815260040161200a9291906148ff565b60006040518083038186803b15801561202257600080fd5b505afa158015612036573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061205f9190614194565b90506000670de0b6b3a7640000471161207c57600554905061208d565b6004544761208a9190614ad7565b90505b80826001845161209d9190614b62565b815181106120d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151111561211d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211490614804565b60405180910390fd5b816001835161212c9190614b62565b81518110612163577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101514710156121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a4906148a4565b60405180910390fd5b61220b6121b86129f0565b83600185516121c79190614b62565b815181106121fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015161324e565b61221c6122166129f0565b86613299565b816001835161222b9190614b62565b81518110612262577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516003600082825461227b9190614a81565b9250508190555084600260008282546122949190614a81565b925050819055507f6ca5c7c2d43ebd8c6d3049382038bb2df58288440912f41fcd488a779ed943816122c46129f0565b8684600186516122d49190614b62565b8151811061230b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160405161232293929190614614565b60405180910390a160019350505050919050565b600c5481565b6123446129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c890614844565b60405180910390fd5b82601281905550816013819055508060148190555061241160145461240360135460125461299290919063ffffffff16565b61299290919063ffffffff16565b601781905550505050565b6124246129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a890614844565b60405180910390fd5b80602160156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516124fa91906146ac565b60405180910390a150565b600080600060025460035447925092509250909192565b601a6020528060005260406000206000915054906101000a900460ff1681565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b602160169054906101000a900460ff1681565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61260a6129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268e90614844565b60405180910390fd5b6001601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b6127006129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461278d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278490614844565b60405180910390fd5b80601e8190555050565b61279f6129f0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461282c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282390614844565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561289c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289390614744565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602160179054906101000a900460ff1681565b60186020528060005260406000206000915054906101000a900460ff1681565b60035481565b60008082846129a19190614a81565b9050838110156129e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dd90614784565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5f906148c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acf90614764565b60405180910390fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bb691906148e4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a90614884565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a90614704565b60405180910390fd5b602160149054906101000a900460ff1615612cc957612cc383838361345a565b5061319b565b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d6d5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612db857601d54811115612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae906147a4565b60405180910390fd5b5b6000612dc330611776565b90506000601f548210159050808015612de95750602160149054906101000a900460ff16155b8015612e3f5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e575750602160159054906101000a900460ff165b15612e8157602160169054906101000a900460ff1615612e7757601f5491505b612e808261362d565b5b612f0a836040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131a09092919063ffffffff16565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ff05750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61300457612fff868686613800565b613006565b835b9050602160179054906101000a900460ff16801561306e5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561309d57601e546130918261308388611776565b61299290919063ffffffff16565b111561309c57600080fd5b5b6130ef81600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299290919063ffffffff16565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161318f91906148e4565b60405180910390a35050505b505050565b60008383111582906131e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131df91906146e2565b60405180910390fd5b50600083856131f79190614b62565b9050809150509392505050565b600061324683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131a0565b905092915050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613294573d6000803e3d6000fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330090614864565b60405180910390fd5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338790614724565b60405180910390fd5b818103600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081601c60008282546133e89190614b62565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161344d91906148e4565b60405180910390a3505050565b60006134e5826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131a09092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357a82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299290919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161361a91906148e4565b60405180910390a3600190509392505050565b6001602160146101000a81548160ff0219169083151502179055506000479050600061368b600261367d60175461366f60125488613a2790919063ffffffff16565b613aa290919063ffffffff16565b613aa290919063ffffffff16565b905060006136a2828561320490919063ffffffff16565b90506136ad81613aec565b60006136c2844761320490919063ffffffff16565b905060006136f06136df6002601254613aa290919063ffffffff16565b60175461320490919063ffffffff16565b9050600061372e60026137208461371260125488613a2790919063ffffffff16565b613aa290919063ffffffff16565b613aa290919063ffffffff16565b905060006137598361374b60145487613a2790919063ffffffff16565b613aa290919063ffffffff16565b9050600061378282613774858861320490919063ffffffff16565b61320490919063ffffffff16565b905060008111156137ba576137b9600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261324e565b5b6000831180156137ca5750600087115b156137da576137d98784613de9565b5b50505050505050506000602160146101000a81548160ff02191690831515021790555050565b60008060009050601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561388857613881606461387360155486613a2790919063ffffffff16565b613aa290919063ffffffff16565b9050613906565b601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156139055761390260646138f460165486613a2790919063ffffffff16565b613aa290919063ffffffff16565b90505b5b6000811115613a0a5761396181600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299290919063ffffffff16565b600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a0191906148e4565b60405180910390a35b613a1d818461320490919063ffffffff16565b9150509392505050565b600080831415613a3a5760009050613a9c565b60008284613a489190614b08565b9050828482613a579190614ad7565b14613a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8e90614824565b60405180910390fd5b809150505b92915050565b6000613ae483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613edd565b905092915050565b6000600267ffffffffffffffff811115613b2f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015613b5d5781602001602082028036833780820191505090505b5090503081600081518110613b9b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c3d57600080fd5b505afa158015613c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c759190614068565b81600181518110613caf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d1630602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129f8565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d7a95949392919061492f565b600060405180830381600087803b158015613d9457600080fd5b505af1158015613da8573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613ddd9291906148ff565b60405180910390a15050565b613e1630602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129f8565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e626118b0565b426040518863ffffffff1660e01b8152600401613e849695949392919061464b565b6060604051808303818588803b158015613e9d57600080fd5b505af1158015613eb1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ed69190614276565b5050505050565b60008083118290613f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f1b91906146e2565b60405180910390fd5b5060008385613f339190614ad7565b9050809150509392505050565b6000613f53613f4e84614a00565b6149db565b90508083825260208201905082856020860282011115613f7257600080fd5b60005b85811015613fa25781613f88888261402a565b845260208401935060208301925050600181019050613f75565b5050509392505050565b600081359050613fbb81615177565b92915050565b600081519050613fd081615177565b92915050565b600082601f830112613fe757600080fd5b8151613ff7848260208601613f40565b91505092915050565b60008135905061400f8161518e565b92915050565b600081359050614024816151a5565b92915050565b600081519050614039816151a5565b92915050565b60006020828403121561405157600080fd5b600061405f84828501613fac565b91505092915050565b60006020828403121561407a57600080fd5b600061408884828501613fc1565b91505092915050565b600080604083850312156140a457600080fd5b60006140b285828601613fac565b92505060206140c385828601613fac565b9150509250929050565b6000806000606084860312156140e257600080fd5b60006140f086828701613fac565b935050602061410186828701613fac565b925050604061411286828701614015565b9150509250925092565b6000806040838503121561412f57600080fd5b600061413d85828601613fac565b925050602061414e85828601614000565b9150509250929050565b6000806040838503121561416b57600080fd5b600061417985828601613fac565b925050602061418a85828601614015565b9150509250929050565b6000602082840312156141a657600080fd5b600082015167ffffffffffffffff8111156141c057600080fd5b6141cc84828501613fd6565b91505092915050565b6000602082840312156141e757600080fd5b60006141f584828501614000565b91505092915050565b60006020828403121561421057600080fd5b600061421e84828501614015565b91505092915050565b60008060006060848603121561423c57600080fd5b600061424a86828701614015565b935050602061425b86828701614015565b925050604061426c86828701614015565b9150509250925092565b60008060006060848603121561428b57600080fd5b60006142998682870161402a565b93505060206142aa8682870161402a565b92505060406142bb8682870161402a565b9150509250925092565b60006142d183836142ec565b60208301905092915050565b6142e681614beb565b82525050565b6142f581614b96565b82525050565b61430481614b96565b82525050565b600061431582614a3c565b61431f8185614a5f565b935061432a83614a2c565b8060005b8381101561435b57815161434288826142c5565b975061434d83614a52565b92505060018101905061432e565b5085935050505092915050565b61437181614ba8565b82525050565b61438081614bfd565b82525050565b61438f81614c21565b82525050565b60006143a082614a47565b6143aa8185614a70565b93506143ba818560208601614c57565b6143c381614da9565b840191505092915050565b60006143db602383614a70565b91506143e682614dba565b604082019050919050565b60006143fe602283614a70565b915061440982614e09565b604082019050919050565b6000614421602683614a70565b915061442c82614e58565b604082019050919050565b6000614444602283614a70565b915061444f82614ea7565b604082019050919050565b6000614467601b83614a70565b915061447282614ef6565b602082019050919050565b600061448a602883614a70565b915061449582614f1f565b604082019050919050565b60006144ad601983614a70565b91506144b882614f6e565b602082019050919050565b60006144d0601883614a70565b91506144db82614f97565b602082019050919050565b60006144f3601783614a70565b91506144fe82614fc0565b602082019050919050565b6000614516602183614a70565b915061452182614fe9565b604082019050919050565b6000614539602083614a70565b915061454482615038565b602082019050919050565b600061455c602183614a70565b915061456782615061565b604082019050919050565b600061457f602583614a70565b915061458a826150b0565b604082019050919050565b60006145a2601c83614a70565b91506145ad826150ff565b602082019050919050565b60006145c5602483614a70565b91506145d082615128565b604082019050919050565b6145e481614bd4565b82525050565b6145f381614bde565b82525050565b600060208201905061460e60008301846142fb565b92915050565b600060608201905061462960008301866142dd565b61463660208301856145db565b61464360408301846145db565b949350505050565b600060c08201905061466060008301896142fb565b61466d60208301886145db565b61467a6040830187614386565b6146876060830186614386565b61469460808301856142fb565b6146a160a08301846145db565b979650505050505050565b60006020820190506146c16000830184614368565b92915050565b60006020820190506146dc6000830184614377565b92915050565b600060208201905081810360008301526146fc8184614395565b905092915050565b6000602082019050818103600083015261471d816143ce565b9050919050565b6000602082019050818103600083015261473d816143f1565b9050919050565b6000602082019050818103600083015261475d81614414565b9050919050565b6000602082019050818103600083015261477d81614437565b9050919050565b6000602082019050818103600083015261479d8161445a565b9050919050565b600060208201905081810360008301526147bd8161447d565b9050919050565b600060208201905081810360008301526147dd816144a0565b9050919050565b600060208201905081810360008301526147fd816144c3565b9050919050565b6000602082019050818103600083015261481d816144e6565b9050919050565b6000602082019050818103600083015261483d81614509565b9050919050565b6000602082019050818103600083015261485d8161452c565b9050919050565b6000602082019050818103600083015261487d8161454f565b9050919050565b6000602082019050818103600083015261489d81614572565b9050919050565b600060208201905081810360008301526148bd81614595565b9050919050565b600060208201905081810360008301526148dd816145b8565b9050919050565b60006020820190506148f960008301846145db565b92915050565b600060408201905061491460008301856145db565b8181036020830152614926818461430a565b90509392505050565b600060a08201905061494460008301886145db565b6149516020830187614386565b8181036040830152614963818661430a565b905061497260608301856142fb565b61497f60808301846145db565b9695505050505050565b600060608201905061499e60008301866145db565b6149ab60208301856145db565b6149b860408301846145db565b949350505050565b60006020820190506149d560008301846145ea565b92915050565b60006149e56149f6565b90506149f18282614cbc565b919050565b6000604051905090565b600067ffffffffffffffff821115614a1b57614a1a614d7a565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614a8c82614bd4565b9150614a9783614bd4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614acc57614acb614ced565b5b828201905092915050565b6000614ae282614bd4565b9150614aed83614bd4565b925082614afd57614afc614d1c565b5b828204905092915050565b6000614b1382614bd4565b9150614b1e83614bd4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b5757614b56614ced565b5b828202905092915050565b6000614b6d82614bd4565b9150614b7883614bd4565b925082821015614b8b57614b8a614ced565b5b828203905092915050565b6000614ba182614bb4565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614bf682614c33565b9050919050565b6000614c0882614c0f565b9050919050565b6000614c1a82614bb4565b9050919050565b6000614c2c82614bd4565b9050919050565b6000614c3e82614c45565b9050919050565b6000614c5082614bb4565b9050919050565b60005b83811015614c75578082015181840152602081019050614c5a565b83811115614c84576000848401525b50505050565b60006002820490506001821680614ca257607f821691505b60208210811415614cb657614cb5614d4b565b5b50919050565b614cc582614da9565b810181811067ffffffffffffffff82111715614ce457614ce3614d7a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c65742073686f756c64206265206c65737300000000000000600082015250565b7f6e6f7420656e6f7567682066756e647320746f206275726e0000000000000000600082015250565b7f616d6f756e742067726561746572207468616e20636170000000000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682066756e647320696e20636f6e747261637400000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b61518081614b96565b811461518b57600080fd5b50565b61519781614ba8565b81146151a257600080fd5b50565b6151ae81614bd4565b81146151b957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207bbd0430e121ece4fdb94349f11503f9285bbce5d5f5aabb3ddd86ddb381a2dc64736f6c63430008040033

Deployed Bytecode Sourcemap

14372:15881:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18959:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20130:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16279:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19239:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21386:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24880:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21065;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22279:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15116:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23248:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20914:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15326:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19147:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14678:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19625:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22659:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15409:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15493:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15249:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16439:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15529:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15830:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15950:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22400:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15287:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20769:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19347:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22791:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14599:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16102:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16157:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15612:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5909:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22071:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6134:145;;;;;;;;;;;;;:::i;:::-;;19051:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15451:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15657:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15370:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19852:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23111:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24705:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23700:997;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15206:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21719:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22932:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30102:148;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;15892:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16327:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14518:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16486:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19474:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20654:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15568:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22549:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6287:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16538:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15769:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14555:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18959:84;18997:13;19030:5;19023:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18959:84;:::o;20130:161::-;20205:4;20222:39;20231:12;:10;:12::i;:::-;20245:7;20254:6;20222:8;:39::i;:::-;20279:4;20272:11;;20130:161;;;;:::o;16279:41::-;;;;;;;;;;;;;:::o;19239:100::-;19292:7;19319:12;;19312:19;;19239:100;:::o;21386:321::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21523:15:::1;21502:18;:36;;;;21564:9;21549:12;:24;;;;21600:10;21584:13;:26;;;;21644:55;21685:13;;21644:36;21667:12;;21644:18;;:22;;:36;;;;:::i;:::-;:40;;:55;;;;:::i;:::-;21623:18;:76;;;;21386:321:::0;;;:::o;24880:313::-;24978:4;24995:36;25005:6;25013:9;25024:6;24995:9;:36::i;:::-;25042:121;25051:6;25059:12;:10;:12::i;:::-;25073:89;25111:6;25073:89;;;;;;;;;;;;;;;;;:11;:19;25085:6;25073:19;;;;;;;;;;;;;;;:33;25093:12;:10;:12::i;:::-;25073:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;25042:8;:121::i;:::-;25181:4;25174:11;;24880:313;;;;;:::o;21065:::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21200:15:::1;21180:17;:35;;;;21240:9;21226:11;:23;;;;21275:10;21260:12;:25;;;;21318:52;21357:12;;21318:34;21340:11;;21318:17;;:21;;:34;;;;:::i;:::-;:38;;:52;;;;:::i;:::-;21298:17;:72;;;;21065:313:::0;;;:::o;22279:113::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22376:8:::1;22357:16;;:27;;;;;;;;;;;;;;;;;;22279:113:::0;:::o;15116:81::-;;;:::o;23248:128::-;23301:7;23328:40;23345:22;23355:11;23345:9;:22::i;:::-;23328:12;;:16;;:40;;;;:::i;:::-;23321:47;;23248:128;:::o;20914:143::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21041:8:::1;21008:21;:30;21030:7;21008:30;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;20914:143:::0;;:::o;15326:37::-;;;;:::o;19147:84::-;19189:5;19214:9;;;;;;;;;;;19207:16;;19147:84;:::o;14678:50::-;;;;:::o;19625:219::-;19714:4;19731:83;19740:12;:10;:12::i;:::-;19754:7;19763:50;19802:10;19763:11;:25;19775:12;:10;:12::i;:::-;19763:25;;;;;;;;;;;;;;;:34;19789:7;19763:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19731:8;:83::i;:::-;19832:4;19825:11;;19625:219;;;;:::o;22659:124::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22767:8:::1;22741:23;:34;;;;22659:124:::0;:::o;15409:33::-;;;;:::o;15493:29::-;;;;:::o;15249:31::-;;;;:::o;16439:40::-;;;;;;;;;;;;;:::o;15529:30::-;;;;:::o;15830:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;15950:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;22400:141::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22527:6:::1;22494:22;:30;22517:6;22494:30;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22400:141:::0;;:::o;15287:32::-;;;;:::o;20769:133::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20888:6:::1;20859:18;:26;20878:6;20859:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;20769:133:::0;;:::o;19347:119::-;19413:7;19440:9;:18;19450:7;19440:18;;;;;;;;;;;;;;;;19433:25;;19347:119;;;:::o;22791:131::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22903:10:::1;22874:18;;:40;;;;;;;;;;;;;;;;;;22791:131:::0;:::o;14599:34::-;;;;:::o;16102:48::-;;;;:::o;16157:46::-;;;;:::o;15612:38::-;;;;:::o;5909:79::-;5947:7;5974:6;;;;;;;;;;;5967:13;;5909:79;:::o;22071:200::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22175:20:::1;22159:11;:37;;22151:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22252:11;22237:12;:26;;;;22071:200:::0;:::o;6134:145::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6238:1:::1;6201:40;;6222:6;::::0;::::1;;;;;;;;6201:40;;;;;;;;;;;;6269:1;6252:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6134:145::o:0;19051:88::-;19091:13;19124:7;19117:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19051:88;:::o;15451:35::-;;;;:::o;15657:43::-;;;;:::o;15370:32::-;;;;:::o;19852:270::-;19946:4;19963:129;19972:12;:10;:12::i;:::-;19986:7;19995:96;20034:15;19995:96;;;;;;;;;;;;;;;;;:11;:25;20007:12;:10;:12::i;:::-;19995:25;;;;;;;;;;;;;;;:34;20021:7;19995:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19963:8;:129::i;:::-;20110:4;20103:11;;19852:270;;;;:::o;23111:125::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23220:8:::1;23192:25;;:36;;;;;;;;;;;;;;;;;;23111:125:::0;:::o;24705:167::-;24783:4;24800:42;24810:12;:10;:12::i;:::-;24824:9;24835:6;24800:9;:42::i;:::-;24860:4;24853:11;;24705:167;;;;:::o;23700:997::-;23752:4;23804:6;23777:23;23787:12;:10;:12::i;:::-;23777:9;:23::i;:::-;:33;;23769:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23852:21;23890:1;23876:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23852:40;;23921:4;23903;23908:1;23903:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;23947:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23937:4;23942:1;23937:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;23982:15;24000;;;;;;;;;;;:29;;;24030:6;24038:4;24000:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23982:61;;24056:11;24107:7;24082:21;:32;24078:162;;24137:14;;24131:20;;24078:162;;;24214:14;;24190:21;:38;;;;:::i;:::-;24184:44;;24078:162;24279:3;24260:1;24273;24262;:8;:12;;;;:::i;:::-;24260:15;;;;;;;;;;;;;;;;;;;;;;:22;;24252:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24354:1;24367;24356;:8;:12;;;;:::i;:::-;24354:15;;;;;;;;;;;;;;;;;;;;;;24329:21;:40;;24321:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;24415:51;24436:12;:10;:12::i;:::-;24450:1;24463;24452;:8;:12;;;;:::i;:::-;24450:15;;;;;;;;;;;;;;;;;;;;;;24415:20;:51::i;:::-;24477:27;24483:12;:10;:12::i;:::-;24497:6;24477:5;:27::i;:::-;24545:1;24558;24547;:8;:12;;;;:::i;:::-;24545:15;;;;;;;;;;;;;;;;;;;;;;24525:16;;:35;;;;;;;:::i;:::-;;;;;;;;24586:6;24571:11;;:21;;;;;;;:::i;:::-;;;;;;;;24610:57;24629:12;:10;:12::i;:::-;24643:6;24651:1;24664;24653;:8;:12;;;;:::i;:::-;24651:15;;;;;;;;;;;;;;;;;;;;;;24610:57;;;;;;;;:::i;:::-;;;;;;;;24685:4;24678:11;;;;;23700:997;;;:::o;15206:36::-;;;;:::o;21719:340::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21873:17:::1;21854:16;:36;;;;21914:11;21901:10;:24;;;;21950:12;21936:11;:26;;;;22002:49;22039:11;;22002:32;22023:10;;22002:16;;:20;;:32;;;;:::i;:::-;:36;;:49;;;;:::i;:::-;21975:24;:76;;;;21719:340:::0;;;:::o;22932:171::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23033:8:::1;23009:21;;:32;;;;;;;;;;;;;;;;;;23057:38;23086:8;23057:38;;;;;;:::i;:::-;;;;;;;;22932:171:::0;:::o;30102:148::-;30143:7;30152;30161;30189:11;;30202:16;;30220:21;30181:61;;;;;;30102:148;;;:::o;15892:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;16327:26::-;;;;;;;;;;;;;:::o;14518:30::-;;;;:::o;16486:45::-;;;;;;;;;;;;;:::o;19474:143::-;19555:7;19582:11;:18;19594:5;19582:18;;;;;;;;;;;;;;;:27;19601:7;19582:27;;;;;;;;;;;;;;;;19575:34;;19474:143;;;;:::o;20654:107::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20749:4:::1;20722:15;:24;20738:7;20722:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;20654:107:::0;:::o;15568:37::-;;;;:::o;22549:102::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22635:8:::1;22621:10;:22;;;;22549:102:::0;:::o;6287:244::-;6053:12;:10;:12::i;:::-;6043:22;;:6;;;;;;;;;;:22;;;6035:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6396:1:::1;6376:22;;:8;:22;;;;6368:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6486:8;6457:38;;6478:6;::::0;::::1;;;;;;;;6457:38;;;;;;;;;;;;6515:8;6506:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6287:244:::0;:::o;16538:35::-;;;;;;;;;;;;;:::o;15769:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;14555:35::-;;;;:::o;1311:181::-;1369:7;1389:9;1405:1;1401;:5;;;;:::i;:::-;1389:17;;1430:1;1425;:6;;1417:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1483:1;1476:8;;;1311:181;;;;:::o;241:115::-;294:15;337:10;322:26;;241:115;:::o;20299:347::-;20419:1;20402:19;;:5;:19;;;;20394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20500:1;20481:21;;:7;:21;;;;20473:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20584:6;20554:11;:18;20566:5;20554:18;;;;;;;;;;;;;;;:27;20573:7;20554:27;;;;;;;;;;;;;;;:36;;;;20622:7;20606:32;;20615:5;20606:32;;;20631:6;20606:32;;;;;;:::i;:::-;;;;;;;;20299:347;;;:::o;25201:1691::-;25328:1;25310:20;;:6;:20;;;;25302:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;25412:1;25391:23;;:9;:23;;;;25383:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25470:16;;;;;;;;;;;25467:1418;;;25513:41;25528:6;25536:9;25547:6;25513:14;:41::i;:::-;;25467:1418;;;25610:18;:26;25629:6;25610:26;;;;;;;;;;;;;;;;;;;;;;;;;25609:27;:61;;;;;25641:18;:29;25660:9;25641:29;;;;;;;;;;;;;;;;;;;;;;;;;25640:30;25609:61;25606:176;;;25709:12;;25699:6;:22;;25691:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25606:176;25810:28;25841:24;25859:4;25841:9;:24::i;:::-;25810:55;;25880:28;25935:23;;25911:20;:47;;25880:78;;25991:23;:44;;;;;26019:16;;;;;;;;;;;26018:17;25991:44;:72;;;;;26040:15;:23;26056:6;26040:23;;;;;;;;;;;;;;;;;;;;;;;;;26039:24;25991:72;:97;;;;;26067:21;;;;;;;;;;;25991:97;25987:308;;;26126:25;;;;;;;;;;;26123:97;;;26197:23;;26174:46;;26123:97;26239:36;26254:20;26239:14;:36::i;:::-;25987:308;26331:53;26353:6;26331:53;;;;;;;;;;;;;;;;;:9;:17;26341:6;26331:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;26311:9;:17;26321:6;26311:17;;;;;;;;;;;;;;;:73;;;;26401:19;26424:21;:29;26446:6;26424:29;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;26457:21;:32;26479:9;26457:32;;;;;;;;;;;;;;;;;;;;;;;;;26424:65;26423:156;;26545:34;26553:6;26561:9;26572:6;26545:7;:34::i;:::-;26423:156;;;26536:6;26423:156;26401:178;;26599:16;;;;;;;;;;;:54;;;;;26620:22;:33;26643:9;26620:33;;;;;;;;;;;;;;;;;;;;;;;;;26619:34;26599:54;26596:136;;;26721:10;;26680:37;26705:11;26680:20;26690:9;26680;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;26672:60;;;;;;26596:136;26772:37;26797:11;26772:9;:20;26782:9;26772:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;26749:9;:20;26759:9;26749:20;;;;;;;;;;;;;;;:60;;;;26848:9;26831:40;;26840:6;26831:40;;;26859:11;26831:40;;;;;;:::i;:::-;;;;;;;;25467:1418;;;;25201:1691;;;:::o;1644:192::-;1730:7;1763:1;1758;:6;;1766:12;1750:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1790:9;1806:1;1802;:5;;;;:::i;:::-;1790:17;;1827:1;1820:8;;;1644:192;;;;;:::o;1500:136::-;1558:7;1585:43;1589:1;1592;1585:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1578:50;;1500:136;;;;:::o;23384:126::-;23476:9;:18;;:26;23495:6;23476:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23384:126;;:::o;18477:474::-;18580:1;18561:21;;:7;:21;;;;18553:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18637:22;18662:9;:18;18672:7;18662:18;;;;;;;;;;;;;;;;18637:43;;18717:6;18699:14;:24;;18691:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18836:6;18819:14;:23;18798:9;:18;18808:7;18798:18;;;;;;;;;;;;;;;:44;;;;18880:6;18864:12;;:22;;;;;;;:::i;:::-;;;;;;;;18930:1;18904:37;;18913:7;18904:37;;;18934:6;18904:37;;;;;;:::i;:::-;;;;;;;;18477:474;;;:::o;26900:330::-;26993:4;27030:53;27052:6;27030:53;;;;;;;;;;;;;;;;;:9;:17;27040:6;27030:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;27010:9;:17;27020:6;27010:17;;;;;;;;;;;;;;;:73;;;;27117:32;27142:6;27117:9;:20;27127:9;27117:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;27094:9;:20;27104:9;27094:20;;;;;;;;;;;;;;;:55;;;;27182:9;27165:35;;27174:6;27165:35;;;27193:6;27165:35;;;;;;:::i;:::-;;;;;;;;27218:4;27211:11;;26900:330;;;;;:::o;27238:1019::-;17178:4;17159:16;;:23;;;;;;;;;;;;;;;;;;27320:28:::1;27351:21;27320:52;;27383:19;27405:66;27469:1;27405:59;27439:24;;27405:29;27417:16;;27405:7;:11;;:29;;;;:::i;:::-;:33;;:59;;;;:::i;:::-;:63;;:66;;;;:::i;:::-;27383:88;;27482:21;27506:24;27518:11;27506:7;:11;;:24;;;;:::i;:::-;27482:48;;27543:31;27560:13;27543:16;:31::i;:::-;27585:22;27610:47;27636:20;27610:21;:25;;:47;;;;:::i;:::-;27585:72;;27670:19;27692:53;27721:23;27742:1;27721:16;;:20;;:23;;;;:::i;:::-;27692:24;;:28;;:53;;;;:::i;:::-;27670:75;;27766:26;27795:60;27853:1;27795:53;27836:11;27795:36;27814:16;;27795:14;:18;;:36;;;;:::i;:::-;:40;;:53;;;;:::i;:::-;:57;;:60;;;;:::i;:::-;27766:89;;27866:21;27890:48;27926:11;27890:31;27909:11;;27890:14;:18;;:31;;;;:::i;:::-;:35;;:48;;;;:::i;:::-;27866:72;;27949:20;27972:57;28015:13;27972:38;27991:18;27972:14;:18;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;27949:80;;28060:1;28045:12;:16;28042:88;;;28076:54;28097:18;;;;;;;;;;;28117:12;28076:20;:54::i;:::-;28042:88;28169:1;28148:18;:22;:41;;;;;28188:1;28174:11;:15;28148:41;28145:104;;;28204:45;28217:11;28230:18;28204:12;:45::i;:::-;28145:104;17193:1;;;;;;;;17224:5:::0;17205:16;;:24;;;;;;;;;;;;;;;;;;27238:1019;:::o;29466:628::-;29552:7;29582:17;29602:1;29582:21;;29627:15;:23;29643:6;29627:23;;;;;;;;;;;;;;;;;;;;;;;;;29624:229;;;29679:38;29713:3;29679:29;29690:17;;29679:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;29667:50;;29624:229;;;29747:15;:26;29763:9;29747:26;;;;;;;;;;;;;;;;;;;;;;;;;29744:109;;;29802:39;29837:3;29802:30;29813:18;;29802:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;29790:51;;29744:109;29624:229;29888:1;29876:9;:13;29873:173;;;29933:39;29962:9;29933;:24;29951:4;29933:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;29906:9;:24;29924:4;29906:24;;;;;;;;;;;;;;;:66;;;;30017:4;29992:42;;30001:6;29992:42;;;30024:9;29992:42;;;;;;:::i;:::-;;;;;;;;29873:173;30065:21;30076:9;30065:6;:10;;:21;;;;:::i;:::-;30058:28;;;29466:628;;;;;:::o;1844:250::-;1902:7;1931:1;1926;:6;1922:47;;;1956:1;1949:8;;;;1922:47;1981:9;1997:1;1993;:5;;;;:::i;:::-;1981:17;;2026:1;2021;2017;:5;;;;:::i;:::-;:10;2009:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2085:1;2078:8;;;1844:250;;;;;:::o;2102:132::-;2160:7;2187:39;2191:1;2194;2187:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2180:46;;2102:132;;;;:::o;28271:666::-;28397:21;28435:1;28421:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28397:40;;28466:4;28448;28453:1;28448:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;28492:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28482:4;28487:1;28482:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;28527:62;28544:4;28559:15;;;;;;;;;;;28577:11;28527:8;:62::i;:::-;28628:15;;;;;;;;;;;:66;;;28709:11;28735:1;28779:4;28806;28842:15;28628:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28894:35;28911:11;28924:4;28894:35;;;;;;;:::i;:::-;;;;;;;;28271:666;;:::o;28945:513::-;29093:62;29110:4;29125:15;;;;;;;;;;;29143:11;29093:8;:62::i;:::-;29198:15;;;;;;;;;;;:31;;;29237:9;29270:4;29290:11;29316:1;29359;29402:7;:5;:7::i;:::-;29424:15;29198:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28945:513;;:::o;2242:278::-;2328:7;2360:1;2356;:5;2363:12;2348:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2387:9;2403:1;2399;:5;;;;:::i;:::-;2387:17;;2511:1;2504:8;;;2242:278;;;;;:::o;24:677:1:-;131:5;156:81;172:64;229:6;172:64;:::i;:::-;156:81;:::i;:::-;147:90;;257:5;286:6;279:5;272:21;320:4;313:5;309:16;302:23;;346:6;396:3;388:4;380:6;376:17;371:3;367:27;364:36;361:2;;;425:1;422;415:12;361:2;461:1;446:249;471:6;468:1;465:13;446:249;;;539:3;568:48;612:3;600:10;568:48;:::i;:::-;563:3;556:61;646:4;641:3;637:14;630:21;;680:4;675:3;671:14;664:21;;506:189;493:1;490;486:9;481:14;;446:249;;;450:14;137:564;;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:143::-;909:5;940:6;934:13;925:22;;956:33;983:5;956:33;:::i;:::-;915:80;;;;:::o;1018:318::-;1100:5;1149:3;1142:4;1134:6;1130:17;1126:27;1116:2;;1167:1;1164;1157:12;1116:2;1200:6;1194:13;1225:105;1326:3;1318:6;1311:4;1303:6;1299:17;1225:105;:::i;:::-;1216:114;;1106:230;;;;;:::o;1342:133::-;1385:5;1423:6;1410:20;1401:29;;1439:30;1463:5;1439:30;:::i;:::-;1391:84;;;;:::o;1481:139::-;1527:5;1565:6;1552:20;1543:29;;1581:33;1608:5;1581:33;:::i;:::-;1533:87;;;;:::o;1626:143::-;1683:5;1714:6;1708:13;1699:22;;1730:33;1757:5;1730:33;:::i;:::-;1689:80;;;;:::o;1775:262::-;1834:6;1883:2;1871:9;1862:7;1858:23;1854:32;1851:2;;;1899:1;1896;1889:12;1851:2;1942:1;1967:53;2012:7;2003:6;1992:9;1988:22;1967:53;:::i;:::-;1957:63;;1913:117;1841:196;;;;:::o;2043:284::-;2113:6;2162:2;2150:9;2141:7;2137:23;2133:32;2130:2;;;2178:1;2175;2168:12;2130:2;2221:1;2246:64;2302:7;2293:6;2282:9;2278:22;2246:64;:::i;:::-;2236:74;;2192:128;2120:207;;;;:::o;2333:407::-;2401:6;2409;2458:2;2446:9;2437:7;2433:23;2429:32;2426:2;;;2474:1;2471;2464:12;2426:2;2517:1;2542:53;2587:7;2578:6;2567:9;2563:22;2542:53;:::i;:::-;2532:63;;2488:117;2644:2;2670:53;2715:7;2706:6;2695:9;2691:22;2670:53;:::i;:::-;2660:63;;2615:118;2416:324;;;;;:::o;2746:552::-;2823:6;2831;2839;2888:2;2876:9;2867:7;2863:23;2859:32;2856:2;;;2904:1;2901;2894:12;2856:2;2947:1;2972:53;3017:7;3008:6;2997:9;2993:22;2972:53;:::i;:::-;2962:63;;2918:117;3074:2;3100:53;3145:7;3136:6;3125:9;3121:22;3100:53;:::i;:::-;3090:63;;3045:118;3202:2;3228:53;3273:7;3264:6;3253:9;3249:22;3228:53;:::i;:::-;3218:63;;3173:118;2846:452;;;;;:::o;3304:401::-;3369:6;3377;3426:2;3414:9;3405:7;3401:23;3397:32;3394:2;;;3442:1;3439;3432:12;3394:2;3485:1;3510:53;3555:7;3546:6;3535:9;3531:22;3510:53;:::i;:::-;3500:63;;3456:117;3612:2;3638:50;3680:7;3671:6;3660:9;3656:22;3638:50;:::i;:::-;3628:60;;3583:115;3384:321;;;;;:::o;3711:407::-;3779:6;3787;3836:2;3824:9;3815:7;3811:23;3807:32;3804:2;;;3852:1;3849;3842:12;3804:2;3895:1;3920:53;3965:7;3956:6;3945:9;3941:22;3920:53;:::i;:::-;3910:63;;3866:117;4022:2;4048:53;4093:7;4084:6;4073:9;4069:22;4048:53;:::i;:::-;4038:63;;3993:118;3794:324;;;;;:::o;4124:420::-;4219:6;4268:2;4256:9;4247:7;4243:23;4239:32;4236:2;;;4284:1;4281;4274:12;4236:2;4348:1;4337:9;4333:17;4327:24;4378:18;4370:6;4367:30;4364:2;;;4410:1;4407;4400:12;4364:2;4438:89;4519:7;4510:6;4499:9;4495:22;4438:89;:::i;:::-;4428:99;;4298:239;4226:318;;;;:::o;4550:256::-;4606:6;4655:2;4643:9;4634:7;4630:23;4626:32;4623:2;;;4671:1;4668;4661:12;4623:2;4714:1;4739:50;4781:7;4772:6;4761:9;4757:22;4739:50;:::i;:::-;4729:60;;4685:114;4613:193;;;;:::o;4812:262::-;4871:6;4920:2;4908:9;4899:7;4895:23;4891:32;4888:2;;;4936:1;4933;4926:12;4888:2;4979:1;5004:53;5049:7;5040:6;5029:9;5025:22;5004:53;:::i;:::-;4994:63;;4950:117;4878:196;;;;:::o;5080:552::-;5157:6;5165;5173;5222:2;5210:9;5201:7;5197:23;5193:32;5190:2;;;5238:1;5235;5228:12;5190:2;5281:1;5306:53;5351:7;5342:6;5331:9;5327:22;5306:53;:::i;:::-;5296:63;;5252:117;5408:2;5434:53;5479:7;5470:6;5459:9;5455:22;5434:53;:::i;:::-;5424:63;;5379:118;5536:2;5562:53;5607:7;5598:6;5587:9;5583:22;5562:53;:::i;:::-;5552:63;;5507:118;5180:452;;;;;:::o;5638:596::-;5726:6;5734;5742;5791:2;5779:9;5770:7;5766:23;5762:32;5759:2;;;5807:1;5804;5797:12;5759:2;5850:1;5875:64;5931:7;5922:6;5911:9;5907:22;5875:64;:::i;:::-;5865:74;;5821:128;5988:2;6014:64;6070:7;6061:6;6050:9;6046:22;6014:64;:::i;:::-;6004:74;;5959:129;6127:2;6153:64;6209:7;6200:6;6189:9;6185:22;6153:64;:::i;:::-;6143:74;;6098:129;5749:485;;;;;:::o;6240:179::-;6309:10;6330:46;6372:3;6364:6;6330:46;:::i;:::-;6408:4;6403:3;6399:14;6385:28;;6320:99;;;;:::o;6425:147::-;6520:45;6559:5;6520:45;:::i;:::-;6515:3;6508:58;6498:74;;:::o;6578:108::-;6655:24;6673:5;6655:24;:::i;:::-;6650:3;6643:37;6633:53;;:::o;6692:118::-;6779:24;6797:5;6779:24;:::i;:::-;6774:3;6767:37;6757:53;;:::o;6846:732::-;6965:3;6994:54;7042:5;6994:54;:::i;:::-;7064:86;7143:6;7138:3;7064:86;:::i;:::-;7057:93;;7174:56;7224:5;7174:56;:::i;:::-;7253:7;7284:1;7269:284;7294:6;7291:1;7288:13;7269:284;;;7370:6;7364:13;7397:63;7456:3;7441:13;7397:63;:::i;:::-;7390:70;;7483:60;7536:6;7483:60;:::i;:::-;7473:70;;7329:224;7316:1;7313;7309:9;7304:14;;7269:284;;;7273:14;7569:3;7562:10;;6970:608;;;;;;;:::o;7584:109::-;7665:21;7680:5;7665:21;:::i;:::-;7660:3;7653:34;7643:50;;:::o;7699:185::-;7813:64;7871:5;7813:64;:::i;:::-;7808:3;7801:77;7791:93;;:::o;7890:147::-;7985:45;8024:5;7985:45;:::i;:::-;7980:3;7973:58;7963:74;;:::o;8043:364::-;8131:3;8159:39;8192:5;8159:39;:::i;:::-;8214:71;8278:6;8273:3;8214:71;:::i;:::-;8207:78;;8294:52;8339:6;8334:3;8327:4;8320:5;8316:16;8294:52;:::i;:::-;8371:29;8393:6;8371:29;:::i;:::-;8366:3;8362:39;8355:46;;8135:272;;;;;:::o;8413:366::-;8555:3;8576:67;8640:2;8635:3;8576:67;:::i;:::-;8569:74;;8652:93;8741:3;8652:93;:::i;:::-;8770:2;8765:3;8761:12;8754:19;;8559:220;;;:::o;8785:366::-;8927:3;8948:67;9012:2;9007:3;8948:67;:::i;:::-;8941:74;;9024:93;9113:3;9024:93;:::i;:::-;9142:2;9137:3;9133:12;9126:19;;8931:220;;;:::o;9157:366::-;9299:3;9320:67;9384:2;9379:3;9320:67;:::i;:::-;9313:74;;9396:93;9485:3;9396:93;:::i;:::-;9514:2;9509:3;9505:12;9498:19;;9303:220;;;:::o;9529:366::-;9671:3;9692:67;9756:2;9751:3;9692:67;:::i;:::-;9685:74;;9768:93;9857:3;9768:93;:::i;:::-;9886:2;9881:3;9877:12;9870:19;;9675:220;;;:::o;9901:366::-;10043:3;10064:67;10128:2;10123:3;10064:67;:::i;:::-;10057:74;;10140:93;10229:3;10140:93;:::i;:::-;10258:2;10253:3;10249:12;10242:19;;10047:220;;;:::o;10273:366::-;10415:3;10436:67;10500:2;10495:3;10436:67;:::i;:::-;10429:74;;10512:93;10601:3;10512:93;:::i;:::-;10630:2;10625:3;10621:12;10614:19;;10419:220;;;:::o;10645:366::-;10787:3;10808:67;10872:2;10867:3;10808:67;:::i;:::-;10801:74;;10884:93;10973:3;10884:93;:::i;:::-;11002:2;10997:3;10993:12;10986:19;;10791:220;;;:::o;11017:366::-;11159:3;11180:67;11244:2;11239:3;11180:67;:::i;:::-;11173:74;;11256:93;11345:3;11256:93;:::i;:::-;11374:2;11369:3;11365:12;11358:19;;11163:220;;;:::o;11389:366::-;11531:3;11552:67;11616:2;11611:3;11552:67;:::i;:::-;11545:74;;11628:93;11717:3;11628:93;:::i;:::-;11746:2;11741:3;11737:12;11730:19;;11535:220;;;:::o;11761:366::-;11903:3;11924:67;11988:2;11983:3;11924:67;:::i;:::-;11917:74;;12000:93;12089:3;12000:93;:::i;:::-;12118:2;12113:3;12109:12;12102:19;;11907:220;;;:::o;12133:366::-;12275:3;12296:67;12360:2;12355:3;12296:67;:::i;:::-;12289:74;;12372:93;12461:3;12372:93;:::i;:::-;12490:2;12485:3;12481:12;12474:19;;12279:220;;;:::o;12505:366::-;12647:3;12668:67;12732:2;12727:3;12668:67;:::i;:::-;12661:74;;12744:93;12833:3;12744:93;:::i;:::-;12862:2;12857:3;12853:12;12846:19;;12651:220;;;:::o;12877:366::-;13019:3;13040:67;13104:2;13099:3;13040:67;:::i;:::-;13033:74;;13116:93;13205:3;13116:93;:::i;:::-;13234:2;13229:3;13225:12;13218:19;;13023:220;;;:::o;13249:366::-;13391:3;13412:67;13476:2;13471:3;13412:67;:::i;:::-;13405:74;;13488:93;13577:3;13488:93;:::i;:::-;13606:2;13601:3;13597:12;13590:19;;13395:220;;;:::o;13621:366::-;13763:3;13784:67;13848:2;13843:3;13784:67;:::i;:::-;13777:74;;13860:93;13949:3;13860:93;:::i;:::-;13978:2;13973:3;13969:12;13962:19;;13767:220;;;:::o;13993:118::-;14080:24;14098:5;14080:24;:::i;:::-;14075:3;14068:37;14058:53;;:::o;14117:112::-;14200:22;14216:5;14200:22;:::i;:::-;14195:3;14188:35;14178:51;;:::o;14235:222::-;14328:4;14366:2;14355:9;14351:18;14343:26;;14379:71;14447:1;14436:9;14432:17;14423:6;14379:71;:::i;:::-;14333:124;;;;:::o;14463:458::-;14620:4;14658:2;14647:9;14643:18;14635:26;;14671:79;14747:1;14736:9;14732:17;14723:6;14671:79;:::i;:::-;14760:72;14828:2;14817:9;14813:18;14804:6;14760:72;:::i;:::-;14842;14910:2;14899:9;14895:18;14886:6;14842:72;:::i;:::-;14625:296;;;;;;:::o;14927:807::-;15176:4;15214:3;15203:9;15199:19;15191:27;;15228:71;15296:1;15285:9;15281:17;15272:6;15228:71;:::i;:::-;15309:72;15377:2;15366:9;15362:18;15353:6;15309:72;:::i;:::-;15391:80;15467:2;15456:9;15452:18;15443:6;15391:80;:::i;:::-;15481;15557:2;15546:9;15542:18;15533:6;15481:80;:::i;:::-;15571:73;15639:3;15628:9;15624:19;15615:6;15571:73;:::i;:::-;15654;15722:3;15711:9;15707:19;15698:6;15654:73;:::i;:::-;15181:553;;;;;;;;;:::o;15740:210::-;15827:4;15865:2;15854:9;15850:18;15842:26;;15878:65;15940:1;15929:9;15925:17;15916:6;15878:65;:::i;:::-;15832:118;;;;:::o;15956:276::-;16076:4;16114:2;16103:9;16099:18;16091:26;;16127:98;16222:1;16211:9;16207:17;16198:6;16127:98;:::i;:::-;16081:151;;;;:::o;16238:313::-;16351:4;16389:2;16378:9;16374:18;16366:26;;16438:9;16432:4;16428:20;16424:1;16413:9;16409:17;16402:47;16466:78;16539:4;16530:6;16466:78;:::i;:::-;16458:86;;16356:195;;;;:::o;16557:419::-;16723:4;16761:2;16750:9;16746:18;16738:26;;16810:9;16804:4;16800:20;16796:1;16785:9;16781:17;16774:47;16838:131;16964:4;16838:131;:::i;:::-;16830:139;;16728:248;;;:::o;16982:419::-;17148:4;17186:2;17175:9;17171:18;17163:26;;17235:9;17229:4;17225:20;17221:1;17210:9;17206:17;17199:47;17263:131;17389:4;17263:131;:::i;:::-;17255:139;;17153:248;;;:::o;17407:419::-;17573:4;17611:2;17600:9;17596:18;17588:26;;17660:9;17654:4;17650:20;17646:1;17635:9;17631:17;17624:47;17688:131;17814:4;17688:131;:::i;:::-;17680:139;;17578:248;;;:::o;17832:419::-;17998:4;18036:2;18025:9;18021:18;18013:26;;18085:9;18079:4;18075:20;18071:1;18060:9;18056:17;18049:47;18113:131;18239:4;18113:131;:::i;:::-;18105:139;;18003:248;;;:::o;18257:419::-;18423:4;18461:2;18450:9;18446:18;18438:26;;18510:9;18504:4;18500:20;18496:1;18485:9;18481:17;18474:47;18538:131;18664:4;18538:131;:::i;:::-;18530:139;;18428:248;;;:::o;18682:419::-;18848:4;18886:2;18875:9;18871:18;18863:26;;18935:9;18929:4;18925:20;18921:1;18910:9;18906:17;18899:47;18963:131;19089:4;18963:131;:::i;:::-;18955:139;;18853:248;;;:::o;19107:419::-;19273:4;19311:2;19300:9;19296:18;19288:26;;19360:9;19354:4;19350:20;19346:1;19335:9;19331:17;19324:47;19388:131;19514:4;19388:131;:::i;:::-;19380:139;;19278:248;;;:::o;19532:419::-;19698:4;19736:2;19725:9;19721:18;19713:26;;19785:9;19779:4;19775:20;19771:1;19760:9;19756:17;19749:47;19813:131;19939:4;19813:131;:::i;:::-;19805:139;;19703:248;;;:::o;19957:419::-;20123:4;20161:2;20150:9;20146:18;20138:26;;20210:9;20204:4;20200:20;20196:1;20185:9;20181:17;20174:47;20238:131;20364:4;20238:131;:::i;:::-;20230:139;;20128:248;;;:::o;20382:419::-;20548:4;20586:2;20575:9;20571:18;20563:26;;20635:9;20629:4;20625:20;20621:1;20610:9;20606:17;20599:47;20663:131;20789:4;20663:131;:::i;:::-;20655:139;;20553:248;;;:::o;20807:419::-;20973:4;21011:2;21000:9;20996:18;20988:26;;21060:9;21054:4;21050:20;21046:1;21035:9;21031:17;21024:47;21088:131;21214:4;21088:131;:::i;:::-;21080:139;;20978:248;;;:::o;21232:419::-;21398:4;21436:2;21425:9;21421:18;21413:26;;21485:9;21479:4;21475:20;21471:1;21460:9;21456:17;21449:47;21513:131;21639:4;21513:131;:::i;:::-;21505:139;;21403:248;;;:::o;21657:419::-;21823:4;21861:2;21850:9;21846:18;21838:26;;21910:9;21904:4;21900:20;21896:1;21885:9;21881:17;21874:47;21938:131;22064:4;21938:131;:::i;:::-;21930:139;;21828:248;;;:::o;22082:419::-;22248:4;22286:2;22275:9;22271:18;22263:26;;22335:9;22329:4;22325:20;22321:1;22310:9;22306:17;22299:47;22363:131;22489:4;22363:131;:::i;:::-;22355:139;;22253:248;;;:::o;22507:419::-;22673:4;22711:2;22700:9;22696:18;22688:26;;22760:9;22754:4;22750:20;22746:1;22735:9;22731:17;22724:47;22788:131;22914:4;22788:131;:::i;:::-;22780:139;;22678:248;;;:::o;22932:222::-;23025:4;23063:2;23052:9;23048:18;23040:26;;23076:71;23144:1;23133:9;23129:17;23120:6;23076:71;:::i;:::-;23030:124;;;;:::o;23160:483::-;23331:4;23369:2;23358:9;23354:18;23346:26;;23382:71;23450:1;23439:9;23435:17;23426:6;23382:71;:::i;:::-;23500:9;23494:4;23490:20;23485:2;23474:9;23470:18;23463:48;23528:108;23631:4;23622:6;23528:108;:::i;:::-;23520:116;;23336:307;;;;;:::o;23649:831::-;23912:4;23950:3;23939:9;23935:19;23927:27;;23964:71;24032:1;24021:9;24017:17;24008:6;23964:71;:::i;:::-;24045:80;24121:2;24110:9;24106:18;24097:6;24045:80;:::i;:::-;24172:9;24166:4;24162:20;24157:2;24146:9;24142:18;24135:48;24200:108;24303:4;24294:6;24200:108;:::i;:::-;24192:116;;24318:72;24386:2;24375:9;24371:18;24362:6;24318:72;:::i;:::-;24400:73;24468:3;24457:9;24453:19;24444:6;24400:73;:::i;:::-;23917:563;;;;;;;;:::o;24486:442::-;24635:4;24673:2;24662:9;24658:18;24650:26;;24686:71;24754:1;24743:9;24739:17;24730:6;24686:71;:::i;:::-;24767:72;24835:2;24824:9;24820:18;24811:6;24767:72;:::i;:::-;24849;24917:2;24906:9;24902:18;24893:6;24849:72;:::i;:::-;24640:288;;;;;;:::o;24934:214::-;25023:4;25061:2;25050:9;25046:18;25038:26;;25074:67;25138:1;25127:9;25123:17;25114:6;25074:67;:::i;:::-;25028:120;;;;:::o;25154:129::-;25188:6;25215:20;;:::i;:::-;25205:30;;25244:33;25272:4;25264:6;25244:33;:::i;:::-;25195:88;;;:::o;25289:75::-;25322:6;25355:2;25349:9;25339:19;;25329:35;:::o;25370:311::-;25447:4;25537:18;25529:6;25526:30;25523:2;;;25559:18;;:::i;:::-;25523:2;25609:4;25601:6;25597:17;25589:25;;25669:4;25663;25659:15;25651:23;;25452:229;;;:::o;25687:132::-;25754:4;25777:3;25769:11;;25807:4;25802:3;25798:14;25790:22;;25759:60;;;:::o;25825:114::-;25892:6;25926:5;25920:12;25910:22;;25899:40;;;:::o;25945:99::-;25997:6;26031:5;26025:12;26015:22;;26004:40;;;:::o;26050:113::-;26120:4;26152;26147:3;26143:14;26135:22;;26125:38;;;:::o;26169:184::-;26268:11;26302:6;26297:3;26290:19;26342:4;26337:3;26333:14;26318:29;;26280:73;;;;:::o;26359:169::-;26443:11;26477:6;26472:3;26465:19;26517:4;26512:3;26508:14;26493:29;;26455:73;;;;:::o;26534:305::-;26574:3;26593:20;26611:1;26593:20;:::i;:::-;26588:25;;26627:20;26645:1;26627:20;:::i;:::-;26622:25;;26781:1;26713:66;26709:74;26706:1;26703:81;26700:2;;;26787:18;;:::i;:::-;26700:2;26831:1;26828;26824:9;26817:16;;26578:261;;;;:::o;26845:185::-;26885:1;26902:20;26920:1;26902:20;:::i;:::-;26897:25;;26936:20;26954:1;26936:20;:::i;:::-;26931:25;;26975:1;26965:2;;26980:18;;:::i;:::-;26965:2;27022:1;27019;27015:9;27010:14;;26887:143;;;;:::o;27036:348::-;27076:7;27099:20;27117:1;27099:20;:::i;:::-;27094:25;;27133:20;27151:1;27133:20;:::i;:::-;27128:25;;27321:1;27253:66;27249:74;27246:1;27243:81;27238:1;27231:9;27224:17;27220:105;27217:2;;;27328:18;;:::i;:::-;27217:2;27376:1;27373;27369:9;27358:20;;27084:300;;;;:::o;27390:191::-;27430:4;27450:20;27468:1;27450:20;:::i;:::-;27445:25;;27484:20;27502:1;27484:20;:::i;:::-;27479:25;;27523:1;27520;27517:8;27514:2;;;27528:18;;:::i;:::-;27514:2;27573:1;27570;27566:9;27558:17;;27435:146;;;;:::o;27587:96::-;27624:7;27653:24;27671:5;27653:24;:::i;:::-;27642:35;;27632:51;;;:::o;27689:90::-;27723:7;27766:5;27759:13;27752:21;27741:32;;27731:48;;;:::o;27785:126::-;27822:7;27862:42;27855:5;27851:54;27840:65;;27830:81;;;:::o;27917:77::-;27954:7;27983:5;27972:16;;27962:32;;;:::o;28000:86::-;28035:7;28075:4;28068:5;28064:16;28053:27;;28043:43;;;:::o;28092:134::-;28150:9;28183:37;28214:5;28183:37;:::i;:::-;28170:50;;28160:66;;;:::o;28232:180::-;28309:9;28342:64;28400:5;28342:64;:::i;:::-;28329:77;;28319:93;;;:::o;28418:140::-;28495:9;28528:24;28546:5;28528:24;:::i;:::-;28515:37;;28505:53;;;:::o;28564:121::-;28622:9;28655:24;28673:5;28655:24;:::i;:::-;28642:37;;28632:53;;;:::o;28691:126::-;28741:9;28774:37;28805:5;28774:37;:::i;:::-;28761:50;;28751:66;;;:::o;28823:113::-;28873:9;28906:24;28924:5;28906:24;:::i;:::-;28893:37;;28883:53;;;:::o;28942:307::-;29010:1;29020:113;29034:6;29031:1;29028:13;29020:113;;;29119:1;29114:3;29110:11;29104:18;29100:1;29095:3;29091:11;29084:39;29056:2;29053:1;29049:10;29044:15;;29020:113;;;29151:6;29148:1;29145:13;29142:2;;;29231:1;29222:6;29217:3;29213:16;29206:27;29142:2;28991:258;;;;:::o;29255:320::-;29299:6;29336:1;29330:4;29326:12;29316:22;;29383:1;29377:4;29373:12;29404:18;29394:2;;29460:4;29452:6;29448:17;29438:27;;29394:2;29522;29514:6;29511:14;29491:18;29488:38;29485:2;;;29541:18;;:::i;:::-;29485:2;29306:269;;;;:::o;29581:281::-;29664:27;29686:4;29664:27;:::i;:::-;29656:6;29652:40;29794:6;29782:10;29779:22;29758:18;29746:10;29743:34;29740:62;29737:2;;;29805:18;;:::i;:::-;29737:2;29845:10;29841:2;29834:22;29624:238;;;:::o;29868:180::-;29916:77;29913:1;29906:88;30013:4;30010:1;30003:15;30037:4;30034:1;30027:15;30054:180;30102:77;30099:1;30092:88;30199:4;30196:1;30189:15;30223:4;30220:1;30213:15;30240:180;30288:77;30285:1;30278:88;30385:4;30382:1;30375:15;30409:4;30406:1;30399:15;30426:180;30474:77;30471:1;30464:88;30571:4;30568:1;30561:15;30595:4;30592:1;30585:15;30612:102;30653:6;30704:2;30700:7;30695:2;30688:5;30684:14;30680:28;30670:38;;30660:54;;;:::o;30720:222::-;30860:34;30856:1;30848:6;30844:14;30837:58;30929:5;30924:2;30916:6;30912:15;30905:30;30826:116;:::o;30948:221::-;31088:34;31084:1;31076:6;31072:14;31065:58;31157:4;31152:2;31144:6;31140:15;31133:29;31054:115;:::o;31175:225::-;31315:34;31311:1;31303:6;31299:14;31292:58;31384:8;31379:2;31371:6;31367:15;31360:33;31281:119;:::o;31406:221::-;31546:34;31542:1;31534:6;31530:14;31523:58;31615:4;31610:2;31602:6;31598:15;31591:29;31512:115;:::o;31633:177::-;31773:29;31769:1;31761:6;31757:14;31750:53;31739:71;:::o;31816:227::-;31956:34;31952:1;31944:6;31940:14;31933:58;32025:10;32020:2;32012:6;32008:15;32001:35;31922:121;:::o;32049:175::-;32189:27;32185:1;32177:6;32173:14;32166:51;32155:69;:::o;32230:174::-;32370:26;32366:1;32358:6;32354:14;32347:50;32336:68;:::o;32410:173::-;32550:25;32546:1;32538:6;32534:14;32527:49;32516:67;:::o;32589:220::-;32729:34;32725:1;32717:6;32713:14;32706:58;32798:3;32793:2;32785:6;32781:15;32774:28;32695:114;:::o;32815:182::-;32955:34;32951:1;32943:6;32939:14;32932:58;32921:76;:::o;33003:220::-;33143:34;33139:1;33131:6;33127:14;33120:58;33212:3;33207:2;33199:6;33195:15;33188:28;33109:114;:::o;33229:224::-;33369:34;33365:1;33357:6;33353:14;33346:58;33438:7;33433:2;33425:6;33421:15;33414:32;33335:118;:::o;33459:178::-;33599:30;33595:1;33587:6;33583:14;33576:54;33565:72;:::o;33643:223::-;33783:34;33779:1;33771:6;33767:14;33760:58;33852:6;33847:2;33839:6;33835:15;33828:31;33749:117;:::o;33872:122::-;33945:24;33963:5;33945:24;:::i;:::-;33938:5;33935:35;33925:2;;33984:1;33981;33974:12;33925:2;33915:79;:::o;34000:116::-;34070:21;34085:5;34070:21;:::i;:::-;34063:5;34060:32;34050:2;;34106:1;34103;34096:12;34050:2;34040:76;:::o;34122:122::-;34195:24;34213:5;34195:24;:::i;:::-;34188:5;34185:35;34175:2;;34234:1;34231;34224:12;34175:2;34165:79;:::o

Swarm Source

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