Token CRYPTO PHOENIX

 

Overview [ERC-20]

Max Total Supply:
1,000,000,000,000,000 $CPHX

Holders:
334 (0.00%)

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Crypto Phoenix is a deflationary token hoping to provide an innovative holding mechanic through its high burn fee coupled with redistribution.

# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CRYPTOPHOENIX

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-06
*/

/**
 * SPDX-License-Identifier: MIT
 */
pragma solidity ^0.8.4;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {return msg.sender;}
    function _msgData() internal view virtual returns (bytes calldata) {this; return msg.data;}
}
library SafeMath {
    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; }
    }
}
library Address {
    function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 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 functionCall(target, data, "Address: low-level call failed");}
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {return functionCallWithValue(target, data, 0, errorMessage);}
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {return functionCallWithValue(target, data, value, "Address: low-level call with value failed");}
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(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) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(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) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) { return returndata; } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {revert(errorMessage);}
        }
    }
}
abstract contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "Only the previous owner can unlock onwership");
        require(block.timestamp > _lockTime , "The contract is still locked");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}
abstract contract Manageable is Context {
    address private _manager;
    event ManagementTransferred(address indexed previousManager, address indexed newManager);
    constructor(){
        address msgSender = _msgSender();
        _manager = msgSender;
        emit ManagementTransferred(address(0), msgSender);
    }
    function manager() public view returns(address){ return _manager; }
    modifier onlyManager(){
        require(_manager == _msgSender(), "Manageable: caller is not the manager");
        _;
    }
    function transferManagement(address newManager) external virtual onlyManager {
        emit ManagementTransferred(_manager, newManager);
        _manager = newManager;
    }
}
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}
interface IUniswapV2Router {
    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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
/**
 * Tokenomics:
 * 
 * Redistribution    2%
 * Burn             14%
 * Dev/Marketing     4%
 */

abstract contract Tokenomics {
    
    using SafeMath for uint256;
    
    string internal constant NAME = "CRYPTO PHOENIX";
    string internal constant SYMBOL = "$CPHX";
    
    uint16 internal constant FEES_DIVISOR = 10**3;
    uint8 internal constant DECIMALS = 18;
    uint256 internal constant ZEROES = 10**DECIMALS;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 internal constant TOTAL_SUPPLY = 1000000000000000 * ZEROES;
    uint256 internal _reflectedSupply = (MAX - (MAX % TOTAL_SUPPLY));

    uint256 internal constant maxTransactionAmount = TOTAL_SUPPLY / 40; // 2.5% of the total supply
    
    uint256 internal constant maxWalletBalance = TOTAL_SUPPLY / 20; // 5% of the total supply

    address internal dev1Address = 0x75d9ea6fAfdBEdB2Ce00B76622Aa0DF1B68CaaF6; 
    address internal dev2Address = 0x35EF633803aE3918f37571AF741bC39Ad11e3Eaa; 
    address internal dev3Address = 0xfdAF289C815701d2b1b7b34340af584A9fABD2D8;
    address internal dev4Address = 0x641E8274ce7513e2df215FcAD97515165019C497; 

    address internal burnAddress = 0x0000000000000000000000000000000000000000;

    enum FeeType { Antiwhale, Burn, Rfi, External, ExternalToETH }
    struct Fee {
        FeeType name;
        uint256 value;
        address recipient;
        uint256 total;
    }

    Fee[] internal fees;
    uint256 internal sumOfFees;

    constructor() {
        _addFees();
    }

    function _addFee(FeeType name, uint256 value, address recipient) private {
        fees.push( Fee(name, value, recipient, 0 ) );
        sumOfFees += value;
    }

    function _addFees() private {

        _addFee(FeeType.Rfi, 20, address(this) ); 

        _addFee(FeeType.Burn, 160, burnAddress );
        _addFee(FeeType.External, 10, dev1Address );
        _addFee(FeeType.External, 10, dev2Address );
        _addFee(FeeType.External, 10, dev3Address );
        _addFee(FeeType.External, 10, dev4Address );

    }

    function _getFeesCount() internal view returns (uint256){ return fees.length; }

    function _getFeeStruct(uint256 index) private view returns(Fee storage){
        require( index >= 0 && index < fees.length, "FeesSettings._getFeeStruct: Fee index out of bounds");
        return fees[index];
    }
    function _getFee(uint256 index) internal view returns (FeeType, uint256, address, uint256){
        Fee memory fee = _getFeeStruct(index);
        return ( fee.name, fee.value, fee.recipient, fee.total );
    }
    function _addFeeCollectedAmount(uint256 index, uint256 amount) internal {
        Fee storage fee = _getFeeStruct(index);
        fee.total = fee.total.add(amount);
    }

    function getCollectedFeeTotal(uint256 index) internal view returns (uint256){
        Fee memory fee = _getFeeStruct(index);
        return fee.total;
    }
}

abstract contract Presaleable is Manageable {
    bool internal isInPresale;
    function setPreseableEnabled(bool value) external onlyManager {
        isInPresale = value;
    }
}

abstract contract BaseRfiToken is IERC20, IERC20Metadata, Ownable, Presaleable, Tokenomics {

    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) internal _reflectedBalances;
    mapping (address => uint256) internal _balances;
    mapping (address => mapping (address => uint256)) internal _allowances;
    
    mapping (address => bool) internal _isExcludedFromFee;
    mapping (address => bool) internal _isExcludedFromRewards;
    address[] private _excluded;
    constructor(){
        
        _reflectedBalances[owner()] = _reflectedSupply;
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        _exclude(owner());
        _exclude(address(this));

        emit Transfer(address(0), owner(), TOTAL_SUPPLY);
        
    }
    
        function name() external pure override returns (string memory) { return NAME; }
        function symbol() external pure override returns (string memory) { return SYMBOL; }
        function decimals() external pure override returns (uint8) { return DECIMALS; }
        
        function totalSupply() external pure override returns (uint256) {
            return TOTAL_SUPPLY;
        }
        
        function balanceOf(address account) public view override returns (uint256){
            if (_isExcludedFromRewards[account]) return _balances[account];
            return tokenFromReflection(_reflectedBalances[account]);
        }
        
        function transfer(address recipient, uint256 amount) external override returns (bool){
            _transfer(_msgSender(), recipient, amount);
            return true;
        }
        
        function allowance(address owner, address spender) external view override returns (uint256){
            return _allowances[owner][spender];
        }
    
        function approve(address spender, uint256 amount) external override returns (bool) {
            _approve(_msgSender(), spender, amount);
            return true;
        }
        
        function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool){
            _transfer(sender, recipient, amount);
            _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
            return true;
        }

    function burn(uint256 amount) external {

        address sender = _msgSender();
        require(sender != address(0), "BaseRfiToken: burn from the zero address");
        require(sender != address(burnAddress), "BaseRfiToken: burn from the burn address");

        uint256 balance = balanceOf(sender);
        require(balance >= amount, "BaseRfiToken: burn amount exceeds balance");

        uint256 reflectedAmount = amount.mul(_getCurrentRate());

        _reflectedBalances[sender] = _reflectedBalances[sender].sub(reflectedAmount);
        if (_isExcludedFromRewards[sender])
            _balances[sender] = _balances[sender].sub(amount);

        _burnTokens( sender, amount, reflectedAmount );
    }
    
    function _burnTokens(address sender, uint256 tBurn, uint256 rBurn) internal {

        _reflectedBalances[burnAddress] = _reflectedBalances[burnAddress].add(rBurn);
        if (_isExcludedFromRewards[burnAddress])
            _balances[burnAddress] = _balances[burnAddress].add(tBurn);

        emit Transfer(sender, burnAddress, tBurn);
    }

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

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns(uint256) {
        require(tAmount <= TOTAL_SUPPLY, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,) = _getValues(tAmount,0);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,) = _getValues(tAmount,_getSumOfFees(_msgSender(), tAmount));
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) internal view returns(uint256) {
        require(rAmount <= _reflectedSupply, "Amount must be less than total reflections");
        uint256 currentRate = _getCurrentRate();
        return rAmount.div(currentRate);
    }
    
    function excludeFromReward(address account) external onlyOwner() {
        require(!_isExcludedFromRewards[account], "Account is not included");
        _exclude(account);
    }
    
    function _exclude(address account) internal {
        if(_reflectedBalances[account] > 0) {
            _balances[account] = tokenFromReflection(_reflectedBalances[account]);
        }
        _isExcludedFromRewards[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcludedFromRewards[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _balances[account] = 0;
                _isExcludedFromRewards[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function setExcludedFromFee(address account, bool value) external onlyOwner { _isExcludedFromFee[account] = value; }
    function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; }
    
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "BaseRfiToken: approve from the zero address");
        require(spender != address(0), "BaseRfiToken: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
    function _isUnlimitedSender(address account) internal view returns(bool){
        return (account == owner());
    }

    function _isUnlimitedRecipient(address account) internal view returns(bool){
        return (account == owner() || account == burnAddress);
    }

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

        require(sender != address(0), "BaseRfiToken: transfer from the zero address");
        require(recipient != address(0), "BaseRfiToken: transfer to the zero address");
        require(sender != address(burnAddress), "BaseRfiToken: transfer from the burn address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        bool takeFee = true;

        if ( isInPresale ){ takeFee = false; }
        else {

            if ( amount > maxTransactionAmount && !_isUnlimitedSender(sender) && !_isUnlimitedRecipient(recipient) ){
                revert("Transfer amount exceeds the maxTxAmount.");
            }

            if ( maxWalletBalance > 0 && !_isUnlimitedSender(sender) && !_isUnlimitedRecipient(recipient) && !_isV2Pair(recipient) ){
                uint256 recipientBalance = balanceOf(recipient);
                require(recipientBalance + amount <= maxWalletBalance, "New balance would exceed the maxWalletBalance");
            }
        }

        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ takeFee = false; }

        _transferTokens(sender, recipient, amount, takeFee);
        
    }

    function _transferTokens(address sender, address recipient, uint256 amount, bool takeFee) private {
    
        uint256 sumOfFees = _getSumOfFees(sender, amount);
        if ( !takeFee ){ sumOfFees = 0; }
        
        (uint256 rAmount, uint256 rTransferAmount, uint256 tAmount, uint256 tTransferAmount, uint256 currentRate ) = _getValues(amount, sumOfFees);
        
        _reflectedBalances[sender] = _reflectedBalances[sender].sub(rAmount);
        _reflectedBalances[recipient] = _reflectedBalances[recipient].add(rTransferAmount);

        if (_isExcludedFromRewards[sender]){ _balances[sender] = _balances[sender].sub(tAmount); }
        if (_isExcludedFromRewards[recipient] ){ _balances[recipient] = _balances[recipient].add(tTransferAmount); }
        
        _takeFees( amount, currentRate, sumOfFees );
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function _takeFees(uint256 amount, uint256 currentRate, uint256 sumOfFees ) private {
        if ( sumOfFees > 0 && !isInPresale ){
            _takeTransactionFees(amount, currentRate);
        }
    }
    
    function _getValues(uint256 tAmount, uint256 feesSum) internal view returns (uint256, uint256, uint256, uint256, uint256) {
        
        uint256 tTotalFees = tAmount.mul(feesSum).div(FEES_DIVISOR);
        uint256 tTransferAmount = tAmount.sub(tTotalFees);
        uint256 currentRate = _getCurrentRate();
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rTotalFees = tTotalFees.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rTotalFees);
        
        return (rAmount, rTransferAmount, tAmount, tTransferAmount, currentRate);
    }
    
    function _getCurrentRate() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }
    
    function _getCurrentSupply() internal view returns(uint256, uint256) {
        uint256 rSupply = _reflectedSupply;
        uint256 tSupply = TOTAL_SUPPLY;  

        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_reflectedBalances[_excluded[i]] > rSupply || _balances[_excluded[i]] > tSupply) return (_reflectedSupply, TOTAL_SUPPLY);
            rSupply = rSupply.sub(_reflectedBalances[_excluded[i]]);
            tSupply = tSupply.sub(_balances[_excluded[i]]);
        }
        if (tSupply == 0 || rSupply < _reflectedSupply.div(TOTAL_SUPPLY)) return (_reflectedSupply, TOTAL_SUPPLY);
        return (rSupply, tSupply);
    }
    
    function _getSumOfFees(address sender, uint256 amount) internal view virtual returns (uint256);

    function _isV2Pair(address account) internal view virtual returns(bool);

    function _redistribute(uint256 amount, uint256 currentRate, uint256 fee, uint256 index) internal {
        uint256 tFee = amount.mul(fee).div(FEES_DIVISOR);
        uint256 rFee = tFee.mul(currentRate);

        _reflectedSupply = _reflectedSupply.sub(rFee);
        _addFeeCollectedAmount(index, tFee);
    }

    function _takeTransactionFees(uint256 amount, uint256 currentRate) internal virtual;
}

abstract contract UniHelper is Ownable, Manageable {

    using SafeMath for uint256;

    uint256 private withdrawableBalance;

    enum Env {Testnet, MainnetV2, MainnetV3}
    Env private _env;

    address private _mainnetRouterV2Address = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    IUniswapV2Router internal _router;
    address internal _pair;

    uint256 private maxTransactionAmount;

    event RouterSet(address indexed router);

    receive() external payable {}

    function initializeRouterPair(Env env, uint256 maxTx) internal {
        _env = env;
        _setRouterAddress(_mainnetRouterV2Address);

        maxTransactionAmount = maxTx;
    }

    function _setRouterAddress(address router) private {
        IUniswapV2Router _newUniswapRouter = IUniswapV2Router(router);
        _pair = IUniswapV2Factory(_newUniswapRouter.factory()).createPair(address(this), _newUniswapRouter.WETH());
        _router = _newUniswapRouter;
        emit RouterSet(router);
    }

    function setRouterAddress(address router) external onlyManager() {
        _setRouterAddress(router);
    }

    function _approveDelegate(address owner, address spender, uint256 amount) internal virtual;

}

abstract contract Antiwhale is Tokenomics {

    function _getAntiwhaleFees(uint256, uint256) internal view returns (uint256){
        return sumOfFees;
    }
}

abstract contract PhoenixAbstract is BaseRfiToken, UniHelper, Antiwhale {
    
    using SafeMath for uint256;

    constructor(Env _env){

        initializeRouterPair(_env, maxTransactionAmount);

        _exclude(_pair);
        _exclude(burnAddress);
    }
    
    function _isV2Pair(address account) internal view override returns(bool){
        return (account == _pair);
    }

    function _getSumOfFees(address sender, uint256 amount) internal view override returns (uint256){ 
        return _getAntiwhaleFees(balanceOf(sender), amount); 
    }
    
    function _takeTransactionFees(uint256 amount, uint256 currentRate) internal override {
        
        if( isInPresale ){ return; }

        uint256 feesCount = _getFeesCount();
        for (uint256 index = 0; index < feesCount; index++ ){
            (FeeType name, uint256 value, address recipient,) = _getFee(index);
            if ( value == 0 ) continue;

            if ( name == FeeType.Rfi ){
                _redistribute( amount, currentRate, value, index );
            }
            else if ( name == FeeType.Burn ){
                _burn( amount, currentRate, value, index );
            }
            else {
                _takeFee( amount, currentRate, value, recipient, index );
            }
        }
    }

    function _burn(uint256 amount, uint256 currentRate, uint256 fee, uint256 index) private {
        uint256 tBurn = amount.mul(fee).div(FEES_DIVISOR);
        uint256 rBurn = tBurn.mul(currentRate);

        _burnTokens(address(this), tBurn, rBurn);
        _addFeeCollectedAmount(index, tBurn);
    }

    function _takeFee(uint256 amount, uint256 currentRate, uint256 fee, address recipient, uint256 index) private {

        uint256 tAmount = amount.mul(fee).div(FEES_DIVISOR);
        uint256 rAmount = tAmount.mul(currentRate);

        _reflectedBalances[recipient] = _reflectedBalances[recipient].add(rAmount);
        if(_isExcludedFromRewards[recipient])
            _balances[recipient] = _balances[recipient].add(tAmount);

        _addFeeCollectedAmount(index, tAmount);
    }
    
    function _approveDelegate(address owner, address spender, uint256 amount) internal override {
        _approve(owner, spender, amount);
    }
}

contract CRYPTOPHOENIX is PhoenixAbstract{

    constructor() PhoenixAbstract(Env.MainnetV2){
        _approve(owner(),address(_router), ~uint256(0));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"ManagementTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"}],"name":"RouterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setPreseableEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"transferManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526012600a62000014919062001726565b66038d7ea4c6800062000028919062001863565b60001962000037919062001998565b600019620000469190620018c4565b6004557375d9ea6fafdbedb2ce00b76622aa0df1b68caaf6600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507335ef633803ae3918f37571af741bc39ad11e3eaa600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fdaf289c815701d2b1b7b34340af584a9fabd2d8600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073641e8274ce7513e2df215fcad97515165019c497600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200024157600080fd5b5060016000620002566200068a60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000620003066200068a60201b60201c565b905080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c8560405160405180910390a350620003b56200069260201b60201c565b600454600c6000620003cc620007bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600f600062000420620007bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004e9620004dd620007bc60201b60201c565b620007e560201b60201c565b620004fa30620007e560201b60201c565b6200050a620007bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a62000569919062001726565b66038d7ea4c680006200057d919062001863565b6040516200058c919062001608565b60405180910390a3620005d78160286012600a620005ab919062001726565b66038d7ea4c68000620005bf919062001863565b620005cb919062001693565b6200098060201b60201c565b6200060a601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620007e560201b60201c565b6200063d600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620007e560201b60201c565b506200068462000652620007bc60201b60201c565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660001962000a0f60201b60201c565b62001b42565b600033905090565b620006a7600260143062000be260201b60201c565b620006de600160a0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000be260201b60201c565b620007156003600a600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000be260201b60201c565b6200074c6003600a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000be260201b60201c565b620007836003600a600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000be260201b60201c565b620007ba6003600a600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000be260201b60201c565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115620008c2576200087e600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d5260201b60201c565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506011819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b81601360006101000a81548160ff02191690836002811115620009cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555062000a04601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000dd260201b60201c565b806016819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000a82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a7990620015a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aec90620015e6565b60405180910390fd5b80600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000bd5919062001608565b60405180910390a3505050565b600a604051806080016040528085600481111562000c29577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1681526020016000815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548160ff0219169083600481111562000cd0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030155505081600b600082825462000d46919062001636565b92505081905550505050565b600060045482111562000d9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d9390620015c4565b60405180910390fd5b600062000dae6200103460201b60201c565b905062000dca81846200106e60201b62001fcd1790919060201c565b915050919050565b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801562000e1e57600080fd5b505afa15801562000e33573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e599190620014b2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801562000ebc57600080fd5b505afa15801562000ed1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ef79190620014b2565b6040518363ffffffff1660e01b815260040162000f1692919062001575565b602060405180830381600087803b15801562000f3157600080fd5b505af115801562000f46573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f6c9190620014b2565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1560405160405180910390a25050565b6000806000620010496200108660201b60201c565b915091506200106781836200106e60201b62001fcd1790919060201c565b9250505090565b600081836200107e919062001693565b905092915050565b6000806000600454905060006012600a620010a2919062001726565b66038d7ea4c68000620010b6919062001863565b905060005b601180549050811015620013ef5782600c60006011848154811062001109577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806200121f575081600d600060118481548110620011b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1562001259576004546012600a62001238919062001726565b66038d7ea4c680006200124c919062001863565b945094505050506200147f565b62001317600c6000601184815481106200129c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846200148360201b62001fe31790919060201c565b9250620013d7600d6000601184815481106200135c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836200148360201b62001fe31790919060201c565b91508080620013e6906200194a565b915050620010bb565b5060008114806200143d57506200143a6012600a6200140f919062001726565b66038d7ea4c6800062001423919062001863565b6004546200106e60201b62001fcd1790919060201c565b82105b1562001476576004546012600a62001456919062001726565b66038d7ea4c680006200146a919062001863565b9350935050506200147f565b81819350935050505b9091565b60008183620014939190620018c4565b905092915050565b600081519050620014ac8162001b28565b92915050565b600060208284031215620014c557600080fd5b6000620014d5848285016200149b565b91505092915050565b620014e981620018ff565b82525050565b6000620014fe602b8362001625565b91506200150b8262001a3b565b604082019050919050565b600062001525602a8362001625565b9150620015328262001a8a565b604082019050919050565b60006200154c60298362001625565b9150620015598262001ad9565b604082019050919050565b6200156f8162001933565b82525050565b60006040820190506200158c6000830185620014de565b6200159b6020830184620014de565b9392505050565b60006020820190508181036000830152620015bd81620014ef565b9050919050565b60006020820190508181036000830152620015df8162001516565b9050919050565b6000602082019050818103600083015262001601816200153d565b9050919050565b60006020820190506200161f600083018462001564565b92915050565b600082825260208201905092915050565b6000620016438262001933565b9150620016508362001933565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620016885762001687620019d0565b5b828201905092915050565b6000620016a08262001933565b9150620016ad8362001933565b925082620016c057620016bf620019ff565b5b828204905092915050565b6000808291508390505b60018511156200171d57808604811115620016f557620016f4620019d0565b5b6001851615620017055780820291505b8081029050620017158562001a2e565b9450620016d5565b94509492505050565b6000620017338262001933565b915062001740836200193d565b92506200176f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001777565b905092915050565b6000826200178957600190506200185c565b816200179957600090506200185c565b8160018114620017b25760028114620017bd57620017f3565b60019150506200185c565b60ff841115620017d257620017d1620019d0565b5b8360020a915084821115620017ec57620017eb620019d0565b5b506200185c565b5060208310610133831016604e8410600b84101617156200182d5782820a905083811115620018275762001826620019d0565b5b6200185c565b6200183c8484846001620016cb565b92509050818404811115620018565762001855620019d0565b5b81810290505b9392505050565b6000620018708262001933565b91506200187d8362001933565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620018b957620018b8620019d0565b5b828202905092915050565b6000620018d18262001933565b9150620018de8362001933565b925082821015620018f457620018f3620019d0565b5b828203905092915050565b60006200190c8262001913565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000620019578262001933565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200198d576200198c620019d0565b5b600182019050919050565b6000620019a58262001933565b9150620019b28362001933565b925082620019c557620019c4620019ff565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008160011c9050919050565b7f42617365526669546f6b656e3a20617070726f76652066726f6d20746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f42617365526669546f6b656e3a20617070726f766520746f20746865207a657260008201527f6f20616464726573730000000000000000000000000000000000000000000000602082015250565b62001b3381620018ff565b811462001b3f57600080fd5b50565b6151048062001b526000396000f3fe6080604052600436106101bb5760003560e01c80636612e66f116100ec578063a457c2d71161008a578063dd46706411610064578063dd4670641461063d578063dd62ed3e14610666578063e4edf852146106a3578063f2fde38b146106cc576101c2565b8063a457c2d7146105ac578063a69df4b5146105e9578063a9059cbb14610600576101c2565b806374778cdc116100c657806374778cdc146104f057806388f82020146105195780638da5cb5b1461055657806395d89b4114610581576101c2565b80636612e66f1461047357806370a082311461049c578063715018a6146104d9576101c2565b806341cb87fc11610159578063481c6a7511610133578063481c6a75146103b757806352390c02146103e25780635342acb41461040b578063602bc62b14610448576101c2565b806341cb87fc1461032857806342966c68146103515780634549b0391461037a576101c2565b806323b872dd1161019557806323b872dd1461025a578063313ce567146102975780633685d419146102c257806339509351146102eb576101c2565b806306fdde03146101c7578063095ea7b3146101f257806318160ddd1461022f576101c2565b366101c257005b600080fd5b3480156101d357600080fd5b506101dc6106f5565b6040516101e99190614398565b60405180910390f35b3480156101fe57600080fd5b5061021960048036038101906102149190613f1b565b610732565b604051610226919061437d565b60405180910390f35b34801561023b57600080fd5b50610244610750565b604051610251919061465a565b60405180910390f35b34801561026657600080fd5b50610281600480360381019061027c9190613e90565b610777565b60405161028e919061437d565b60405180910390f35b3480156102a357600080fd5b506102ac610850565b6040516102b99190614675565b60405180910390f35b3480156102ce57600080fd5b506102e960048036038101906102e49190613e02565b610859565b005b3480156102f757600080fd5b50610312600480360381019061030d9190613f1b565b610c40565b60405161031f919061437d565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190613e02565b610cf3565b005b34801561035d57600080fd5b5061037860048036038101906103739190613f80565b610d96565b005b34801561038657600080fd5b506103a1600480360381019061039c9190613fa9565b61109f565b6040516103ae919061465a565b60405180910390f35b3480156103c357600080fd5b506103cc611151565b6040516103d99190614339565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190613e02565b61117b565b005b34801561041757600080fd5b50610432600480360381019061042d9190613e02565b6112a9565b60405161043f919061437d565b60405180910390f35b34801561045457600080fd5b5061045d6112ff565b60405161046a919061465a565b60405180910390f35b34801561047f57600080fd5b5061049a60048036038101906104959190613edf565b611309565b005b3480156104a857600080fd5b506104c360048036038101906104be9190613e02565b6113f9565b6040516104d0919061465a565b60405180910390f35b3480156104e557600080fd5b506104ee6114e4565b005b3480156104fc57600080fd5b5061051760048036038101906105129190613f57565b611637565b005b34801561052557600080fd5b50610540600480360381019061053b9190613e02565b6116eb565b60405161054d919061437d565b60405180910390f35b34801561056257600080fd5b5061056b611741565b6040516105789190614339565b60405180910390f35b34801561058d57600080fd5b5061059661176a565b6040516105a39190614398565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce9190613f1b565b6117a7565b6040516105e0919061437d565b60405180910390f35b3480156105f557600080fd5b506105fe611874565b005b34801561060c57600080fd5b5061062760048036038101906106229190613f1b565b611a48565b604051610634919061437d565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f9190613f80565b611a66565b005b34801561067257600080fd5b5061068d60048036038101906106889190613e54565b611c2d565b60405161069a919061465a565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c59190613e02565b611cb4565b005b3480156106d857600080fd5b506106f360048036038101906106ee9190613e02565b611e0b565b005b60606040518060400160405280600e81526020017f43525950544f2050484f454e4958000000000000000000000000000000000000815250905090565b600061074661073f611ff9565b8484612001565b6001905092915050565b60006012600a6107609190614786565b66038d7ea4c6800061077291906148a4565b905090565b60006107848484846121cc565b61084584610790611ff9565b6108408560405180606001604052806028815260200161508260289139600e60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107f6611ff9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125e69092919063ffffffff16565b612001565b600190509392505050565b60006012905090565b610861611ff9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e59061457a565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661097a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109719061449a565b60405180910390fd5b60005b601180549050811015610c3c578173ffffffffffffffffffffffffffffffffffffffff16601182815481106109db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610c295760116001601180549050610a3691906148fe565b81548110610a6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660118281548110610ad2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506011805480610bef577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610c3c565b8080610c34906149ba565b91505061097d565b5050565b6000610ce9610c4d611ff9565b84610ce485600e6000610c5e611ff9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263b90919063ffffffff16565b612001565b6001905092915050565b610cfb611ff9565b73ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d81906145da565b60405180910390fd5b610d9381612651565b50565b6000610da0611ff9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e099061463a565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9a9061447a565b60405180910390fd5b6000610eae826113f9565b905082811015610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea9061453a565b60405180910390fd5b6000610f0f610f006128a5565b856128d090919063ffffffff16565b9050610f6381600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe390919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561108e5761104a84600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe390919063ffffffff16565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6110998385836128e6565b50505050565b60006012600a6110af9190614786565b66038d7ea4c680006110c191906148a4565b831115611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa906144fa565b60405180910390fd5b81611124576000611115846000612b99565b5050505090508091505061114b565b60006111408461113b611135611ff9565b87612c56565b612b99565b505050915050809150505b92915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611183611ff9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611210576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112079061457a565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561129d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112949061445a565b60405180910390fd5b6112a681612c72565b50565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600254905090565b611311611ff9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461139e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113959061457a565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561149457600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506114df565b6114dc600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e04565b90505b919050565b6114ec611ff9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611579576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115709061457a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61163f611ff9565b73ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c5906145da565b60405180910390fd5b80600360146101000a81548160ff02191690831515021790555050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f2443504858000000000000000000000000000000000000000000000000000000815250905090565b600061186a6117b4611ff9565b84611865856040518060600160405280602581526020016150aa60259139600e60006117de611ff9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125e69092919063ffffffff16565b612001565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fb906143fa565b60405180910390fd5b6002544211611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f906143ba565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611a5c611a55611ff9565b84846121cc565b6001905092915050565b611a6e611ff9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af29061457a565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042611ba991906146ac565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611cbc611ff9565b73ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d42906145da565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c8560405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e13611ff9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e979061457a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f079061443a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008183611fdb9190614702565b905092915050565b60008183611ff191906148fe565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612071576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612068906143da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d89061461a565b60405180910390fd5b80600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121bf919061465a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561223c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612233906144ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a39061455a565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561233d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612334906144da565b60405180910390fd5b60008111612380576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123779061459a565b60405180910390fd5b600060019050600360149054906101000a900460ff16156123a45760009050612529565b60286012600a6123b49190614786565b66038d7ea4c680006123c691906148a4565b6123d09190614702565b821180156123e457506123e284612e72565b155b80156123f657506123f483612eb1565b155b15612436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242d9061451a565b60405180910390fd5b600060146012600a6124489190614786565b66038d7ea4c6800061245a91906148a4565b6124649190614702565b118015612477575061247584612e72565b155b8015612489575061248783612eb1565b155b801561249b575061249983612f48565b155b156125285760006124ab846113f9565b905060146012600a6124bd9190614786565b66038d7ea4c680006124cf91906148a4565b6124d99190614702565b83826124e591906146ac565b1115612526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251d906145ba565b60405180910390fd5b505b5b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125ca5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125d457600090505b6125e084848484612fa2565b50505050565b600083831115829061262e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126259190614398565b60405180910390fd5b5082840390509392505050565b6000818361264991906146ac565b905092915050565b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561269c57600080fd5b505afa1580156126b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d49190613e2b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561273657600080fd5b505afa15801561274a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276e9190613e2b565b6040518363ffffffff1660e01b815260040161278b929190614354565b602060405180830381600087803b1580156127a557600080fd5b505af11580156127b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dd9190613e2b565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff167fc6b438e6a8a59579ce6a4406cbd203b740e0d47b458aae6596339bcd40c40d1560405160405180910390a25050565b60008060006128b261334c565b915091506128c98183611fcd90919063ffffffff16565b9250505090565b600081836128de91906148a4565b905092915050565b61295a81600c6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263b90919063ffffffff16565b600c6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060106000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b0d57612aa782600d6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263b90919063ffffffff16565b600d6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b8c919061465a565b60405180910390a3505050565b600080600080600080612bcd6103e861ffff16612bbf898b6128d090919063ffffffff16565b611fcd90919063ffffffff16565b90506000612be4828a611fe390919063ffffffff16565b90506000612bf06128a5565b90506000612c07828c6128d090919063ffffffff16565b90506000612c1e83866128d090919063ffffffff16565b90506000612c358284611fe390919063ffffffff16565b905082818e87879a509a509a509a509a505050505050509295509295909350565b6000612c6a612c64846113f9565b83613716565b905092915050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612d4657612d02600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e04565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506011819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600454821115612e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e429061441a565b60405180910390fd5b6000612e556128a5565b9050612e6a8184611fcd90919063ffffffff16565b915050919050565b6000612e7c611741565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000612ebb611741565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480612f415750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000612fae8584612c56565b905081612fba57600090505b6000806000806000612fcc8887612b99565b9450945094509450945061302885600c60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe390919063ffffffff16565b600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130bd84600c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263b90919063ffffffff16565b600c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156131e8576131a483600d60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe390919063ffffffff16565b600d60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132d05761328c82600d60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263b90919063ffffffff16565b600d60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6132db888288613723565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613338919061465a565b60405180910390a350505050505050505050565b6000806000600454905060006012600a6133669190614786565b66038d7ea4c6800061337891906148a4565b905060005b6011805490508110156136945782600c6000601184815481106133c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806134dd575081600d600060118481548110613475577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613511576004546012600a6134f39190614786565b66038d7ea4c6800061350591906148a4565b94509450505050613712565b6135c7600c600060118481548110613552577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484611fe390919063ffffffff16565b925061367f600d60006011848154811061360a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611fe390919063ffffffff16565b9150808061368c906149ba565b91505061337d565b5060008114806136d657506136d36012600a6136b09190614786565b66038d7ea4c680006136c291906148a4565b600454611fcd90919063ffffffff16565b82105b15613709576004546012600a6136ec9190614786565b66038d7ea4c680006136fe91906148a4565b935093505050613712565b81819350935050505b9091565b6000600b54905092915050565b6000811180156137405750600360149054906101000a900460ff16155b156137505761374f8383613755565b5b505050565b600360149054906101000a900460ff161561376f576138e9565b60006137796138ed565b905060005b818110156138e6576000806000613794846138fa565b5092509250925060008214156137ac575050506138d3565b600260048111156137e6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b83600481111561381f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156138365761383187878487613a2d565b6138cf565b60016004811115613870577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8360048111156138a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156138c0576138bb87878487613aa0565b6138ce565b6138cd8787848488613b03565b5b5b5050505b80806138de906149ba565b91505061377e565b50505b5050565b6000600a80549050905090565b600080600080600061390b86613cd9565b6040518060800160405290816000820160009054906101000a900460ff166004811115613961577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811115613999577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600382015481525050905080600001518160200151826040015183606001519450945094509450509193509193565b6000613a5a6103e861ffff16613a4c85886128d090919063ffffffff16565b611fcd90919063ffffffff16565b90506000613a7185836128d090919063ffffffff16565b9050613a8881600454611fe390919063ffffffff16565b600481905550613a988383613d7d565b505050505050565b6000613acd6103e861ffff16613abf85886128d090919063ffffffff16565b611fcd90919063ffffffff16565b90506000613ae485836128d090919063ffffffff16565b9050613af13083836128e6565b613afb8383613d7d565b505050505050565b6000613b306103e861ffff16613b2286896128d090919063ffffffff16565b611fcd90919063ffffffff16565b90506000613b4786836128d090919063ffffffff16565b9050613b9b81600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263b90919063ffffffff16565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613cc657613c8282600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263b90919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613cd08383613d7d565b50505050505050565b6000808210158015613cef5750600a8054905082105b613d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d25906145fa565b60405180910390fd5b600a8281548110613d68577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600402019050919050565b6000613d8883613cd9565b9050613da182826003015461263b90919063ffffffff16565b8160030181905550505050565b600081359050613dbd8161503c565b92915050565b600081519050613dd28161503c565b92915050565b600081359050613de781615053565b92915050565b600081359050613dfc8161506a565b92915050565b600060208284031215613e1457600080fd5b6000613e2284828501613dae565b91505092915050565b600060208284031215613e3d57600080fd5b6000613e4b84828501613dc3565b91505092915050565b60008060408385031215613e6757600080fd5b6000613e7585828601613dae565b9250506020613e8685828601613dae565b9150509250929050565b600080600060608486031215613ea557600080fd5b6000613eb386828701613dae565b9350506020613ec486828701613dae565b9250506040613ed586828701613ded565b9150509250925092565b60008060408385031215613ef257600080fd5b6000613f0085828601613dae565b9250506020613f1185828601613dd8565b9150509250929050565b60008060408385031215613f2e57600080fd5b6000613f3c85828601613dae565b9250506020613f4d85828601613ded565b9150509250929050565b600060208284031215613f6957600080fd5b6000613f7784828501613dd8565b91505092915050565b600060208284031215613f9257600080fd5b6000613fa084828501613ded565b91505092915050565b60008060408385031215613fbc57600080fd5b6000613fca85828601613ded565b9250506020613fdb85828601613dd8565b9150509250929050565b613fee81614932565b82525050565b613ffd81614944565b82525050565b600061400e82614690565b614018818561469b565b9350614028818560208601614987565b61403181614a61565b840191505092915050565b6000614049601c8361469b565b915061405482614a7f565b602082019050919050565b600061406c602b8361469b565b915061407782614aa8565b604082019050919050565b600061408f602c8361469b565b915061409a82614af7565b604082019050919050565b60006140b2602a8361469b565b91506140bd82614b46565b604082019050919050565b60006140d560268361469b565b91506140e082614b95565b604082019050919050565b60006140f860178361469b565b915061410382614be4565b602082019050919050565b600061411b60288361469b565b915061412682614c0d565b604082019050919050565b600061413e60178361469b565b915061414982614c5c565b602082019050919050565b6000614161602c8361469b565b915061416c82614c85565b604082019050919050565b6000614184602c8361469b565b915061418f82614cd4565b604082019050919050565b60006141a7601f8361469b565b91506141b282614d23565b602082019050919050565b60006141ca60288361469b565b91506141d582614d4c565b604082019050919050565b60006141ed60298361469b565b91506141f882614d9b565b604082019050919050565b6000614210602a8361469b565b915061421b82614dea565b604082019050919050565b600061423360208361469b565b915061423e82614e39565b602082019050919050565b600061425660298361469b565b915061426182614e62565b604082019050919050565b6000614279602d8361469b565b915061428482614eb1565b604082019050919050565b600061429c60258361469b565b91506142a782614f00565b604082019050919050565b60006142bf60338361469b565b91506142ca82614f4f565b604082019050919050565b60006142e260298361469b565b91506142ed82614f9e565b604082019050919050565b600061430560288361469b565b915061431082614fed565b604082019050919050565b61432481614970565b82525050565b6143338161497a565b82525050565b600060208201905061434e6000830184613fe5565b92915050565b60006040820190506143696000830185613fe5565b6143766020830184613fe5565b9392505050565b60006020820190506143926000830184613ff4565b92915050565b600060208201905081810360008301526143b28184614003565b905092915050565b600060208201905081810360008301526143d38161403c565b9050919050565b600060208201905081810360008301526143f38161405f565b9050919050565b6000602082019050818103600083015261441381614082565b9050919050565b60006020820190508181036000830152614433816140a5565b9050919050565b60006020820190508181036000830152614453816140c8565b9050919050565b60006020820190508181036000830152614473816140eb565b9050919050565b600060208201905081810360008301526144938161410e565b9050919050565b600060208201905081810360008301526144b381614131565b9050919050565b600060208201905081810360008301526144d381614154565b9050919050565b600060208201905081810360008301526144f381614177565b9050919050565b600060208201905081810360008301526145138161419a565b9050919050565b60006020820190508181036000830152614533816141bd565b9050919050565b60006020820190508181036000830152614553816141e0565b9050919050565b6000602082019050818103600083015261457381614203565b9050919050565b6000602082019050818103600083015261459381614226565b9050919050565b600060208201905081810360008301526145b381614249565b9050919050565b600060208201905081810360008301526145d38161426c565b9050919050565b600060208201905081810360008301526145f38161428f565b9050919050565b60006020820190508181036000830152614613816142b2565b9050919050565b60006020820190508181036000830152614633816142d5565b9050919050565b60006020820190508181036000830152614653816142f8565b9050919050565b600060208201905061466f600083018461431b565b92915050565b600060208201905061468a600083018461432a565b92915050565b600081519050919050565b600082825260208201905092915050565b60006146b782614970565b91506146c283614970565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146f7576146f6614a03565b5b828201905092915050565b600061470d82614970565b915061471883614970565b92508261472857614727614a32565b5b828204905092915050565b6000808291508390505b600185111561477d5780860481111561475957614758614a03565b5b60018516156147685780820291505b808102905061477685614a72565b945061473d565b94509492505050565b600061479182614970565b915061479c8361497a565b92506147c97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846147d1565b905092915050565b6000826147e1576001905061489d565b816147ef576000905061489d565b8160018114614805576002811461480f5761483e565b600191505061489d565b60ff84111561482157614820614a03565b5b8360020a91508482111561483857614837614a03565b5b5061489d565b5060208310610133831016604e8410600b84101617156148735782820a90508381111561486e5761486d614a03565b5b61489d565b6148808484846001614733565b9250905081840481111561489757614896614a03565b5b81810290505b9392505050565b60006148af82614970565b91506148ba83614970565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148f3576148f2614a03565b5b828202905092915050565b600061490982614970565b915061491483614970565b92508282101561492757614926614a03565b5b828203905092915050565b600061493d82614950565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156149a557808201518184015260208101905061498a565b838111156149b4576000848401525b50505050565b60006149c582614970565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149f8576149f7614a03565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f54686520636f6e7472616374206973207374696c6c206c6f636b656400000000600082015250565b7f42617365526669546f6b656e3a20617070726f76652066726f6d20746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f6e6c79207468652070726576696f7573206f776e65722063616e20756e6c6f60008201527f636b206f6e776572736869700000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e74206973206e6f7420696e636c75646564000000000000000000600082015250565b7f42617365526669546f6b656e3a206275726e2066726f6d20746865206275726e60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b7f42617365526669546f6b656e3a207472616e736665722066726f6d207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b7f42617365526669546f6b656e3a207472616e736665722066726f6d207468652060008201527f6275726e20616464726573730000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f42617365526669546f6b656e3a206275726e20616d6f756e742065786365656460008201527f732062616c616e63650000000000000000000000000000000000000000000000602082015250565b7f42617365526669546f6b656e3a207472616e7366657220746f20746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4e65772062616c616e636520776f756c642065786365656420746865206d617860008201527f57616c6c657442616c616e636500000000000000000000000000000000000000602082015250565b7f4d616e61676561626c653a2063616c6c6572206973206e6f7420746865206d6160008201527f6e61676572000000000000000000000000000000000000000000000000000000602082015250565b7f4665657353657474696e67732e5f6765744665655374727563743a204665652060008201527f696e646578206f7574206f6620626f756e647300000000000000000000000000602082015250565b7f42617365526669546f6b656e3a20617070726f766520746f20746865207a657260008201527f6f20616464726573730000000000000000000000000000000000000000000000602082015250565b7f42617365526669546f6b656e3a206275726e2066726f6d20746865207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b61504581614932565b811461505057600080fd5b50565b61505c81614944565b811461506757600080fd5b50565b61507381614970565b811461507e57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220529b713f1721b8d3a0a45a787a27d4a56ae4b5d5189660a93fdbc1d97471e52964736f6c63430008040033

Deployed ByteCode Sourcemap

26349:163:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12225:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13257:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12506:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13452:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12407:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16781:499;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14882:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23659:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13790:722;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15534:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6938:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16304:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17414:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5960:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17292:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12636:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5556:148;;;;;;;;;;;;;:::i;:::-;;11240:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15393:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5346:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12314:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15112:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6288:311;;;;;;;;;;;;;:::i;:::-;;12889:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6056:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13089:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7144:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5710:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12225:79;12273:13;12297:4;;;;;;;;;;;;;;;;;12290:11;;12225:79;:::o;13257:175::-;13334:4;13355:39;13364:12;:10;:12::i;:::-;13378:7;13387:6;13355:8;:39::i;:::-;13416:4;13409:11;;13257:175;;;;:::o;12506:110::-;12561:7;8558:2;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;12585:19;;12506:110;:::o;13452:330::-;13552:4;13572:36;13582:6;13590:9;13601:6;13572:9;:36::i;:::-;13623:121;13632:6;13640:12;:10;:12::i;:::-;13654:89;13692:6;13654:89;;;;;;;;;;;;;;;;;:11;:19;13666:6;13654:19;;;;;;;;;;;;;;;:33;13674:12;:10;:12::i;:::-;13654:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;13623:8;:121::i;:::-;13766:4;13759:11;;13452:330;;;;;:::o;12407:79::-;12459:5;8558:2;12468:15;;12407:79;:::o;16781:499::-;5481:12;:10;:12::i;:::-;5471:22;;:6;;;;;;;;;;:22;;;5463:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16863:22:::1;:31;16886:7;16863:31;;;;;;;;;;;;;;;;;;;;;;;;;16855:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16938:9;16933:340;16957:9;:16;;;;16953:1;:20;16933:340;;;17015:7;16999:23;;:9;17009:1;16999:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;16995:267;;;17058:9;17087:1;17068:9;:16;;;;:20;;;;:::i;:::-;17058:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17043:9;17053:1;17043:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;17129:1;17108:9;:18;17118:7;17108:18;;;;;;;;;;;;;;;:22;;;;17183:5;17149:22;:31;17172:7;17149:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;17207:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17241:5;;16995:267;16975:3;;;;;:::i;:::-;;;;16933:340;;;;16781:499:::0;:::o;14882:218::-;14970:4;14987:83;14996:12;:10;:12::i;:::-;15010:7;15019:50;15058:10;15019:11;:25;15031:12;:10;:12::i;:::-;15019:25;;;;;;;;;;;;;;;:34;15045:7;15019:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;14987:8;:83::i;:::-;15088:4;15081:11;;14882:218;;;;:::o;23659:109::-;7064:12;:10;:12::i;:::-;7052:24;;:8;;;;;;;;;;;:24;;;7044:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23735:25:::1;23753:6;23735:17;:25::i;:::-;23659:109:::0;:::o;13790:722::-;13842:14;13859:12;:10;:12::i;:::-;13842:29;;13908:1;13890:20;;:6;:20;;;;13882:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13992:11;;;;;;;;;;;13974:30;;:6;:30;;;;13966:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;14062:15;14080:17;14090:6;14080:9;:17::i;:::-;14062:35;;14127:6;14116:7;:17;;14108:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14192:23;14218:29;14229:17;:15;:17::i;:::-;14218:6;:10;;:29;;;;:::i;:::-;14192:55;;14289:47;14320:15;14289:18;:26;14308:6;14289:26;;;;;;;;;;;;;;;;:30;;:47;;;;:::i;:::-;14260:18;:26;14279:6;14260:26;;;;;;;;;;;;;;;:76;;;;14351:22;:30;14374:6;14351:30;;;;;;;;;;;;;;;;;;;;;;;;;14347:98;;;14416:29;14438:6;14416:9;:17;14426:6;14416:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;14396:9;:17;14406:6;14396:17;;;;;;;;;;;;;;;:49;;;;14347:98;14458:46;14471:6;14479;14487:15;14458:11;:46::i;:::-;13790:722;;;;:::o;15534:480::-;15626:7;8558:2;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;15654:7;:23;;15646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15729:17;15724:283;;15764:15;15787:21;15798:7;15806:1;15787:10;:21::i;:::-;15763:45;;;;;;15830:7;15823:14;;;;;15724:283;15872:23;15902:56;15913:7;15921:36;15935:12;:10;:12::i;:::-;15949:7;15921:13;:36::i;:::-;15902:10;:56::i;:::-;15870:88;;;;;;15980:15;15973:22;;;15534:480;;;;;:::o;6938:67::-;6977:7;6994:8;;;;;;;;;;;6987:15;;6938:67;:::o;16304:180::-;5481:12;:10;:12::i;:::-;5471:22;;:6;;;;;;;;;;:22;;;5463:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16389:22:::1;:31;16412:7;16389:31;;;;;;;;;;;;;;;;;;;;;;;;;16388:32;16380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16459:17;16468:7;16459:8;:17::i;:::-;16304:180:::0;:::o;17414:109::-;17478:4;17493:18;:27;17512:7;17493:27;;;;;;;;;;;;;;;;;;;;;;;;;17486:34;;17414:109;;;:::o;5960:90::-;6006:7;6033:9;;6026:16;;5960:90;:::o;17292:116::-;5481:12;:10;:12::i;:::-;5471:22;;:6;;;;;;;;;;:22;;;5463:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17400:5:::1;17370:18;:27;17389:7;17370:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;17292:116:::0;;:::o;12636:233::-;12702:7;12729:22;:31;12752:7;12729:31;;;;;;;;;;;;;;;;;;;;;;;;;12725:62;;;12769:9;:18;12779:7;12769:18;;;;;;;;;;;;;;;;12762:25;;;;12725:62;12809:48;12829:18;:27;12848:7;12829:27;;;;;;;;;;;;;;;;12809:19;:48::i;:::-;12802:55;;12636:233;;;;:::o;5556:148::-;5481:12;:10;:12::i;:::-;5471:22;;:6;;;;;;;;;;:22;;;5463:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5663:1:::1;5626:40;;5647:6;::::0;::::1;;;;;;;;5626:40;;;;;;;;;;;;5694:1;5677:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5556:148::o:0;11240:100::-;7064:12;:10;:12::i;:::-;7052:24;;:8;;;;;;;;;;;:24;;;7044:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11327:5:::1;11313:11;;:19;;;;;;;;;;;;;;;;;;11240:100:::0;:::o;15393:133::-;15463:4;15487:22;:31;15510:7;15487:31;;;;;;;;;;;;;;;;;;;;;;;;;15480:38;;15393:133;;;:::o;5346:79::-;5384:7;5411:6;;;;;;;;;;;5404:13;;5346:79;:::o;12314:83::-;12364:13;12388:6;;;;;;;;;;;;;;;;;12381:13;;12314:83;:::o;15112:269::-;15205:4;15222:129;15231:12;:10;:12::i;:::-;15245:7;15254:96;15293:15;15254:96;;;;;;;;;;;;;;;;;:11;:25;15266:12;:10;:12::i;:::-;15254:25;;;;;;;;;;;;;;;:34;15280:7;15254:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;15222:8;:129::i;:::-;15369:4;15362:11;;15112:269;;;;:::o;6288:311::-;6358:10;6340:28;;:14;;;;;;;;;;;:28;;;6332:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6454:9;;6436:15;:27;6428:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;6542:14;;;;;;;;;;;6513:44;;6534:6;;;;;;;;;;6513:44;;;;;;;;;;;;6577:14;;;;;;;;;;;6568:6;;:23;;;;;;;;;;;;;;;;;;6288:311::o;12889:180::-;12969:4;12989:42;12999:12;:10;:12::i;:::-;13013:9;13024:6;12989:9;:42::i;:::-;13053:4;13046:11;;12889:180;;;;:::o;6056:226::-;5481:12;:10;:12::i;:::-;5471:22;;:6;;;;;;;;;;:22;;;5463:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6137:6:::1;::::0;::::1;;;;;;;;6120:14;;:23;;;;;;;;;;;;;;;;;;6171:1;6154:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6214:4;6196:15;:22;;;;:::i;:::-;6184:9;:34;;;;6271:1;6234:40;;6255:6;::::0;::::1;;;;;;;;6234:40;;;;;;;;;;;;6056:226:::0;:::o;13089:152::-;13172:7;13202:11;:18;13214:5;13202:18;;;;;;;;;;;;;;;:27;13221:7;13202:27;;;;;;;;;;;;;;;;13195:34;;13089:152;;;;:::o;7144:176::-;7064:12;:10;:12::i;:::-;7052:24;;:8;;;;;;;;;;;:24;;;7044:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7269:10:::1;7237:43;;7259:8;;;;;;;;;;;7237:43;;;;;;;;;;;;7302:10;7291:8;;:21;;;;;;;;;;;;;;;;;;7144:176:::0;:::o;5710:244::-;5481:12;:10;:12::i;:::-;5471:22;;:6;;;;;;;;;;:22;;;5463:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5819:1:::1;5799:22;;:8;:22;;;;5791:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5909:8;5880:38;;5901:6;::::0;::::1;;;;;;;;5880:38;;;;;;;;;;;;5938:8;5929:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;5710:244:::0;:::o;1469:82::-;1527:7;1548:1;1544;:5;;;;:::i;:::-;1537:12;;1469:82;;;;:::o;1293:::-;1351:7;1372:1;1368;:5;;;;:::i;:::-;1361:12;;1293:82;;;;:::o;997:::-;1050:7;1067:10;1060:17;;997:82;:::o;17535:352::-;17646:1;17629:19;;:5;:19;;;;17621:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;17734:1;17715:21;;:7;:21;;;;17707:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;17825:6;17795:11;:18;17807:5;17795:18;;;;;;;;;;;;;;;:27;17814:7;17795:27;;;;;;;;;;;;;;;:36;;;;17863:7;17847:32;;17856:5;17847:32;;;17872:6;17847:32;;;;;;:::i;:::-;;;;;;;;17535:352;;;:::o;18180:1269::-;18297:1;18279:20;;:6;:20;;;;18271:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;18388:1;18367:23;;:9;:23;;;;18359:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;18474:11;;;;;;;;;;;18456:30;;:6;:30;;;;18448:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;18563:1;18554:6;:10;18546:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18631:12;18646:4;18631:19;;18668:11;;;;;;;;;;;18663:610;;;18693:5;18683:15;;18663:610;;;8886:2;8558;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;8871:17;;;;:::i;:::-;18738:6;:29;:60;;;;;18772:26;18791:6;18772:18;:26::i;:::-;18771:27;18738:60;:97;;;;;18803:32;18825:9;18803:21;:32::i;:::-;18802:33;18738:97;18733:189;;;18856:50;;;;;;;;;;:::i;:::-;;;;;;;;18733:189;18962:1;8989:2;8558;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;8974:17;;;;:::i;:::-;18943:20;:51;;;;;18968:26;18987:6;18968:18;:26::i;:::-;18967:27;18943:51;:88;;;;;18999:32;19021:9;18999:21;:32::i;:::-;18998:33;18943:88;:113;;;;;19036:20;19046:9;19036;:20::i;:::-;19035:21;18943:113;18938:324;;;19077:24;19104:20;19114:9;19104;:20::i;:::-;19077:47;;8989:2;8558;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;8974:17;;;;:::i;:::-;19170:6;19151:16;:25;;;;:::i;:::-;:45;;19143:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;18938:324;;18663:610;19288:18;:26;19307:6;19288:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;19318:18;:29;19337:9;19318:29;;;;;;;;;;;;;;;;;;;;;;;;;19288:59;19285:83;;;19360:5;19350:15;;19285:83;19380:51;19396:6;19404:9;19415:6;19423:7;19380:15;:51::i;:::-;18180:1269;;;;:::o;1645:171::-;1731:7;1776:1;1771;:6;;1779:12;1763:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1805:1;1801;:5;1794:12;;1645:171;;;;;:::o;1205:82::-;1263:7;1284:1;1280;:5;;;;:::i;:::-;1273:12;;1205:82;;;;:::o;23332:319::-;23394:34;23448:6;23394:61;;23492:17;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23474:57;;;23540:4;23547:17;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23474:98;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23466:5;;:106;;;;;;;;;;;;;;;;;;23593:17;23583:7;;:27;;;;;;;;;;;;;;;;;;23636:6;23626:17;;;;;;;;;;;;23332:319;;:::o;21184:171::-;21233:7;21254:15;21271;21290:19;:17;:19::i;:::-;21253:56;;;;21327:20;21339:7;21327;:11;;:20;;;;:::i;:::-;21320:27;;;;21184:171;:::o;1381:82::-;1439:7;1460:1;1456;:5;;;;:::i;:::-;1449:12;;1381:82;;;;:::o;14524:350::-;14647:42;14683:5;14647:18;:31;14666:11;;;;;;;;;;;14647:31;;;;;;;;;;;;;;;;:35;;:42;;;;:::i;:::-;14613:18;:31;14632:11;;;;;;;;;;;14613:31;;;;;;;;;;;;;;;:76;;;;14704:22;:35;14727:11;;;;;;;;;;;14704:35;;;;;;;;;;;;;;;;;;;;;;;;;14700:112;;;14779:33;14806:5;14779:9;:22;14789:11;;;;;;;;;;;14779:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;14754:9;:22;14764:11;;;;;;;;;;;14754:22;;;;;;;;;;;;;;;:58;;;;14700:112;14847:11;;;;;;;;;;;14830:36;;14839:6;14830:36;;;14860:5;14830:36;;;;;;:::i;:::-;;;;;;;;14524:350;;;:::o;20587:585::-;20664:7;20673;20682;20691;20700;20730:18;20751:38;8511:5;20751:38;;:20;20763:7;20751;:11;;:20;;;;:::i;:::-;:24;;:38;;;;:::i;:::-;20730:59;;20800:23;20826;20838:10;20826:7;:11;;:23;;;;:::i;:::-;20800:49;;20860:19;20882:17;:15;:17::i;:::-;20860:39;;20910:15;20928:24;20940:11;20928:7;:11;;:24;;;;:::i;:::-;20910:42;;20963:18;20984:27;20999:11;20984:10;:14;;:27;;;;:::i;:::-;20963:48;;21022:23;21048;21060:10;21048:7;:11;;:23;;;;:::i;:::-;21022:49;;21100:7;21109:15;21126:7;21135:15;21152:11;21092:72;;;;;;;;;;;;;;;;20587:585;;;;;;;;:::o;24451:167::-;24538:7;24565:44;24583:17;24593:6;24583:9;:17::i;:::-;24602:6;24565:17;:44::i;:::-;24558:51;;24451:167;;;;:::o;16496:277::-;16584:1;16554:18;:27;16573:7;16554:27;;;;;;;;;;;;;;;;:31;16551:132;;;16623:48;16643:18;:27;16662:7;16643:27;;;;;;;;;;;;;;;;16623:19;:48::i;:::-;16602:9;:18;16612:7;16602:18;;;;;;;;;;;;;;;:69;;;;16551:132;16727:4;16693:22;:31;16716:7;16693:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;16742:9;16757:7;16742:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16496:277;:::o;16022:270::-;16090:7;16129:16;;16118:7;:27;;16110:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;16203:19;16225:17;:15;:17::i;:::-;16203:39;;16260:24;16272:11;16260:7;:11;;:24;;;;:::i;:::-;16253:31;;;16022:270;;;:::o;17899:118::-;17966:4;18001:7;:5;:7::i;:::-;17990:18;;:7;:18;;;17982:27;;17899:118;;;:::o;18025:147::-;18095:4;18130:7;:5;:7::i;:::-;18119:18;;:7;:18;;;:44;;;;18152:11;;;;;;;;;;;18141:22;;:7;:22;;;18119:44;18111:53;;18025:147;;;:::o;24327:116::-;24394:4;24429:5;;;;;;;;;;;24418:16;;:7;:16;;;24410:25;;24327:116;;;:::o;19457:900::-;19572:17;19592:29;19606:6;19614;19592:13;:29::i;:::-;19572:49;;19638:7;19632:33;;19661:1;19649:13;;19632:33;19686:15;19703:23;19728:15;19745:23;19770:19;19794:29;19805:6;19813:9;19794:10;:29::i;:::-;19685:138;;;;;;;;;;19873:39;19904:7;19873:18;:26;19892:6;19873:26;;;;;;;;;;;;;;;;:30;;:39;;;;:::i;:::-;19844:18;:26;19863:6;19844:26;;;;;;;;;;;;;;;:68;;;;19955:50;19989:15;19955:18;:29;19974:9;19955:29;;;;;;;;;;;;;;;;:33;;:50;;;;:::i;:::-;19923:18;:29;19942:9;19923:29;;;;;;;;;;;;;;;:82;;;;20022:22;:30;20045:6;20022:30;;;;;;;;;;;;;;;;;;;;;;;;;20018:90;;;20075:30;20097:7;20075:9;:17;20085:6;20075:17;;;;;;;;;;;;;;;;:21;;:30;;;;:::i;:::-;20055:9;:17;20065:6;20055:17;;;;;;;;;;;;;;;:50;;;;20018:90;20122:22;:33;20145:9;20122:33;;;;;;;;;;;;;;;;;;;;;;;;;20118:108;;;20182:41;20207:15;20182:9;:20;20192:9;20182:20;;;;;;;;;;;;;;;;:24;;:41;;;;:::i;:::-;20159:9;:20;20169:9;20159:20;;;;;;;;;;;;;;;:64;;;;20118:108;20246:43;20257:6;20265:11;20278:9;20246;:43::i;:::-;20322:9;20305:44;;20314:6;20305:44;;;20333:15;20305:44;;;;;;:::i;:::-;;;;;;;;19457:900;;;;;;;;;;:::o;21367:658::-;21418:7;21427;21447:15;21465:16;;21447:34;;21492:15;8558:2;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;21492:30;;21542:9;21537:329;21561:9;:16;;;;21557:1;:20;21537:329;;;21638:7;21603:18;:32;21622:9;21632:1;21622:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21603:32;;;;;;;;;;;;;;;;:42;:79;;;;21675:7;21649:9;:23;21659:9;21669:1;21659:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21649:23;;;;;;;;;;;;;;;;:33;21603:79;21599:124;;;21692:16;;8558:2;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;21684:39;;;;;;;;;21599:124;21748:45;21760:18;:32;21779:9;21789:1;21779:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21760:32;;;;;;;;;;;;;;;;21748:7;:11;;:45;;;;:::i;:::-;21738:55;;21818:36;21830:9;:23;21840:9;21850:1;21840:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21830:23;;;;;;;;;;;;;;;;21818:7;:11;;:36;;;;:::i;:::-;21808:46;;21579:3;;;;;:::i;:::-;;;;21537:329;;;;21891:1;21880:7;:12;:60;;;;21906:34;8558:2;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;21906:16;;:20;;:34;;;;:::i;:::-;21896:7;:44;21880:60;21876:105;;;21950:16;;8558:2;8602;:12;;;;:::i;:::-;8717:16;:25;;;;:::i;:::-;21942:39;;;;;;;;21876:105;22000:7;22009;21992:25;;;;;;21367:658;;;:::o;23927:111::-;23995:7;24021:9;;24014:16;;23927:111;;;;:::o;20369:206::-;20481:1;20469:9;:13;:29;;;;;20487:11;;;;;;;;;;;20486:12;20469:29;20464:104;;;20515:41;20536:6;20544:11;20515:20;:41::i;:::-;20464:104;20369:206;;;:::o;24630:745::-;24740:11;;;;;;;;;;;24736:28;;;24755:7;;24736:28;24776:17;24796:15;:13;:15::i;:::-;24776:35;;24827:13;24822:546;24854:9;24846:5;:17;24822:546;;;24890:12;24904:13;24919:17;24941:14;24949:5;24941:7;:14::i;:::-;24889:66;;;;;;;24984:1;24975:5;:10;24970:26;;;24988:8;;;;;24970:26;25026:11;25018:19;;;;;;;;;;;;;;;;:4;:19;;;;;;;;;;;;;;;;;25013:344;;;25058:50;25073:6;25081:11;25094:5;25101;25058:13;:50::i;:::-;25013:344;;;25156:12;25148:20;;;;;;;;;;;;;;;;:4;:20;;;;;;;;;;;;;;;;;25143:214;;;25189:42;25196:6;25204:11;25217:5;25224;25189;:42::i;:::-;25143:214;;;25285:56;25295:6;25303:11;25316:5;25323:9;25334:5;25285:8;:56::i;:::-;25143:214;25013:344;24822:546;;;;24865:7;;;;;:::i;:::-;;;;24822:546;;;;24630:745;;;;:::o;10281:79::-;10329:7;10346:4;:11;;;;10339:18;;10281:79;:::o;10591:213::-;10646:7;10655;10664;10673;10692:14;10709:20;10723:5;10709:13;:20::i;:::-;10692:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10749:3;:8;;;10759:3;:9;;;10770:3;:13;;;10785:3;:9;;;10740:56;;;;;;;;;10591:213;;;;;:::o;22220:315::-;22328:12;22343:33;8511:5;22343:33;;:15;22354:3;22343:6;:10;;:15;;;;:::i;:::-;:19;;:33;;;;:::i;:::-;22328:48;;22387:12;22402:21;22411:11;22402:4;:8;;:21;;;;:::i;:::-;22387:36;;22455:26;22476:4;22455:16;;:20;;:26;;;;:::i;:::-;22436:16;:45;;;;22492:35;22515:5;22522:4;22492:22;:35::i;:::-;22220:315;;;;;;:::o;25383:305::-;25482:13;25498:33;8511:5;25498:33;;:15;25509:3;25498:6;:10;;:15;;;;:::i;:::-;:19;;:33;;;;:::i;:::-;25482:49;;25542:13;25558:22;25568:11;25558:5;:9;;:22;;;;:::i;:::-;25542:38;;25593:40;25613:4;25620:5;25627;25593:11;:40::i;:::-;25644:36;25667:5;25674;25644:22;:36::i;:::-;25383:305;;;;;;:::o;25696:491::-;25819:15;25837:33;8511:5;25837:33;;:15;25848:3;25837:6;:10;;:15;;;;:::i;:::-;:19;;:33;;;;:::i;:::-;25819:51;;25881:15;25899:24;25911:11;25899:7;:11;;:24;;;;:::i;:::-;25881:42;;25968;26002:7;25968:18;:29;25987:9;25968:29;;;;;;;;;;;;;;;;:33;;:42;;;;:::i;:::-;25936:18;:29;25955:9;25936:29;;;;;;;;;;;;;;;:74;;;;26024:22;:33;26047:9;26024:33;;;;;;;;;;;;;;;;;;;;;;;;;26021:107;;;26095:33;26120:7;26095:9;:20;26105:9;26095:20;;;;;;;;;;;;;;;;:24;;:33;;;;:::i;:::-;26072:9;:20;26082:9;26072:20;;;;;;;;;;;;;;;:56;;;;26021:107;26141:38;26164:5;26171:7;26141:22;:38::i;:::-;25696:491;;;;;;;:::o;10368:217::-;10427:11;10468:1;10459:5;:10;;:33;;;;;10481:4;:11;;;;10473:5;:19;10459:33;10450:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;10566:4;10571:5;10566:11;;;;;;;;;;;;;;;;;;;;;;;;;;10559:18;;10368:217;;;:::o;10810:173::-;10893:15;10911:20;10925:5;10911:13;:20::i;:::-;10893:38;;10954:21;10968:6;10954:3;:9;;;:13;;:21;;;;:::i;:::-;10942:3;:9;;:33;;;;10810:173;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;644:6;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:284::-;923:6;972:2;960:9;951:7;947:23;943:32;940:2;;;988:1;985;978:12;940:2;1031:1;1056:64;1112:7;1103:6;1092:9;1088:22;1056:64;:::i;:::-;1046:74;;1002:128;930:207;;;;:::o;1143:407::-;1211:6;1219;1268:2;1256:9;1247:7;1243:23;1239:32;1236:2;;;1284:1;1281;1274:12;1236:2;1327:1;1352:53;1397:7;1388:6;1377:9;1373:22;1352:53;:::i;:::-;1342:63;;1298:117;1454:2;1480:53;1525:7;1516:6;1505:9;1501:22;1480:53;:::i;:::-;1470:63;;1425:118;1226:324;;;;;:::o;1556:552::-;1633:6;1641;1649;1698:2;1686:9;1677:7;1673:23;1669:32;1666:2;;;1714:1;1711;1704:12;1666:2;1757:1;1782:53;1827:7;1818:6;1807:9;1803:22;1782:53;:::i;:::-;1772:63;;1728:117;1884:2;1910:53;1955:7;1946:6;1935:9;1931:22;1910:53;:::i;:::-;1900:63;;1855:118;2012:2;2038:53;2083:7;2074:6;2063:9;2059:22;2038:53;:::i;:::-;2028:63;;1983:118;1656:452;;;;;:::o;2114:401::-;2179:6;2187;2236:2;2224:9;2215:7;2211:23;2207:32;2204:2;;;2252:1;2249;2242:12;2204:2;2295:1;2320:53;2365:7;2356:6;2345:9;2341:22;2320:53;:::i;:::-;2310:63;;2266:117;2422:2;2448:50;2490:7;2481:6;2470:9;2466:22;2448:50;:::i;:::-;2438:60;;2393:115;2194:321;;;;;:::o;2521:407::-;2589:6;2597;2646:2;2634:9;2625:7;2621:23;2617:32;2614:2;;;2662:1;2659;2652:12;2614:2;2705:1;2730:53;2775:7;2766:6;2755:9;2751:22;2730:53;:::i;:::-;2720:63;;2676:117;2832:2;2858:53;2903:7;2894:6;2883:9;2879:22;2858:53;:::i;:::-;2848:63;;2803:118;2604:324;;;;;:::o;2934:256::-;2990:6;3039:2;3027:9;3018:7;3014:23;3010:32;3007:2;;;3055:1;3052;3045:12;3007:2;3098:1;3123:50;3165:7;3156:6;3145:9;3141:22;3123:50;:::i;:::-;3113:60;;3069:114;2997:193;;;;:::o;3196:262::-;3255:6;3304:2;3292:9;3283:7;3279:23;3275:32;3272:2;;;3320:1;3317;3310:12;3272:2;3363:1;3388:53;3433:7;3424:6;3413:9;3409:22;3388:53;:::i;:::-;3378:63;;3334:117;3262:196;;;;:::o;3464:401::-;3529:6;3537;3586:2;3574:9;3565:7;3561:23;3557:32;3554:2;;;3602:1;3599;3592:12;3554:2;3645:1;3670:53;3715:7;3706:6;3695:9;3691:22;3670:53;:::i;:::-;3660:63;;3616:117;3772:2;3798:50;3840:7;3831:6;3820:9;3816:22;3798:50;:::i;:::-;3788:60;;3743:115;3544:321;;;;;:::o;3871:118::-;3958:24;3976:5;3958:24;:::i;:::-;3953:3;3946:37;3936:53;;:::o;3995:109::-;4076:21;4091:5;4076:21;:::i;:::-;4071:3;4064:34;4054:50;;:::o;4110:364::-;4198:3;4226:39;4259:5;4226:39;:::i;:::-;4281:71;4345:6;4340:3;4281:71;:::i;:::-;4274:78;;4361:52;4406:6;4401:3;4394:4;4387:5;4383:16;4361:52;:::i;:::-;4438:29;4460:6;4438:29;:::i;:::-;4433:3;4429:39;4422:46;;4202:272;;;;;:::o;4480:366::-;4622:3;4643:67;4707:2;4702:3;4643:67;:::i;:::-;4636:74;;4719:93;4808:3;4719:93;:::i;:::-;4837:2;4832:3;4828:12;4821:19;;4626:220;;;:::o;4852:366::-;4994:3;5015:67;5079:2;5074:3;5015:67;:::i;:::-;5008:74;;5091:93;5180:3;5091:93;:::i;:::-;5209:2;5204:3;5200:12;5193:19;;4998:220;;;:::o;5224:366::-;5366:3;5387:67;5451:2;5446:3;5387:67;:::i;:::-;5380:74;;5463:93;5552:3;5463:93;:::i;:::-;5581:2;5576:3;5572:12;5565:19;;5370:220;;;:::o;5596:366::-;5738:3;5759:67;5823:2;5818:3;5759:67;:::i;:::-;5752:74;;5835:93;5924:3;5835:93;:::i;:::-;5953:2;5948:3;5944:12;5937:19;;5742:220;;;:::o;5968:366::-;6110:3;6131:67;6195:2;6190:3;6131:67;:::i;:::-;6124:74;;6207:93;6296:3;6207:93;:::i;:::-;6325:2;6320:3;6316:12;6309:19;;6114:220;;;:::o;6340:366::-;6482:3;6503:67;6567:2;6562:3;6503:67;:::i;:::-;6496:74;;6579:93;6668:3;6579:93;:::i;:::-;6697:2;6692:3;6688:12;6681:19;;6486:220;;;:::o;6712:366::-;6854:3;6875:67;6939:2;6934:3;6875:67;:::i;:::-;6868:74;;6951:93;7040:3;6951:93;:::i;:::-;7069:2;7064:3;7060:12;7053:19;;6858:220;;;:::o;7084:366::-;7226:3;7247:67;7311:2;7306:3;7247:67;:::i;:::-;7240:74;;7323:93;7412:3;7323:93;:::i;:::-;7441:2;7436:3;7432:12;7425:19;;7230:220;;;:::o;7456:366::-;7598:3;7619:67;7683:2;7678:3;7619:67;:::i;:::-;7612:74;;7695:93;7784:3;7695:93;:::i;:::-;7813:2;7808:3;7804:12;7797:19;;7602:220;;;:::o;7828:366::-;7970:3;7991:67;8055:2;8050:3;7991:67;:::i;:::-;7984:74;;8067:93;8156:3;8067:93;:::i;:::-;8185:2;8180:3;8176:12;8169:19;;7974:220;;;:::o;8200:366::-;8342:3;8363:67;8427:2;8422:3;8363:67;:::i;:::-;8356:74;;8439:93;8528:3;8439:93;:::i;:::-;8557:2;8552:3;8548:12;8541:19;;8346:220;;;:::o;8572:366::-;8714:3;8735:67;8799:2;8794:3;8735:67;:::i;:::-;8728:74;;8811:93;8900:3;8811:93;:::i;:::-;8929:2;8924:3;8920:12;8913:19;;8718:220;;;:::o;8944:366::-;9086:3;9107:67;9171:2;9166:3;9107:67;:::i;:::-;9100:74;;9183:93;9272:3;9183:93;:::i;:::-;9301:2;9296:3;9292:12;9285:19;;9090:220;;;:::o;9316:366::-;9458:3;9479:67;9543:2;9538:3;9479:67;:::i;:::-;9472:74;;9555:93;9644:3;9555:93;:::i;:::-;9673:2;9668:3;9664:12;9657:19;;9462:220;;;:::o;9688:366::-;9830:3;9851:67;9915:2;9910:3;9851:67;:::i;:::-;9844:74;;9927:93;10016:3;9927:93;:::i;:::-;10045:2;10040:3;10036:12;10029:19;;9834:220;;;:::o;10060:366::-;10202:3;10223:67;10287:2;10282:3;10223:67;:::i;:::-;10216:74;;10299:93;10388:3;10299:93;:::i;:::-;10417:2;10412:3;10408:12;10401:19;;10206:220;;;:::o;10432:366::-;10574:3;10595:67;10659:2;10654:3;10595:67;:::i;:::-;10588:74;;10671:93;10760:3;10671:93;:::i;:::-;10789:2;10784:3;10780:12;10773:19;;10578:220;;;:::o;10804:366::-;10946:3;10967:67;11031:2;11026:3;10967:67;:::i;:::-;10960:74;;11043:93;11132:3;11043:93;:::i;:::-;11161:2;11156:3;11152:12;11145:19;;10950:220;;;:::o;11176:366::-;11318:3;11339:67;11403:2;11398:3;11339:67;:::i;:::-;11332:74;;11415:93;11504:3;11415:93;:::i;:::-;11533:2;11528:3;11524:12;11517:19;;11322:220;;;:::o;11548:366::-;11690:3;11711:67;11775:2;11770:3;11711:67;:::i;:::-;11704:74;;11787:93;11876:3;11787:93;:::i;:::-;11905:2;11900:3;11896:12;11889:19;;11694:220;;;:::o;11920:366::-;12062:3;12083:67;12147:2;12142:3;12083:67;:::i;:::-;12076:74;;12159:93;12248:3;12159:93;:::i;:::-;12277:2;12272:3;12268:12;12261:19;;12066:220;;;:::o;12292:118::-;12379:24;12397:5;12379:24;:::i;:::-;12374:3;12367:37;12357:53;;:::o;12416:112::-;12499:22;12515:5;12499:22;:::i;:::-;12494:3;12487:35;12477:51;;:::o;12534:222::-;12627:4;12665:2;12654:9;12650:18;12642:26;;12678:71;12746:1;12735:9;12731:17;12722:6;12678:71;:::i;:::-;12632:124;;;;:::o;12762:332::-;12883:4;12921:2;12910:9;12906:18;12898:26;;12934:71;13002:1;12991:9;12987:17;12978:6;12934:71;:::i;:::-;13015:72;13083:2;13072:9;13068:18;13059:6;13015:72;:::i;:::-;12888:206;;;;;:::o;13100:210::-;13187:4;13225:2;13214:9;13210:18;13202:26;;13238:65;13300:1;13289:9;13285:17;13276:6;13238:65;:::i;:::-;13192:118;;;;:::o;13316:313::-;13429:4;13467:2;13456:9;13452:18;13444:26;;13516:9;13510:4;13506:20;13502:1;13491:9;13487:17;13480:47;13544:78;13617:4;13608:6;13544:78;:::i;:::-;13536:86;;13434:195;;;;:::o;13635:419::-;13801:4;13839:2;13828:9;13824:18;13816:26;;13888:9;13882:4;13878:20;13874:1;13863:9;13859:17;13852:47;13916:131;14042:4;13916:131;:::i;:::-;13908:139;;13806:248;;;:::o;14060:419::-;14226:4;14264:2;14253:9;14249:18;14241:26;;14313:9;14307:4;14303:20;14299:1;14288:9;14284:17;14277:47;14341:131;14467:4;14341:131;:::i;:::-;14333:139;;14231:248;;;:::o;14485:419::-;14651:4;14689:2;14678:9;14674:18;14666:26;;14738:9;14732:4;14728:20;14724:1;14713:9;14709:17;14702:47;14766:131;14892:4;14766:131;:::i;:::-;14758:139;;14656:248;;;:::o;14910:419::-;15076:4;15114:2;15103:9;15099:18;15091:26;;15163:9;15157:4;15153:20;15149:1;15138:9;15134:17;15127:47;15191:131;15317:4;15191:131;:::i;:::-;15183:139;;15081:248;;;:::o;15335:419::-;15501:4;15539:2;15528:9;15524:18;15516:26;;15588:9;15582:4;15578:20;15574:1;15563:9;15559:17;15552:47;15616:131;15742:4;15616:131;:::i;:::-;15608:139;;15506:248;;;:::o;15760:419::-;15926:4;15964:2;15953:9;15949:18;15941:26;;16013:9;16007:4;16003:20;15999:1;15988:9;15984:17;15977:47;16041:131;16167:4;16041:131;:::i;:::-;16033:139;;15931:248;;;:::o;16185:419::-;16351:4;16389:2;16378:9;16374:18;16366:26;;16438:9;16432:4;16428:20;16424:1;16413:9;16409:17;16402:47;16466:131;16592:4;16466:131;:::i;:::-;16458:139;;16356:248;;;:::o;16610:419::-;16776:4;16814:2;16803:9;16799:18;16791:26;;16863:9;16857:4;16853:20;16849:1;16838:9;16834:17;16827:47;16891:131;17017:4;16891:131;:::i;:::-;16883:139;;16781:248;;;:::o;17035:419::-;17201:4;17239:2;17228:9;17224:18;17216:26;;17288:9;17282:4;17278:20;17274:1;17263:9;17259:17;17252:47;17316:131;17442:4;17316:131;:::i;:::-;17308:139;;17206:248;;;:::o;17460:419::-;17626:4;17664:2;17653:9;17649:18;17641:26;;17713:9;17707:4;17703:20;17699:1;17688:9;17684:17;17677:47;17741:131;17867:4;17741:131;:::i;:::-;17733:139;;17631:248;;;:::o;17885:419::-;18051:4;18089:2;18078:9;18074:18;18066:26;;18138:9;18132:4;18128:20;18124:1;18113:9;18109:17;18102:47;18166:131;18292:4;18166:131;:::i;:::-;18158:139;;18056:248;;;:::o;18310:419::-;18476:4;18514:2;18503:9;18499:18;18491:26;;18563:9;18557:4;18553:20;18549:1;18538:9;18534:17;18527:47;18591:131;18717:4;18591:131;:::i;:::-;18583:139;;18481:248;;;:::o;18735:419::-;18901:4;18939:2;18928:9;18924:18;18916:26;;18988:9;18982:4;18978:20;18974:1;18963:9;18959:17;18952:47;19016:131;19142:4;19016:131;:::i;:::-;19008:139;;18906:248;;;:::o;19160:419::-;19326:4;19364:2;19353:9;19349:18;19341:26;;19413:9;19407:4;19403:20;19399:1;19388:9;19384:17;19377:47;19441:131;19567:4;19441:131;:::i;:::-;19433:139;;19331:248;;;:::o;19585:419::-;19751:4;19789:2;19778:9;19774:18;19766:26;;19838:9;19832:4;19828:20;19824:1;19813:9;19809:17;19802:47;19866:131;19992:4;19866:131;:::i;:::-;19858:139;;19756:248;;;:::o;20010:419::-;20176:4;20214:2;20203:9;20199:18;20191:26;;20263:9;20257:4;20253:20;20249:1;20238:9;20234:17;20227:47;20291:131;20417:4;20291:131;:::i;:::-;20283:139;;20181:248;;;:::o;20435:419::-;20601:4;20639:2;20628:9;20624:18;20616:26;;20688:9;20682:4;20678:20;20674:1;20663:9;20659:17;20652:47;20716:131;20842:4;20716:131;:::i;:::-;20708:139;;20606:248;;;:::o;20860:419::-;21026:4;21064:2;21053:9;21049:18;21041:26;;21113:9;21107:4;21103:20;21099:1;21088:9;21084:17;21077:47;21141:131;21267:4;21141:131;:::i;:::-;21133:139;;21031:248;;;:::o;21285:419::-;21451:4;21489:2;21478:9;21474:18;21466:26;;21538:9;21532:4;21528:20;21524:1;21513:9;21509:17;21502:47;21566:131;21692:4;21566:131;:::i;:::-;21558:139;;21456:248;;;:::o;21710:419::-;21876:4;21914:2;21903:9;21899:18;21891:26;;21963:9;21957:4;21953:20;21949:1;21938:9;21934:17;21927:47;21991:131;22117:4;21991:131;:::i;:::-;21983:139;;21881:248;;;:::o;22135:419::-;22301:4;22339:2;22328:9;22324:18;22316:26;;22388:9;22382:4;22378:20;22374:1;22363:9;22359:17;22352:47;22416:131;22542:4;22416:131;:::i;:::-;22408:139;;22306:248;;;:::o;22560:222::-;22653:4;22691:2;22680:9;22676:18;22668:26;;22704:71;22772:1;22761:9;22757:17;22748:6;22704:71;:::i;:::-;22658:124;;;;:::o;22788:214::-;22877:4;22915:2;22904:9;22900:18;22892:26;;22928:67;22992:1;22981:9;22977:17;22968:6;22928:67;:::i;:::-;22882:120;;;;:::o;23008:99::-;23060:6;23094:5;23088:12;23078:22;;23067:40;;;:::o;23113:169::-;23197:11;23231:6;23226:3;23219:19;23271:4;23266:3;23262:14;23247:29;;23209:73;;;;:::o;23288:305::-;23328:3;23347:20;23365:1;23347:20;:::i;:::-;23342:25;;23381:20;23399:1;23381:20;:::i;:::-;23376:25;;23535:1;23467:66;23463:74;23460:1;23457:81;23454:2;;;23541:18;;:::i;:::-;23454:2;23585:1;23582;23578:9;23571:16;;23332:261;;;;:::o;23599:185::-;23639:1;23656:20;23674:1;23656:20;:::i;:::-;23651:25;;23690:20;23708:1;23690:20;:::i;:::-;23685:25;;23729:1;23719:2;;23734:18;;:::i;:::-;23719:2;23776:1;23773;23769:9;23764:14;;23641:143;;;;:::o;23790:848::-;23851:5;23858:4;23882:6;23873:15;;23906:5;23897:14;;23920:712;23941:1;23931:8;23928:15;23920:712;;;24036:4;24031:3;24027:14;24021:4;24018:24;24015:2;;;24045:18;;:::i;:::-;24015:2;24095:1;24085:8;24081:16;24078:2;;;24510:4;24503:5;24499:16;24490:25;;24078:2;24560:4;24554;24550:15;24542:23;;24590:32;24613:8;24590:32;:::i;:::-;24578:44;;23920:712;;;23863:775;;;;;;;:::o;24644:281::-;24702:5;24726:23;24744:4;24726:23;:::i;:::-;24718:31;;24770:25;24786:8;24770:25;:::i;:::-;24758:37;;24814:104;24851:66;24841:8;24835:4;24814:104;:::i;:::-;24805:113;;24708:217;;;;:::o;24931:1073::-;24985:5;25176:8;25166:2;;25197:1;25188:10;;25199:5;;25166:2;25225:4;25215:2;;25242:1;25233:10;;25244:5;;25215:2;25311:4;25359:1;25354:27;;;;25395:1;25390:191;;;;25304:277;;25354:27;25372:1;25363:10;;25374:5;;;25390:191;25435:3;25425:8;25422:17;25419:2;;;25442:18;;:::i;:::-;25419:2;25491:8;25488:1;25484:16;25475:25;;25526:3;25519:5;25516:14;25513:2;;;25533:18;;:::i;:::-;25513:2;25566:5;;;25304:277;;25690:2;25680:8;25677:16;25671:3;25665:4;25662:13;25658:36;25640:2;25630:8;25627:16;25622:2;25616:4;25613:12;25609:35;25593:111;25590:2;;;25746:8;25740:4;25736:19;25727:28;;25781:3;25774:5;25771:14;25768:2;;;25788:18;;:::i;:::-;25768:2;25821:5;;25590:2;25861:42;25899:3;25889:8;25883:4;25880:1;25861:42;:::i;:::-;25846:57;;;;25935:4;25930:3;25926:14;25919:5;25916:25;25913:2;;;25944:18;;:::i;:::-;25913:2;25993:4;25986:5;25982:16;25973:25;;24991:1013;;;;;;:::o;26010:348::-;26050:7;26073:20;26091:1;26073:20;:::i;:::-;26068:25;;26107:20;26125:1;26107:20;:::i;:::-;26102:25;;26295:1;26227:66;26223:74;26220:1;26217:81;26212:1;26205:9;26198:17;26194:105;26191:2;;;26302:18;;:::i;:::-;26191:2;26350:1;26347;26343:9;26332:20;;26058:300;;;;:::o;26364:191::-;26404:4;26424:20;26442:1;26424:20;:::i;:::-;26419:25;;26458:20;26476:1;26458:20;:::i;:::-;26453:25;;26497:1;26494;26491:8;26488:2;;;26502:18;;:::i;:::-;26488:2;26547:1;26544;26540:9;26532:17;;26409:146;;;;:::o;26561:96::-;26598:7;26627:24;26645:5;26627:24;:::i;:::-;26616:35;;26606:51;;;:::o;26663:90::-;26697:7;26740:5;26733:13;26726:21;26715:32;;26705:48;;;:::o;26759:126::-;26796:7;26836:42;26829:5;26825:54;26814:65;;26804:81;;;:::o;26891:77::-;26928:7;26957:5;26946:16;;26936:32;;;:::o;26974:86::-;27009:7;27049:4;27042:5;27038:16;27027:27;;27017:43;;;:::o;27066:307::-;27134:1;27144:113;27158:6;27155:1;27152:13;27144:113;;;27243:1;27238:3;27234:11;27228:18;27224:1;27219:3;27215:11;27208:39;27180:2;27177:1;27173:10;27168:15;;27144:113;;;27275:6;27272:1;27269:13;27266:2;;;27355:1;27346:6;27341:3;27337:16;27330:27;27266:2;27115:258;;;;:::o;27379:233::-;27418:3;27441:24;27459:5;27441:24;:::i;:::-;27432:33;;27487:66;27480:5;27477:77;27474:2;;;27557:18;;:::i;:::-;27474:2;27604:1;27597:5;27593:13;27586:20;;27422:190;;;:::o;27618:180::-;27666:77;27663:1;27656:88;27763:4;27760:1;27753:15;27787:4;27784:1;27777:15;27804:180;27852:77;27849:1;27842:88;27949:4;27946:1;27939:15;27973:4;27970:1;27963:15;27990:102;28031:6;28082:2;28078:7;28073:2;28066:5;28062:14;28058:28;28048:38;;28038:54;;;:::o;28098:102::-;28140:8;28187:5;28184:1;28180:13;28159:34;;28149:51;;;:::o;28206:178::-;28346:30;28342:1;28334:6;28330:14;28323:54;28312:72;:::o;28390:230::-;28530:34;28526:1;28518:6;28514:14;28507:58;28599:13;28594:2;28586:6;28582:15;28575:38;28496:124;:::o;28626:231::-;28766:34;28762:1;28754:6;28750:14;28743:58;28835:14;28830:2;28822:6;28818:15;28811:39;28732:125;:::o;28863:229::-;29003:34;28999:1;28991:6;28987:14;28980:58;29072:12;29067:2;29059:6;29055:15;29048:37;28969:123;:::o;29098:225::-;29238:34;29234:1;29226:6;29222:14;29215:58;29307:8;29302:2;29294:6;29290:15;29283:33;29204:119;:::o;29329:173::-;29469:25;29465:1;29457:6;29453:14;29446:49;29435:67;:::o;29508:227::-;29648:34;29644:1;29636:6;29632:14;29625:58;29717:10;29712:2;29704:6;29700:15;29693:35;29614:121;:::o;29741:173::-;29881:25;29877:1;29869:6;29865:14;29858:49;29847:67;:::o;29920:231::-;30060:34;30056:1;30048:6;30044:14;30037:58;30129:14;30124:2;30116:6;30112:15;30105:39;30026:125;:::o;30157:231::-;30297:34;30293:1;30285:6;30281:14;30274:58;30366:14;30361:2;30353:6;30349:15;30342:39;30263:125;:::o;30394:181::-;30534:33;30530:1;30522:6;30518:14;30511:57;30500:75;:::o;30581:227::-;30721:34;30717:1;30709:6;30705:14;30698:58;30790:10;30785:2;30777:6;30773:15;30766:35;30687:121;:::o;30814:228::-;30954:34;30950:1;30942:6;30938:14;30931:58;31023:11;31018:2;31010:6;31006:15;30999:36;30920:122;:::o;31048:229::-;31188:34;31184:1;31176:6;31172:14;31165:58;31257:12;31252:2;31244:6;31240:15;31233:37;31154:123;:::o;31283:182::-;31423:34;31419:1;31411:6;31407:14;31400:58;31389:76;:::o;31471:228::-;31611:34;31607:1;31599:6;31595:14;31588:58;31680:11;31675:2;31667:6;31663:15;31656:36;31577:122;:::o;31705:232::-;31845:34;31841:1;31833:6;31829:14;31822:58;31914:15;31909:2;31901:6;31897:15;31890:40;31811:126;:::o;31943:224::-;32083:34;32079:1;32071:6;32067:14;32060:58;32152:7;32147:2;32139:6;32135:15;32128:32;32049:118;:::o;32173:238::-;32313:34;32309:1;32301:6;32297:14;32290:58;32382:21;32377:2;32369:6;32365:15;32358:46;32279:132;:::o;32417:228::-;32557:34;32553:1;32545:6;32541:14;32534:58;32626:11;32621:2;32613:6;32609:15;32602:36;32523:122;:::o;32651:227::-;32791:34;32787:1;32779:6;32775:14;32768:58;32860:10;32855:2;32847:6;32843:15;32836:35;32757:121;:::o;32884:122::-;32957:24;32975:5;32957:24;:::i;:::-;32950:5;32947:35;32937:2;;32996:1;32993;32986:12;32937:2;32927:79;:::o;33012:116::-;33082:21;33097:5;33082:21;:::i;:::-;33075:5;33072:32;33062:2;;33118:1;33115;33108:12;33062:2;33052:76;:::o;33134:122::-;33207:24;33225:5;33207:24;:::i;:::-;33200:5;33197:35;33187:2;;33246:1;33243;33236:12;33187:2;33177:79;:::o

Swarm Source

ipfs://529b713f1721b8d3a0a45a787a27d4a56ae4b5d5189660a93fdbc1d97471e529

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.