ETH Price: $2,649.29 (+0.49%)

Token

Raptor (33)
 

Overview

Max Total Supply

33,000,000,000 33

Holders

57

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
165,595,717.294957614 33

Value
$0.00
0x6809054ef7e7b6611cc9a39150420188c28d3f75
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:
Raptor

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

https://www.raptor33.com

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.14;

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

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

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

library Address {

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

        (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 functionCallWithValue(target, data, 0, "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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

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

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

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

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

interface IERC20Permit {
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function nonces(address owner) external view returns (uint256);
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}
abstract contract Auth {
    address public owner;
    mapping (address => bool) internal authorizations;
    
    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true; 
    }
    
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER");
        _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED");
        _;
    }
    
    function authorize(address adr) public authorized {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public authorized {
        authorizations[adr] = false;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }
    
    function transferOwnership(address payable adr) public authorized {
        require(adr != address(0), "Zero Address");
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);}
    
    function renounceOwnership() external authorized {
        emit OwnershipTransferred(address(0));
        owner = address(0);}
    
    event OwnershipTransferred(address owner);
}


interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

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

interface IPair {
    function sync() external;
}

interface IWeth {
    function deposit() external payable;
}

contract Raptor  is IERC20, Auth {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    string private constant _name = 'Raptor';
    string private constant _symbol = '33';
    uint8 private constant _decimals = 9;   
    uint256 private constant _totalSupply = 33_000_000_000 * (10 ** _decimals);

    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    uint256 public _maxTxAmount = ( _totalSupply * 300 ) / 10000;
    uint256 public _maxWalletAmount = ( _totalSupply * 300 ) / 10000;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) _isBot;
    mapping (address => bool) isWhitelisted;
    mapping (address => bool) isBlacklisted;

    IRouter public immutable router;
    address public immutable pair;
    bool tradingEnabled = false;
    uint256 startedTime;

    uint256 constant feeDenominator = 10000;

    struct Fee {
        uint256 stakingFee;
        uint256 burnFee;
        uint256 liquidFee; // marketingFee + autoLPFee + teamFee
        uint256 totalFee;
    }

    enum TransactionType {BUY, SELL, TRANSFER}

    mapping (TransactionType => Fee) public fees;

    bool swapAndLiquifyEnabled = false;
    uint256 swapTimes; 
    uint256 minTransactionsBeforeSwap = 5;
    bool swapping; 
    bool antiBotEnabled = true;

    uint256 swapThreshold = ( _totalSupply * 300 ) / 100000;
    uint256 _minTokenAmount = ( _totalSupply * 15 ) / 100000;

    uint256 marketing_divisor = 0;
    uint256 liquidity_divisor = 100;
    uint256 team_divisor = 0;
    uint256 total_divisor = 100;

    address liquidity_receiver; 
    address staking_receiver;
    address marketing_receiver;

    address team1_receiver;
    address team2_receiver;
    address team3_receiver;
    address team4_receiver;

    event WhitelistUpdated(address indexed account, bool indexed whitelisted);
    event BotUpdated(address indexed account, bool indexed isBot);
    event BlacklistedUpdated(address indexed account, bool indexed blacklisted);
    event AntiBotStateUpdated(bool indexed enabled);
    event TradingEnabled();
    event TradingDisabled();
    event SwapBackSettingsUpdated(bool indexed enabled, uint256 threshold, uint256 minLimit, uint256 _minTransactions);
    event MaxLimitsUpdated(uint256 maxTxAmount, uint256 maxWalletAmount);
    event UnsupportedTokensRecoverd(address indexed token, address receiver, uint256 amount);
    event DivisorsUpdated(uint256 team, uint256 liquidity, uint256 marketing);
    event TeamFundsDistributed(address team1, address team2, address team3, address team4, uint256 amount);
    event FeesUpdated(TransactionType indexed transactionType, uint256 burnFee, uint256 stakingFee, uint256 swapAndLiquifyFee);
    event FeesAddressesUpdated(address marketing, address liquidity, address staking);
    event TeamAddressesUpdated(address team1, address team2, address team3, address team4);
    event ForceAdjustedLP(bool indexed token, uint256 amount, bool indexed add);
    event TokensAirdroped(address indexed sender, uint256 length, uint256 airdropedAmount);

    modifier lockTheSwap {
        swapping = true; 
        _;
        swapping = false;
    }

    constructor() Auth(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // eth - 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;

        // initilasing Fees
        fees[TransactionType.SELL] = Fee (0, 0, 200, 200);
        fees[TransactionType.BUY] = Fee (0, 0, 200, 200);
        fees[TransactionType.TRANSFER] = Fee (0, 0, 0, 0);
        
        isBlacklisted[address(0)] = true;
       
        isWhitelisted[msg.sender] = true;
        isWhitelisted[address(this)] = true;

        liquidity_receiver = address(this);
        team1_receiver = msg.sender;
        team2_receiver = msg.sender;
        team3_receiver = msg.sender;
        team4_receiver = msg.sender;
        staking_receiver = msg.sender;
        marketing_receiver = msg.sender;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function totalSupply() public pure override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}

    function isBot(address _address) public view returns (bool) {
        return _isBot[_address];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD));
    }

    function whitelistAddress(address _address, bool _whitelist) external authorized { 
        require(isWhitelisted[_address] != _whitelist, "Already set");
        isWhitelisted[_address] = _whitelist;

        emit WhitelistUpdated(_address, _whitelist);
    }

    function blacklistAddress(address _address, bool _blacklist) external authorized { 
        require(isBlacklisted[_address] != _blacklist, "Already set");
        isBlacklisted[_address] = _blacklist;

        emit BlacklistedUpdated(_address, _blacklist);
    }

    function updateBot(address _address, bool isBot_) external authorized {
        require(_isBot[_address] != isBot_, "Already set");
        _isBot[_address] = isBot_;

        emit BotUpdated(_address, isBot_);
    }

    function enableAntiBot(bool _enable) external authorized {
        require(antiBotEnabled != _enable, "Already set");
        antiBotEnabled = _enable;

        emit AntiBotStateUpdated(_enable);
    }

    function enableTrading(uint256 _input) external authorized {
        require(!tradingEnabled, "Already Enabled!");
        tradingEnabled = true;
        if(startedTime == 0) // initialise only once
            startedTime = block.timestamp.add(_input);
        
        emit TradingEnabled();
    }

    function disableTrading() external onlyOwner {
        require(tradingEnabled, "Already disabled!");
        tradingEnabled = false;

        emit TradingDisabled();
    }

    function updateSwapBackSettings(bool _enabled, uint256 _threshold, uint256 _minLimit, uint256 _minTransactionsBeforeSwap) external authorized {
        swapAndLiquifyEnabled = _enabled; 
        swapThreshold = _threshold;
        _minTokenAmount = _minLimit;
        minTransactionsBeforeSwap = _minTransactionsBeforeSwap;

        emit SwapBackSettingsUpdated( _enabled, _threshold, _minLimit, _minTransactionsBeforeSwap);
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public override returns (bool) {
        _spendAllowance(from, msg.sender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, allowance(msg.sender, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = allowance(msg.sender, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(msg.sender, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal {
        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 _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

        bool takeFee = true;
        if (isWhitelisted[sender] || isWhitelisted[recipient]) {
            takeFee = false;

        } else {
            require(tradingEnabled, "Trading is Paused");
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            if (recipient != pair) {
                require(_balances[recipient] + amount <= _maxWalletAmount, "Wallet amount exceeds limit");
            }

        }

        TransactionType transactionType;

        if(sender == pair) {
            transactionType = TransactionType.BUY;
            if(recipient != address(router) && block.timestamp <= startedTime) {
                _isBot[recipient] = true;
            }
        } else if (recipient == pair) {
            transactionType = TransactionType.SELL;
        } else {
            transactionType = TransactionType.TRANSFER;
        }

        swapTimes = swapTimes.add(1);
        if(shouldSwapBack(sender, amount)){
            swapAndLiquify(swapThreshold);
            swapTimes = 0;
        }

        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = takeFee ? takeTotalFee(sender, amount, transactionType) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
    }

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(!isBlacklisted[sender], "Blackisted");
        require(!isBlacklisted[recipient], "Blackisted");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function takeTotalFee(address sender, uint256 amount, TransactionType transactionType) internal returns (uint256) {
        Fee memory fee = fees[transactionType];
        uint256 totalFees = _isBot[sender] && antiBotEnabled? (feeDenominator - 100) : fee.totalFee; // 99% fees if bot
        if (totalFees == 0) {
            return amount;
        }
        uint256 feeAmount = (amount.mul(totalFees)).div(feeDenominator);
        uint256 burnAmount = (feeAmount.mul(fee.burnFee)).div(totalFees);
        uint256 stakingAmount = (feeAmount.mul(fee.stakingFee)).div(totalFees);

        uint256 liquidAmount = feeAmount.sub(burnAmount).sub(stakingAmount);

        if(burnAmount > 0) {
            _balances[address(DEAD)] = _balances[address(DEAD)].add(burnAmount);
            emit Transfer(sender, address(DEAD), burnAmount);
        }
        if(stakingAmount > 0) {
            _balances[address(staking_receiver)] = _balances[address(staking_receiver)].add(stakingAmount);
            emit Transfer(sender, address(staking_receiver), stakingAmount);
        }
        if(liquidAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(liquidAmount);
            emit Transfer(sender, address(this), liquidAmount);
        } 
        return amount.sub(feeAmount);

    }

    function updateMaxLimits(uint256 _transaction, uint256 _wallet) external authorized {
        require(_transaction >= 1, "Max txn limit cannot be less than 0.00001%");
        require(_wallet >= 500000, "Max Wallet limit cannot be less than 5%");
        uint256 newTxLimit = ( _totalSupply * _transaction ) / 10000000;
        uint256 newWalletLimit = ( _totalSupply * _wallet ) / 10000000;
        _maxTxAmount = newTxLimit;
        _maxWalletAmount = newWalletLimit;

        emit MaxLimitsUpdated(_maxTxAmount, _maxWalletAmount);
    }

    function recoverUnsupportedTokens(address _token, address _receiver, uint256 _percentage) external authorized {
        uint256 amount = IERC20(_token).balanceOf(address(this));
        uint256 amountToWithdraw = amount.mul(_percentage).div(10000);
        IERC20(_token).safeTransfer(_receiver, amountToWithdraw);

        emit UnsupportedTokensRecoverd(_token, _receiver, amountToWithdraw);
    }

    function updateDivisors(uint256 _team, uint256 _liquidity, uint256 _marketing) external authorized {
        team_divisor = _team;
        liquidity_divisor = _liquidity;
        marketing_divisor = _marketing;
        total_divisor = _team.add(_liquidity).add(_marketing);

        emit DivisorsUpdated(_team, _liquidity, _marketing);
    }

    function distributeTeamFunds(uint256 _numerator, uint256 _denominator) external authorized {
        uint256 ethAmount = address(this).balance;
        uint256 distributeAmount = ethAmount.mul(_numerator).div(_denominator);
        uint256 amountToSend = distributeAmount.div(4);
        transferETH(team1_receiver, amountToSend);
        transferETH(team2_receiver, amountToSend);
        transferETH(team3_receiver, amountToSend);
        transferETH(team4_receiver, amountToSend);

        emit TeamFundsDistributed(team1_receiver, team2_receiver, team3_receiver, team4_receiver, distributeAmount);
    }

    function updateFee(TransactionType transactionType, uint256 _burnFee, uint256 _stakingFee, uint256 _swapAndLiquifyFee) external onlyOwner {
        require(_burnFee.add(_stakingFee).add(_swapAndLiquifyFee) <= feeDenominator.mul(3).div(20), "Tax cannot be more than 99%");
        Fee storage fee = fees[transactionType];
        fee.burnFee = _burnFee;
        fee.stakingFee = _stakingFee;
        fee.liquidFee = _swapAndLiquifyFee;
        fee.totalFee = _burnFee.add(_stakingFee).add(_swapAndLiquifyFee);    

        emit FeesUpdated(transactionType, _burnFee, _stakingFee, _swapAndLiquifyFee);
    }

    function updateFeesAddresses(address _marketing, address _liquidity, address _staking) external authorized {
        require(_marketing != address(0), "Zero Address");
        require(_liquidity != address(0), "Zero Address");
        require(_staking != address(0), "Zero Address");
        marketing_receiver = _marketing;
        liquidity_receiver = _liquidity;
        staking_receiver = _staking;

        emit FeesAddressesUpdated( _marketing, _liquidity, _staking);
    }

    function updateTeamAddresses(address _team1, address _team2, address _team3, address _team4) external authorized {
        require(_team1 != address(0), "Zero Address");
        require(_team2 != address(0), "Zero Address");
        require(_team3 != address(0), "Zero Address");
        require(_team4 != address(0), "Zero Address");
        team1_receiver = _team1;
        team2_receiver = _team2;
        team3_receiver = _team3;
        team4_receiver = _team4;

        emit TeamAddressesUpdated( _team1, _team2, _team3, _team4);
    }

    function shouldSwapBack(address sender, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapAndLiquifyEnabled && aboveMin && 
             swapTimes >= minTransactionsBeforeSwap && aboveThreshold && sender != pair;
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 amountToLiquify = tokens.mul(liquidity_divisor).div(total_divisor).div(2);
        uint256 amountToSwap = tokens.sub(amountToLiquify);

        uint256 initialBalance = address(this).balance;
        swapTokensForETH(amountToSwap);

        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 totalETHFee = total_divisor.sub(liquidity_divisor.div(2));

        if(amountToLiquify > 0){
            addLiquidity(amountToLiquify, deltaBalance.mul(liquidity_divisor).div(totalETHFee).div(2)); 
        }
        // transfer ETH to marketing, teamFunds stay in contract for future distribution.
        transferETH(marketing_receiver, deltaBalance.mul(marketing_divisor).div(totalETHFee));
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function transferETH(address recipient, uint256 amount) private {
        if(amount == 0) return;
        (bool success, ) = payable(recipient).call{value: amount}("");
        require(success, "Unable to send ETH");
    }

    function airdropTokens(address[] calldata accounts, uint256[] calldata amounts) external authorized {
        uint256 length = accounts.length;
        require (length == amounts.length, "array length mismatched");
        uint256 airdropAmount = 0;
        
        for (uint256 i = 0; i < length; i++) {
            // updating balance directly instead of calling transfer to save gas
            _balances[accounts[i]] += amounts[i];
            airdropAmount += amounts[i];
            emit Transfer(msg.sender, accounts[i], amounts[i]);
        }
        _balances[msg.sender] -= airdropAmount;

        emit TokensAirdroped(msg.sender, length, airdropAmount);
    }

    function forceAdjustLP(bool token, uint256 amount, bool add) external payable onlyOwner{
        if(!token) {
            require(add, "Cant withdraw bnb from pool");
            amount = msg.value;
            IWeth(router.WETH()).deposit{value: amount}();
            IERC20(router.WETH()).safeTransfer(pair, amount);
        }else {
            if(add) {
                _balances[msg.sender] -= amount;
                _balances[pair] += amount;
                emit Transfer(msg.sender, pair, amount);

            } else {
                _balances[pair] -= amount;
                _balances[msg.sender] += amount;
                emit Transfer(pair, msg.sender, amount);
            }
        }
        IPair(pair).sync();
        emit ForceAdjustedLP(token, amount, add);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AntiBotStateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"BlacklistedUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isBot","type":"bool"}],"name":"BotUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"team","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"DivisorsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketing","type":"address"},{"indexed":false,"internalType":"address","name":"liquidity","type":"address"},{"indexed":false,"internalType":"address","name":"staking","type":"address"}],"name":"FeesAddressesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum Raptor.TransactionType","name":"transactionType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapAndLiquifyFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"token","type":"bool"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"add","type":"bool"}],"name":"ForceAdjustedLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxLimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_minTransactions","type":"uint256"}],"name":"SwapBackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"team1","type":"address"},{"indexed":false,"internalType":"address","name":"team2","type":"address"},{"indexed":false,"internalType":"address","name":"team3","type":"address"},{"indexed":false,"internalType":"address","name":"team4","type":"address"}],"name":"TeamAddressesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"team1","type":"address"},{"indexed":false,"internalType":"address","name":"team2","type":"address"},{"indexed":false,"internalType":"address","name":"team3","type":"address"},{"indexed":false,"internalType":"address","name":"team4","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TeamFundsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"length","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"airdropedAmount","type":"uint256"}],"name":"TokensAirdroped","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnsupportedTokensRecoverd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"WhitelistUpdated","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropTokens","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":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_blacklist","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numerator","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"distributeTeamFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"enableAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_input","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Raptor.TransactionType","name":"","type":"uint8"}],"name":"fees","outputs":[{"internalType":"uint256","name":"stakingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"},{"internalType":"uint256","name":"liquidFee","type":"uint256"},{"internalType":"uint256","name":"totalFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"token","type":"bool"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"add","type":"bool"}],"name":"forceAdjustLP","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"recoverUnsupportedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"isBot_","type":"bool"}],"name":"updateBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_team","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"}],"name":"updateDivisors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Raptor.TransactionType","name":"transactionType","type":"uint8"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"},{"internalType":"uint256","name":"_swapAndLiquifyFee","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"name":"updateFeesAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transaction","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"updateMaxLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_minLimit","type":"uint256"},{"internalType":"uint256","name":"_minTransactionsBeforeSwap","type":"uint256"}],"name":"updateSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_team1","type":"address"},{"internalType":"address","name":"_team2","type":"address"},{"internalType":"address","name":"_team3","type":"address"},{"internalType":"address","name":"_team4","type":"address"}],"name":"updateTeamAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_whitelist","type":"bool"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052612710620000156009600a62000759565b62000026906407aef40a0062000771565b620000349061012c62000771565b62000040919062000793565b600255612710620000546009600a62000759565b62000065906407aef40a0062000771565b620000739061012c62000771565b6200007f919062000793565b6003556009805460ff199081168255600c805490911690556005600e55600f805461ff001916610100179055620186a090620000bd90600a62000759565b620000ce906407aef40a0062000771565b620000dc9061012c62000771565b620000e8919062000793565b601055620186a0620000fd6009600a62000759565b6200010e906407aef40a0062000771565b6200011b90600f62000771565b62000127919062000793565b60115560006012556064601355600060145560646015553480156200014b57600080fd5b50600080546001600160a01b0319163390811782558152600160208181526040808420805460ff1916909317909255815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d9392849263c45a0155926004808401938290030181865afa158015620001c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ed9190620007b6565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002619190620007b6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d59190620007b6565b6001600160a01b03838116608090815290821660a0526040805180830182526000808252602080830182815260c884860181815260608087018381526001808852600b80885298517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf5594517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d05591517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d15590517f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5d2558651808901885285815280850186815281890184815282840194855287805288875291517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7655517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7755517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f785590517fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7955855196870186528387528683018481528787018581529188018581526002865295845296517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916345595517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916355594517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba916365591517fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba91637557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7805460ff199081168617909155338083526007909352838220805482168617905530808352939091208054909116909317909255601680546001600160a01b0319908116909217905560198054821683179055601a8054821683179055601b8054821683179055601c8054821683179055601780548216831790556018805490911690911790559050620005c66009600a62000759565b620005d7906407aef40a0062000771565b33600081815260046020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200061a6009600a62000759565b6200062b906407aef40a0062000771565b60405190815260200160405180910390a35050620007e1565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200069b5781600019048211156200067f576200067f62000644565b808516156200068d57918102915b93841c93908002906200065f565b509250929050565b600082620006b45750600162000753565b81620006c35750600062000753565b8160018114620006dc5760028114620006e75762000707565b600191505062000753565b60ff841115620006fb57620006fb62000644565b50506001821b62000753565b5060208310610133831016604e8410600b84101617156200072c575081810a62000753565b6200073883836200065a565b80600019048211156200074f576200074f62000644565b0290505b92915050565b60006200076a60ff841683620006a3565b9392505050565b60008160001904831182151516156200078e576200078e62000644565b500290565b600082620007b157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620007c957600080fd5b81516001600160a01b03811681146200076a57600080fd5b60805160a0516137aa620008856000396000818161069b01528181611115015281816112000152818161124b015281816112a001528181611319015281816113580152818161215c0152818161220c015281816122bb01526126f20152600081816107af0152818161103d015281816111370152818161224901528181612c0001528181612cb901528181612cf501528181612d6f0152612dd701526137aa6000f3fe60806040526004361061024a5760003560e01c8063706f693711610139578063a9059cbb116100b6578063f2fde38b1161007a578063f2fde38b1461075d578063f319ae771461077d578063f887ea401461079d578063fac1b9bc146107d1578063fc5ea5e6146107f1578063fe9fbb801461081157600080fd5b8063a9059cbb146106bd578063b6a5d7de146106dd578063b9a45aac146106fd578063dd62ed3e1461071d578063f0b37c041461073d57600080fd5b80638da5cb5b116100fd5780638da5cb5b146105e65780638e5c3ad31461061e57806395d89b411461063e578063a457c2d714610669578063a8aa1b311461068957600080fd5b8063706f69371461054557806370a0823114610565578063715018a61461059b5780637d1db4a5146105b057806382aa7c68146105c657600080fd5b8063357c1354116101c7578063455a43961161018b578063455a4396146104bc5780634a5a863a146104dc578063569c9b33146104fc5780636b7f8b901461050f5780636c0a24eb1461052f57600080fd5b8063357c1354146103c157806339264b661461042357806339509351146104435780633bbac5791461046357806340005fbe1461049c57600080fd5b806323b872dd1161020e57806323b872dd146103215780632b112e49146103415780632f54bf6e14610356578063313ce567146103855780633385f9aa146103a157600080fd5b806306fdde0314610256578063095ea7b3146102975780630eefe44b146102c757806317700f01146102e957806318160ddd146102fe57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b506040805180820190915260068152652930b83a37b960d11b60208201525b60405161028e919061300b565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004613056565b610831565b604051901515815260200161028e565b3480156102d357600080fd5b506102e76102e2366004613096565b610848565b005b3480156102f557600080fd5b506102e76109af565b34801561030a57600080fd5b50610313610a54565b60405190815260200161028e565b34801561032d57600080fd5b506102b761033c3660046130cf565b610a76565b34801561034d57600080fd5b50610313610a99565b34801561036257600080fd5b506102b7610371366004613110565b6000546001600160a01b0391821691161490565b34801561039157600080fd5b506040516009815260200161028e565b3480156103ad57600080fd5b506102e76103bc36600461312d565b610aed565b3480156103cd57600080fd5b506104036103dc366004613189565b600b6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161028e565b34801561042f57600080fd5b506102e761043e3660046130cf565b610c46565b34801561044f57600080fd5b506102b761045e366004613056565b610d43565b34801561046f57600080fd5b506102b761047e366004613110565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104a857600080fd5b506102e76104b73660046131a4565b610d64565b3480156104c857600080fd5b506102e76104d73660046131fd565b610e80565b3480156104e857600080fd5b506102e76104f7366004613236565b610f39565b6102e761050a366004613262565b610fbc565b34801561051b57600080fd5b506102e761052a366004613299565b61140d565b34801561053b57600080fd5b5061031360035481565b34801561055157600080fd5b506102e7610560366004613302565b6114a9565b34801561057157600080fd5b50610313610580366004613110565b6001600160a01b031660009081526004602052604090205490565b3480156105a757600080fd5b506102e76116b3565b3480156105bc57600080fd5b5061031360025481565b3480156105d257600080fd5b506102e76105e136600461336e565b61171e565b3480156105f257600080fd5b50600054610606906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561062a57600080fd5b506102e7610639366004613387565b6117da565b34801561064a57600080fd5b50604080518082019091526002815261333360f01b6020820152610281565b34801561067557600080fd5b506102b7610684366004613056565b611866565b34801561069557600080fd5b506106067f000000000000000000000000000000000000000000000000000000000000000081565b3480156106c957600080fd5b506102b76106d8366004613056565b6118e0565b3480156106e957600080fd5b506102e76106f8366004613110565b6118ed565b34801561070957600080fd5b506102e76107183660046131fd565b611939565b34801561072957600080fd5b506103136107383660046133a8565b6119f2565b34801561074957600080fd5b506102e7610758366004613110565b611a1d565b34801561076957600080fd5b506102e7610778366004613110565b611a63565b34801561078957600080fd5b506102e76107983660046133d6565b611b1a565b3480156107a957600080fd5b506106067f000000000000000000000000000000000000000000000000000000000000000081565b3480156107dd57600080fd5b506102e76107ec3660046131fd565b611cb7565b3480156107fd57600080fd5b506102e761080c3660046133d6565b611d70565b34801561081d57600080fd5b506102b761082c366004613110565b611e7f565b600061083e338484611e9d565b5060015b92915050565b6000546001600160a01b0316331461087b5760405162461bcd60e51b8152600401610872906133f8565b60405180910390fd5b610893601461088d6127106003611fb9565b90611fc5565b6108a7826108a18686611fd1565b90611fd1565b11156108f55760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e2039392500000000006044820152606401610872565b6000600b600086600281111561090d5761090d613418565b600281111561091e5761091e613418565b815260208101919091526040016000206001810185905583815560028101839055905061094f826108a18686611fd1565b600382015584600281111561096657610966613418565b60408051868152602081018690529081018490527fb1a90344459b408c97dc6c9427767fbcdb7fdf83182ce17a8d019839e88e8b05906060015b60405180910390a25050505050565b6000546001600160a01b031633146109d95760405162461bcd60e51b8152600401610872906133f8565b60095460ff16610a1f5760405162461bcd60e51b8152602060048201526011602482015270416c72656164792064697361626c65642160781b6044820152606401610872565b6009805460ff191690556040517fbcb8b8fbdea8aa6dc4ae41213e4da81e605a3d1a56ed851b9355182321c0919090600090a1565b6000610a626009600a613528565b610a71906407aef40a00613537565b905090565b6000610a83843384611fdd565b610a8e848484612057565b5060015b9392505050565b61dead600090815260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd54610a7190610ad86009600a613528565b610ae7906407aef40a00613537565b906123fc565b610af633611e7f565b610b125760405162461bcd60e51b815260040161087290613556565b6001600160a01b038416610b385760405162461bcd60e51b81526004016108729061357b565b6001600160a01b038316610b5e5760405162461bcd60e51b81526004016108729061357b565b6001600160a01b038216610b845760405162461bcd60e51b81526004016108729061357b565b6001600160a01b038116610baa5760405162461bcd60e51b81526004016108729061357b565b601980546001600160a01b038681166001600160a01b03199283168117909355601a80548783169084168117909155601b80548784169085168117909155601c805493871693909416831790935560408051948552602085019190915283019190915260608201527f5e236cea420126c8c121f351414cc8f3a268d3e366008a30deb36003636cb5f6906080015b60405180910390a150505050565b610c4f33611e7f565b610c6b5760405162461bcd60e51b815260040161087290613556565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd691906135a1565b90506000610cea61271061088d8486611fb9565b9050610d006001600160a01b0386168583612408565b604080516001600160a01b038681168252602082018490528716917fc3770890217b5014eb50f7ffe9521ca4e970a55a8795d24ba3933f962440e1b891016109a0565b600061083e338484610d5533886119f2565b610d5f91906135ba565b611e9d565b610d6d33611e7f565b610d895760405162461bcd60e51b815260040161087290613556565b6001600160a01b038316610daf5760405162461bcd60e51b81526004016108729061357b565b6001600160a01b038216610dd55760405162461bcd60e51b81526004016108729061357b565b6001600160a01b038116610dfb5760405162461bcd60e51b81526004016108729061357b565b601880546001600160a01b038581166001600160a01b0319928316811790935560168054868316908416811790915560178054928616929093168217909255604080519384526020840192909252908201527ff4653be65455600571e0a73c497c13dd50347f1cd9ba7b16a1710b6184bb644c906060015b60405180910390a1505050565b610e8933611e7f565b610ea55760405162461bcd60e51b815260040161087290613556565b6001600160a01b03821660009081526008602052604090205481151560ff909116151503610ee55760405162461bcd60e51b8152600401610872906135d2565b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f4728de7c6a4e2755a2f42b3034ce94f4a011aaff9d1af55ed984db300dea942091a35050565b610f4233611e7f565b610f5e5760405162461bcd60e51b815260040161087290613556565b601483905560138290556012819055610f7b816108a18585611fd1565b60155560408051848152602081018490529081018290527fdb99cc69484cb3ee77f3036657c45f45b65191334cd61d9276977d3c9595ae3990606001610e73565b6000546001600160a01b03163314610fe65760405162461bcd60e51b8152600401610872906133f8565b826111cc57806110385760405162461bcd60e51b815260206004820152601b60248201527f43616e7420776974686472617720626e622066726f6d20706f6f6c00000000006044820152606401610872565b3491507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bd91906135f7565b6001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110f757600080fd5b505af115801561110b573d6000803e3d6000fd5b50505050506111c77f0000000000000000000000000000000000000000000000000000000000000000837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611193573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b791906135f7565b6001600160a01b03169190612408565b611356565b80156112965733600090815260046020526040812080548492906111f1908490613614565b90915550506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600460205260408120805484929061123e9084906135ba565b90915550506040518281527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169033906000805160206137558339815191529060200160405180910390a3611356565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260046020526040812080548492906112de908490613614565b909155505033600090815260046020526040812080548492906113029084906135ba565b909155505060405182815233906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906000805160206137558339815191529060200160405180910390a35b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113b157600080fd5b505af11580156113c5573d6000803e3d6000fd5b505050508015158315157fec46d2f046373c0e186ac781e1c6b18401e1b4dc15463c351938e04dd1027e7d8460405161140091815260200190565b60405180910390a3505050565b61141633611e7f565b6114325760405162461bcd60e51b815260040161087290613556565b801515600f60019054906101000a900460ff161515036114645760405162461bcd60e51b8152600401610872906135d2565b600f805461ff001916610100831515908102919091179091556040517f2f0beb716d08015c80504ade37e31a64305599dd9a32d0172637a4bf9726dbd090600090a250565b6114b233611e7f565b6114ce5760405162461bcd60e51b815260040161087290613556565b8281811461151e5760405162461bcd60e51b815260206004820152601760248201527f6172726179206c656e677468206d69736d6174636865640000000000000000006044820152606401610872565b6000805b8281101561164b5784848281811061153c5761153c61362b565b90506020020135600460008989858181106115595761155961362b565b905060200201602081019061156e9190613110565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461159d91906135ba565b9091555085905084828181106115b5576115b561362b565b90506020020135826115c791906135ba565b91508686828181106115db576115db61362b565b90506020020160208101906115f09190613110565b6001600160a01b03163360008051602061375583398151915287878581811061161b5761161b61362b565b9050602002013560405161163191815260200190565b60405180910390a38061164381613641565b915050611522565b50336000908152600460205260408120805483929061166b908490613614565b9091555050604080518381526020810183905233917f2b644e2cd640daf5b246ed5491ab2dfb5e8d9b4c6fd5398b985b5fbf1a0e25a4910160405180910390a2505050505050565b6116bc33611e7f565b6116d85760405162461bcd60e51b815260040161087290613556565b604051600081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1600080546001600160a01b0319169055565b61172733611e7f565b6117435760405162461bcd60e51b815260040161087290613556565b60095460ff16156117895760405162461bcd60e51b815260206004820152601060248201526f416c726561647920456e61626c65642160801b6044820152606401610872565b6009805460ff19166001179055600a546000036117ae576117aa4282611fd1565b600a555b6040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150565b6117e333611e7f565b6117ff5760405162461bcd60e51b815260040161087290613556565b600c805460ff191685151590811790915560108490556011839055600e82905560408051858152602081018590529081018390527feec54a1ebff8aabde12af12da4f2afccb0265aaf1d568498f7329cbae546850f9060600160405180910390a250505050565b60008061187333856119f2565b9050828110156118d35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610872565b610a8e3385858403611e9d565b600061083e338484612057565b6118f633611e7f565b6119125760405162461bcd60e51b815260040161087290613556565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61194233611e7f565b61195e5760405162461bcd60e51b815260040161087290613556565b6001600160a01b03821660009081526007602052604090205481151560ff90911615150361199e5760405162461bcd60e51b8152600401610872906135d2565b6001600160a01b038216600081815260076020526040808220805460ff191685151590811790915590519092917ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d91a35050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611a2633611e7f565b611a425760405162461bcd60e51b815260040161087290613556565b6001600160a01b03166000908152600160205260409020805460ff19169055565b611a6c33611e7f565b611a885760405162461bcd60e51b815260040161087290613556565b6001600160a01b038116611aae5760405162461bcd60e51b81526004016108729061357b565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b611b2333611e7f565b611b3f5760405162461bcd60e51b815260040161087290613556565b6001821015611ba35760405162461bcd60e51b815260206004820152602a60248201527f4d61782074786e206c696d69742063616e6e6f74206265206c657373207468616044820152696e20302e30303030312560b01b6064820152608401610872565b6207a120811015611c065760405162461bcd60e51b815260206004820152602760248201527f4d61782057616c6c6574206c696d69742063616e6e6f74206265206c657373206044820152667468616e20352560c81b6064820152608401610872565b60006298968083611c196009600a613528565b611c28906407aef40a00613537565b611c329190613537565b611c3c919061365a565b905060006298968083611c516009600a613528565b611c60906407aef40a00613537565b611c6a9190613537565b611c74919061365a565b6002839055600381905560408051848152602081018390529192507fb6cf947475d47632612a3265c7bc83f5cfed7429546220bfb088c3634f91c2299101610c38565b611cc033611e7f565b611cdc5760405162461bcd60e51b815260040161087290613556565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503611d1c5760405162461bcd60e51b8152600401610872906135d2565b6001600160a01b038216600081815260066020526040808220805460ff191685151590811790915590519092917f1c6168ae13717a8cda4e1c9276a36c39333240268ba173a5a844201a8f4baa9991a35050565b611d7933611e7f565b611d955760405162461bcd60e51b815260040161087290613556565b476000611da68361088d8487611fb9565b90506000611db5826004611fc5565b601954909150611dce906001600160a01b03168261245f565b601a54611de4906001600160a01b03168261245f565b601b54611dfa906001600160a01b03168261245f565b601c54611e10906001600160a01b03168261245f565b601954601a54601b54601c54604080516001600160a01b0395861681529385166020850152918416838301529290921660608201526080810184905290517fa08f91be8aba9066a7bc396851b6d781cef0ae989dbcab9c649d4c6bceb3bee99181900360a00190a15050505050565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b038316611eff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610872565b6001600160a01b038216611f605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610872565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611400565b6000610a928284613537565b6000610a92828461365a565b6000610a9282846135ba565b6000611fe984846119f2565b9050600019811461205157818110156120445760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610872565b6120518484848403611e9d565b50505050565b612062838383612503565b6001600160a01b03831660009081526007602052604090205460019060ff16806120a457506001600160a01b03831660009081526007602052604090205460ff165b156120b157506000612208565b60095460ff166120f75760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc814185d5cd959607a1b6044820152606401610872565b60025482111561215a5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610872565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614612208576003546001600160a01b0384166000908152600460205260409020546121ba9084906135ba565b11156122085760405162461bcd60e51b815260206004820152601b60248201527f57616c6c657420616d6f756e742065786365656473206c696d697400000000006044820152606401610872565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316036122b957600090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415801561228b5750600a544211155b156122b4576001600160a01b0384166000908152600660205260409020805460ff191660011790555b6122fe565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316036122fa575060016122fe565b5060025b600d5461230c906001611fd1565b600d556123198584612693565b1561232f57612329601054612730565b6000600d555b6001600160a01b03851660009081526004602052604090205461235290846123fc565b6001600160a01b038616600090815260046020526040812091909155826123795783612384565b612384868584612811565b6001600160a01b0386166000908152600460205260409020549091506123aa9082611fd1565b6001600160a01b038087166000818152600460205260409081902093909355915190881690600080516020613755833981519152906123ec9085815260200190565b60405180910390a3505050505050565b6000610a928284613614565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261245a908490612ad7565b505050565b8060000361246b575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146124b8576040519150601f19603f3d011682016040523d82523d6000602084013e6124bd565b606091505b505090508061245a5760405162461bcd60e51b81526020600482015260126024820152710aadcc2c4d8ca40e8de40e6cadcc8408aa8960731b6044820152606401610872565b6001600160a01b03831660009081526008602052604090205460ff16156125595760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b6044820152606401610872565b6001600160a01b03821660009081526008602052604090205460ff16156125af5760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b6044820152606401610872565b600081116126115760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610872565b6001600160a01b03831660009081526004602052604090205481111561245a5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610872565b60115460105430600090815260046020526040812054600f5491938510159211159060ff161580156126c75750600c5460ff165b80156126d05750815b80156126e05750600e54600d5410155b80156126e95750805b801561272757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b95945050505050565b600f805460ff1916600117905560155460135460009161275a9160029161088d9182908790611fb9565b9050600061276883836123fc565b90504761277482612ba9565b600061278047836123fc565b905060006127a661279d6002601354611fc590919063ffffffff16565b601554906123fc565b905084156127d5576127d5856127d0600261088d8561088d60135489611fb990919063ffffffff16565b612d69565b6018546012546127ff916001600160a01b0316906127fa90849061088d908790611fb9565b61245f565b5050600f805460ff1916905550505050565b600080600b600084600281111561282a5761282a613418565b600281111561283b5761283b613418565b81526020808201929092526040908101600090812082516080810184528154815260018201548186015260028201548185015260039091015460608201526001600160a01b03891682526006909352908120549192509060ff1680156128a85750600f54610100900460ff165b6128b65781606001516128c3565b6128c36064612710613614565b9050806000036128d7578492505050610a92565b60006128e961271061088d8885611fb9565b905060006129088361088d866020015185611fb990919063ffffffff16565b905060006129278461088d876000015186611fb990919063ffffffff16565b9050600061293982610ae786866123fc565b905082156129de5761dead60005260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd546129789084611fd1565b61dead600081905260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd919091556040516001600160a01b038c1690600080516020613755833981519152906129d59087815260200190565b60405180910390a35b8115612a57576017546001600160a01b0316600090815260046020526040902054612a099083611fd1565b601780546001600160a01b03908116600090815260046020908152604091829020949094559154915185815291811692908d1691600080516020613755833981519152910160405180910390a35b8015612abf5730600090815260046020526040902054612a779082611fd1565b30600081815260046020526040908190209290925590516001600160a01b038c169060008051602061375583398151915290612ab69085815260200190565b60405180910390a35b612ac989856123fc565b9a9950505050505050505050565b6000612b2c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612e4f9092919063ffffffff16565b80519091501561245a5780806020019051810190612b4a919061367c565b61245a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610872565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bde57612bde61362b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8091906135f7565b81600181518110612c9357612c9361362b565b60200260200101906001600160a01b031690816001600160a01b031681525050612cde307f000000000000000000000000000000000000000000000000000000000000000084611e9d565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612d33908590600090869030904290600401613699565b600060405180830381600087803b158015612d4d57600080fd5b505af1158015612d61573d6000803e3d6000fd5b505050505050565b612d94307f000000000000000000000000000000000000000000000000000000000000000084611e9d565b60165460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af1158015612e23573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e48919061370a565b5050505050565b6060612e5e8484600085612e66565b949350505050565b606082471015612ec75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610872565b600080866001600160a01b03168587604051612ee39190613738565b60006040518083038185875af1925050503d8060008114612f20576040519150601f19603f3d011682016040523d82523d6000602084013e612f25565b606091505b5091509150612f3687838387612f41565b979650505050505050565b60608315612fb0578251600003612fa9576001600160a01b0385163b612fa95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610872565b5081612e5e565b612e5e8383815115612fc55781518083602001fd5b8060405162461bcd60e51b8152600401610872919061300b565b60005b83811015612ffa578181015183820152602001612fe2565b838111156120515750506000910152565b602081526000825180602084015261302a816040850160208701612fdf565b601f01601f19169190910160400192915050565b6001600160a01b038116811461305357600080fd5b50565b6000806040838503121561306957600080fd5b82356130748161303e565b946020939093013593505050565b80356003811061309157600080fd5b919050565b600080600080608085870312156130ac57600080fd5b6130b585613082565b966020860135965060408601359560600135945092505050565b6000806000606084860312156130e457600080fd5b83356130ef8161303e565b925060208401356130ff8161303e565b929592945050506040919091013590565b60006020828403121561312257600080fd5b8135610a928161303e565b6000806000806080858703121561314357600080fd5b843561314e8161303e565b9350602085013561315e8161303e565b9250604085013561316e8161303e565b9150606085013561317e8161303e565b939692955090935050565b60006020828403121561319b57600080fd5b610a9282613082565b6000806000606084860312156131b957600080fd5b83356131c48161303e565b925060208401356131d48161303e565b915060408401356131e48161303e565b809150509250925092565b801515811461305357600080fd5b6000806040838503121561321057600080fd5b823561321b8161303e565b9150602083013561322b816131ef565b809150509250929050565b60008060006060848603121561324b57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561327757600080fd5b8335613282816131ef565b92506020840135915060408401356131e4816131ef565b6000602082840312156132ab57600080fd5b8135610a92816131ef565b60008083601f8401126132c857600080fd5b50813567ffffffffffffffff8111156132e057600080fd5b6020830191508360208260051b85010111156132fb57600080fd5b9250929050565b6000806000806040858703121561331857600080fd5b843567ffffffffffffffff8082111561333057600080fd5b61333c888389016132b6565b9096509450602087013591508082111561335557600080fd5b50613362878288016132b6565b95989497509550505050565b60006020828403121561338057600080fd5b5035919050565b6000806000806080858703121561339d57600080fd5b84356130b5816131ef565b600080604083850312156133bb57600080fd5b82356133c68161303e565b9150602083013561322b8161303e565b600080604083850312156133e957600080fd5b50508035926020909101359150565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561347f5781600019048211156134655761346561342e565b8085161561347257918102915b93841c9390800290613449565b509250929050565b60008261349657506001610842565b816134a357506000610842565b81600181146134b957600281146134c3576134df565b6001915050610842565b60ff8411156134d4576134d461342e565b50506001821b610842565b5060208310610133831016604e8410600b8410161715613502575081810a610842565b61350c8383613444565b80600019048211156135205761352061342e565b029392505050565b6000610a9260ff841683613487565b60008160001904831182151516156135515761355161342e565b500290565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b6000602082840312156135b357600080fd5b5051919050565b600082198211156135cd576135cd61342e565b500190565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b60006020828403121561360957600080fd5b8151610a928161303e565b6000828210156136265761362661342e565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600182016136535761365361342e565b5060010190565b60008261367757634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561368e57600080fd5b8151610a92816131ef565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136e95784516001600160a01b0316835293830193918301916001016136c4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561371f57600080fd5b8351925060208401519150604084015190509250925092565b6000825161374a818460208701612fdf565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122055ab913cf638afbf6b854d20681484779dad9e90024b0a7e2f28b72c290036d064736f6c634300080e0033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c8063706f693711610139578063a9059cbb116100b6578063f2fde38b1161007a578063f2fde38b1461075d578063f319ae771461077d578063f887ea401461079d578063fac1b9bc146107d1578063fc5ea5e6146107f1578063fe9fbb801461081157600080fd5b8063a9059cbb146106bd578063b6a5d7de146106dd578063b9a45aac146106fd578063dd62ed3e1461071d578063f0b37c041461073d57600080fd5b80638da5cb5b116100fd5780638da5cb5b146105e65780638e5c3ad31461061e57806395d89b411461063e578063a457c2d714610669578063a8aa1b311461068957600080fd5b8063706f69371461054557806370a0823114610565578063715018a61461059b5780637d1db4a5146105b057806382aa7c68146105c657600080fd5b8063357c1354116101c7578063455a43961161018b578063455a4396146104bc5780634a5a863a146104dc578063569c9b33146104fc5780636b7f8b901461050f5780636c0a24eb1461052f57600080fd5b8063357c1354146103c157806339264b661461042357806339509351146104435780633bbac5791461046357806340005fbe1461049c57600080fd5b806323b872dd1161020e57806323b872dd146103215780632b112e49146103415780632f54bf6e14610356578063313ce567146103855780633385f9aa146103a157600080fd5b806306fdde0314610256578063095ea7b3146102975780630eefe44b146102c757806317700f01146102e957806318160ddd146102fe57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b506040805180820190915260068152652930b83a37b960d11b60208201525b60405161028e919061300b565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004613056565b610831565b604051901515815260200161028e565b3480156102d357600080fd5b506102e76102e2366004613096565b610848565b005b3480156102f557600080fd5b506102e76109af565b34801561030a57600080fd5b50610313610a54565b60405190815260200161028e565b34801561032d57600080fd5b506102b761033c3660046130cf565b610a76565b34801561034d57600080fd5b50610313610a99565b34801561036257600080fd5b506102b7610371366004613110565b6000546001600160a01b0391821691161490565b34801561039157600080fd5b506040516009815260200161028e565b3480156103ad57600080fd5b506102e76103bc36600461312d565b610aed565b3480156103cd57600080fd5b506104036103dc366004613189565b600b6020526000908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161028e565b34801561042f57600080fd5b506102e761043e3660046130cf565b610c46565b34801561044f57600080fd5b506102b761045e366004613056565b610d43565b34801561046f57600080fd5b506102b761047e366004613110565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104a857600080fd5b506102e76104b73660046131a4565b610d64565b3480156104c857600080fd5b506102e76104d73660046131fd565b610e80565b3480156104e857600080fd5b506102e76104f7366004613236565b610f39565b6102e761050a366004613262565b610fbc565b34801561051b57600080fd5b506102e761052a366004613299565b61140d565b34801561053b57600080fd5b5061031360035481565b34801561055157600080fd5b506102e7610560366004613302565b6114a9565b34801561057157600080fd5b50610313610580366004613110565b6001600160a01b031660009081526004602052604090205490565b3480156105a757600080fd5b506102e76116b3565b3480156105bc57600080fd5b5061031360025481565b3480156105d257600080fd5b506102e76105e136600461336e565b61171e565b3480156105f257600080fd5b50600054610606906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561062a57600080fd5b506102e7610639366004613387565b6117da565b34801561064a57600080fd5b50604080518082019091526002815261333360f01b6020820152610281565b34801561067557600080fd5b506102b7610684366004613056565b611866565b34801561069557600080fd5b506106067f000000000000000000000000628f236717f9ef08bb0a919bcf34d2f5e01b3b6f81565b3480156106c957600080fd5b506102b76106d8366004613056565b6118e0565b3480156106e957600080fd5b506102e76106f8366004613110565b6118ed565b34801561070957600080fd5b506102e76107183660046131fd565b611939565b34801561072957600080fd5b506103136107383660046133a8565b6119f2565b34801561074957600080fd5b506102e7610758366004613110565b611a1d565b34801561076957600080fd5b506102e7610778366004613110565b611a63565b34801561078957600080fd5b506102e76107983660046133d6565b611b1a565b3480156107a957600080fd5b506106067f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156107dd57600080fd5b506102e76107ec3660046131fd565b611cb7565b3480156107fd57600080fd5b506102e761080c3660046133d6565b611d70565b34801561081d57600080fd5b506102b761082c366004613110565b611e7f565b600061083e338484611e9d565b5060015b92915050565b6000546001600160a01b0316331461087b5760405162461bcd60e51b8152600401610872906133f8565b60405180910390fd5b610893601461088d6127106003611fb9565b90611fc5565b6108a7826108a18686611fd1565b90611fd1565b11156108f55760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e2039392500000000006044820152606401610872565b6000600b600086600281111561090d5761090d613418565b600281111561091e5761091e613418565b815260208101919091526040016000206001810185905583815560028101839055905061094f826108a18686611fd1565b600382015584600281111561096657610966613418565b60408051868152602081018690529081018490527fb1a90344459b408c97dc6c9427767fbcdb7fdf83182ce17a8d019839e88e8b05906060015b60405180910390a25050505050565b6000546001600160a01b031633146109d95760405162461bcd60e51b8152600401610872906133f8565b60095460ff16610a1f5760405162461bcd60e51b8152602060048201526011602482015270416c72656164792064697361626c65642160781b6044820152606401610872565b6009805460ff191690556040517fbcb8b8fbdea8aa6dc4ae41213e4da81e605a3d1a56ed851b9355182321c0919090600090a1565b6000610a626009600a613528565b610a71906407aef40a00613537565b905090565b6000610a83843384611fdd565b610a8e848484612057565b5060015b9392505050565b61dead600090815260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd54610a7190610ad86009600a613528565b610ae7906407aef40a00613537565b906123fc565b610af633611e7f565b610b125760405162461bcd60e51b815260040161087290613556565b6001600160a01b038416610b385760405162461bcd60e51b81526004016108729061357b565b6001600160a01b038316610b5e5760405162461bcd60e51b81526004016108729061357b565b6001600160a01b038216610b845760405162461bcd60e51b81526004016108729061357b565b6001600160a01b038116610baa5760405162461bcd60e51b81526004016108729061357b565b601980546001600160a01b038681166001600160a01b03199283168117909355601a80548783169084168117909155601b80548784169085168117909155601c805493871693909416831790935560408051948552602085019190915283019190915260608201527f5e236cea420126c8c121f351414cc8f3a268d3e366008a30deb36003636cb5f6906080015b60405180910390a150505050565b610c4f33611e7f565b610c6b5760405162461bcd60e51b815260040161087290613556565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd691906135a1565b90506000610cea61271061088d8486611fb9565b9050610d006001600160a01b0386168583612408565b604080516001600160a01b038681168252602082018490528716917fc3770890217b5014eb50f7ffe9521ca4e970a55a8795d24ba3933f962440e1b891016109a0565b600061083e338484610d5533886119f2565b610d5f91906135ba565b611e9d565b610d6d33611e7f565b610d895760405162461bcd60e51b815260040161087290613556565b6001600160a01b038316610daf5760405162461bcd60e51b81526004016108729061357b565b6001600160a01b038216610dd55760405162461bcd60e51b81526004016108729061357b565b6001600160a01b038116610dfb5760405162461bcd60e51b81526004016108729061357b565b601880546001600160a01b038581166001600160a01b0319928316811790935560168054868316908416811790915560178054928616929093168217909255604080519384526020840192909252908201527ff4653be65455600571e0a73c497c13dd50347f1cd9ba7b16a1710b6184bb644c906060015b60405180910390a1505050565b610e8933611e7f565b610ea55760405162461bcd60e51b815260040161087290613556565b6001600160a01b03821660009081526008602052604090205481151560ff909116151503610ee55760405162461bcd60e51b8152600401610872906135d2565b6001600160a01b038216600081815260086020526040808220805460ff191685151590811790915590519092917f4728de7c6a4e2755a2f42b3034ce94f4a011aaff9d1af55ed984db300dea942091a35050565b610f4233611e7f565b610f5e5760405162461bcd60e51b815260040161087290613556565b601483905560138290556012819055610f7b816108a18585611fd1565b60155560408051848152602081018490529081018290527fdb99cc69484cb3ee77f3036657c45f45b65191334cd61d9276977d3c9595ae3990606001610e73565b6000546001600160a01b03163314610fe65760405162461bcd60e51b8152600401610872906133f8565b826111cc57806110385760405162461bcd60e51b815260206004820152601b60248201527f43616e7420776974686472617720626e622066726f6d20706f6f6c00000000006044820152606401610872565b3491507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611099573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bd91906135f7565b6001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110f757600080fd5b505af115801561110b573d6000803e3d6000fd5b50505050506111c77f000000000000000000000000628f236717f9ef08bb0a919bcf34d2f5e01b3b6f837f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611193573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b791906135f7565b6001600160a01b03169190612408565b611356565b80156112965733600090815260046020526040812080548492906111f1908490613614565b90915550506001600160a01b037f000000000000000000000000628f236717f9ef08bb0a919bcf34d2f5e01b3b6f166000908152600460205260408120805484929061123e9084906135ba565b90915550506040518281527f000000000000000000000000628f236717f9ef08bb0a919bcf34d2f5e01b3b6f6001600160a01b03169033906000805160206137558339815191529060200160405180910390a3611356565b6001600160a01b037f000000000000000000000000628f236717f9ef08bb0a919bcf34d2f5e01b3b6f16600090815260046020526040812080548492906112de908490613614565b909155505033600090815260046020526040812080548492906113029084906135ba565b909155505060405182815233906001600160a01b037f000000000000000000000000628f236717f9ef08bb0a919bcf34d2f5e01b3b6f16906000805160206137558339815191529060200160405180910390a35b7f000000000000000000000000628f236717f9ef08bb0a919bcf34d2f5e01b3b6f6001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113b157600080fd5b505af11580156113c5573d6000803e3d6000fd5b505050508015158315157fec46d2f046373c0e186ac781e1c6b18401e1b4dc15463c351938e04dd1027e7d8460405161140091815260200190565b60405180910390a3505050565b61141633611e7f565b6114325760405162461bcd60e51b815260040161087290613556565b801515600f60019054906101000a900460ff161515036114645760405162461bcd60e51b8152600401610872906135d2565b600f805461ff001916610100831515908102919091179091556040517f2f0beb716d08015c80504ade37e31a64305599dd9a32d0172637a4bf9726dbd090600090a250565b6114b233611e7f565b6114ce5760405162461bcd60e51b815260040161087290613556565b8281811461151e5760405162461bcd60e51b815260206004820152601760248201527f6172726179206c656e677468206d69736d6174636865640000000000000000006044820152606401610872565b6000805b8281101561164b5784848281811061153c5761153c61362b565b90506020020135600460008989858181106115595761155961362b565b905060200201602081019061156e9190613110565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461159d91906135ba565b9091555085905084828181106115b5576115b561362b565b90506020020135826115c791906135ba565b91508686828181106115db576115db61362b565b90506020020160208101906115f09190613110565b6001600160a01b03163360008051602061375583398151915287878581811061161b5761161b61362b565b9050602002013560405161163191815260200190565b60405180910390a38061164381613641565b915050611522565b50336000908152600460205260408120805483929061166b908490613614565b9091555050604080518381526020810183905233917f2b644e2cd640daf5b246ed5491ab2dfb5e8d9b4c6fd5398b985b5fbf1a0e25a4910160405180910390a2505050505050565b6116bc33611e7f565b6116d85760405162461bcd60e51b815260040161087290613556565b604051600081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1600080546001600160a01b0319169055565b61172733611e7f565b6117435760405162461bcd60e51b815260040161087290613556565b60095460ff16156117895760405162461bcd60e51b815260206004820152601060248201526f416c726561647920456e61626c65642160801b6044820152606401610872565b6009805460ff19166001179055600a546000036117ae576117aa4282611fd1565b600a555b6040517f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c790600090a150565b6117e333611e7f565b6117ff5760405162461bcd60e51b815260040161087290613556565b600c805460ff191685151590811790915560108490556011839055600e82905560408051858152602081018590529081018390527feec54a1ebff8aabde12af12da4f2afccb0265aaf1d568498f7329cbae546850f9060600160405180910390a250505050565b60008061187333856119f2565b9050828110156118d35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610872565b610a8e3385858403611e9d565b600061083e338484612057565b6118f633611e7f565b6119125760405162461bcd60e51b815260040161087290613556565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b61194233611e7f565b61195e5760405162461bcd60e51b815260040161087290613556565b6001600160a01b03821660009081526007602052604090205481151560ff90911615150361199e5760405162461bcd60e51b8152600401610872906135d2565b6001600160a01b038216600081815260076020526040808220805460ff191685151590811790915590519092917ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d91a35050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611a2633611e7f565b611a425760405162461bcd60e51b815260040161087290613556565b6001600160a01b03166000908152600160205260409020805460ff19169055565b611a6c33611e7f565b611a885760405162461bcd60e51b815260040161087290613556565b6001600160a01b038116611aae5760405162461bcd60e51b81526004016108729061357b565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b611b2333611e7f565b611b3f5760405162461bcd60e51b815260040161087290613556565b6001821015611ba35760405162461bcd60e51b815260206004820152602a60248201527f4d61782074786e206c696d69742063616e6e6f74206265206c657373207468616044820152696e20302e30303030312560b01b6064820152608401610872565b6207a120811015611c065760405162461bcd60e51b815260206004820152602760248201527f4d61782057616c6c6574206c696d69742063616e6e6f74206265206c657373206044820152667468616e20352560c81b6064820152608401610872565b60006298968083611c196009600a613528565b611c28906407aef40a00613537565b611c329190613537565b611c3c919061365a565b905060006298968083611c516009600a613528565b611c60906407aef40a00613537565b611c6a9190613537565b611c74919061365a565b6002839055600381905560408051848152602081018390529192507fb6cf947475d47632612a3265c7bc83f5cfed7429546220bfb088c3634f91c2299101610c38565b611cc033611e7f565b611cdc5760405162461bcd60e51b815260040161087290613556565b6001600160a01b03821660009081526006602052604090205481151560ff909116151503611d1c5760405162461bcd60e51b8152600401610872906135d2565b6001600160a01b038216600081815260066020526040808220805460ff191685151590811790915590519092917f1c6168ae13717a8cda4e1c9276a36c39333240268ba173a5a844201a8f4baa9991a35050565b611d7933611e7f565b611d955760405162461bcd60e51b815260040161087290613556565b476000611da68361088d8487611fb9565b90506000611db5826004611fc5565b601954909150611dce906001600160a01b03168261245f565b601a54611de4906001600160a01b03168261245f565b601b54611dfa906001600160a01b03168261245f565b601c54611e10906001600160a01b03168261245f565b601954601a54601b54601c54604080516001600160a01b0395861681529385166020850152918416838301529290921660608201526080810184905290517fa08f91be8aba9066a7bc396851b6d781cef0ae989dbcab9c649d4c6bceb3bee99181900360a00190a15050505050565b6001600160a01b031660009081526001602052604090205460ff1690565b6001600160a01b038316611eff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610872565b6001600160a01b038216611f605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610872565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611400565b6000610a928284613537565b6000610a92828461365a565b6000610a9282846135ba565b6000611fe984846119f2565b9050600019811461205157818110156120445760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610872565b6120518484848403611e9d565b50505050565b612062838383612503565b6001600160a01b03831660009081526007602052604090205460019060ff16806120a457506001600160a01b03831660009081526007602052604090205460ff165b156120b157506000612208565b60095460ff166120f75760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc814185d5cd959607a1b6044820152606401610872565b60025482111561215a5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610872565b7f000000000000000000000000628f236717f9ef08bb0a919bcf34d2f5e01b3b6f6001600160a01b0316836001600160a01b031614612208576003546001600160a01b0384166000908152600460205260409020546121ba9084906135ba565b11156122085760405162461bcd60e51b815260206004820152601b60248201527f57616c6c657420616d6f756e742065786365656473206c696d697400000000006044820152606401610872565b60007f000000000000000000000000628f236717f9ef08bb0a919bcf34d2f5e01b3b6f6001600160a01b0316856001600160a01b0316036122b957600090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316846001600160a01b03161415801561228b5750600a544211155b156122b4576001600160a01b0384166000908152600660205260409020805460ff191660011790555b6122fe565b7f000000000000000000000000628f236717f9ef08bb0a919bcf34d2f5e01b3b6f6001600160a01b0316846001600160a01b0316036122fa575060016122fe565b5060025b600d5461230c906001611fd1565b600d556123198584612693565b1561232f57612329601054612730565b6000600d555b6001600160a01b03851660009081526004602052604090205461235290846123fc565b6001600160a01b038616600090815260046020526040812091909155826123795783612384565b612384868584612811565b6001600160a01b0386166000908152600460205260409020549091506123aa9082611fd1565b6001600160a01b038087166000818152600460205260409081902093909355915190881690600080516020613755833981519152906123ec9085815260200190565b60405180910390a3505050505050565b6000610a928284613614565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261245a908490612ad7565b505050565b8060000361246b575050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146124b8576040519150601f19603f3d011682016040523d82523d6000602084013e6124bd565b606091505b505090508061245a5760405162461bcd60e51b81526020600482015260126024820152710aadcc2c4d8ca40e8de40e6cadcc8408aa8960731b6044820152606401610872565b6001600160a01b03831660009081526008602052604090205460ff16156125595760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b6044820152606401610872565b6001600160a01b03821660009081526008602052604090205460ff16156125af5760405162461bcd60e51b815260206004820152600a602482015269109b1858dada5cdd195960b21b6044820152606401610872565b600081116126115760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610872565b6001600160a01b03831660009081526004602052604090205481111561245a5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610872565b60115460105430600090815260046020526040812054600f5491938510159211159060ff161580156126c75750600c5460ff165b80156126d05750815b80156126e05750600e54600d5410155b80156126e95750805b801561272757507f000000000000000000000000628f236717f9ef08bb0a919bcf34d2f5e01b3b6f6001600160a01b0316856001600160a01b031614155b95945050505050565b600f805460ff1916600117905560155460135460009161275a9160029161088d9182908790611fb9565b9050600061276883836123fc565b90504761277482612ba9565b600061278047836123fc565b905060006127a661279d6002601354611fc590919063ffffffff16565b601554906123fc565b905084156127d5576127d5856127d0600261088d8561088d60135489611fb990919063ffffffff16565b612d69565b6018546012546127ff916001600160a01b0316906127fa90849061088d908790611fb9565b61245f565b5050600f805460ff1916905550505050565b600080600b600084600281111561282a5761282a613418565b600281111561283b5761283b613418565b81526020808201929092526040908101600090812082516080810184528154815260018201548186015260028201548185015260039091015460608201526001600160a01b03891682526006909352908120549192509060ff1680156128a85750600f54610100900460ff165b6128b65781606001516128c3565b6128c36064612710613614565b9050806000036128d7578492505050610a92565b60006128e961271061088d8885611fb9565b905060006129088361088d866020015185611fb990919063ffffffff16565b905060006129278461088d876000015186611fb990919063ffffffff16565b9050600061293982610ae786866123fc565b905082156129de5761dead60005260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd546129789084611fd1565b61dead600081905260046020527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd919091556040516001600160a01b038c1690600080516020613755833981519152906129d59087815260200190565b60405180910390a35b8115612a57576017546001600160a01b0316600090815260046020526040902054612a099083611fd1565b601780546001600160a01b03908116600090815260046020908152604091829020949094559154915185815291811692908d1691600080516020613755833981519152910160405180910390a35b8015612abf5730600090815260046020526040902054612a779082611fd1565b30600081815260046020526040908190209290925590516001600160a01b038c169060008051602061375583398151915290612ab69085815260200190565b60405180910390a35b612ac989856123fc565b9a9950505050505050505050565b6000612b2c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612e4f9092919063ffffffff16565b80519091501561245a5780806020019051810190612b4a919061367c565b61245a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610872565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bde57612bde61362b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8091906135f7565b81600181518110612c9357612c9361362b565b60200260200101906001600160a01b031690816001600160a01b031681525050612cde307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e9d565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612d33908590600090869030904290600401613699565b600060405180830381600087803b158015612d4d57600080fd5b505af1158015612d61573d6000803e3d6000fd5b505050505050565b612d94307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e9d565b60165460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af1158015612e23573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e48919061370a565b5050505050565b6060612e5e8484600085612e66565b949350505050565b606082471015612ec75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610872565b600080866001600160a01b03168587604051612ee39190613738565b60006040518083038185875af1925050503d8060008114612f20576040519150601f19603f3d011682016040523d82523d6000602084013e612f25565b606091505b5091509150612f3687838387612f41565b979650505050505050565b60608315612fb0578251600003612fa9576001600160a01b0385163b612fa95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610872565b5081612e5e565b612e5e8383815115612fc55781518083602001fd5b8060405162461bcd60e51b8152600401610872919061300b565b60005b83811015612ffa578181015183820152602001612fe2565b838111156120515750506000910152565b602081526000825180602084015261302a816040850160208701612fdf565b601f01601f19169190910160400192915050565b6001600160a01b038116811461305357600080fd5b50565b6000806040838503121561306957600080fd5b82356130748161303e565b946020939093013593505050565b80356003811061309157600080fd5b919050565b600080600080608085870312156130ac57600080fd5b6130b585613082565b966020860135965060408601359560600135945092505050565b6000806000606084860312156130e457600080fd5b83356130ef8161303e565b925060208401356130ff8161303e565b929592945050506040919091013590565b60006020828403121561312257600080fd5b8135610a928161303e565b6000806000806080858703121561314357600080fd5b843561314e8161303e565b9350602085013561315e8161303e565b9250604085013561316e8161303e565b9150606085013561317e8161303e565b939692955090935050565b60006020828403121561319b57600080fd5b610a9282613082565b6000806000606084860312156131b957600080fd5b83356131c48161303e565b925060208401356131d48161303e565b915060408401356131e48161303e565b809150509250925092565b801515811461305357600080fd5b6000806040838503121561321057600080fd5b823561321b8161303e565b9150602083013561322b816131ef565b809150509250929050565b60008060006060848603121561324b57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561327757600080fd5b8335613282816131ef565b92506020840135915060408401356131e4816131ef565b6000602082840312156132ab57600080fd5b8135610a92816131ef565b60008083601f8401126132c857600080fd5b50813567ffffffffffffffff8111156132e057600080fd5b6020830191508360208260051b85010111156132fb57600080fd5b9250929050565b6000806000806040858703121561331857600080fd5b843567ffffffffffffffff8082111561333057600080fd5b61333c888389016132b6565b9096509450602087013591508082111561335557600080fd5b50613362878288016132b6565b95989497509550505050565b60006020828403121561338057600080fd5b5035919050565b6000806000806080858703121561339d57600080fd5b84356130b5816131ef565b600080604083850312156133bb57600080fd5b82356133c68161303e565b9150602083013561322b8161303e565b600080604083850312156133e957600080fd5b50508035926020909101359150565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561347f5781600019048211156134655761346561342e565b8085161561347257918102915b93841c9390800290613449565b509250929050565b60008261349657506001610842565b816134a357506000610842565b81600181146134b957600281146134c3576134df565b6001915050610842565b60ff8411156134d4576134d461342e565b50506001821b610842565b5060208310610133831016604e8410600b8410161715613502575081810a610842565b61350c8383613444565b80600019048211156135205761352061342e565b029392505050565b6000610a9260ff841683613487565b60008160001904831182151516156135515761355161342e565b500290565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b6000602082840312156135b357600080fd5b5051919050565b600082198211156135cd576135cd61342e565b500190565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b60006020828403121561360957600080fd5b8151610a928161303e565b6000828210156136265761362661342e565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600182016136535761365361342e565b5060010190565b60008261367757634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561368e57600080fd5b8151610a92816131ef565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136e95784516001600160a01b0316835293830193918301916001016136c4565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561371f57600080fd5b8351925060208401519150604084015190509250925092565b6000825161374a818460208701612fdf565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122055ab913cf638afbf6b854d20681484779dad9e90024b0a7e2f28b72c290036d064736f6c634300080e0033

Deployed Bytecode Sourcemap

13790:19825:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18228:67;;;;;;;;;;-1:-1:-1;18288:5:0;;;;;;;;;;;;-1:-1:-1;;;18288:5:0;;;;18228:67;;;;;;;:::i;:::-;;;;;;;;19040:159;;;;;;;;;;-1:-1:-1;19040:159:0;;;;;:::i;:::-;;:::i;:::-;;;1286:14:1;;1279:22;1261:41;;1249:2;1234:18;19040:159:0;1121:187:1;28201:614:0;;;;;;;;;;-1:-1:-1;28201:614:0;;;;;:::i;:::-;;:::i;:::-;;20645:176;;;;;;;;;;;;;:::i;18451:84::-;;;;;;;;;;;;;:::i;:::-;;;2049:25:1;;;2037:2;2022:18;18451:84:0;1903:177:1;21274:249:0;;;;;;;;;;-1:-1:-1;21274:249:0;;;;;:::i;:::-;;:::i;19211:121::-;;;;;;;;;;;;;:::i;11979:103::-;;;;;;;;;;-1:-1:-1;11979:103:0;;;;;:::i;:::-;12034:4;12069:5;-1:-1:-1;;;;;12058:16:0;;;12069:5;;12058:16;;11979:103;18378:67;;;;;;;;;;-1:-1:-1;18378:67:0;;14025:1;2940:36:1;;2928:2;2913:18;18378:67:0;2798:184:1;29319:552:0;;;;;;;;;;-1:-1:-1;29319:552:0;;;;;:::i;:::-;;:::i;14995:44::-;;;;;;;;;;-1:-1:-1;14995:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4118:25:1;;;4174:2;4159:18;;4152:34;;;;4202:18;;;4195:34;4260:2;4245:18;;4238:34;4105:3;4090:19;14995:44:0;3887:391:1;26808:404:0;;;;;;;;;;-1:-1:-1;26808:404:0;;;;;:::i;:::-;;:::i;21531:209::-;;;;;;;;;;-1:-1:-1;21531:209:0;;;;;:::i;:::-;;:::i;18930:102::-;;;;;;;;;;-1:-1:-1;18930:102:0;;;;;:::i;:::-;-1:-1:-1;;;;;19008:16:0;18984:4;19008:16;;;:6;:16;;;;;;;;;18930:102;28823:488;;;;;;;;;;-1:-1:-1;28823:488:0;;;;;:::i;:::-;;:::i;19613:267::-;;;;;;;;;;-1:-1:-1;19613:267:0;;;;;:::i;:::-;;:::i;27220:348::-;;;;;;;;;;-1:-1:-1;27220:348:0;;;;;:::i;:::-;;:::i;32805:805::-;;;;;;:::i;:::-;;:::i;20117:206::-;;;;;;;;;;-1:-1:-1;20117:206:0;;;;;:::i;:::-;;:::i;14259:64::-;;;;;;;;;;;;;;;;32112:685;;;;;;;;;;-1:-1:-1;32112:685:0;;;;;:::i;:::-;;:::i;18541:103::-;;;;;;;;;;-1:-1:-1;18541:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;18624:18:0;18607:7;18624:18;;;:9;:18;;;;;;;18541:103;12442:128;;;;;;;;;;;;;:::i;14192:60::-;;;;;;;;;;;;;;;;20331:306;;;;;;;;;;-1:-1:-1;20331:306:0;;;;;:::i;:::-;;:::i;11356:20::-;;;;;;;;;;-1:-1:-1;11356:20:0;;;;-1:-1:-1;;;;;11356:20:0;;;;;;-1:-1:-1;;;;;7842:32:1;;;7824:51;;7812:2;7797:18;11356:20:0;7678:203:1;20829:437:0;;;;;;;;;;-1:-1:-1;20829:437:0;;;;;:::i;:::-;;:::i;18301:71::-;;;;;;;;;;-1:-1:-1;18363:7:0;;;;;;;;;;;;-1:-1:-1;;;18363:7:0;;;;18301:71;;21748:407;;;;;;;;;;-1:-1:-1;21748:407:0;;;;;:::i;:::-;;:::i;14624:29::-;;;;;;;;;;;;;;;18650:139;;;;;;;;;;-1:-1:-1;18650:139:0;;;;;:::i;:::-;;:::i;11770:95::-;;;;;;;;;;-1:-1:-1;11770:95:0;;;;;:::i;:::-;;:::i;19340:265::-;;;;;;;;;;-1:-1:-1;19340:265:0;;;;;:::i;:::-;;:::i;18795:127::-;;;;;;;;;;-1:-1:-1;18795:127:0;;;;;:::i;:::-;;:::i;11873:98::-;;;;;;;;;;-1:-1:-1;11873:98:0;;;;;:::i;:::-;;:::i;12209:221::-;;;;;;;;;;-1:-1:-1;12209:221:0;;;;;:::i;:::-;;:::i;26252:548::-;;;;;;;;;;-1:-1:-1;26252:548:0;;;;;:::i;:::-;;:::i;14586:31::-;;;;;;;;;;;;;;;19888:221;;;;;;;;;;-1:-1:-1;19888:221:0;;;;;:::i;:::-;;:::i;27576:617::-;;;;;;;;;;-1:-1:-1;27576:617:0;;;;;:::i;:::-;;:::i;12090:107::-;;;;;;;;;;-1:-1:-1;12090:107:0;;;;;:::i;:::-;;:::i;19040:159::-;19115:4;19132:37;19141:10;19153:7;19162:6;19132:8;:37::i;:::-;-1:-1:-1;19187:4:0;19040:159;;;;;:::o;28201:614::-;12034:4;12069:5;-1:-1:-1;;;;;12069:5:0;11607:10;12058:16;11591:38;;;;-1:-1:-1;;;11591:38:0;;;;;;;:::i;:::-;;;;;;;;;28411:29:::1;28437:2;28411:21;14756:5;28430:1;28411:18;:21::i;:::-;:25:::0;::::1;:29::i;:::-;28358:49;28388:18:::0;28358:25:::1;:8:::0;28371:11;28358:12:::1;:25::i;:::-;:29:::0;::::1;:49::i;:::-;:82;;28350:122;;;::::0;-1:-1:-1;;;28350:122:0;;10003:2:1;28350:122:0::1;::::0;::::1;9985:21:1::0;10042:2;10022:18;;;10015:30;10081:29;10061:18;;;10054:57;10128:18;;28350:122:0::1;9801:351:1::0;28350:122:0::1;28483:15;28501:4;:21;28506:15;28501:21;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;28501:21:0;28533:11:::1;::::0;::::1;:22:::0;;;28566:28;;;28605:13:::1;::::0;::::1;:34:::0;;;28501:21;-1:-1:-1;28665:49:0::1;28621:18:::0;28665:25:::1;28547:8:::0;28583:11;28665:12:::1;:25::i;:49::-;28650:12;::::0;::::1;:64:::0;28748:15;28736:71:::1;::::0;::::1;;;;;;:::i;:::-;;::::0;;10491:25:1;;;10547:2;10532:18;;10525:34;;;10575:18;;;10568:34;;;28736:71:0::1;::::0;10479:2:1;10464:18;28736:71:0::1;;;;;;;;28339:476;28201:614:::0;;;;:::o;20645:176::-;12034:4;12069:5;-1:-1:-1;;;;;12069:5:0;11607:10;12058:16;11591:38;;;;-1:-1:-1;;;11591:38:0;;;;;;;:::i;:::-;20709:14:::1;::::0;::::1;;20701:44;;;::::0;-1:-1:-1;;;20701:44:0;;10815:2:1;20701:44:0::1;::::0;::::1;10797:21:1::0;10854:2;10834:18;;;10827:30;-1:-1:-1;;;10873:18:1;;;10866:47;10930:18;;20701:44:0::1;10613:341:1::0;20701:44:0::1;20756:14;:22:::0;;-1:-1:-1;;20756:22:0::1;::::0;;20796:17:::1;::::0;::::1;::::0;20773:5:::1;::::0;20796:17:::1;20645:176::o:0;18451:84::-;18504:7;14094:15;14025:1;14094:2;:15;:::i;:::-;14076:34;;:14;:34;:::i;:::-;18514:19;;18451:84;:::o;21274:249::-;21397:4;21414:41;21430:4;21436:10;21448:6;21414:15;:41::i;:::-;21466:27;21476:4;21482:2;21486:6;21466:9;:27::i;:::-;-1:-1:-1;21511:4:0;21274:249;;;;;;:::o;19211:121::-;14143:42;19264:7;18624:18;;;:9;:18;;;;19291:33;;14094:15;14025:1;14094:2;:15;:::i;:::-;14076:34;;:14;:34;:::i;:::-;19291:16;;:33::i;29319:552::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29451:20:0;::::1;29443:45;;;;-1:-1:-1::0;;;29443:45:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29507:20:0;::::1;29499:45;;;;-1:-1:-1::0;;;29499:45:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29563:20:0;::::1;29555:45;;;;-1:-1:-1::0;;;29555:45:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29619:20:0;::::1;29611:45;;;;-1:-1:-1::0;;;29611:45:0::1;;;;;;;:::i;:::-;29667:14;:23:::0;;-1:-1:-1;;;;;29667:23:0;;::::1;-1:-1:-1::0;;;;;;29667:23:0;;::::1;::::0;::::1;::::0;;;29701:14:::1;:23:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;29735:14:::1;:23:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;29769:14:::1;:23:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;29810:53:::1;::::0;;13597:34:1;;;13662:2;13647:18;;13640:43;;;;13699:18;;13692:43;;;;13766:2;13751:18;;13744:43;29810:53:0::1;::::0;13546:3:1;13531:19;29810:53:0::1;;;;;;;;29319:552:::0;;;;:::o;26808:404::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;26946:39:::1;::::0;-1:-1:-1;;;26946:39:0;;26979:4:::1;26946:39;::::0;::::1;7824:51:1::0;26929:14:0::1;::::0;-1:-1:-1;;;;;26946:24:0;::::1;::::0;::::1;::::0;7797:18:1;;26946:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26929:56:::0;-1:-1:-1;26996:24:0::1;27023:34;27051:5;27023:23;26929:56:::0;27034:11;27023:10:::1;:23::i;:34::-;26996:61:::0;-1:-1:-1;27068:56:0::1;-1:-1:-1::0;;;;;27068:27:0;::::1;27096:9:::0;26996:61;27068:27:::1;:56::i;:::-;27142:62;::::0;;-1:-1:-1;;;;;14179:32:1;;;14161:51;;14243:2;14228:18;;14221:34;;;27142:62:0;::::1;::::0;::::1;::::0;14134:18:1;27142:62:0::1;13987:274:1::0;21531:209:0;21619:4;21636:74;21645:10;21657:7;21699:10;21666:30;21676:10;21688:7;21666:9;:30::i;:::-;:43;;;;:::i;:::-;21636:8;:74::i;28823:488::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28949:24:0;::::1;28941:49;;;;-1:-1:-1::0;;;28941:49:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29009:24:0;::::1;29001:49;;;;-1:-1:-1::0;;;29001:49:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29069:22:0;::::1;29061:47;;;;-1:-1:-1::0;;;29061:47:0::1;;;;;;;:::i;:::-;29119:18;:31:::0;;-1:-1:-1;;;;;29119:31:0;;::::1;-1:-1:-1::0;;;;;;29119:31:0;;::::1;::::0;::::1;::::0;;;29161:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;29203:16:::1;:27:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;29248:55:::1;::::0;;14639:34:1;;;14704:2;14689:18;;14682:43;;;;14741:18;;;14734:43;29248:55:0::1;::::0;14589:2:1;14574:18;29248:55:0::1;;;;;;;;28823:488:::0;;;:::o;19613:267::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19714:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:37;::::1;;:23;::::0;;::::1;:37;;::::0;19706:61:::1;;;;-1:-1:-1::0;;;19706:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19778:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:36;;-1:-1:-1;;19778:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19832:40;;19778:36;;:23;19832:40:::1;::::0;::::1;19613:267:::0;;:::o;27220:348::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;27330:12:::1;:20:::0;;;27361:17:::1;:30:::0;;;27402:17:::1;:30:::0;;;27459:37:::1;27422:10:::0;27459:21:::1;27345:5:::0;27381:10;27459:9:::1;:21::i;:37::-;27443:13;:53:::0;27514:46:::1;::::0;;10491:25:1;;;10547:2;10532:18;;10525:34;;;10575:18;;;10568:34;;;27514:46:0::1;::::0;10479:2:1;10464:18;27514:46:0::1;10289:319:1::0;32805:805:0;12034:4;12069:5;-1:-1:-1;;;;;12069:5:0;11607:10;12058:16;11591:38;;;;-1:-1:-1;;;11591:38:0;;;;;;;:::i;:::-;32907:5:::1;32903:620;;32937:3;32929:43;;;::::0;-1:-1:-1;;;32929:43:0;;15330:2:1;32929:43:0::1;::::0;::::1;15312:21:1::0;15369:2;15349:18;;;15342:30;15408:29;15388:18;;;15381:57;15455:18;;32929:43:0::1;15128:351:1::0;32929:43:0::1;32996:9;32987:18;;33026:6;-1:-1:-1::0;;;;;33026:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33020:28:0::1;;33056:6;33020:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;33080:48;33115:4;33121:6;33087;-1:-1:-1::0;;;;;33087:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33080:34:0::1;::::0;:48;:34:::1;:48::i;:::-;32903:620;;;33163:3;33160:352;;;33197:10;33187:21;::::0;;;:9:::1;:21;::::0;;;;:31;;33212:6;;33187:21;:31:::1;::::0;33212:6;;33187:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;33247:4:0::1;33237:15;;::::0;;;:9:::1;:15;::::0;;;;:25;;33256:6;;33237:15;:25:::1;::::0;33256:6;;33237:25:::1;:::i;:::-;::::0;;;-1:-1:-1;;33286:34:0::1;::::0;2049:25:1;;;33307:4:0::1;-1:-1:-1::0;;;;;33286:34:0::1;::::0;33295:10:::1;::::0;-1:-1:-1;;;;;;;;;;;33286:34:0;2037:2:1;2022:18;33286:34:0::1;;;;;;;33160:352;;;-1:-1:-1::0;;;;;33373:4:0::1;33363:15;;::::0;;;:9:::1;:15;::::0;;;;:25;;33382:6;;33363:15;:25:::1;::::0;33382:6;;33363:25:::1;:::i;:::-;::::0;;;-1:-1:-1;;33417:10:0::1;33407:21;::::0;;;:9:::1;:21;::::0;;;;:31;;33432:6;;33407:21;:31:::1;::::0;33432:6;;33407:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;33462:34:0::1;::::0;2049:25:1;;;33477:10:0::1;::::0;-1:-1:-1;;;;;33471:4:0::1;33462:34;::::0;-1:-1:-1;;;;;;;;;;;33462:34:0;2037:2:1;2022:18;33462:34:0::1;;;;;;;33160:352;33539:4;-1:-1:-1::0;;;;;33533:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33598:3;33567:35;;33583:5;33567:35;;;33590:6;33567:35;;;;2049:25:1::0;;2037:2;2022:18;;1903:177;33567:35:0::1;;;;;;;;32805:805:::0;;;:::o;20117:206::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;20211:7:::1;20193:25;;:14;;;;;;;;;;;:25;;::::0;20185:49:::1;;;;-1:-1:-1::0;;;20185:49:0::1;;;;;;;:::i;:::-;20245:14;:24:::0;;-1:-1:-1;;20245:24:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;20287:28:::1;::::0;::::1;::::0;-1:-1:-1;;20287:28:0::1;20117:206:::0;:::o;32112:685::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;32240:8;32275:24;;::::1;32266:61;;;::::0;-1:-1:-1;;;32266:61:0;;16072:2:1;32266:61:0::1;::::0;::::1;16054:21:1::0;16111:2;16091:18;;;16084:30;16150:25;16130:18;;;16123:53;16193:18;;32266:61:0::1;15870:347:1::0;32266:61:0::1;32338:21;32389:9:::0;32384:289:::1;32408:6;32404:1;:10;32384:289;;;32544:7;;32552:1;32544:10;;;;;;;:::i;:::-;;;;;;;32518:9;:22;32528:8;;32537:1;32528:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32518:22:0::1;-1:-1:-1::0;;;;;32518:22:0::1;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;32586:7:0;;-1:-1:-1;32586:7:0;32594:1;32586:10;;::::1;;;;;:::i;:::-;;;;;;;32569:27;;;;;:::i;:::-;;;32637:8;;32646:1;32637:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32616:45:0::1;32625:10;-1:-1:-1::0;;;;;;;;;;;32650:7:0;;32658:1;32650:10;;::::1;;;;;:::i;:::-;;;;;;;32616:45;;;;2049:25:1::0;;2037:2;2022:18;;1903:177;32616:45:0::1;;;;;;;;32416:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32384:289;;;-1:-1:-1::0;32693:10:0::1;32683:21;::::0;;;:9:::1;:21;::::0;;;;:38;;32708:13;;32683:21;:38:::1;::::0;32708:13;;32683:38:::1;:::i;:::-;::::0;;;-1:-1:-1;;32739:50:0::1;::::0;;16668:25:1;;;16724:2;16709:18;;16702:34;;;32755:10:0::1;::::0;32739:50:::1;::::0;16641:18:1;32739:50:0::1;;;;;;;32212:585;;32112:685:::0;;;;:::o;12442:128::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;12507:32:::1;::::0;12536:1:::1;7824:51:1::0;;12507:32:0::1;::::0;7812:2:1;7797:18;12507:32:0::1;;;;;;;12566:1;12550:18:::0;;-1:-1:-1;;;;;;12550:18:0::1;::::0;;12442:128::o;20331:306::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;20410:14:::1;::::0;::::1;;20409:15;20401:44;;;::::0;-1:-1:-1;;;20401:44:0;;16949:2:1;20401:44:0::1;::::0;::::1;16931:21:1::0;16988:2;16968:18;;;16961:30;-1:-1:-1;;;17007:18:1;;;17000:46;17063:18;;20401:44:0::1;16747:340:1::0;20401:44:0::1;20456:14;:21:::0;;-1:-1:-1;;20456:21:0::1;20473:4;20456:21;::::0;;20491:11:::1;::::0;20456:14:::1;20491:16:::0;20488:99:::1;;20560:27;:15;20580:6:::0;20560:19:::1;:27::i;:::-;20546:11;:41:::0;20488:99:::1;20613:16;::::0;::::1;::::0;;;::::1;20331:306:::0;:::o;20829:437::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;20982:21:::1;:32:::0;;-1:-1:-1;;20982:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21026:13:::1;:26:::0;;;21063:15:::1;:27:::0;;;21101:25:::1;:54:::0;;;21173:85:::1;::::0;;10491:25:1;;;10547:2;10532:18;;10525:34;;;10575:18;;;10568:34;;;21173:85:0::1;::::0;10479:2:1;10464:18;21173:85:0::1;;;;;;;20829:437:::0;;;;:::o;21748:407::-;21841:4;21858:24;21885:30;21895:10;21907:7;21885:9;:30::i;:::-;21858:57;;21954:15;21934:16;:35;;21926:85;;;;-1:-1:-1;;;21926:85:0;;17294:2:1;21926:85:0;;;17276:21:1;17333:2;17313:18;;;17306:30;17372:34;17352:18;;;17345:62;-1:-1:-1;;;17423:18:1;;;17416:35;17468:19;;21926:85:0;17092:401:1;21926:85:0;22047:65;22056:10;22068:7;22096:15;22077:16;:34;22047:8;:65::i;18650:139::-;18728:4;18735:40;18745:10;18757:9;18768:6;18735:9;:40::i;11770:95::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11831:19:0::1;;::::0;;;11853:4:::1;11831:19;::::0;;;;;;;:26;;-1:-1:-1;;11831:26:0::1;::::0;;::::1;::::0;;11770:95::o;19340:265::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19441:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:37;::::1;;:23;::::0;;::::1;:37;;::::0;19433:61:::1;;;;-1:-1:-1::0;;;19433:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19505:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;:36;;-1:-1:-1;;19505:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19559:38;;19505:36;;:23;19559:38:::1;::::0;::::1;19340:265:::0;;:::o;18795:127::-;-1:-1:-1;;;;;18893:18:0;;;18876:7;18893:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18795:127::o;11873:98::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11936:19:0::1;11958:5;11936:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;11936:27:0::1;::::0;;11873:98::o;12209:221::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12294:17:0;::::1;12286:42;;;;-1:-1:-1::0;;;12286:42:0::1;;;;;;;:::i;:::-;12339:5;:11:::0;;-1:-1:-1;;;;;;12339:11:0::1;-1:-1:-1::0;;;;;12339:11:0;::::1;::::0;;::::1;::::0;;12361:19;;;-1:-1:-1;12361:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;12361:26:0::1;::::0;;::::1;::::0;;;12403:25;;7824:51:1;;;12403:25:0::1;::::0;7797:18:1;12403:25:0::1;;;;;;;12209:221:::0;:::o;26252:548::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;26371:1:::1;26355:12;:17;;26347:72;;;::::0;-1:-1:-1;;;26347:72:0;;17916:2:1;26347:72:0::1;::::0;::::1;17898:21:1::0;17955:2;17935:18;;;17928:30;17994:34;17974:18;;;17967:62;-1:-1:-1;;;18045:18:1;;;18038:40;18095:19;;26347:72:0::1;17714:406:1::0;26347:72:0::1;26449:6;26438:7;:17;;26430:69;;;::::0;-1:-1:-1;;;26430:69:0;;18327:2:1;26430:69:0::1;::::0;::::1;18309:21:1::0;18366:2;18346:18;;;18339:30;18405:34;18385:18;;;18378:62;-1:-1:-1;;;18456:18:1;;;18449:37;18503:19;;26430:69:0::1;18125:403:1::0;26430:69:0::1;26510:18;26565:8;26548:12:::0;14094:15:::1;14025:1;14094:2;:15;:::i;:::-;14076:34;::::0;:14:::1;:34;:::i;:::-;26533:27;;;;:::i;:::-;26531:42;;;;:::i;:::-;26510:63:::0;-1:-1:-1;26584:22:0::1;26638:8;26626:7:::0;14094:15:::1;14025:1;14094:2;:15;:::i;:::-;14076:34;::::0;:14:::1;:34;:::i;:::-;26611:22;;;;:::i;:::-;26609:37;;;;:::i;:::-;26657:12;:25:::0;;;26693:16:::1;:33:::0;;;26744:48:::1;::::0;;16668:25:1;;;16724:2;16709:18;;16702:34;;;26693:33:0;;-1:-1:-1;26744:48:0::1;::::0;16641:18:1;26744:48:0::1;16494:248:1::0;19888:221:0;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19977:16:0;::::1;;::::0;;;:6:::1;:16;::::0;;;;;:26;::::1;;:16;::::0;;::::1;:26;;::::0;19969:50:::1;;;;-1:-1:-1::0;;;19969:50:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20030:16:0;::::1;;::::0;;;:6:::1;:16;::::0;;;;;:25;;-1:-1:-1;;20030:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20073:28;;20030:25;;:16;20073:28:::1;::::0;::::1;19888:221:::0;;:::o;27576:617::-;11698:24;11711:10;11698:12;:24::i;:::-;11690:48;;;;-1:-1:-1;;;11690:48:0;;;;;;;:::i;:::-;27698:21:::1;27678:17;27757:43;27787:12:::0;27757:25:::1;27698:21:::0;27771:10;27757:13:::1;:25::i;:43::-;27730:70:::0;-1:-1:-1;27811:20:0::1;27834:23;27730:70:::0;27855:1:::1;27834:20;:23::i;:::-;27880:14;::::0;27811:46;;-1:-1:-1;27868:41:0::1;::::0;-1:-1:-1;;;;;27880:14:0::1;27811:46:::0;27868:11:::1;:41::i;:::-;27932:14;::::0;27920:41:::1;::::0;-1:-1:-1;;;;;27932:14:0::1;27948:12:::0;27920:11:::1;:41::i;:::-;27984:14;::::0;27972:41:::1;::::0;-1:-1:-1;;;;;27984:14:0::1;28000:12:::0;27972:11:::1;:41::i;:::-;28036:14;::::0;28024:41:::1;::::0;-1:-1:-1;;;;;28036:14:0::1;28052:12:::0;28024:11:::1;:41::i;:::-;28104:14;::::0;28120::::1;::::0;28136::::1;::::0;28152::::1;::::0;28083:102:::1;::::0;;-1:-1:-1;;;;;28104:14:0;;::::1;19052:34:1::0;;28120:14:0;;::::1;19117:2:1::0;19102:18;;19095:43;28136:14:0;;::::1;19154:18:1::0;;;19147:43;28152:14:0;;;::::1;19221:2:1::0;19206:18;;19199:43;19273:3;19258:19;;19251:35;;;28083:102:0;;::::1;::::0;;;;19001:3:1;28083:102:0;;::::1;27667:526;;;27576:617:::0;;:::o;12090:107::-;-1:-1:-1;;;;;12170:19:0;12146:4;12170:19;;;:14;:19;;;;;;;;;12090:107::o;22163:372::-;-1:-1:-1;;;;;22291:19:0;;22283:68;;;;-1:-1:-1;;;22283:68:0;;19499:2:1;22283:68:0;;;19481:21:1;19538:2;19518:18;;;19511:30;19577:34;19557:18;;;19550:62;-1:-1:-1;;;19628:18:1;;;19621:34;19672:19;;22283:68:0;19297:400:1;22283:68:0;-1:-1:-1;;;;;22370:21:0;;22362:68;;;;-1:-1:-1;;;22362:68:0;;19904:2:1;22362:68:0;;;19886:21:1;19943:2;19923:18;;;19916:30;19982:34;19962:18;;;19955:62;-1:-1:-1;;;20033:18:1;;;20026:32;20075:19;;22362:68:0;19702:398:1;22362:68:0;-1:-1:-1;;;;;22443:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22495:32;;2049:25:1;;;22495:32:0;;2022:18:1;22495:32:0;1903:177:1;1689:98:0;1747:7;1774:5;1778:1;1774;:5;:::i;1795:98::-;1853:7;1880:5;1884:1;1880;:5;:::i;1477:98::-;1535:7;1562:5;1566:1;1562;:5;:::i;22543:453::-;22678:24;22705:25;22715:5;22722:7;22705:9;:25::i;:::-;22678:52;;-1:-1:-1;;22745:16:0;:37;22741:248;;22827:6;22807:16;:26;;22799:68;;;;-1:-1:-1;;;22799:68:0;;20307:2:1;22799:68:0;;;20289:21:1;20346:2;20326:18;;;20319:30;20385:31;20365:18;;;20358:59;20434:18;;22799:68:0;20105:353:1;22799:68:0;22911:51;22920:5;22927:7;22955:6;22936:16;:25;22911:8;:51::i;:::-;22667:329;22543:453;;;:::o;23004:1517::-;23093:37;23104:6;23112:9;23123:6;23093:10;:37::i;:::-;-1:-1:-1;;;;;23177:21:0;;23143:12;23177:21;;;:13;:21;;;;;;23158:4;;23177:21;;;:49;;-1:-1:-1;;;;;;23202:24:0;;;;;;:13;:24;;;;;;;;23177:49;23173:429;;;-1:-1:-1;23253:5:0;23173:429;;;23301:14;;;;23293:44;;;;-1:-1:-1;;;23293:44:0;;20665:2:1;23293:44:0;;;20647:21:1;20704:2;20684:18;;;20677:30;-1:-1:-1;;;20723:18:1;;;20716:47;20780:18;;23293:44:0;20463:341:1;23293:44:0;23370:12;;23360:6;:22;;23352:75;;;;-1:-1:-1;;;23352:75:0;;21011:2:1;23352:75:0;;;20993:21:1;21050:2;21030:18;;;21023:30;21089:34;21069:18;;;21062:62;-1:-1:-1;;;21140:18:1;;;21133:38;21188:19;;23352:75:0;20809:404:1;23352:75:0;23459:4;-1:-1:-1;;;;;23446:17:0;:9;-1:-1:-1;;;;;23446:17:0;;23442:147;;23525:16;;-1:-1:-1;;;;;23492:20:0;;;;;;:9;:20;;;;;;:29;;23515:6;;23492:29;:::i;:::-;:49;;23484:89;;;;-1:-1:-1;;;23484:89:0;;21420:2:1;23484:89:0;;;21402:21:1;21459:2;21439:18;;;21432:30;21498:29;21478:18;;;21471:57;21545:18;;23484:89:0;21218:351:1;23484:89:0;23614:31;23671:4;-1:-1:-1;;;;;23661:14:0;:6;-1:-1:-1;;;;;23661:14:0;;23658:392;;23710:19;23692:37;;23768:6;-1:-1:-1;;;;;23747:28:0;:9;-1:-1:-1;;;;;23747:28:0;;;:62;;;;;23798:11;;23779:15;:30;;23747:62;23744:126;;;-1:-1:-1;;;;;23830:17:0;;;;;;:6;:17;;;;;:24;;-1:-1:-1;;23830:24:0;23850:4;23830:24;;;23744:126;23658:392;;;23904:4;-1:-1:-1;;;;;23891:17:0;:9;-1:-1:-1;;;;;23891:17:0;;23887:163;;-1:-1:-1;23943:20:0;23887:163;;;-1:-1:-1;24014:24:0;23887:163;24074:9;;:16;;24088:1;24074:13;:16::i;:::-;24062:9;:28;24104:30;24119:6;24127;24104:14;:30::i;:::-;24101:118;;;24150:29;24165:13;;24150:14;:29::i;:::-;24206:1;24194:9;:13;24101:118;-1:-1:-1;;;;;24251:17:0;;;;;;:9;:17;;;;;;:29;;24273:6;24251:21;:29::i;:::-;-1:-1:-1;;;;;24231:17:0;;;;;;:9;:17;;;;;:49;;;;24316:7;:64;;24374:6;24316:64;;;24326:45;24339:6;24347;24355:15;24326:12;:45::i;:::-;-1:-1:-1;;;;;24414:20:0;;;;;;:9;:20;;;;;;24291:89;;-1:-1:-1;24414:40:0;;24291:89;24414:24;:40::i;:::-;-1:-1:-1;;;;;24391:20:0;;;;;;;:9;:20;;;;;;;:63;;;;24470:43;;;;;;-1:-1:-1;;;;;;;;;;;24470:43:0;;;24498:14;2049:25:1;;2037:2;2022:18;;1903:177;24470:43:0;;;;;;;;23082:1439;;;23004:1517;;;:::o;1583:98::-;1641:7;1668:5;1672:1;1668;:5;:::i;8182:211::-;8326:58;;;-1:-1:-1;;;;;14179:32:1;;8326:58:0;;;14161:51:1;14228:18;;;;14221:34;;;8326:58:0;;;;;;;;;;14134:18:1;;;;8326:58:0;;;;;;;;-1:-1:-1;;;;;8326:58:0;-1:-1:-1;;;8326:58:0;;;8299:86;;8319:5;;8299:19;:86::i;:::-;8182:211;;;:::o;31878:226::-;31956:6;31966:1;31956:11;31953:23;;31878:226;;:::o;31953:23::-;31987:12;32013:9;-1:-1:-1;;;;;32005:23:0;32036:6;32005:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31986:61;;;32066:7;32058:38;;;;-1:-1:-1;;;32058:38:0;;21986:2:1;32058:38:0;;;21968:21:1;22025:2;22005:18;;;21998:30;-1:-1:-1;;;22044:18:1;;;22037:48;22102:18;;32058:38:0;21784:342:1;24529:382:0;-1:-1:-1;;;;;24634:21:0;;;;;;:13;:21;;;;;;;;24633:22;24625:45;;;;-1:-1:-1;;;24625:45:0;;22333:2:1;24625:45:0;;;22315:21:1;22372:2;22352:18;;;22345:30;-1:-1:-1;;;22391:18:1;;;22384:40;22441:18;;24625:45:0;22131:334:1;24625:45:0;-1:-1:-1;;;;;24690:24:0;;;;;;:13;:24;;;;;;;;24689:25;24681:48;;;;-1:-1:-1;;;24681:48:0;;22333:2:1;24681:48:0;;;22315:21:1;22372:2;22352:18;;;22345:30;-1:-1:-1;;;22391:18:1;;;22384:40;22441:18;;24681:48:0;22131:334:1;24681:48:0;24757:1;24748:6;:10;24740:64;;;;-1:-1:-1;;;24740:64:0;;22672:2:1;24740:64:0;;;22654:21:1;22711:2;22691:18;;;22684:30;22750:34;22730:18;;;22723:62;-1:-1:-1;;;22801:18:1;;;22794:39;22850:19;;24740:64:0;22470:405:1;24740:64:0;-1:-1:-1;;;;;18624:18:0;;18607:7;18624:18;;;:9;:18;;;;;;24823:6;:27;;24815:88;;;;-1:-1:-1;;;24815:88:0;;23082:2:1;24815:88:0;;;23064:21:1;23121:2;23101:18;;;23094:30;23160:34;23140:18;;;23133:62;-1:-1:-1;;;23211:18:1;;;23204:47;23268:19;;24815:88:0;22880:413:1;29879:376:0;30001:15;;30077:13;;30067:4;29958;18624:18;;;:9;:18;;;;;;30109:8;;29958:4;;29991:25;;;;-1:-1:-1;30049:41:0;;30109:8;;30108:9;:34;;;;-1:-1:-1;30121:21:0;;;;30108:34;:46;;;;;30146:8;30108:46;:103;;;;;30186:25;;30173:9;;:38;;30108:103;:121;;;;;30215:14;30108:121;:139;;;;;30243:4;-1:-1:-1;;;;;30233:14:0;:6;-1:-1:-1;;;;;30233:14:0;;;30108:139;30101:146;29879:376;-1:-1:-1;;;;;29879:376:0:o;30263:814::-;17042:8;:15;;-1:-1:-1;;17042:15:0;17053:4;17042:15;;;30394:13:::1;::::0;30371:17:::1;::::0;17042:8;;30360:55:::1;::::0;30413:1:::1;::::0;30360:48:::1;::::0;;;:6;;:10:::1;:29::i;:55::-;30334:81:::0;-1:-1:-1;30426:20:0::1;30449:27;:6:::0;30334:81;30449:10:::1;:27::i;:::-;30426:50:::0;-1:-1:-1;30514:21:0::1;30546:30;30426:50:::0;30546:16:::1;:30::i;:::-;30589:20;30612:41;:21;30638:14:::0;30612:25:::1;:41::i;:::-;30589:64;;30664:19;30686:43;30704:24;30726:1;30704:17;;:21;;:24;;;;:::i;:::-;30686:13;::::0;;:17:::1;:43::i;:::-;30664:65:::0;-1:-1:-1;30745:19:0;;30742:141:::1;;30780:90;30793:15;30810:59;30867:1;30810:52;30850:11;30810:35;30827:17;;30810:12;:16;;:35;;;;:::i;:59::-;30780:12;:90::i;:::-;30996:18;::::0;31033:17:::1;::::0;30984:85:::1;::::0;-1:-1:-1;;;;;30996:18:0::1;::::0;31016:52:::1;::::0;31056:11;;31016:35:::1;::::0;:12;;:16:::1;:35::i;:52::-;30984:11;:85::i;:::-;-1:-1:-1::0;;17081:8:0;:16;;-1:-1:-1;;17081:16:0;;;-1:-1:-1;;;;30263:814:0:o;24919:1325::-;25024:7;25044:14;25061:4;:21;25066:15;25061:21;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;25061:21:0;;;25044:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25113:14:0;;;;:6;:14;;;;;;;25044:38;;-1:-1:-1;;25113:14:0;;:32;;;;-1:-1:-1;25131:14:0;;;;;;;25113:32;:71;;25172:3;:12;;;25113:71;;;25148:20;25165:3;14756:5;25148:20;:::i;:::-;25093:91;;25218:9;25231:1;25218:14;25214:60;;25256:6;25249:13;;;;;;25214:60;25284:17;25304:43;14756:5;25305:21;:6;25316:9;25305:10;:21::i;25304:43::-;25284:63;;25358:18;25379:43;25412:9;25380:26;25394:3;:11;;;25380:9;:13;;:26;;;;:::i;25379:43::-;25358:64;;25433:21;25457:46;25493:9;25458:29;25472:3;:14;;;25458:9;:13;;:29;;;;:::i;25457:46::-;25433:70;-1:-1:-1;25516:20:0;25539:44;25433:70;25539:25;:9;25553:10;25539:13;:25::i;:44::-;25516:67;-1:-1:-1;25599:14:0;;25596:176;;14143:42;25657:24;;:9;:24;;;;:40;;25686:10;25657:28;:40::i;:::-;14143:42;25630:24;;;;:9;:24;;;:67;;;;:24;25717:43;-1:-1:-1;;;;;25717:43:0;;;-1:-1:-1;;;;;;;;;;;25717:43:0;;;25749:10;2049:25:1;;2037:2;2022:18;;1903:177;25717:43:0;;;;;;;;25596:176;25785:17;;25782:221;;25876:16;;-1:-1:-1;;;;;25876:16:0;25858:36;;;;:9;:36;;;;;;:55;;25899:13;25858:40;:55::i;:::-;25837:16;;;-1:-1:-1;;;;;25837:16:0;;;25819:36;;;;:9;:36;;;;;;;;;:94;;;;25958:16;;25933:58;;2049:25:1;;;25958:16:0;;;;25933:58;;;;-1:-1:-1;;;;;;;;;;;25933:58:0;2022:18:1;25933:58:0;;;;;;;25782:221;26016:16;;26013:182;;26094:4;26076:24;;;;:9;:24;;;;;;:42;;26105:12;26076:28;:42::i;:::-;26067:4;26049:24;;;;:9;:24;;;;;;;:69;;;;26138:45;;-1:-1:-1;;;;;26138:45:0;;;-1:-1:-1;;;;;;;;;;;26138:45:0;;;26170:12;2049:25:1;;2037:2;2022:18;;1903:177;26138:45:0;;;;;;;;26013:182;26213:21;:6;26224:9;26213:10;:21::i;:::-;26206:28;24919:1325;-1:-1:-1;;;;;;;;;;24919:1325:0:o;10605:716::-;11029:23;11055:69;11083:4;11055:69;;;;;;;;;;;;;;;;;11063:5;-1:-1:-1;;;;;11055:27:0;;;:69;;;;;:::i;:::-;11139:17;;11029:95;;-1:-1:-1;11139:21:0;11135:179;;11236:10;11225:30;;;;;;;;;;;;:::i;:::-;11217:85;;;;-1:-1:-1;;;11217:85:0;;23750:2:1;11217:85:0;;;23732:21:1;23789:2;23769:18;;;23762:30;23828:34;23808:18;;;23801:62;-1:-1:-1;;;23879:18:1;;;23872:40;23929:19;;11217:85:0;23548:406:1;31436:434:0;31526:16;;;31540:1;31526:16;;;;;;;;31502:21;;31526:16;;;;;;;;;;-1:-1:-1;31526:16:0;31502:40;;31571:4;31553;31558:1;31553:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31553:23:0;;;-1:-1:-1;;;;;31553:23:0;;;;;31597:6;-1:-1:-1;;;;;31597:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31587:4;31592:1;31587:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31587:23:0;;;-1:-1:-1;;;;;31587:23:0;;;;;31621:53;31638:4;31653:6;31662:11;31621:8;:53::i;:::-;31685:177;;-1:-1:-1;;;31685:177:0;;-1:-1:-1;;;;;31685:6:0;:57;;;;:177;;31757:11;;31783:1;;31799:4;;31826;;31846:15;;31685:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31491:379;31436:434;:::o;31085:343::-;31166:53;31183:4;31198:6;31207:11;31166:8;:53::i;:::-;31371:18;;31230:190;;-1:-1:-1;;;31230:190:0;;31293:4;31230:190;;;25417:34:1;25467:18;;;25460:34;;;31339:1:0;25510:18:1;;;25503:34;;;25553:18;;;25546:34;-1:-1:-1;;;;;31371:18:0;;;25596:19:1;;;25589:44;31404:15:0;25649:19:1;;;25642:35;31230:6:0;:22;;;;;;31260:9;;25351:19:1;;31230:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31085:343;;:::o;4116:229::-;4253:12;4285:52;4307:6;4315:4;4321:1;4324:12;4285:21;:52::i;:::-;4278:59;4116:229;-1:-1:-1;;;;4116:229:0:o;4621:455::-;4791:12;4849:5;4824:21;:30;;4816:81;;;;-1:-1:-1;;;4816:81:0;;26201:2:1;4816:81:0;;;26183:21:1;26240:2;26220:18;;;26213:30;26279:34;26259:18;;;26252:62;-1:-1:-1;;;26330:18:1;;;26323:36;26376:19;;4816:81:0;25999:402:1;4816:81:0;4909:12;4923:23;4950:6;-1:-1:-1;;;;;4950:11:0;4969:5;4976:4;4950:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4908:73;;;;4999:69;5026:6;5034:7;5043:10;5055:12;4999:26;:69::i;:::-;4992:76;4621:455;-1:-1:-1;;;;;;;4621:455:0:o;6180:644::-;6365:12;6394:7;6390:427;;;6422:10;:17;6443:1;6422:22;6418:290;;-1:-1:-1;;;;;3557:19:0;;;6632:60;;;;-1:-1:-1;;;6632:60:0;;26887:2:1;6632:60:0;;;26869:21:1;26926:2;26906:18;;;26899:30;26965:31;26945:18;;;26938:59;27014:18;;6632:60:0;26685:353:1;6632:60:0;-1:-1:-1;6729:10:0;6722:17;;6390:427;6772:33;6780:10;6792:12;7306:17;;:21;7302:388;;7538:10;7532:17;7595:15;7582:10;7578:2;7574:19;7567:44;7302:388;7665:12;7658:20;;-1:-1:-1;;;7658:20:0;;;;;;;;:::i;14:258:1:-;86:1;96:113;110:6;107:1;104:13;96:113;;;186:11;;;180:18;167:11;;;160:39;132:2;125:10;96:113;;;227:6;224:1;221:13;218:48;;;-1:-1:-1;;262:1:1;244:16;;237:27;14:258::o;277:383::-;426:2;415:9;408:21;389:4;458:6;452:13;501:6;496:2;485:9;481:18;474:34;517:66;576:6;571:2;560:9;556:18;551:2;543:6;539:15;517:66;:::i;:::-;644:2;623:15;-1:-1:-1;;619:29:1;604:45;;;;651:2;600:54;;277:383;-1:-1:-1;;277:383:1:o;665:131::-;-1:-1:-1;;;;;740:31:1;;730:42;;720:70;;786:1;783;776:12;720:70;665:131;:::o;801:315::-;869:6;877;930:2;918:9;909:7;905:23;901:32;898:52;;;946:1;943;936:12;898:52;985:9;972:23;1004:31;1029:5;1004:31;:::i;:::-;1054:5;1106:2;1091:18;;;;1078:32;;-1:-1:-1;;;801:315:1:o;1313:156::-;1394:20;;1443:1;1433:12;;1423:40;;1459:1;1456;1449:12;1423:40;1313:156;;;:::o;1474:424::-;1580:6;1588;1596;1604;1657:3;1645:9;1636:7;1632:23;1628:33;1625:53;;;1674:1;1671;1664:12;1625:53;1697:42;1729:9;1697:42;:::i;:::-;1687:52;1786:2;1771:18;;1758:32;;-1:-1:-1;1837:2:1;1822:18;;1809:32;;1888:2;1873:18;1860:32;;-1:-1:-1;1474:424:1;-1:-1:-1;;;1474:424:1:o;2085:456::-;2162:6;2170;2178;2231:2;2219:9;2210:7;2206:23;2202:32;2199:52;;;2247:1;2244;2237:12;2199:52;2286:9;2273:23;2305:31;2330:5;2305:31;:::i;:::-;2355:5;-1:-1:-1;2412:2:1;2397:18;;2384:32;2425:33;2384:32;2425:33;:::i;:::-;2085:456;;2477:7;;-1:-1:-1;;;2531:2:1;2516:18;;;;2503:32;;2085:456::o;2546:247::-;2605:6;2658:2;2646:9;2637:7;2633:23;2629:32;2626:52;;;2674:1;2671;2664:12;2626:52;2713:9;2700:23;2732:31;2757:5;2732:31;:::i;2987:671::-;3073:6;3081;3089;3097;3150:3;3138:9;3129:7;3125:23;3121:33;3118:53;;;3167:1;3164;3157:12;3118:53;3206:9;3193:23;3225:31;3250:5;3225:31;:::i;:::-;3275:5;-1:-1:-1;3332:2:1;3317:18;;3304:32;3345:33;3304:32;3345:33;:::i;:::-;3397:7;-1:-1:-1;3456:2:1;3441:18;;3428:32;3469:33;3428:32;3469:33;:::i;:::-;3521:7;-1:-1:-1;3580:2:1;3565:18;;3552:32;3593:33;3552:32;3593:33;:::i;:::-;2987:671;;;;-1:-1:-1;2987:671:1;;-1:-1:-1;;2987:671:1:o;3663:219::-;3742:6;3795:2;3783:9;3774:7;3770:23;3766:32;3763:52;;;3811:1;3808;3801:12;3763:52;3834:42;3866:9;3834:42;:::i;4283:529::-;4360:6;4368;4376;4429:2;4417:9;4408:7;4404:23;4400:32;4397:52;;;4445:1;4442;4435:12;4397:52;4484:9;4471:23;4503:31;4528:5;4503:31;:::i;:::-;4553:5;-1:-1:-1;4610:2:1;4595:18;;4582:32;4623:33;4582:32;4623:33;:::i;:::-;4675:7;-1:-1:-1;4734:2:1;4719:18;;4706:32;4747:33;4706:32;4747:33;:::i;:::-;4799:7;4789:17;;;4283:529;;;;;:::o;4817:118::-;4903:5;4896:13;4889:21;4882:5;4879:32;4869:60;;4925:1;4922;4915:12;4940:382;5005:6;5013;5066:2;5054:9;5045:7;5041:23;5037:32;5034:52;;;5082:1;5079;5072:12;5034:52;5121:9;5108:23;5140:31;5165:5;5140:31;:::i;:::-;5190:5;-1:-1:-1;5247:2:1;5232:18;;5219:32;5260:30;5219:32;5260:30;:::i;:::-;5309:7;5299:17;;;4940:382;;;;;:::o;5327:316::-;5404:6;5412;5420;5473:2;5461:9;5452:7;5448:23;5444:32;5441:52;;;5489:1;5486;5479:12;5441:52;-1:-1:-1;;5512:23:1;;;5582:2;5567:18;;5554:32;;-1:-1:-1;5633:2:1;5618:18;;;5605:32;;5327:316;-1:-1:-1;5327:316:1:o;5648:444::-;5719:6;5727;5735;5788:2;5776:9;5767:7;5763:23;5759:32;5756:52;;;5804:1;5801;5794:12;5756:52;5843:9;5830:23;5862:28;5884:5;5862:28;:::i;:::-;5909:5;-1:-1:-1;5961:2:1;5946:18;;5933:32;;-1:-1:-1;6017:2:1;6002:18;;5989:32;6030:30;5989:32;6030:30;:::i;6097:241::-;6153:6;6206:2;6194:9;6185:7;6181:23;6177:32;6174:52;;;6222:1;6219;6212:12;6174:52;6261:9;6248:23;6280:28;6302:5;6280:28;:::i;6343:367::-;6406:8;6416:6;6470:3;6463:4;6455:6;6451:17;6447:27;6437:55;;6488:1;6485;6478:12;6437:55;-1:-1:-1;6511:20:1;;6554:18;6543:30;;6540:50;;;6586:1;6583;6576:12;6540:50;6623:4;6615:6;6611:17;6599:29;;6683:3;6676:4;6666:6;6663:1;6659:14;6651:6;6647:27;6643:38;6640:47;6637:67;;;6700:1;6697;6690:12;6637:67;6343:367;;;;;:::o;6715:773::-;6837:6;6845;6853;6861;6914:2;6902:9;6893:7;6889:23;6885:32;6882:52;;;6930:1;6927;6920:12;6882:52;6970:9;6957:23;6999:18;7040:2;7032:6;7029:14;7026:34;;;7056:1;7053;7046:12;7026:34;7095:70;7157:7;7148:6;7137:9;7133:22;7095:70;:::i;:::-;7184:8;;-1:-1:-1;7069:96:1;-1:-1:-1;7272:2:1;7257:18;;7244:32;;-1:-1:-1;7288:16:1;;;7285:36;;;7317:1;7314;7307:12;7285:36;;7356:72;7420:7;7409:8;7398:9;7394:24;7356:72;:::i;:::-;6715:773;;;;-1:-1:-1;7447:8:1;-1:-1:-1;;;;6715:773:1:o;7493:180::-;7552:6;7605:2;7593:9;7584:7;7580:23;7576:32;7573:52;;;7621:1;7618;7611:12;7573:52;-1:-1:-1;7644:23:1;;7493:180;-1:-1:-1;7493:180:1:o;7886:446::-;7969:6;7977;7985;7993;8046:3;8034:9;8025:7;8021:23;8017:33;8014:53;;;8063:1;8060;8053:12;8014:53;8102:9;8089:23;8121:28;8143:5;8121:28;:::i;8337:388::-;8405:6;8413;8466:2;8454:9;8445:7;8441:23;8437:32;8434:52;;;8482:1;8479;8472:12;8434:52;8521:9;8508:23;8540:31;8565:5;8540:31;:::i;:::-;8590:5;-1:-1:-1;8647:2:1;8632:18;;8619:32;8660:33;8619:32;8660:33;:::i;8990:248::-;9058:6;9066;9119:2;9107:9;9098:7;9094:23;9090:32;9087:52;;;9135:1;9132;9125:12;9087:52;-1:-1:-1;;9158:23:1;;;9228:2;9213:18;;;9200:32;;-1:-1:-1;8990:248:1:o;9467:329::-;9669:2;9651:21;;;9708:1;9688:18;;;9681:29;-1:-1:-1;;;9741:2:1;9726:18;;9719:36;9787:2;9772:18;;9467:329::o;10157:127::-;10218:10;10213:3;10209:20;10206:1;10199:31;10249:4;10246:1;10239:15;10273:4;10270:1;10263:15;10959:127;11020:10;11015:3;11011:20;11008:1;11001:31;11051:4;11048:1;11041:15;11075:4;11072:1;11065:15;11091:422;11180:1;11223:5;11180:1;11237:270;11258:7;11248:8;11245:21;11237:270;;;11317:4;11313:1;11309:6;11305:17;11299:4;11296:27;11293:53;;;11326:18;;:::i;:::-;11376:7;11366:8;11362:22;11359:55;;;11396:16;;;;11359:55;11475:22;;;;11435:15;;;;11237:270;;;11241:3;11091:422;;;;;:::o;11518:806::-;11567:5;11597:8;11587:80;;-1:-1:-1;11638:1:1;11652:5;;11587:80;11686:4;11676:76;;-1:-1:-1;11723:1:1;11737:5;;11676:76;11768:4;11786:1;11781:59;;;;11854:1;11849:130;;;;11761:218;;11781:59;11811:1;11802:10;;11825:5;;;11849:130;11886:3;11876:8;11873:17;11870:43;;;11893:18;;:::i;:::-;-1:-1:-1;;11949:1:1;11935:16;;11964:5;;11761:218;;12063:2;12053:8;12050:16;12044:3;12038:4;12035:13;12031:36;12025:2;12015:8;12012:16;12007:2;12001:4;11998:12;11994:35;11991:77;11988:159;;;-1:-1:-1;12100:19:1;;;12132:5;;11988:159;12179:34;12204:8;12198:4;12179:34;:::i;:::-;12249:6;12245:1;12241:6;12237:19;12228:7;12225:32;12222:58;;;12260:18;;:::i;:::-;12298:20;;11518:806;-1:-1:-1;;;11518:806:1:o;12329:140::-;12387:5;12416:47;12457:4;12447:8;12443:19;12437:4;12416:47;:::i;12474:168::-;12514:7;12580:1;12576;12572:6;12568:14;12565:1;12562:21;12557:1;12550:9;12543:17;12539:45;12536:71;;;12587:18;;:::i;:::-;-1:-1:-1;12627:9:1;;12474:168::o;12647:335::-;12849:2;12831:21;;;12888:2;12868:18;;;12861:30;-1:-1:-1;;;12922:2:1;12907:18;;12900:41;12973:2;12958:18;;12647:335::o;12987:336::-;13189:2;13171:21;;;13228:2;13208:18;;;13201:30;-1:-1:-1;;;13262:2:1;13247:18;;13240:42;13314:2;13299:18;;12987:336::o;13798:184::-;13868:6;13921:2;13909:9;13900:7;13896:23;13892:32;13889:52;;;13937:1;13934;13927:12;13889:52;-1:-1:-1;13960:16:1;;13798:184;-1:-1:-1;13798:184:1:o;14266:128::-;14306:3;14337:1;14333:6;14330:1;14327:13;14324:39;;;14343:18;;:::i;:::-;-1:-1:-1;14379:9:1;;14266:128::o;14788:335::-;14990:2;14972:21;;;15029:2;15009:18;;;15002:30;-1:-1:-1;;;15063:2:1;15048:18;;15041:41;15114:2;15099:18;;14788:335::o;15484:251::-;15554:6;15607:2;15595:9;15586:7;15582:23;15578:32;15575:52;;;15623:1;15620;15613:12;15575:52;15655:9;15649:16;15674:31;15699:5;15674:31;:::i;15740:125::-;15780:4;15808:1;15805;15802:8;15799:34;;;15813:18;;:::i;:::-;-1:-1:-1;15850:9:1;;15740:125::o;16222:127::-;16283:10;16278:3;16274:20;16271:1;16264:31;16314:4;16311:1;16304:15;16338:4;16335:1;16328:15;16354:135;16393:3;16414:17;;;16411:43;;16434:18;;:::i;:::-;-1:-1:-1;16481:1:1;16470:13;;16354:135::o;18533:217::-;18573:1;18599;18589:132;;18643:10;18638:3;18634:20;18631:1;18624:31;18678:4;18675:1;18668:15;18706:4;18703:1;18696:15;18589:132;-1:-1:-1;18735:9:1;;18533:217::o;23298:245::-;23365:6;23418:2;23406:9;23397:7;23393:23;23389:32;23386:52;;;23434:1;23431;23424:12;23386:52;23466:9;23460:16;23485:28;23507:5;23485:28;:::i;24091:980::-;24353:4;24401:3;24390:9;24386:19;24432:6;24421:9;24414:25;24458:2;24496:6;24491:2;24480:9;24476:18;24469:34;24539:3;24534:2;24523:9;24519:18;24512:31;24563:6;24598;24592:13;24629:6;24621;24614:22;24667:3;24656:9;24652:19;24645:26;;24706:2;24698:6;24694:15;24680:29;;24727:1;24737:195;24751:6;24748:1;24745:13;24737:195;;;24816:13;;-1:-1:-1;;;;;24812:39:1;24800:52;;24907:15;;;;24872:12;;;;24848:1;24766:9;24737:195;;;-1:-1:-1;;;;;;;24988:32:1;;;;24983:2;24968:18;;24961:60;-1:-1:-1;;;25052:3:1;25037:19;25030:35;24949:3;24091:980;-1:-1:-1;;;24091:980:1:o;25688:306::-;25776:6;25784;25792;25845:2;25833:9;25824:7;25820:23;25816:32;25813:52;;;25861:1;25858;25851:12;25813:52;25890:9;25884:16;25874:26;;25940:2;25929:9;25925:18;25919:25;25909:35;;25984:2;25973:9;25969:18;25963:25;25953:35;;25688:306;;;;;:::o;26406:274::-;26535:3;26573:6;26567:13;26589:53;26635:6;26630:3;26623:4;26615:6;26611:17;26589:53;:::i;:::-;26658:16;;;;;26406:274;-1:-1:-1;;26406:274:1:o

Swarm Source

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