FTM Price: $0.79037 (-1.78%)
Gas: 10 GWei
 

Overview

Max Total Supply

7,021,970,187,103.900901931178020585 FLIBERO

Holders

22,386 ( 0.004%)

Total Transfers

-

Market

Price

$0.00 @ 0.000000 FTM

Onchain Market Cap

$2,341,124.86

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

From the creator of Libero: FLibero-Fantom Libero Financial is a dual reward, auto-staking token, making a fixed APY of 159,058.06% plus 7% USDC passive income from trading volume. FLibero is also a DeFi 3.0 Farming as a Service protocol with FLibero Treasury.

Market

Volume (24H):$1.02
Market Capitalization:$0.00
Circulating Supply:0.00 FLIBERO
Market Data Source: Coinmarketcap

Contract Source Code Verified (Exact Match)

Contract Name:
FLiberoToken

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 25000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at ftmscan.com on 2022-03-29
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.7.4;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

abstract contract Auth is Context{
    address owner;
    mapping (address => bool) private authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender)); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender)); _;
    }

    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
        emit Authorized(adr);
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
        emit Unauthorized(adr);
    }

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

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
    event Authorized(address adr);
    event Unauthorized(address adr);
}

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

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

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

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

        return a / b;
    }

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

}

interface InterfaceLP {
    function sync() external;
}

library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}

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

    constructor(
        string memory _tokenName,
        string memory _tokenSymbol,
        uint8 _tokenDecimals
    ) {
        _name = _tokenName;
        _symbol = _tokenSymbol;
        _decimals = _tokenDecimals;
    }

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

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

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

interface IDEXRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
    external
    returns (
        uint256 amountA,
        uint256 amountB,
        uint256 liquidity
    );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
    external
    payable
    returns (
        uint256 amountToken,
        uint256 amountETH,
        uint256 liquidity
    );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

interface IDEXFactory {
    function createPair(address tokenA, address tokenB)
    external
    returns (address pair);
}

contract FLiberoToken is ERC20Detailed, Auth {
    using SafeMath for uint256;
    using SafeMathInt for int256;

    bool public initialDistributionFinished = false;
    bool public autoRebase = false;
    bool public feesOnNormalTransfers = true;
    bool public isLiquidityInFtm = true;
    bool public isRfvInFtm = true;
    bool public isLiquidityEnabled = true;

    uint256 public rewardYield = 1402777;
    uint256 public rebaseFrequency = 600;
    uint256 public nextRebase = block.timestamp + 31536000;
    uint256 public maxSellTransactionAmount = 2000000 * 10 ** 18;
    uint256 public swapThreshold = 400000 * 10**18;

    mapping(address => bool) _isFeeExempt;
    address[] private _makerPairs;
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 private constant REWARD_YIELD_DENOMINATOR = 10000000000;
    uint256 private constant MAX_TOTAL_BUY_FEE_RATE = 250;
    uint256 private constant MAX_TOTAL_SELL_FEE_RATE = 500;
    uint256 private constant FEE_DENOMINATOR = 1000;
    uint256 private constant MIN_MAX_SELL_AMOUNT = 1000 * 10**18;
    uint256 private constant MAX_REBASE_FREQUENCY = 1800;
    uint256 private constant DECIMALS = 18;
    uint256 private constant MAX_UINT256 = ~uint256(0);
    uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 15 * 10**8 * 10**DECIMALS;
    uint256 private constant TOTAL_GONS = MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);
    uint256 private constant MAX_SUPPLY = ~uint128(0);

    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address private constant ZERO = 0x0000000000000000000000000000000000000000;
    address public constant usdcToken = 0x04068DA6C83AFCFA0e13ba15A6696662335D5B75;
    
    address public liquidityReceiver = 0x730736E3cdffc531b74eb8B30bD2CC50beb8Ab3c;
    address public treasuryReceiver = 0x3ff8970f17d463b83D289827B7B8E5Eed61Cc3e8;
    address public riskFreeValueReceiver = 0x14c02711A4678fc7De388e77e99B07753C856e84;
    address public xLiberoReceiver = 0x8689EDAb5Bdb17b11273a5C9412C4BBC8f2Ec4F8;

    IDEXRouter public router;
    address public pair;

    uint256 public liquidityFee = 40;
    uint256 public treasuryFee = 30;
    uint256 public buyFeeRFV = 50;
    uint256 public buyBurnFee = 20;
    uint256 public buyxLiberoFee = 0;
    uint256 public sellFeeTreasuryAdded = 20;
    uint256 public sellFeeRFVAdded = 40;
    uint256 public sellBurnFeeAdded = 0;
    uint256 public sellxLiberoFeeAdded = 0;
    uint256 public totalBuyFee = liquidityFee.add(treasuryFee).add(buyFeeRFV).add(buyBurnFee).add(buyxLiberoFee);
    uint256 public totalSellFee = totalBuyFee.add(sellFeeTreasuryAdded).add(sellFeeRFVAdded).add(sellBurnFeeAdded).add(sellxLiberoFeeAdded);

    bool inSwap;

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

    modifier validRecipient(address to) {
        require(to != address(0x0));
        _;
    }

    uint256 private _totalSupply;
    uint256 private _gonsPerFragment;

    mapping(address => uint256) private _gonBalances;
    mapping(address => mapping(address => uint256)) private _allowedFragments;

    constructor() ERC20Detailed("Fantom Libero Financial Freedom", "FLIBERO", uint8(DECIMALS)) Auth(msg.sender) {
        router = IDEXRouter(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        pair = IDEXFactory(router.factory()).createPair(address(this), router.WETH());
        address pairUsdc = IDEXFactory(router.factory()).createPair(address(this), usdcToken);

        _allowedFragments[address(this)][address(router)] = uint256(-1);
        _allowedFragments[address(this)][pair] = uint256(-1);
        _allowedFragments[address(this)][address(this)] = uint256(-1);
        _allowedFragments[address(this)][pairUsdc] = uint256(-1);

        setAutomatedMarketMakerPair(pair, true);
        setAutomatedMarketMakerPair(pairUsdc, true);

        _totalSupply = INITIAL_FRAGMENTS_SUPPLY;
        _gonBalances[msg.sender] = TOTAL_GONS;
        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        _isFeeExempt[treasuryReceiver] = true;
        _isFeeExempt[riskFreeValueReceiver] = true;
        _isFeeExempt[address(this)] = true;
        _isFeeExempt[msg.sender] = true;

        IERC20(usdcToken).approve(address(router), uint256(-1));
        IERC20(usdcToken).approve(address(pairUsdc), uint256(-1));
        IERC20(usdcToken).approve(address(this), uint256(-1));

        emit Transfer(address(0x0), msg.sender, _totalSupply);
    }

    receive() external payable {}

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

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

    function balanceOf(address who) public view override returns (uint256) {
        return _gonBalances[who].div(_gonsPerFragment);
    }

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

    function shouldRebase() internal view returns (bool) {
        return nextRebase <= block.timestamp;
    }

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

    function shouldSwapBack() internal view returns (bool) {
        return
        !automatedMarketMakerPairs[msg.sender] &&
        !inSwap &&
        swapThreshold > 0 &&
        totalBuyFee.add(totalSellFee) > 0 &&
        balanceOf(address(this)) >= swapThreshold;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return (TOTAL_GONS.sub(_gonBalances[DEAD]).sub(_gonBalances[ZERO])).div(_gonsPerFragment);
    }

    function manualSync() public {
        for(uint i = 0; i < _makerPairs.length; i++){
            try InterfaceLP(_makerPairs[i]).sync() {

            }catch Error (string memory reason) {
                emit GenericErrorEvent("manualSync(): _makerPairs.sync() Failed");
                emit GenericErrorEvent(reason);
            }
        }
    }

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

    function _basicTransfer(address from, address to, uint256 amount) internal returns (bool) {
        uint256 gonAmount = amount.mul(_gonsPerFragment);
        _gonBalances[from] = _gonBalances[from].sub(gonAmount);
        _gonBalances[to] = _gonBalances[to].add(gonAmount);

        emit Transfer(from, to, amount);

        return true;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        bool excludedAccount = _isFeeExempt[sender] || _isFeeExempt[recipient];

        require(initialDistributionFinished || excludedAccount, "Trading not started");

        if (
            automatedMarketMakerPairs[recipient] &&
            !excludedAccount
        ) {
            require(amount <= maxSellTransactionAmount, "Error amount");
        }

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

        uint256 gonAmount = amount.mul(_gonsPerFragment);

        if (shouldSwapBack()) {
            swapBack();
        }

        _gonBalances[sender] = _gonBalances[sender].sub(gonAmount);

        uint256 gonAmountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, gonAmount) : gonAmount;
        _gonBalances[recipient] = _gonBalances[recipient].add(gonAmountReceived);

        emit Transfer(
            sender,
            recipient,
            gonAmountReceived.div(_gonsPerFragment)
        );

        if(
            shouldRebase() &&
            autoRebase &&
            !automatedMarketMakerPairs[sender] &&
            !automatedMarketMakerPairs[recipient]
        ) {
            _rebase();
            manualSync();
        }

        return true;
    }

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

        _transferFrom(from, to, value);
        return true;
    }

    function _swapAndLiquify(uint256 contractTokenBalance) private {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        if(isLiquidityInFtm){
            uint256 initialBalance = address(this).balance;

            _swapTokensForFTM(half, address(this));

            uint256 newBalance = address(this).balance.sub(initialBalance);

            _addLiquidity(otherHalf, newBalance);

            emit SwapAndLiquify(half, newBalance, otherHalf);
        }else{
            uint256 initialBalance = IERC20(usdcToken).balanceOf(address(this));

            _swapTokensForUsdc(half, address(this));

            uint256 newBalance = IERC20(usdcToken).balanceOf(address(this)).sub(initialBalance);

            addLiquidityUsdc(otherHalf, newBalance);

            emit SwapAndLiquifyUsdc(half, newBalance, otherHalf);
        }
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ftmAmount) private {
        router.addLiquidityETH{value: ftmAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityReceiver,
            block.timestamp
        );
    }

    function addLiquidityUsdc(uint256 tokenAmount, uint256 usdcAmount) private {
        router.addLiquidity(
            address(this),
            usdcToken,
            tokenAmount,
            usdcAmount,
            0,
            0,
            liquidityReceiver,
            block.timestamp
        );
    }

    function _swapTokensForFTM(uint256 tokenAmount, address receiver) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

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

        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            receiver,
            block.timestamp
        );
    }

    function swapBack() internal swapping {
        uint256 realTotalFee = totalBuyFee.add(totalSellFee);

        uint256 dynamicLiquidityFee = isLiquidityEnabled ? liquidityFee : 0;
        uint256 contractTokenBalance = _gonBalances[address(this)].div(_gonsPerFragment);

        uint256 amountToLiquify = contractTokenBalance.mul(dynamicLiquidityFee.mul(2)).div(realTotalFee);
        uint256 amountToBurn = contractTokenBalance.mul(buyBurnFee.mul(2).add(sellBurnFeeAdded)).div(realTotalFee);
        uint256 amountToRFV = contractTokenBalance.mul(buyFeeRFV.mul(2).add(sellFeeRFVAdded)).div(realTotalFee);
        uint256 amountToxLibero = contractTokenBalance.mul(buyxLiberoFee.mul(2).add(sellxLiberoFeeAdded)).div(realTotalFee);
        uint256 amountToTreasury = contractTokenBalance.sub(amountToLiquify).sub(amountToBurn).sub(amountToRFV).sub(amountToxLibero);

        if(amountToLiquify > 0){
            _swapAndLiquify(amountToLiquify);
        }

        if(amountToBurn > 0){
            _basicTransfer(address(this), DEAD, amountToBurn);
        }

        if(amountToRFV > 0){
            if(isRfvInFtm){
                _swapTokensForFTM(amountToRFV, riskFreeValueReceiver);
            }else{
                _swapTokensForUsdc(amountToRFV, riskFreeValueReceiver);
            }
        }

        if(amountToxLibero > 0){
            _swapTokensForUsdc(amountToxLibero, xLiberoReceiver);
        }

        if(amountToTreasury > 0){
            _swapTokensForFTM(amountToTreasury, treasuryReceiver);
        }

        emit SwapBack(contractTokenBalance, amountToLiquify, amountToRFV, amountToTreasury);
    }

    function takeFee(address sender, address recipient, uint256 gonAmount) internal returns (uint256){
        uint256 _realFee = totalBuyFee;
        if(automatedMarketMakerPairs[recipient]) _realFee = totalSellFee;

        uint256 feeAmount = gonAmount.mul(_realFee).div(FEE_DENOMINATOR);

        _gonBalances[address(this)] = _gonBalances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount.div(_gonsPerFragment));

        return gonAmount.sub(feeAmount);
    }

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

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

    function approve(address spender, uint256 value) external override returns (bool){
        _allowedFragments[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function _rebase() private {
        if(!inSwap) {
            int256 supplyDelta = int256(_totalSupply.mul(rewardYield).div(REWARD_YIELD_DENOMINATOR));

            coreRebase(supplyDelta);
        }
    }

    function coreRebase(int256 supplyDelta) private returns (uint256) {
        uint256 epoch = block.timestamp;

        if (supplyDelta == 0) {
            emit LogRebase(epoch, _totalSupply);
            return _totalSupply;
        }

        if (supplyDelta < 0) {
            _totalSupply = _totalSupply.sub(uint256(-supplyDelta));
        } else {
            _totalSupply = _totalSupply.add(uint256(supplyDelta));
        }

        if (_totalSupply > MAX_SUPPLY) {
            _totalSupply = MAX_SUPPLY;
        }

        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        nextRebase = epoch + rebaseFrequency;

        emit LogRebase(epoch, _totalSupply);
        return _totalSupply;
    }

    function manualRebase() external authorized{
        require(!inSwap, "Try again");
        require(nextRebase <= block.timestamp, "Not in time");

        int256 supplyDelta = int256(_totalSupply.mul(rewardYield).div(REWARD_YIELD_DENOMINATOR));

        coreRebase(supplyDelta);
        manualSync();
    }

    function setAutomatedMarketMakerPair(address _pair, bool _value) public onlyOwner {
        require(automatedMarketMakerPairs[_pair] != _value, "Value already set");

        automatedMarketMakerPairs[_pair] = _value;

        if(_value){
            _makerPairs.push(_pair);
        }else{
            require(_makerPairs.length > 1, "Required 1 pair");
            for (uint256 i = 0; i < _makerPairs.length; i++) {
                if (_makerPairs[i] == _pair) {
                    _makerPairs[i] = _makerPairs[_makerPairs.length - 1];
                    _makerPairs.pop();
                    break;
                }
            }
        }

        emit SetAutomatedMarketMakerPair(_pair, _value);
    }

    function setInitialDistributionFinished(bool _value) external onlyOwner {
        require(initialDistributionFinished != _value, "Not changed");
        initialDistributionFinished = _value;
    }

    function setFeeExempt(address _addr, bool _value) external onlyOwner {
        require(_isFeeExempt[_addr] != _value, "Not changed");
        _isFeeExempt[_addr] = _value;
    }

    function setSwapThreshold(uint256 _value) external onlyOwner {
        require(swapThreshold != _value, "Not changed");
        swapThreshold = _value;
    }

    function setFeeReceivers(
        address _liquidityReceiver,
        address _treasuryReceiver,
        address _riskFreeValueReceiver,
        address _xLiberoReceiver
    ) external onlyOwner {
        require(_liquidityReceiver != address(0), "Invalid _liquidityReceiver");
        require(_treasuryReceiver != address(0), "Invalid _treasuryReceiver");
        require(_riskFreeValueReceiver != address(0), "Invalid _riskFreeValueReceiver");
        require(_xLiberoReceiver != address(0), "Invalid _xLiberoReceiver");

        liquidityReceiver = _liquidityReceiver;
        treasuryReceiver = _treasuryReceiver;
        riskFreeValueReceiver = _riskFreeValueReceiver;
        xLiberoReceiver = _xLiberoReceiver;
    }

    function setFees(
        uint256 _liquidityFee,
        uint256 _riskFreeValue,
        uint256 _treasuryFee,
        uint256 _burnFee,
        uint256 _xLiberoFee,
        uint256 _sellFeeTreasuryAdded,
        uint256 _sellFeeRFVAdded,
        uint256 _sellBurnFeeAdded,
        uint256 _sellxLiberoFeeAdded
    ) external onlyOwner {
        liquidityFee = _liquidityFee;
        buyFeeRFV = _riskFreeValue;
        treasuryFee = _treasuryFee;
        buyBurnFee = _burnFee;
        buyxLiberoFee = _xLiberoFee;
        sellFeeTreasuryAdded = _sellFeeTreasuryAdded;
        sellFeeRFVAdded = _sellFeeRFVAdded;
        sellBurnFeeAdded = _sellBurnFeeAdded;
        sellxLiberoFeeAdded = _sellxLiberoFeeAdded;

        totalBuyFee = liquidityFee.add(treasuryFee).add(buyFeeRFV).add(buyBurnFee).add(buyxLiberoFee);
        totalSellFee = totalBuyFee.add(sellFeeTreasuryAdded).add(sellFeeRFVAdded).add(sellBurnFeeAdded).add(sellxLiberoFeeAdded);

        require(totalBuyFee < MAX_TOTAL_BUY_FEE_RATE, "Total buy fee too high");
        require(totalSellFee < MAX_TOTAL_SELL_FEE_RATE, "Total sell fee too high");
    }

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

    function rescueToken(address tokenAddress) external onlyOwner returns (bool success){
        require(tokenAddress != address(this),"Not allow recuse Libero");
        uint256 amount = ERC20Detailed(tokenAddress).balanceOf(address(this));
        return ERC20Detailed(tokenAddress).transfer(msg.sender, amount);
    }

    function setAutoRebase(bool _autoRebase) external onlyOwner {
        require(autoRebase != _autoRebase, "Not changed");
        autoRebase = _autoRebase;
    }

    function setRebaseFrequency(uint256 _rebaseFrequency) external onlyOwner {
        require(_rebaseFrequency <= MAX_REBASE_FREQUENCY, "Too high");
        rebaseFrequency = _rebaseFrequency;
    }

    function setRewardYield(uint256 _rewardYield) external onlyOwner {
        require(rewardYield != _rewardYield, "Not changed");
        rewardYield = _rewardYield;
    }

    function setFeesOnNormalTransfers(bool _enabled) external onlyOwner {
        require(feesOnNormalTransfers != _enabled, "Not changed");
        feesOnNormalTransfers = _enabled;
    }

    function setIsLiquidityEnabled(bool _value) external onlyOwner {
        require(isLiquidityEnabled != _value, "Not changed");
        isLiquidityEnabled = _value;
    }

    function setIsLiquidityInFtm(bool _value) external onlyOwner {
        require(isLiquidityInFtm != _value, "Not changed");
        isLiquidityInFtm = _value;
    }

    function setIsRfvInFtm(bool _value) external onlyOwner {
        require(isRfvInFtm != _value, "Not changed");
        isRfvInFtm = _value;
    }

    function setNextRebase(uint256 _nextRebase) external onlyOwner {
        nextRebase = _nextRebase;
    }

    function setMaxSellTransaction(uint256 _maxTxn) external onlyOwner {
        require(_maxTxn >= MIN_MAX_SELL_AMOUNT, "Too small");
        maxSellTransactionAmount = _maxTxn;
    }

    event SwapBack(uint256 contractTokenBalance,uint256 amountToLiquify,uint256 amountToRFV,uint256 amountToTreasury);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ftmReceived, uint256 tokensIntoLiqudity);
    event SwapAndLiquifyUsdc(uint256 tokensSwapped, uint256 usdcReceived, uint256 tokensIntoLiqudity);
    event LogRebase(uint256 indexed epoch, uint256 totalSupply);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event GenericErrorEvent(string reason);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"}],"name":"Authorized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"GenericErrorEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ftmReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdcReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquifyUsdc","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"contractTokenBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToLiquify","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToRFV","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToTreasury","type":"uint256"}],"name":"SwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"}],"name":"Unauthorized","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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeRFV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyxLiberoFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesOnNormalTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialDistributionFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidityEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidityInFtm","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRfvInFtm","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"riskFreeValueReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBurnFeeAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeRFVAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeTreasuryAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellxLiberoFeeAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_autoRebase","type":"bool"}],"name":"setAutoRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityReceiver","type":"address"},{"internalType":"address","name":"_treasuryReceiver","type":"address"},{"internalType":"address","name":"_riskFreeValueReceiver","type":"address"},{"internalType":"address","name":"_xLiberoReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_riskFreeValue","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_xLiberoFee","type":"uint256"},{"internalType":"uint256","name":"_sellFeeTreasuryAdded","type":"uint256"},{"internalType":"uint256","name":"_sellFeeRFVAdded","type":"uint256"},{"internalType":"uint256","name":"_sellBurnFeeAdded","type":"uint256"},{"internalType":"uint256","name":"_sellxLiberoFeeAdded","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnNormalTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setInitialDistributionFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setIsLiquidityEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setIsLiquidityInFtm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setIsRfvInFtm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxn","type":"uint256"}],"name":"setMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nextRebase","type":"uint256"}],"name":"setNextRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rebaseFrequency","type":"uint256"}],"name":"setRebaseFrequency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardYield","type":"uint256"}],"name":"setRewardYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdcToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xLiberoReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526004805460ff60281b1960ff60201b1963ff0000001962ffffff1990931662010000179290921663010000001791909116640100000000171665010000000000179055621567996005556102586006556301e1338042016007556a01a784379d99db420000006008556954b40b1f852bda000000600955600d80546001600160a01b031990811673730736e3cdffc531b74eb8b30bd2cc50beb8ab3c17909155600e80548216733ff8970f17d463b83d289827b7b8e5eed61cc3e8179055600f805482167314c02711a4678fc7de388e77e99b07753c856e8417905560108054909116738689edab5bdb17b11273a5c9412c4bbc8f2ec4f817905560286013819055601e60148181556032601581905560168290556000601781905560188390556019859055601a819055601b819055620001719490936200015d93928492909183919062002def62000839602090811b91909117901c565b6200083960201b62002def1790919060201c565b601c55620001a7601b546200015d601a546200015d6019546200015d601854601c546200083960201b62002def1790919060201c565b601d55348015620001b757600080fd5b50604080518082018252601f81527f46616e746f6d204c696265726f2046696e616e6369616c2046726565646f6d00602080830191825283518085019094526007845266464c494245524f60c81b9084015281513393916012916200021f9160009162000c11565b5081516200023590600190602085019062000c11565b50600280546001600160a01b039586166101008102610100600160a81b031960ff90951660ff199384161794909416939093179091556000918252600360209081526040928390208054909216600117909155601180546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c291790819055825163c45a015560e01b8152925195169463c45a01559450600480840194509192909190829003018186803b158015620002e957600080fd5b505afa158015620002fe573d6000803e3d6000fd5b505050506040513d60208110156200031557600080fd5b5051601154604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693309391169163ad5c464891600480820192602092909190829003018186803b1580156200036857600080fd5b505afa1580156200037d573d6000803e3d6000fd5b505050506040513d60208110156200039457600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620003e757600080fd5b505af1158015620003fc573d6000803e3d6000fd5b505050506040513d60208110156200041357600080fd5b5051601280546001600160a01b0319166001600160a01b039283161790556011546040805163c45a015560e01b81529051600093929092169163c45a015591600480820192602092909190829003018186803b1580156200047357600080fd5b505afa15801562000488573d6000803e3d6000fd5b505050506040513d60208110156200049f57600080fd5b5051604080516364e329cb60e11b81523060048201527304068da6c83afcfa0e13ba15a6696662335d5b75602482015290516001600160a01b039092169163c9c65396916044808201926020929091908290030181600087803b1580156200050657600080fd5b505af11580156200051b573d6000803e3d6000fd5b505050506040513d60208110156200053257600080fd5b50513060008181526022602090815260408083206011546001600160a01b03908116855292528083206000199081905560128054841685528285208290559484528184208190558286168452922091909155905491925062000597911660016200089b565b620005a48160016200089b565b6b04d8c55aefb8c05b5c000000601f9081553360009081526021602090815260409091206b0370271e937e2b9a33ffffff19908190559154620005f1929162002e6a62000b07821b17901c565b6020908155600e546001600160a01b039081166000908152600a835260408082208054600160ff199182168117909255600f54851684528284208054821683179055308452828420805482168317905533845282842080549091169091179055601154815163095ea7b360e01b8152931660048401526000196024840152517304068da6c83afcfa0e13ba15a6696662335d5b759363095ea7b393604480820194929392918390030190829087803b158015620006ad57600080fd5b505af1158015620006c2573d6000803e3d6000fd5b505050506040513d6020811015620006d957600080fd5b50506040805163095ea7b360e01b81526001600160a01b0383166004820152600019602482015290517304068da6c83afcfa0e13ba15a6696662335d5b759163095ea7b39160448083019260209291908290030181600087803b1580156200074057600080fd5b505af115801562000755573d6000803e3d6000fd5b505050506040513d60208110156200076c57600080fd5b50506040805163095ea7b360e01b8152306004820152600019602482015290517304068da6c83afcfa0e13ba15a6696662335d5b759163095ea7b39160448083019260209291908290030181600087803b158015620007ca57600080fd5b505af1158015620007df573d6000803e3d6000fd5b505050506040513d6020811015620007f657600080fd5b5050601f54604080519182525133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35062000cbd565b60008282018381101562000894576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b620008a63362000b51565b620008b057600080fd5b6001600160a01b0382166000908152600c602052604090205460ff161515811515141562000919576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152600c60205260409020805460ff191682158015919091179091556200099857600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b03841617905562000acb565b600b54600110620009e2576040805162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015290519081900360640190fd5b60005b600b5481101562000ac957826001600160a01b0316600b828154811062000a0857fe5b6000918252602090912001546001600160a01b0316141562000ac057600b8054600019810190811062000a3757fe5b600091825260209091200154600b80546001600160a01b03909216918390811062000a5e57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600b80548062000a9857fe5b600082815260209020810160001990810180546001600160a01b031916905501905562000ac9565b600101620009e5565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60006200089483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000b6a60201b60201c565b60025461010090046001600160a01b0390811691161490565b6000818362000bfa5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000bbe57818101518382015260200162000ba4565b50505050905090810190601f16801562000bec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000c0757fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000c49576000855562000c94565b82601f1062000c6457805160ff191683800117855562000c94565b8280016001018555821562000c94579182015b8281111562000c9457825182559160200191906001019062000c77565b5062000ca292915062000ca6565b5090565b5b8082111562000ca2576000815560010162000ca7565b6144cd8062000ccd6000396000f3fe6080604052600436106104185760003560e01c80638102c57011610228578063b62496f511610128578063e15beb80116100bb578063f2fde38b1161008a578063f887ea401161006f578063f887ea4014610ed8578063fd06e24614610eed578063fe9fbb8014610f025761041f565b8063f2fde38b14610e6c578063f3a54f2c14610eac5761041f565b8063e15beb8014610dd6578063e71dc3f514610e02578063e98ca27614610e17578063f0b37c0414610e2c5761041f565b8063cc32d176116100f7578063cc32d17614610d24578063d1fce26414610d39578063d439979014610d4e578063dd62ed3e14610d8e5761041f565b8063b62496f514610c7a578063b6a5d7de14610cba578063b9a6a13c14610cfa578063bc7e68a314610d0f5761041f565b80639ae7372d116101bb578063a8aa1b311161018a578063add5df661161016f578063add5df6614610bf4578063ae74df3314610c50578063af9b800e14610c655761041f565b8063a8aa1b3114610b99578063a9059cbb14610bae5761041f565b80639ae7372d14610aea5780639d0014b114610b145780639d9241ec14610b3e578063a457c2d714610b535761041f565b806395d89b41116101f757806395d89b4114610a635780639763eec414610a7857806398118cb414610a8d5780639a7a23d614610aa25761041f565b80638102c570146109dc57806389375abf146109f15780638ebfc79614610a065780639079f93214610a4e5761041f565b8063313ce567116103335780635abe6711116102c657806370a0823111610295578063764d72bf1161027a578063764d72bf146109725780637ac82927146109b25780637d4b5017146109c75761041f565b806370a082311461091d578063753d02a11461095d5761041f565b80635abe67111461089d5780635c38ffe2146108b257806361a9d1b1146108dc57806369511136146108f15761041f565b806343e1f26b1161030257806343e1f26b146108095780634460d3cf1461081e5780634cd9ddf21461085e57806359b107b9146108885761041f565b8063313ce567146107145780633643f1d51461073f578063395093511461076b5780633c8e556d146107b15761041f565b80631276089b116103ab578063264d26dd1161037a578063264d26dd14610680578063266579f6146106955780632b112e49146106bf5780632f54bf6e146106d45761041f565b80631276089b146105c157806318160ddd146105ef5780631c37b3151461060457806323b872dd146106305761041f565b806308b1fd8f116103e757806308b1fd8f146104ff578063095ea7b31461053d5780630af083141461059757806311eac855146105ac5761041f565b806302259e9e146104245780630445b6671461044b57806306fdde03146104605780630719b36d146104ea5761041f565b3661041f57005b600080fd5b34801561043057600080fd5b50610439610f42565b60408051918252519081900360200190f35b34801561045757600080fd5b50610439610f48565b34801561046c57600080fd5b50610475610f4e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104af578181015183820152602001610497565b50505050905090810190601f1680156104dc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104f657600080fd5b50610439611003565b34801561050b57600080fd5b50610514611009565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561054957600080fd5b506105836004803603604081101561056057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611025565b604080519115158252519081900360200190f35b3480156105a357600080fd5b50610439611099565b3480156105b857600080fd5b5061051461109f565b3480156105cd57600080fd5b506105ed600480360360208110156105e457600080fd5b503515156110b7565b005b3480156105fb57600080fd5b50610439611172565b34801561061057600080fd5b506105ed6004803603602081101561062757600080fd5b50351515611178565b34801561063c57600080fd5b506105836004803603606081101561065357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611245565b34801561068c57600080fd5b50610514611378565b3480156106a157600080fd5b506105ed600480360360208110156106b857600080fd5b5035611394565b3480156106cb57600080fd5b5061043961141c565b3480156106e057600080fd5b50610583600480360360208110156106f757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166114ba565b34801561072057600080fd5b506107296114e3565b6040805160ff9092168252519081900360200190f35b34801561074b57600080fd5b506105ed6004803603602081101561076257600080fd5b503515156114ec565b34801561077757600080fd5b506105836004803603604081101561078e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356115bb565b3480156107bd57600080fd5b506105ed600480360360808110156107d457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201358116916060013516611668565b34801561081557600080fd5b506104396118f7565b34801561082a57600080fd5b506105836004803603602081101561084157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166118fd565b34801561086a57600080fd5b506105ed6004803603602081101561088157600080fd5b5035611ad7565b34801561089457600080fd5b50610439611b5f565b3480156108a957600080fd5b50610583611b65565b3480156108be57600080fd5b506105ed600480360360208110156108d557600080fd5b5035611b74565b3480156108e857600080fd5b506105ed611c03565b3480156108fd57600080fd5b506105ed6004803603602081101561091457600080fd5b50351515611d31565b34801561092957600080fd5b506104396004803603602081101561094057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611dfc565b34801561096957600080fd5b506105ed611e2f565b34801561097e57600080fd5b506105ed6004803603602081101561099557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611fdb565b3480156109be57600080fd5b50610439612037565b3480156109d357600080fd5b5061051461203d565b3480156109e857600080fd5b50610439612059565b3480156109fd57600080fd5b5061043961205f565b348015610a1257600080fd5b506105ed60048036036040811015610a2957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515612065565b348015610a5a57600080fd5b50610583612168565b348015610a6f57600080fd5b50610475612176565b348015610a8457600080fd5b506104396121f4565b348015610a9957600080fd5b506104396121fa565b348015610aae57600080fd5b506105ed60048036036040811015610ac557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515612200565b348015610af657600080fd5b506105ed60048036036020811015610b0d57600080fd5b50356125aa565b348015610b2057600080fd5b506105ed60048036036020811015610b3757600080fd5b50356125c1565b348015610b4a57600080fd5b50610439612649565b348015610b5f57600080fd5b5061058360048036036040811015610b7657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561264f565b348015610ba557600080fd5b5061051461276c565b348015610bba57600080fd5b5061058360048036036040811015610bd157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612788565b348015610c0057600080fd5b506105ed6004803603610120811015610c1857600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c08101359060e08101359061010001356127c1565b348015610c5c57600080fd5b50610439612938565b348015610c7157600080fd5b5061058361293e565b348015610c8657600080fd5b5061058360048036036020811015610c9d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612950565b348015610cc657600080fd5b506105ed60048036036020811015610cdd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612965565b348015610d0657600080fd5b506105146129fd565b348015610d1b57600080fd5b50610439612a19565b348015610d3057600080fd5b50610439612a1f565b348015610d4557600080fd5b50610583612a25565b348015610d5a57600080fd5b5061058360048036036020811015610d7157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612a2e565b348015610d9a57600080fd5b5061043960048036036040811015610db157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516612a59565b348015610de257600080fd5b506105ed60048036036020811015610df957600080fd5b50351515612a91565b348015610e0e57600080fd5b50610439612b58565b348015610e2357600080fd5b50610583612b5e565b348015610e3857600080fd5b506105ed60048036036020811015610e4f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612b6f565b348015610e7857600080fd5b506105ed60048036036020811015610e8f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612c04565b348015610eb857600080fd5b506105ed60048036036020811015610ecf57600080fd5b50351515612ccf565b348015610ee457600080fd5b50610514612d98565b348015610ef957600080fd5b50610583612db4565b348015610f0e57600080fd5b5061058360048036036020811015610f2557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612dc4565b60085481565b60095481565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ff85780601f10610fcd57610100808354040283529160200191610ff8565b820191906000526020600020905b815481529060010190602001808311610fdb57829003601f168201915b505050505090505b90565b60175481565b600e5473ffffffffffffffffffffffffffffffffffffffff1681565b33600081815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60055481565b7304068da6c83afcfa0e13ba15a6696662335d5b7581565b6110c0336114ba565b6110c957600080fd5b60045460ff161515811515141561114157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b601f5490565b611181336114ba565b61118a57600080fd5b60045460ff640100000000909104161515811515141561120b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b60048054911515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909216919091179055565b60008273ffffffffffffffffffffffffffffffffffffffff811661126857600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660009081526022602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461136157604080518082018252601681527f496e73756666696369656e7420416c6c6f77616e63650000000000000000000060208083019190915273ffffffffffffffffffffffffffffffffffffffff8816600090815260228252838120338252909152919091205461132f918590612eac565b73ffffffffffffffffffffffffffffffffffffffff861660009081526022602090815260408083203384529091529020555b61136c858585612f5d565b50600195945050505050565b600d5473ffffffffffffffffffffffffffffffffffffffff1681565b61139d336114ba565b6113a657600080fd5b80600554141561141757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600555565b6020805460219091527f97ea4a93fb5e400340102ffa4fa5d31ef170c1e583d2cb268c876db385f80bb05461dead60009081527fda90364631e387f138e7e413f1de75a8ecb4767574209ddf012729113dea45c05490926114b59290916114af91906114a9907ffffffffffffffffffffffffffffffffffffffffffc8fd8e16c81d465cc000000906132e6565b906132e6565b90612e6a565b905090565b60025473ffffffffffffffffffffffffffffffffffffffff82811661010090920416145b919050565b60025460ff1690565b6114f5336114ba565b6114fe57600080fd5b60045460ff65010000000000909104161515811515141561158057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b6004805491151565010000000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff909216919091179055565b33600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120546115f69083612def565b33600081815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b611671336114ba565b61167a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166116fc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c6964205f6c69717569646974795265636569766572000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831661177e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e76616c6964205f7472656173757279526563656976657200000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821661180057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f496e76616c6964205f7269736b4672656556616c756552656365697665720000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661188257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c6964205f784c696265726f52656365697665720000000000000000604482015290519081900360640190fd5b600d805473ffffffffffffffffffffffffffffffffffffffff9586167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600e805494861694821694909417909355600f80549285169284169290921790915560108054919093169116179055565b601b5481565b6000611908336114ba565b61191157600080fd5b73ffffffffffffffffffffffffffffffffffffffff821630141561199657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f7420616c6c6f7720726563757365204c696265726f000000000000000000604482015290519081900360640190fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119ff57600080fd5b505afa158015611a13573d6000803e3d6000fd5b505050506040513d6020811015611a2957600080fd5b5051604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905191925073ffffffffffffffffffffffffffffffffffffffff85169163a9059cbb916044808201926020929091908290030181600087803b158015611aa457600080fd5b505af1158015611ab8573d6000803e3d6000fd5b505050506040513d6020811015611ace57600080fd5b50519392505050565b611ae0336114ba565b611ae957600080fd5b610708811115611b5a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f546f6f2068696768000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600655565b601c5481565b60045462010000900460ff1681565b611b7d336114ba565b611b8657600080fd5b683635c9adc5dea00000811015611bfe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f546f6f20736d616c6c0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600855565b611c0c33612dc4565b611c1557600080fd5b601e5460ff1615611c8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f54727920616761696e0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b426007541115611cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f7420696e2074696d65000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000611d1a6402540be4006114af600554601f5461332890919063ffffffff16565b9050611d258161339b565b50611d2e611e2f565b50565b611d3a336114ba565b611d4357600080fd5b60045460ff63010000009091041615158115151415611dc357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600480549115156301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055565b6020805473ffffffffffffffffffffffffffffffffffffffff831660009081526021909252604082205461109391612e6a565b60005b600b54811015611d2e57600b8181548110611e4957fe5b6000918252602082200154604080517ffff6cae9000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263fff6cae99260048084019382900301818387803b158015611eb757600080fd5b505af1925050508015611ec8575060015b611fd357611ed461436e565b80611edf5750611fc9565b7f6bb22edb6252e9e04a83e4886d28bc5662efe624ec664e2d0e4b38854c3c23836040518080602001828103825260278152602001806144716027913960400191505060405180910390a17f6bb22edb6252e9e04a83e4886d28bc5662efe624ec664e2d0e4b38854c3c2383816040518080602001828103825283818151815260200191508051906020019080838360005b83811015611f89578181015183820152602001611f71565b50505050905090810190601f168015611fb65780820380516001836020036101000a031916815260200191505b509250505060405180910390a150611fd3565b3d6000803e3d6000fd5b600101611e32565b611fe4336114ba565b611fed57600080fd5b604051479073ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f19350505050158015612032573d6000803e3d6000fd5b505050565b60195481565b600f5473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b60065481565b61206e336114ba565b61207757600080fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604090205460ff161515811515141561211257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600454610100900460ff1681565b60018054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ff85780601f10610fcd57610100808354040283529160200191610ff8565b60155481565b60135481565b612209336114ba565b61221257600080fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c602052604090205460ff16151581151514156122ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f56616c756520616c726561647920736574000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821580159190911790915561237a57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055612561565b600b546001106123eb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5265717569726564203120706169720000000000000000000000000000000000604482015290519081900360640190fd5b60005b600b5481101561255f578273ffffffffffffffffffffffffffffffffffffffff16600b828154811061241c57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561255757600b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061247457fe5b600091825260209091200154600b805473ffffffffffffffffffffffffffffffffffffffff90921691839081106124a757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b8054806124fa57fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905501905561255f565b6001016123ee565b505b6040518115159073ffffffffffffffffffffffffffffffffffffffff8416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6125b3336114ba565b6125bc57600080fd5b600755565b6125ca336114ba565b6125d357600080fd5b80600954141561264457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600955565b601d5481565b33600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548083106126bd5733600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff881684529091528120556126f9565b6126c781846132e6565b33600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff891684529091529020555b33600081815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60125473ffffffffffffffffffffffffffffffffffffffff1681565b60008273ffffffffffffffffffffffffffffffffffffffff81166127ab57600080fd5b6127b6338585612f5d565b506001949350505050565b6127ca336114ba565b6127d357600080fd5b6013899055601588905560148790556016869055601785905560188490556019839055601a829055601b8190556128188561281288818c818f8e612def565b90612def565b601c81905550612847601b54612812601a54612812601954612812601854601c54612def90919063ffffffff16565b601d55601c5460fa116128bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f546f74616c206275792066656520746f6f206869676800000000000000000000604482015290519081900360640190fd5b6101f4601d541061292d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f74616c2073656c6c2066656520746f6f2068696768000000000000000000604482015290519081900360640190fd5b505050505050505050565b601a5481565b60045465010000000000900460ff1681565b600c6020526000908152604090205460ff1681565b61296e336114ba565b61297757600080fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835290517fdc84e3a4c83602050e3865df792a4e6800211a79ac60db94e703a820ce8929249281900390910190a150565b60105473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60145481565b60045460ff1681565b73ffffffffffffffffffffffffffffffffffffffff166000908152600a602052604090205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260226020908152604080832093909416825291909152205490565b612a9a336114ba565b612aa357600080fd5b60045460ff6101009091041615158115151415612b2157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b60048054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b60165481565b600454640100000000900460ff1681565b612b78336114ba565b612b8157600080fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055815192835290517f8e4a23d6a5d81f013eca4bc92aeb9214ccafcaebd1f097c350c922d6e19122d59281900390910190a150565b612c0d336114ba565b612c1657600080fd5b600280547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff84169081029190911790915560008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835290517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639281900390910190a150565b612cd8336114ba565b612ce157600080fd5b60045460ff620100009091041615158115151415612d6057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b6004805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60115473ffffffffffffffffffffffffffffffffffffffff1681565b6004546301000000900460ff1681565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205460ff1690565b600082820183811015612e6357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000612e6383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506134c1565b60008184841115612f55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f1a578181015183820152602001612f02565b50505050905090810190601f168015612f475780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600a6020526040812054819060ff1680612fb8575073ffffffffffffffffffffffffffffffffffffffff84166000908152600a602052604090205460ff165b60045490915060ff1680612fc95750805b61303457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f54726164696e67206e6f74207374617274656400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600c602052604090205460ff168015613067575080155b156130dd576008548311156130dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4572726f7220616d6f756e740000000000000000000000000000000000000000604482015290519081900360640190fd5b601e5460ff16156130fb576130f3858585613540565b915050612e63565b60006131126020548561332890919063ffffffff16565b905061311c613636565b15613129576131296136a3565b73ffffffffffffffffffffffffffffffffffffffff861660009081526021602052604090205461315990826132e6565b73ffffffffffffffffffffffffffffffffffffffff871660009081526021602052604081209190915561318c878761393d565b61319657816131a1565b6131a1878784613a1c565b73ffffffffffffffffffffffffffffffffffffffff87166000908152602160205260409020549091506131d49082612def565b73ffffffffffffffffffffffffffffffffffffffff8088166000818152602160209081526040909120939093559154908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613234908590612e6a565b60408051918252519081900360200190a361324d613b06565b80156132605750600454610100900460ff165b8015613292575073ffffffffffffffffffffffffffffffffffffffff87166000908152600c602052604090205460ff16155b80156132c4575073ffffffffffffffffffffffffffffffffffffffff86166000908152600c602052604090205460ff16155b156132d9576132d1613b0f565b6132d9611e2f565b5060019695505050505050565b6000612e6383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612eac565b60008261333757506000611093565b8282028284828161334457fe5b0414612e63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806144506021913960400191505060405180910390fd5b600042826133e557601f54604080519182525182917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a25050601f546114de565b600083121561340757601f546133ff9060008590036132e6565b601f55613418565b601f546134149084612def565b601f555b601f546fffffffffffffffffffffffffffffffff1015613447576fffffffffffffffffffffffffffffffff601f555b601f54613475907ffffffffffffffffffffffffffffffffffffffffffc8fd8e16c81d465cc00000090612e6a565b60209081556006548201600755601f54604080519182525183927f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2928290030190a25050601f54919050565b6000818361352a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612f1a578181015183820152602001612f02565b50600083858161353657fe5b0495945050505050565b6000806135586020548461332890919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff861660009081526021602052604090205490915061358b90826132e6565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526021602052604080822093909355908616815220546135c79082612def565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526021602090815260409182902094909455805187815290519193928916927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3506001949350505050565b336000908152600c602052604081205460ff161580156136595750601e5460ff16155b801561366757506000600954115b801561368957506000613687601d54601c54612def90919063ffffffff16565b115b80156114b5575060095461369c30611dfc565b1015905090565b601e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055601d54601c546000916136e19190612def565b60045490915060009065010000000000900460ff16613701576000613705565b6013545b6020805430600090815260219092526040822054929350909161372791612e6a565b90506000613744846114af61373d866002613328565b8590613328565b90506000613772856114af61376b601a54612812600260165461332890919063ffffffff16565b8690613328565b905060006137a0866114af613799601954612812600260155461332890919063ffffffff16565b8790613328565b905060006137ce876114af6137c7601b54612812600260175461332890919063ffffffff16565b8890613328565b905060006137e4826114a9858188818c8c6132e6565b905084156137f5576137f585613b4b565b831561380a576138083061dead86613540565b505b821561387057600454640100000000900460ff161561384c57600f5461384790849073ffffffffffffffffffffffffffffffffffffffff16613d91565b613870565b600f5461387090849073ffffffffffffffffffffffffffffffffffffffff16613fb6565b811561389a5760105461389a90839073ffffffffffffffffffffffffffffffffffffffff16613fb6565b80156138c457600e546138c490829073ffffffffffffffffffffffffffffffffffffffff16613d91565b60408051878152602081018790528082018590526060810183905290517fa4903880285538fa6ffa51cad044f25c39cc7f89aa6cbbda844135ff94827edf9181900360800190a15050601e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604081205460ff1680613996575073ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604090205460ff165b156139a357506000611093565b60045462010000900460ff16156139bc57506001611093565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600c602052604090205460ff1680613a15575073ffffffffffffffffffffffffffffffffffffffff82166000908152600c602052604090205460ff165b9050611093565b601c5473ffffffffffffffffffffffffffffffffffffffff83166000908152600c602052604081205490919060ff1615613a555750601d545b6000613a676103e86114af8685613328565b30600090815260216020526040902054909150613a849082612def565b30600081815260216020908152604090912092909255905473ffffffffffffffffffffffffffffffffffffffff8816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613ae1908590612e6a565b60408051918252519081900360200190a3613afc84826132e6565b9695505050505050565b60075442101590565b601e5460ff16613b49576000613b3b6402540be4006114af600554601f5461332890919063ffffffff16565b9050613b468161339b565b50505b565b6000613b58826002612e6a565b90506000613b6683836132e6565b6004549091506301000000900460ff1615613be55747613b868330613d91565b6000613b9247836132e6565b9050613b9e83826141b5565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15050612032565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000917304068da6c83afcfa0e13ba15a6696662335d5b75916370a0823191602480820192602092909190829003018186803b158015613c5357600080fd5b505afa158015613c67573d6000803e3d6000fd5b505050506040513d6020811015613c7d57600080fd5b50519050613c8b8330613fb6565b6000613d3e827304068da6c83afcfa0e13ba15a6696662335d5b7573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613d0c57600080fd5b505afa158015613d20573d6000803e3d6000fd5b505050506040513d6020811015613d3657600080fd5b5051906132e6565b9050613d4a8382614281565b604080518581526020810183905280820185905290517f42563dfd1c3e559df99e21ffc35d82ea7e18a20669e5d3a6d69a4e63af3200e09181900360600190a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613dc057fe5b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152601154604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015613e3a57600080fd5b505afa158015613e4e573d6000803e3d6000fd5b505050506040513d6020811015613e6457600080fd5b5051815182906001908110613e7557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613f70578181015183820152602001613f58565b505050509050019650505050505050600060405180830381600087803b158015613f9957600080fd5b505af1158015613fad573d6000803e3d6000fd5b50505050505050565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110613fe757fe5b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152601154604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561406157600080fd5b505afa158015614075573d6000803e3d6000fd5b505050506040513d602081101561408b57600080fd5b505181518290600190811061409c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507304068da6c83afcfa0e13ba15a6696662335d5b75816002815181106140f857fe5b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092018101919091526011546040517f5c11d795000000000000000000000000000000000000000000000000000000008152600481018781526000602483018190528786166064840152426084840181905260a060448501908152885160a486015288519590971696635c11d795968b9693958a958c9590939260c49092019187810191028083838b8315613f70578181015183820152602001613f58565b601154600d54604080517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015273ffffffffffffffffffffffffffffffffffffffff92831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b15801561425057600080fd5b505af1158015614264573d6000803e3d6000fd5b50505050506040513d606081101561427b57600080fd5b50505050565b601154600d54604080517fe8e337000000000000000000000000000000000000000000000000000000000081523060048201527304068da6c83afcfa0e13ba15a6696662335d5b756024820152604481018690526064810185905260006084820181905260a4820181905273ffffffffffffffffffffffffffffffffffffffff93841660c48301524260e48301529151929093169263e8e33700926101048083019360609383900390910190829087803b15801561433e57600080fd5b505af1158015614352573d6000803e3d6000fd5b505050506040513d606081101561427b57600080fd5b60e01c90565b600060443d101561437e57611000565b600481823e6308c379a06143928251614368565b1461439c57611000565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3d016004823e80513d67ffffffffffffffff81602484011181841117156143ea5750505050611000565b828401925082519150808211156144045750505050611000565b503d8301602082840101111561441c57505050611000565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681016020016040529150509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776d616e75616c53796e6328293a205f6d616b657250616972732e73796e632829204661696c6564a2646970667358221220d3bf1dbef9d0fbdff8215978209d74d09a236613d6706a59439d28c6dae7cf0864736f6c63430007060033

Deployed Bytecode

0x6080604052600436106104185760003560e01c80638102c57011610228578063b62496f511610128578063e15beb80116100bb578063f2fde38b1161008a578063f887ea401161006f578063f887ea4014610ed8578063fd06e24614610eed578063fe9fbb8014610f025761041f565b8063f2fde38b14610e6c578063f3a54f2c14610eac5761041f565b8063e15beb8014610dd6578063e71dc3f514610e02578063e98ca27614610e17578063f0b37c0414610e2c5761041f565b8063cc32d176116100f7578063cc32d17614610d24578063d1fce26414610d39578063d439979014610d4e578063dd62ed3e14610d8e5761041f565b8063b62496f514610c7a578063b6a5d7de14610cba578063b9a6a13c14610cfa578063bc7e68a314610d0f5761041f565b80639ae7372d116101bb578063a8aa1b311161018a578063add5df661161016f578063add5df6614610bf4578063ae74df3314610c50578063af9b800e14610c655761041f565b8063a8aa1b3114610b99578063a9059cbb14610bae5761041f565b80639ae7372d14610aea5780639d0014b114610b145780639d9241ec14610b3e578063a457c2d714610b535761041f565b806395d89b41116101f757806395d89b4114610a635780639763eec414610a7857806398118cb414610a8d5780639a7a23d614610aa25761041f565b80638102c570146109dc57806389375abf146109f15780638ebfc79614610a065780639079f93214610a4e5761041f565b8063313ce567116103335780635abe6711116102c657806370a0823111610295578063764d72bf1161027a578063764d72bf146109725780637ac82927146109b25780637d4b5017146109c75761041f565b806370a082311461091d578063753d02a11461095d5761041f565b80635abe67111461089d5780635c38ffe2146108b257806361a9d1b1146108dc57806369511136146108f15761041f565b806343e1f26b1161030257806343e1f26b146108095780634460d3cf1461081e5780634cd9ddf21461085e57806359b107b9146108885761041f565b8063313ce567146107145780633643f1d51461073f578063395093511461076b5780633c8e556d146107b15761041f565b80631276089b116103ab578063264d26dd1161037a578063264d26dd14610680578063266579f6146106955780632b112e49146106bf5780632f54bf6e146106d45761041f565b80631276089b146105c157806318160ddd146105ef5780631c37b3151461060457806323b872dd146106305761041f565b806308b1fd8f116103e757806308b1fd8f146104ff578063095ea7b31461053d5780630af083141461059757806311eac855146105ac5761041f565b806302259e9e146104245780630445b6671461044b57806306fdde03146104605780630719b36d146104ea5761041f565b3661041f57005b600080fd5b34801561043057600080fd5b50610439610f42565b60408051918252519081900360200190f35b34801561045757600080fd5b50610439610f48565b34801561046c57600080fd5b50610475610f4e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104af578181015183820152602001610497565b50505050905090810190601f1680156104dc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104f657600080fd5b50610439611003565b34801561050b57600080fd5b50610514611009565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561054957600080fd5b506105836004803603604081101561056057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611025565b604080519115158252519081900360200190f35b3480156105a357600080fd5b50610439611099565b3480156105b857600080fd5b5061051461109f565b3480156105cd57600080fd5b506105ed600480360360208110156105e457600080fd5b503515156110b7565b005b3480156105fb57600080fd5b50610439611172565b34801561061057600080fd5b506105ed6004803603602081101561062757600080fd5b50351515611178565b34801561063c57600080fd5b506105836004803603606081101561065357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611245565b34801561068c57600080fd5b50610514611378565b3480156106a157600080fd5b506105ed600480360360208110156106b857600080fd5b5035611394565b3480156106cb57600080fd5b5061043961141c565b3480156106e057600080fd5b50610583600480360360208110156106f757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166114ba565b34801561072057600080fd5b506107296114e3565b6040805160ff9092168252519081900360200190f35b34801561074b57600080fd5b506105ed6004803603602081101561076257600080fd5b503515156114ec565b34801561077757600080fd5b506105836004803603604081101561078e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356115bb565b3480156107bd57600080fd5b506105ed600480360360808110156107d457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201358116916060013516611668565b34801561081557600080fd5b506104396118f7565b34801561082a57600080fd5b506105836004803603602081101561084157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166118fd565b34801561086a57600080fd5b506105ed6004803603602081101561088157600080fd5b5035611ad7565b34801561089457600080fd5b50610439611b5f565b3480156108a957600080fd5b50610583611b65565b3480156108be57600080fd5b506105ed600480360360208110156108d557600080fd5b5035611b74565b3480156108e857600080fd5b506105ed611c03565b3480156108fd57600080fd5b506105ed6004803603602081101561091457600080fd5b50351515611d31565b34801561092957600080fd5b506104396004803603602081101561094057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611dfc565b34801561096957600080fd5b506105ed611e2f565b34801561097e57600080fd5b506105ed6004803603602081101561099557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611fdb565b3480156109be57600080fd5b50610439612037565b3480156109d357600080fd5b5061051461203d565b3480156109e857600080fd5b50610439612059565b3480156109fd57600080fd5b5061043961205f565b348015610a1257600080fd5b506105ed60048036036040811015610a2957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515612065565b348015610a5a57600080fd5b50610583612168565b348015610a6f57600080fd5b50610475612176565b348015610a8457600080fd5b506104396121f4565b348015610a9957600080fd5b506104396121fa565b348015610aae57600080fd5b506105ed60048036036040811015610ac557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515612200565b348015610af657600080fd5b506105ed60048036036020811015610b0d57600080fd5b50356125aa565b348015610b2057600080fd5b506105ed60048036036020811015610b3757600080fd5b50356125c1565b348015610b4a57600080fd5b50610439612649565b348015610b5f57600080fd5b5061058360048036036040811015610b7657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561264f565b348015610ba557600080fd5b5061051461276c565b348015610bba57600080fd5b5061058360048036036040811015610bd157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612788565b348015610c0057600080fd5b506105ed6004803603610120811015610c1857600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c08101359060e08101359061010001356127c1565b348015610c5c57600080fd5b50610439612938565b348015610c7157600080fd5b5061058361293e565b348015610c8657600080fd5b5061058360048036036020811015610c9d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612950565b348015610cc657600080fd5b506105ed60048036036020811015610cdd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612965565b348015610d0657600080fd5b506105146129fd565b348015610d1b57600080fd5b50610439612a19565b348015610d3057600080fd5b50610439612a1f565b348015610d4557600080fd5b50610583612a25565b348015610d5a57600080fd5b5061058360048036036020811015610d7157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612a2e565b348015610d9a57600080fd5b5061043960048036036040811015610db157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516612a59565b348015610de257600080fd5b506105ed60048036036020811015610df957600080fd5b50351515612a91565b348015610e0e57600080fd5b50610439612b58565b348015610e2357600080fd5b50610583612b5e565b348015610e3857600080fd5b506105ed60048036036020811015610e4f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612b6f565b348015610e7857600080fd5b506105ed60048036036020811015610e8f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612c04565b348015610eb857600080fd5b506105ed60048036036020811015610ecf57600080fd5b50351515612ccf565b348015610ee457600080fd5b50610514612d98565b348015610ef957600080fd5b50610583612db4565b348015610f0e57600080fd5b5061058360048036036020811015610f2557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612dc4565b60085481565b60095481565b60008054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ff85780601f10610fcd57610100808354040283529160200191610ff8565b820191906000526020600020905b815481529060010190602001808311610fdb57829003601f168201915b505050505090505b90565b60175481565b600e5473ffffffffffffffffffffffffffffffffffffffff1681565b33600081815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60055481565b7304068da6c83afcfa0e13ba15a6696662335d5b7581565b6110c0336114ba565b6110c957600080fd5b60045460ff161515811515141561114157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b601f5490565b611181336114ba565b61118a57600080fd5b60045460ff640100000000909104161515811515141561120b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b60048054911515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909216919091179055565b60008273ffffffffffffffffffffffffffffffffffffffff811661126857600080fd5b73ffffffffffffffffffffffffffffffffffffffff851660009081526022602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461136157604080518082018252601681527f496e73756666696369656e7420416c6c6f77616e63650000000000000000000060208083019190915273ffffffffffffffffffffffffffffffffffffffff8816600090815260228252838120338252909152919091205461132f918590612eac565b73ffffffffffffffffffffffffffffffffffffffff861660009081526022602090815260408083203384529091529020555b61136c858585612f5d565b50600195945050505050565b600d5473ffffffffffffffffffffffffffffffffffffffff1681565b61139d336114ba565b6113a657600080fd5b80600554141561141757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600555565b6020805460219091527f97ea4a93fb5e400340102ffa4fa5d31ef170c1e583d2cb268c876db385f80bb05461dead60009081527fda90364631e387f138e7e413f1de75a8ecb4767574209ddf012729113dea45c05490926114b59290916114af91906114a9907ffffffffffffffffffffffffffffffffffffffffffc8fd8e16c81d465cc000000906132e6565b906132e6565b90612e6a565b905090565b60025473ffffffffffffffffffffffffffffffffffffffff82811661010090920416145b919050565b60025460ff1690565b6114f5336114ba565b6114fe57600080fd5b60045460ff65010000000000909104161515811515141561158057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b6004805491151565010000000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff909216919091179055565b33600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120546115f69083612def565b33600081815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b611671336114ba565b61167a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166116fc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f496e76616c6964205f6c69717569646974795265636569766572000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831661177e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e76616c6964205f7472656173757279526563656976657200000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821661180057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f496e76616c6964205f7269736b4672656556616c756552656365697665720000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661188257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f496e76616c6964205f784c696265726f52656365697665720000000000000000604482015290519081900360640190fd5b600d805473ffffffffffffffffffffffffffffffffffffffff9586167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600e805494861694821694909417909355600f80549285169284169290921790915560108054919093169116179055565b601b5481565b6000611908336114ba565b61191157600080fd5b73ffffffffffffffffffffffffffffffffffffffff821630141561199657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f7420616c6c6f7720726563757365204c696265726f000000000000000000604482015290519081900360640190fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119ff57600080fd5b505afa158015611a13573d6000803e3d6000fd5b505050506040513d6020811015611a2957600080fd5b5051604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905191925073ffffffffffffffffffffffffffffffffffffffff85169163a9059cbb916044808201926020929091908290030181600087803b158015611aa457600080fd5b505af1158015611ab8573d6000803e3d6000fd5b505050506040513d6020811015611ace57600080fd5b50519392505050565b611ae0336114ba565b611ae957600080fd5b610708811115611b5a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f546f6f2068696768000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600655565b601c5481565b60045462010000900460ff1681565b611b7d336114ba565b611b8657600080fd5b683635c9adc5dea00000811015611bfe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f546f6f20736d616c6c0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600855565b611c0c33612dc4565b611c1557600080fd5b601e5460ff1615611c8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f54727920616761696e0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b426007541115611cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f7420696e2074696d65000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000611d1a6402540be4006114af600554601f5461332890919063ffffffff16565b9050611d258161339b565b50611d2e611e2f565b50565b611d3a336114ba565b611d4357600080fd5b60045460ff63010000009091041615158115151415611dc357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600480549115156301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff909216919091179055565b6020805473ffffffffffffffffffffffffffffffffffffffff831660009081526021909252604082205461109391612e6a565b60005b600b54811015611d2e57600b8181548110611e4957fe5b6000918252602082200154604080517ffff6cae9000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263fff6cae99260048084019382900301818387803b158015611eb757600080fd5b505af1925050508015611ec8575060015b611fd357611ed461436e565b80611edf5750611fc9565b7f6bb22edb6252e9e04a83e4886d28bc5662efe624ec664e2d0e4b38854c3c23836040518080602001828103825260278152602001806144716027913960400191505060405180910390a17f6bb22edb6252e9e04a83e4886d28bc5662efe624ec664e2d0e4b38854c3c2383816040518080602001828103825283818151815260200191508051906020019080838360005b83811015611f89578181015183820152602001611f71565b50505050905090810190601f168015611fb65780820380516001836020036101000a031916815260200191505b509250505060405180910390a150611fd3565b3d6000803e3d6000fd5b600101611e32565b611fe4336114ba565b611fed57600080fd5b604051479073ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f19350505050158015612032573d6000803e3d6000fd5b505050565b60195481565b600f5473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b60065481565b61206e336114ba565b61207757600080fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604090205460ff161515811515141561211257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600454610100900460ff1681565b60018054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ff85780601f10610fcd57610100808354040283529160200191610ff8565b60155481565b60135481565b612209336114ba565b61221257600080fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c602052604090205460ff16151581151514156122ad57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f56616c756520616c726561647920736574000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821580159190911790915561237a57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055612561565b600b546001106123eb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5265717569726564203120706169720000000000000000000000000000000000604482015290519081900360640190fd5b60005b600b5481101561255f578273ffffffffffffffffffffffffffffffffffffffff16600b828154811061241c57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561255757600b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061247457fe5b600091825260209091200154600b805473ffffffffffffffffffffffffffffffffffffffff90921691839081106124a757fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b8054806124fa57fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905501905561255f565b6001016123ee565b505b6040518115159073ffffffffffffffffffffffffffffffffffffffff8416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6125b3336114ba565b6125bc57600080fd5b600755565b6125ca336114ba565b6125d357600080fd5b80600954141561264457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b600955565b601d5481565b33600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548083106126bd5733600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff881684529091528120556126f9565b6126c781846132e6565b33600090815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff891684529091529020555b33600081815260226020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60125473ffffffffffffffffffffffffffffffffffffffff1681565b60008273ffffffffffffffffffffffffffffffffffffffff81166127ab57600080fd5b6127b6338585612f5d565b506001949350505050565b6127ca336114ba565b6127d357600080fd5b6013899055601588905560148790556016869055601785905560188490556019839055601a829055601b8190556128188561281288818c818f8e612def565b90612def565b601c81905550612847601b54612812601a54612812601954612812601854601c54612def90919063ffffffff16565b601d55601c5460fa116128bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f546f74616c206275792066656520746f6f206869676800000000000000000000604482015290519081900360640190fd5b6101f4601d541061292d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f546f74616c2073656c6c2066656520746f6f2068696768000000000000000000604482015290519081900360640190fd5b505050505050505050565b601a5481565b60045465010000000000900460ff1681565b600c6020526000908152604090205460ff1681565b61296e336114ba565b61297757600080fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835290517fdc84e3a4c83602050e3865df792a4e6800211a79ac60db94e703a820ce8929249281900390910190a150565b60105473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b60145481565b60045460ff1681565b73ffffffffffffffffffffffffffffffffffffffff166000908152600a602052604090205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260226020908152604080832093909416825291909152205490565b612a9a336114ba565b612aa357600080fd5b60045460ff6101009091041615158115151415612b2157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b60048054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b60165481565b600454640100000000900460ff1681565b612b78336114ba565b612b8157600080fd5b73ffffffffffffffffffffffffffffffffffffffff811660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055815192835290517f8e4a23d6a5d81f013eca4bc92aeb9214ccafcaebd1f097c350c922d6e19122d59281900390910190a150565b612c0d336114ba565b612c1657600080fd5b600280547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff84169081029190911790915560008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835290517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639281900390910190a150565b612cd8336114ba565b612ce157600080fd5b60045460ff620100009091041615158115151415612d6057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f74206368616e676564000000000000000000000000000000000000000000604482015290519081900360640190fd5b6004805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60115473ffffffffffffffffffffffffffffffffffffffff1681565b6004546301000000900460ff1681565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205460ff1690565b600082820183811015612e6357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000612e6383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506134c1565b60008184841115612f55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f1a578181015183820152602001612f02565b50505050905090810190601f168015612f475780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600a6020526040812054819060ff1680612fb8575073ffffffffffffffffffffffffffffffffffffffff84166000908152600a602052604090205460ff165b60045490915060ff1680612fc95750805b61303457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f54726164696e67206e6f74207374617274656400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600c602052604090205460ff168015613067575080155b156130dd576008548311156130dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4572726f7220616d6f756e740000000000000000000000000000000000000000604482015290519081900360640190fd5b601e5460ff16156130fb576130f3858585613540565b915050612e63565b60006131126020548561332890919063ffffffff16565b905061311c613636565b15613129576131296136a3565b73ffffffffffffffffffffffffffffffffffffffff861660009081526021602052604090205461315990826132e6565b73ffffffffffffffffffffffffffffffffffffffff871660009081526021602052604081209190915561318c878761393d565b61319657816131a1565b6131a1878784613a1c565b73ffffffffffffffffffffffffffffffffffffffff87166000908152602160205260409020549091506131d49082612def565b73ffffffffffffffffffffffffffffffffffffffff8088166000818152602160209081526040909120939093559154908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613234908590612e6a565b60408051918252519081900360200190a361324d613b06565b80156132605750600454610100900460ff165b8015613292575073ffffffffffffffffffffffffffffffffffffffff87166000908152600c602052604090205460ff16155b80156132c4575073ffffffffffffffffffffffffffffffffffffffff86166000908152600c602052604090205460ff16155b156132d9576132d1613b0f565b6132d9611e2f565b5060019695505050505050565b6000612e6383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612eac565b60008261333757506000611093565b8282028284828161334457fe5b0414612e63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806144506021913960400191505060405180910390fd5b600042826133e557601f54604080519182525182917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a25050601f546114de565b600083121561340757601f546133ff9060008590036132e6565b601f55613418565b601f546134149084612def565b601f555b601f546fffffffffffffffffffffffffffffffff1015613447576fffffffffffffffffffffffffffffffff601f555b601f54613475907ffffffffffffffffffffffffffffffffffffffffffc8fd8e16c81d465cc00000090612e6a565b60209081556006548201600755601f54604080519182525183927f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2928290030190a25050601f54919050565b6000818361352a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612f1a578181015183820152602001612f02565b50600083858161353657fe5b0495945050505050565b6000806135586020548461332890919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff861660009081526021602052604090205490915061358b90826132e6565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526021602052604080822093909355908616815220546135c79082612def565b73ffffffffffffffffffffffffffffffffffffffff80861660008181526021602090815260409182902094909455805187815290519193928916927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3506001949350505050565b336000908152600c602052604081205460ff161580156136595750601e5460ff16155b801561366757506000600954115b801561368957506000613687601d54601c54612def90919063ffffffff16565b115b80156114b5575060095461369c30611dfc565b1015905090565b601e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055601d54601c546000916136e19190612def565b60045490915060009065010000000000900460ff16613701576000613705565b6013545b6020805430600090815260219092526040822054929350909161372791612e6a565b90506000613744846114af61373d866002613328565b8590613328565b90506000613772856114af61376b601a54612812600260165461332890919063ffffffff16565b8690613328565b905060006137a0866114af613799601954612812600260155461332890919063ffffffff16565b8790613328565b905060006137ce876114af6137c7601b54612812600260175461332890919063ffffffff16565b8890613328565b905060006137e4826114a9858188818c8c6132e6565b905084156137f5576137f585613b4b565b831561380a576138083061dead86613540565b505b821561387057600454640100000000900460ff161561384c57600f5461384790849073ffffffffffffffffffffffffffffffffffffffff16613d91565b613870565b600f5461387090849073ffffffffffffffffffffffffffffffffffffffff16613fb6565b811561389a5760105461389a90839073ffffffffffffffffffffffffffffffffffffffff16613fb6565b80156138c457600e546138c490829073ffffffffffffffffffffffffffffffffffffffff16613d91565b60408051878152602081018790528082018590526060810183905290517fa4903880285538fa6ffa51cad044f25c39cc7f89aa6cbbda844135ff94827edf9181900360800190a15050601e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604081205460ff1680613996575073ffffffffffffffffffffffffffffffffffffffff82166000908152600a602052604090205460ff165b156139a357506000611093565b60045462010000900460ff16156139bc57506001611093565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600c602052604090205460ff1680613a15575073ffffffffffffffffffffffffffffffffffffffff82166000908152600c602052604090205460ff165b9050611093565b601c5473ffffffffffffffffffffffffffffffffffffffff83166000908152600c602052604081205490919060ff1615613a555750601d545b6000613a676103e86114af8685613328565b30600090815260216020526040902054909150613a849082612def565b30600081815260216020908152604090912092909255905473ffffffffffffffffffffffffffffffffffffffff8816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613ae1908590612e6a565b60408051918252519081900360200190a3613afc84826132e6565b9695505050505050565b60075442101590565b601e5460ff16613b49576000613b3b6402540be4006114af600554601f5461332890919063ffffffff16565b9050613b468161339b565b50505b565b6000613b58826002612e6a565b90506000613b6683836132e6565b6004549091506301000000900460ff1615613be55747613b868330613d91565b6000613b9247836132e6565b9050613b9e83826141b5565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15050612032565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000917304068da6c83afcfa0e13ba15a6696662335d5b75916370a0823191602480820192602092909190829003018186803b158015613c5357600080fd5b505afa158015613c67573d6000803e3d6000fd5b505050506040513d6020811015613c7d57600080fd5b50519050613c8b8330613fb6565b6000613d3e827304068da6c83afcfa0e13ba15a6696662335d5b7573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613d0c57600080fd5b505afa158015613d20573d6000803e3d6000fd5b505050506040513d6020811015613d3657600080fd5b5051906132e6565b9050613d4a8382614281565b604080518581526020810183905280820185905290517f42563dfd1c3e559df99e21ffc35d82ea7e18a20669e5d3a6d69a4e63af3200e09181900360600190a15050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613dc057fe5b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152601154604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015613e3a57600080fd5b505afa158015613e4e573d6000803e3d6000fd5b505050506040513d6020811015613e6457600080fd5b5051815182906001908110613e7557fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613f70578181015183820152602001613f58565b505050509050019650505050505050600060405180830381600087803b158015613f9957600080fd5b505af1158015613fad573d6000803e3d6000fd5b50505050505050565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110613fe757fe5b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152601154604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561406157600080fd5b505afa158015614075573d6000803e3d6000fd5b505050506040513d602081101561408b57600080fd5b505181518290600190811061409c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507304068da6c83afcfa0e13ba15a6696662335d5b75816002815181106140f857fe5b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092018101919091526011546040517f5c11d795000000000000000000000000000000000000000000000000000000008152600481018781526000602483018190528786166064840152426084840181905260a060448501908152885160a486015288519590971696635c11d795968b9693958a958c9590939260c49092019187810191028083838b8315613f70578181015183820152602001613f58565b601154600d54604080517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101869052600060448201819052606482015273ffffffffffffffffffffffffffffffffffffffff92831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b15801561425057600080fd5b505af1158015614264573d6000803e3d6000fd5b50505050506040513d606081101561427b57600080fd5b50505050565b601154600d54604080517fe8e337000000000000000000000000000000000000000000000000000000000081523060048201527304068da6c83afcfa0e13ba15a6696662335d5b756024820152604481018690526064810185905260006084820181905260a4820181905273ffffffffffffffffffffffffffffffffffffffff93841660c48301524260e48301529151929093169263e8e33700926101048083019360609383900390910190829087803b15801561433e57600080fd5b505af1158015614352573d6000803e3d6000fd5b505050506040513d606081101561427b57600080fd5b60e01c90565b600060443d101561437e57611000565b600481823e6308c379a06143928251614368565b1461439c57611000565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3d016004823e80513d67ffffffffffffffff81602484011181841117156143ea5750505050611000565b828401925082519150808211156144045750505050611000565b503d8301602082840101111561441c57505050611000565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681016020016040529150509056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776d616e75616c53796e6328293a205f6d616b657250616972732e73796e632829204661696c6564a2646970667358221220d3bf1dbef9d0fbdff8215978209d74d09a236613d6706a59439d28c6dae7cf0864736f6c63430007060033

Deployed Bytecode Sourcemap

7646:21683:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8177:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8244:46;;;;;;;;;;;;;:::i;5721:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9961:32;;;;;;;;;;;;;:::i;9497:76::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22038:220;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22038:220:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;8030:36;;;;;;;;;;;;;:::i;9322:78::-;;;;;;;;;;;;;:::i;24282:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24282:199:0;;;;:::i;:::-;;12284:102;;;;;;;;;;;;;:::i;28355:148::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28355:148:0;;;;:::i;16066:419::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16066:419:0;;;;;;;;;;;;;;;;;;:::i;9413:77::-;;;;;;;;;;;;;:::i;27626:172::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27626:172:0;;:::i;13579:170::-;;;;;;;;;;;;;:::i;1000:103::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1000:103:0;;;;:::i;5907:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28001:172;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28001:172:0;;;;:::i;21652:378::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21652:378:0;;;;;;;;;:::i;24845:738::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24845:738:0;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10131:38::-;;;;;;;;;;;;;:::i;26920:321::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26920:321:0;;;;:::i;27420:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27420:198:0;;:::i;10176:108::-;;;;;;;;;;;;;:::i;7859:40::-;;;;;;;;;;;;;:::i;28625:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28625:183:0;;:::i;23222:315::-;;;;;;;;;;;;;:::i;28181:166::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28181:166:0;;;;:::i;12554:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12554:136:0;;;;:::i;13757:358::-;;;;;;;;;;;;;:::i;26742:170::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26742:170:0;;;;:::i;10047:35::-;;;;;;;;;;;;;:::i;9580:81::-;;;;;;;;;;;;;:::i;10000:40::-;;;;;;;;;;;;;:::i;8073:36::-;;;;;;;;;;;;;:::i;24489:180::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24489:180:0;;;;;;;;;;;:::i;7822:30::-;;;;;;;;;;;;;:::i;5812:87::-;;;;;;;;;;;;;:::i;9888:29::-;;;;;;;;;;;;;:::i;9811:32::-;;;;;;;;;;;;;:::i;23545:729::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23545:729:0;;;;;;;;;;;:::i;28511:106::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28511:106:0;;:::i;24677:160::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24677:160:0;;:::i;10291:135::-;;;;;;;;;;;;;:::i;21072:572::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21072:572:0;;;;;;;;;:::i;9783:19::-;;;;;;;;;;;;;:::i;14123:173::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14123:173:0;;;;;;;;;:::i;25591:1143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25591:1143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10089:35::-;;;;;;;;;;;;;:::i;7984:37::-;;;;;;;;;;;;;:::i;8379:58::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8379:58:0;;;;:::i;729:125::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;729:125:0;;;;:::i;9668:75::-;;;;;;;;;;;;;:::i;8116:54::-;;;;;;;;;;;;;:::i;9850:31::-;;;;;;;;;;;;;:::i;7768:47::-;;;;;;;;;;;;;:::i;12698:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12698:113:0;;;;:::i;12394:152::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12394:152:0;;;;;;;;;;;:::i;27249:163::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27249:163:0;;;;:::i;9924:30::-;;;;;;;;;;;;;:::i;7948:29::-;;;;;;;;;;;;;:::i;862:130::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;862:130:0;;;;:::i;1226:173::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1226:173:0;;;;:::i;27806:187::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27806:187:0;;;;:::i;9752:24::-;;;;;;;;;;;;;:::i;7906:35::-;;;;;;;;;;;;;:::i;1111:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1111:107:0;;;;:::i;8177:60::-;;;;:::o;8244:46::-;;;;:::o;5721:83::-;5791:5;5784:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5758:13;;5784:12;;5791:5;;5784:12;;5791:5;5784:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5721:83;;:::o;9961:32::-;;;;:::o;9497:76::-;;;;;;:::o;22038:220::-;22148:10;22114:4;22130:29;;;:17;:29;;;;;;;;;:38;;;;;;;;;;;:46;;;22192:36;;;;;;;22114:4;;22130:38;;22148:10;;22192:36;;;;;;;;-1:-1:-1;22246:4:0;22038:220;;;;;:::o;8030:36::-;;;;:::o;9322:78::-;9358:42;9322:78;:::o;24282:199::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;24373:27:::1;::::0;::::1;;:37;;::::0;::::1;;;;24365:61;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24437:27;:36:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;24282:199::o;12284:102::-;12366:12;;12284:102;:::o;28355:148::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;28429:10:::1;::::0;::::1;::::0;;;::::1;;:20;;::::0;::::1;;;;28421:44;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28476:10;:19:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;28355:148::o;16066:419::-;16175:4;16162:2;10607:18;;;10599:27;;;;;;16196:23:::1;::::0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;16220:10:::1;16196:35:::0;;;;;;;;16243:2:::1;16196:50;16192:221;;16301:100;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;;::::0;;::::1;::::0;;;;:23:::1;::::0;::::1;-1:-1:-1::0;16301:23:0;;;:17:::1;:23:::0;;;;;16339:10:::1;16301:63:::0;;;;;;;;;;:100:::1;::::0;16369:5;;16301:67:::1;:100::i;:::-;16263:23;::::0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;16287:10:::1;16263:35:::0;;;;;;;:138;16192:221:::1;16425:30;16439:4;16445:2;16449:5;16425:13;:30::i;:::-;-1:-1:-1::0;16473:4:0::1;::::0;16066:419;-1:-1:-1;;;;;16066:419:0:o;9413:77::-;;;;;;:::o;27626:172::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;27725:12:::1;27710:11;;:27;;27702:51;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27764:11;:26:::0;27626:172::o;13579:170::-;13724:16;;;13699:12;:18;;;;;9192:42;13632:7;13675:18;;;;;13632:7;;13659:82;;13724:16;;13660:58;;13699:18;13660:34;;9041:54;;13660:14;:34::i;:::-;:38;;:58::i;:::-;13659:64;;:82::i;:::-;13652:89;;13579:170;:::o;1000:103::-;1090:5;;;1079:16;;;1090:5;;;;;1079:16;1000:103;;;;:::o;5907:83::-;5973:9;;;;5907:83;:::o;28001:172::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;28083:18:::1;::::0;::::1;::::0;;;::::1;;:28;;::::0;::::1;;;;28075:52;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28138:18;:27:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;28001:172::o;21652:378::-;21809:10;21734:4;21791:29;;;:17;:29;;;;;;;;;:58;;;;;;;;;;:74;;21854:10;21791:62;:74::i;:::-;21768:10;21750:29;;;;:17;:29;;;;;;;;;:38;;;;;;;;;;;;:115;;;21881:119;;;;;;21750:38;;21881:119;;;;;;;;;;;-1:-1:-1;22018:4:0;21652:378;;;;:::o;24845:738::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;25064:32:::1;::::0;::::1;25056:71;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25146:31;::::0;::::1;25138:69;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25226:36;::::0;::::1;25218:79;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25316:30;::::0;::::1;25308:67;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25388:17;:38:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;25437:16:::1;:36:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;25484:21:::1;:46:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;25541:15:::1;:34:::0;;;;;::::1;::::0;::::1;;::::0;;24845:738::o;10131:38::-;;;;:::o;26920:321::-;26991:12;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;27023:29:::1;::::0;::::1;27047:4;27023:29;;27015:64;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27090:14;27121:12;27107:37;;;27153:4;27107:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27107:52:0;27177:56:::1;::::0;;;;;27214:10:::1;27177:56;::::0;::::1;::::0;;;;;;;;;27107:52;;-1:-1:-1;27177:36:0::1;::::0;::::1;::::0;::::1;::::0;:56;;;;;27107:52:::1;::::0;27177:56;;;;;;;;-1:-1:-1;27177:36:0;:56;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27177:56:0;;26920:321;-1:-1:-1;;;26920:321:0:o;27420:198::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;8806:4:::1;27512:16;:40;;27504:61;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27576:15;:34:::0;27420:198::o;10176:108::-;;;;:::o;7859:40::-;;;;;;;;;:::o;28625:183::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;8738:13:::1;28711:7;:30;;28703:52;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28766:24;:34:::0;28625:183::o;23222:315::-;685:24;698:10;685:12;:24::i;:::-;677:33;;;;;;23285:6:::1;::::0;::::1;;23284:7;23276:29;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23338:15;23324:10;;:29;;23316:53;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23382:18;23410:59;8498:11;23410:29;23427:11;;23410:12;;:16;;:29;;;;:::i;:59::-;23382:88;;23483:23;23494:11;23483:10;:23::i;:::-;;23517:12;:10;:12::i;:::-;712:1;23222:315::o:0;28181:166::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;28261:16:::1;::::0;::::1;::::0;;;::::1;;:26;;::::0;::::1;;;;28253:50;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28314:16;:25:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;28181:166::o;12554:136::-;12665:16;;;12643:17;;;12616:7;12643:17;;;:12;:17;;;;;;;:39;;:21;:39::i;13757:358::-;13801:6;13797:311;13817:11;:18;13813:22;;13797:311;;;13872:11;13884:1;13872:14;;;;;;;;;;;;;;;;;13860:34;;;;;;;;13872:14;;;;;13860:32;;:34;;;;;;;;;;13872:14;;13860:34;;;;;;;;;;;;;;;;;;;;;;;;;13856:241;;;;:::i;:::-;;;;;;;;13972:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14056:25;14074:6;14056:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13913:184;13856:241;;;;;;;;;;;13837:3;;13797:311;;26742:170;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;26868:36:::1;::::0;26836:21:::1;::::0;26868:27:::1;::::0;::::1;::::0;:36;::::1;;;::::0;26836:21;;26818:15:::1;26868:36:::0;26818:15;26868:36;26836:21;26868:27;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;627:1;26742:170:::0;:::o;10047:35::-;;;;:::o;9580:81::-;;;;;;:::o;10000:40::-;;;;:::o;8073:36::-;;;;:::o;24489:180::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;24577:19:::1;::::0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;::::1;;:29;;::::0;::::1;;;;24569:53;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24633:19;::::0;;;::::1;;::::0;;;:12:::1;:19;::::0;;;;:28;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;24489:180::o;7822:30::-;;;;;;;;;:::o;5812:87::-;5884:7;5877:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5851:13;;5877:14;;5884:7;;5877:14;;5884:7;5877:14;;;;;;;;;;;;;;;;;;;;;;;;9888:29;;;;:::o;9811:32::-;;;;:::o;23545:729::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;23646:32:::1;::::0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;:42;;::::0;::::1;;;;23638:72;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23723:32;::::0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:41;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;23777:430:::1;;23802:11;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23802:23:0;;;;;::::1;::::0;;;::::1;;::::0;::::1;;::::0;;23777:430:::1;;;23864:11;:18:::0;23885:1:::1;-1:-1:-1::0;23856:50:0::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23926:9;23921:275;23945:11;:18:::0;23941:22;::::1;23921:275;;;24011:5;23993:23;;:11;24005:1;23993:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;:23;23989:192;;;24058:11;24070:18:::0;;:22;;;;24058:35;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;24041:11:::1;:14:::0;;24058:35:::1;::::0;;::::1;::::0;24053:1;;24041:14;::::1;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;24116:11;:17;;;;;;;;::::0;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;24156:5:::1;;23989:192;23965:3;;23921:275;;;;23777:430;24224:42;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;23545:729:::0;;:::o;28511:106::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;28585:10:::1;:24:::0;28511:106::o;24677:160::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;24774:6:::1;24757:13;;:23;;24749:47;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24807:13;:22:::0;24677:160::o;10291:135::-;;;;:::o;21072:572::-;21212:10;21159:4;21194:29;;;:17;:29;;;;;;;;;:38;;;;;;;;;;21247:27;;;21243:237;;21309:10;21332:1;21291:29;;;:17;:29;;;;;;;;;:38;;;;;;;;;:42;21243:237;;;21407:61;:8;21438:15;21407:12;:61::i;:::-;21384:10;21366:29;;;;:17;:29;;;;;;;;;:38;;;;;;;;;:102;21243:237;21518:10;21565:29;;;;:17;:29;;;;;;;;21495:119;;;21565:38;;;;;;;;;;;21495:119;;;;;;;;;21518:10;21495:119;;;;;;;;;;;-1:-1:-1;21632:4:0;;21072:572;-1:-1:-1;;;21072:572:0:o;9783:19::-;;;;;;:::o;14123:173::-;14214:4;14201:2;10607:18;;;10599:27;;;;;;14230:36:::1;14244:10;14256:2;14260:5;14230:13;:36::i;:::-;-1:-1:-1::0;14284:4:0::1;::::0;14123:173;-1:-1:-1;;;;14123:173:0:o;25591:1143::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;25948:12:::1;:28:::0;;;25987:9:::1;:26:::0;;;26024:11:::1;:26:::0;;;26061:10:::1;:21:::0;;;26093:13:::1;:27:::0;;;26131:20:::1;:44:::0;;;26186:15:::1;:34:::0;;;26231:16:::1;:36:::0;;;26278:19:::1;:42:::0;;;26347:79:::1;26109:11:::0;26347:60:::1;26074:8:::0;26347:60;25999:14;26347:60;25963:13;26038:12;26347:16:::1;:29::i;:::-;:33:::0;::::1;:44::i;:79::-;26333:11;:93;;;;26452:105;26537:19;;26452:80;26515:16;;26452:58;26494:15;;26452:37;26468:20;;26452:11;;:15;;:37;;;;:::i;:105::-;26437:12;:120:::0;26578:11:::1;::::0;8566:3:::1;-1:-1:-1::0;26570:71:0::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;8627:3;26660:12;;:38;26652:74;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25591:1143:::0;;;;;;;;;:::o;10089:35::-;;;;:::o;7984:37::-;;;;;;;;;:::o;8379:58::-;;;;;;;;;;;;;;;:::o;729:125::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;789:19:::1;::::0;::::1;;::::0;;;:14:::1;:19;::::0;;;;;;;;:26;;;::::1;811:4;789:26;::::0;;831:15;;;;;;;::::1;::::0;;;;;;;;::::1;729:125:::0;:::o;9668:75::-;;;;;;:::o;8116:54::-;;;;:::o;9850:31::-;;;;:::o;7768:47::-;;;;;;:::o;12698:113::-;12784:19;;12760:4;12784:19;;;:12;:19;;;;;;;;;12698:113::o;12394:152::-;12504:25;;;;12478:7;12504:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;12394:152::o;27249:163::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;27328:10:::1;::::0;::::1;;::::0;;::::1;;:25;;::::0;::::1;;;;27320:49;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27380:10;:24:::0;;;::::1;;;;::::0;;;::::1;::::0;;;::::1;::::0;;27249:163::o;9924:30::-;;;;:::o;7948:29::-;;;;;;;;;:::o;862:130::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;924:19:::1;::::0;::::1;946:5;924:19:::0;;;:14:::1;:19;::::0;;;;;;;;:27;;;::::1;::::0;;967:17;;;;;;;::::1;::::0;;;;;;;;::::1;862:130:::0;:::o;1226:173::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;1302:5:::1;:11:::0;;;::::1;;;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;1324:19:0;;;:14:::1;:19;::::0;;;;;;;;:26;;;::::1;-1:-1:-1::0;1324:26:0::1;::::0;;1366:25;;;;;;;::::1;::::0;;;;;;;;::::1;1226:173:::0;:::o;27806:187::-;605:19;613:10;605:7;:19::i;:::-;597:28;;;;;;27893:21:::1;::::0;::::1;::::0;;;::::1;;:33;;::::0;::::1;;;;27885:57;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27953:21;:32:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;27806:187::o;9752:24::-;;;;;;:::o;7906:35::-;;;;;;;;;:::o;1111:107::-;1191:19;;1167:4;1191:19;;;:14;:19;;;;;;;;;1111:107::o;2608:181::-;2666:7;2698:5;;;2722:6;;;;2714:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2780:1;2608:181;-1:-1:-1;;;2608:181:0:o;3433:132::-;3491:7;3518:39;3522:1;3525;3518:39;;;;;;;;;;;;;;;;;:3;:39::i;2941:226::-;3061:7;3097:12;3089:6;;;;3081:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3133:5:0;;;2941:226::o;14663:1395::-;14795:20;;;14755:4;14795:20;;;:12;:20;;;;;;14755:4;;14795:20;;;:47;;-1:-1:-1;14819:23:0;;;;;;;:12;:23;;;;;;;;14795:47;14863:27;;14772:70;;-1:-1:-1;14863:27:0;;;:46;;;14894:15;14863:46;14855:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14964:36;;;;;;;:25;:36;;;;;;;;:69;;;;;15018:15;15017:16;14964:69;14946:185;;;15078:24;;15068:6;:34;;15060:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15147:6;;;;15143:87;;;15177:41;15192:6;15200:9;15211:6;15177:14;:41::i;:::-;15170:48;;;;;15143:87;15242:17;15262:28;15273:16;;15262:6;:10;;:28;;;;:::i;:::-;15242:48;;15307:16;:14;:16::i;:::-;15303:59;;;15340:10;:8;:10::i;:::-;15397:20;;;;;;;:12;:20;;;;;;:35;;15422:9;15397:24;:35::i;:::-;15374:20;;;;;;;:12;:20;;;;;:58;;;;15473:32;15387:6;15495:9;15473:13;:32::i;:::-;:84;;15548:9;15473:84;;;15508:37;15516:6;15524:9;15535;15508:7;:37::i;:::-;15594:23;;;;;;;:12;:23;;;;;;15445:112;;-1:-1:-1;15594:46:0;;15445:112;15594:27;:46::i;:::-;15568:23;;;;;;;;:12;:23;;;;;;;;:72;;;;15748:16;;15658:118;;;;;;15726:39;;:17;;:21;:39::i;:::-;15658:118;;;;;;;;;;;;;;;15806:14;:12;:14::i;:::-;:41;;;;-1:-1:-1;15837:10:0;;;;;;;15806:41;:92;;;;-1:-1:-1;15865:33:0;;;;;;;:25;:33;;;;;;;;15864:34;15806:92;:146;;;;-1:-1:-1;15916:36:0;;;;;;;:25;:36;;;;;;;;15915:37;15806:146;15789:238;;;15979:9;:7;:9::i;:::-;16003:12;:10;:12::i;:::-;-1:-1:-1;16046:4:0;;14663:1395;-1:-1:-1;;;;;;14663:1395:0:o;2797:136::-;2855:7;2882:43;2886:1;2889;2882:43;;;;;;;;;;;;;;;;;:3;:43::i;3175:250::-;3233:7;3257:6;3253:47;;-1:-1:-1;3287:1:0;3280:8;;3253:47;3324:5;;;3328:1;3324;:5;:1;3348:5;;;;;:10;3340:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22486:728;22543:7;22579:15;22611:16;22607:118;;22666:12;;22649:30;;;;;;;22659:5;;22649:30;;;;;;;;;;-1:-1:-1;;22701:12:0;;22694:19;;22607:118;22755:1;22741:11;:15;22737:188;;;22788:12;;:39;;22813:12;;;;22788:16;:39::i;:::-;22773:12;:54;22737:188;;;22875:12;;:38;;22900:11;22875:16;:38::i;:::-;22860:12;:53;22737:188;22941:12;;22956:10;-1:-1:-1;22937:83:0;;;22998:10;22983:12;:25;22937:83;23066:12;;23051:28;;9041:54;;23051:14;:28::i;:::-;23032:16;:47;;;23113:15;;23105:23;;23092:10;:36;23163:12;;23146:30;;;;;;;23105:5;;23146:30;;;;;;;;-1:-1:-1;;23194:12:0;;22486:728;;;:::o;3573:225::-;3693:7;3728:12;3721:5;3713:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3752:9;3768:1;3764;:5;;;;;;;3573:225;-1:-1:-1;;;;;3573:225:0:o;14304:351::-;14388:4;14405:17;14425:28;14436:16;;14425:6;:10;;:28;;;;:::i;:::-;14485:18;;;;;;;:12;:18;;;;;;14405:48;;-1:-1:-1;14485:33:0;;14405:48;14485:22;:33::i;:::-;14464:18;;;;;;;;:12;:18;;;;;;:54;;;;14548:16;;;;;;;:31;;14569:9;14548:20;:31::i;:::-;14529:16;;;;;;;;:12;:16;;;;;;;;;:50;;;;14597:26;;;;;;;14529:16;;14597:26;;;;;;;;;;;;;-1:-1:-1;14643:4:0;;14304:351;-1:-1:-1;;;;14304:351:0:o;13293:278::-;13402:10;13342:4;13376:37;;;:25;:37;;;;;;;;13375:38;:58;;;;-1:-1:-1;13427:6:0;;;;13426:7;13375:58;:88;;;;;13462:1;13446:13;;:17;13375:88;:134;;;;;13508:1;13476:29;13492:12;;13476:11;;:15;;:29;;;;:::i;:::-;:33;13375:134;:188;;;;;13550:13;;13522:24;13540:4;13522:9;:24::i;:::-;:41;;13359:204;;13293:278;:::o;18888:1661::-;10486:6;:13;;;;10495:4;10486:13;;;18976:12:::1;::::0;18960:11:::1;::::0;10486:6;;18960:29:::1;::::0;:11;:15:::1;:29::i;:::-;19032:18;::::0;18937:52;;-1:-1:-1;19002:27:0::1;::::0;19032:18;;::::1;;;:37;;19068:1;19032:37;;;19053:12;;19032:37;19143:16;::::0;;19132:4:::1;19080:28;19111:27:::0;;;:12:::1;:27:::0;;;;;;;19002:67;;-1:-1:-1;19080:28:0;;19111:49:::1;::::0;:31:::1;:49::i;:::-;19080:80:::0;-1:-1:-1;19173:23:0::1;19199:70;19256:12:::0;19199:52:::1;19224:26;:19:::0;19248:1:::1;19224:23;:26::i;:::-;19199:20:::0;;:24:::1;:52::i;:70::-;19173:96;;19280:20;19303:83;19373:12;19303:65;19328:39;19350:16;;19328:17;19343:1;19328:10;;:14;;:17;;;;:::i;:39::-;19303:20:::0;;:24:::1;:65::i;:83::-;19280:106;;19397:19;19419:81;19487:12;19419:63;19444:37;19465:15;;19444:16;19458:1;19444:9;;:13;;:16;;;;:::i;:37::-;19419:20:::0;;:24:::1;:63::i;:81::-;19397:103;;19511:23;19537:89;19613:12;19537:71;19562:45;19587:19;;19562:20;19580:1;19562:13;;:17;;:20;;;;:::i;:45::-;19537:20:::0;;:24:::1;:71::i;:89::-;19511:115:::0;-1:-1:-1;19637:24:0::1;19664:97;19511:115:::0;19664:76:::1;19728:11:::0;19664:76;19710:12;19664:76;:20;19689:15;19664:24:::1;:41::i;:97::-;19637:124:::0;-1:-1:-1;19777:19:0;;19774:82:::1;;19812:32;19828:15;19812;:32::i;:::-;19871:16:::0;;19868:96:::1;;19903:49;19926:4;9192:42;19939:12;19903:14;:49::i;:::-;;19868:96;19979:15:::0;;19976:240:::1;;20013:10;::::0;;;::::1;;;20010:195;;;20074:21;::::0;20043:53:::1;::::0;20061:11;;20074:21:::1;;20043:17;:53::i;:::-;20010:195;;;20167:21;::::0;20135:54:::1;::::0;20154:11;;20167:21:::1;;20135:18;:54::i;:::-;20231:19:::0;;20228:102:::1;;20302:15;::::0;20266:52:::1;::::0;20285:15;;20302::::1;;20266:18;:52::i;:::-;20345:20:::0;;20342:104:::1;;20417:16;::::0;20381:53:::1;::::0;20399:16;;20417::::1;;20381:17;:53::i;:::-;20463:78;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;10522:6:0;:14;;;;;;-1:-1:-1;;;;;;18888:1661:0:o;12935:350::-;13027:18;;;13007:4;13027:18;;;:12;:18;;;;;;;;;:38;;-1:-1:-1;13049:16:0;;;;;;;:12;:16;;;;;;;;13027:38;13024:254;;;-1:-1:-1;13088:5:0;13081:12;;13024:254;13114:21;;;;;;;13110:168;;;-1:-1:-1;13158:4:0;13151:11;;13110:168;13201:31;;;;;;;:25;:31;;;;;;;;;:64;;-1:-1:-1;13236:29:0;;;;;;;:25;:29;;;;;;;;13201:64;13193:73;;;;20557:507;20684:11;;20709:36;;;20646:7;20709:36;;;:25;:36;;;;;;20646:7;;20684:11;20709:36;;20706:64;;;-1:-1:-1;20758:12:0;;20706:64;20783:17;20803:44;8680:4;20803:23;:9;20817:8;20803:13;:23::i;:44::-;20911:4;20890:27;;;;:12;:27;;;;;;20783:64;;-1:-1:-1;20890:42:0;;20783:64;20890:31;:42::i;:::-;20881:4;20860:27;;;;:12;:27;;;;;;;;:72;;;;20994:16;;20860:27;20948:64;;;;;20980:31;;:9;;:13;:31::i;:::-;20948:64;;;;;;;;;;;;;;;21032:24;:9;21046;21032:13;:24::i;:::-;21025:31;20557:507;-1:-1:-1;;;;;;20557:507:0:o;12819:108::-;12890:10;;12904:15;-1:-1:-1;12890:29:0;12819:108;:::o;22266:212::-;22308:6;;;;22304:167;;22331:18;22359:59;8498:11;22359:29;22376:11;;22359:12;;:16;;:29;;;;:::i;:59::-;22331:88;;22436:23;22447:11;22436:10;:23::i;:::-;;22304:167;;22266:212::o;16493:921::-;16567:12;16582:27;:20;16607:1;16582:24;:27::i;:::-;16567:42;-1:-1:-1;16620:17:0;16640:30;:20;16567:42;16640:24;:30::i;:::-;16686:16;;16620:50;;-1:-1:-1;16686:16:0;;;;;16683:724;;;16743:21;16781:38;16799:4;16813;16781:17;:38::i;:::-;16836:18;16857:41;:21;16883:14;16857:25;:41::i;:::-;16836:62;;16915:36;16929:9;16940:10;16915:13;:36::i;:::-;16973:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16683:724;;;;;17072:42;;;;;;17108:4;17072:42;;;;;;17047:22;;9358:42;;17072:27;;:42;;;;;;;;;;;;;;;9358;17072;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17072:42:0;;-1:-1:-1;17131:39:0;17150:4;17164;17131:18;:39::i;:::-;17187:18;17208:62;17255:14;9358:42;17208:27;;;17244:4;17208:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17208:42:0;;:46;:62::i;:::-;17187:83;;17287:39;17304:9;17315:10;17287:16;:39::i;:::-;17348:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16683:724;;16493:921;;;:::o;18048:396::-;18157:16;;;18171:1;18157:16;;;;;;;;18133:21;;18157:16;;;;;;;;;;-1:-1:-1;18157:16:0;18133:40;;18202:4;18184;18189:1;18184:7;;;;;;;;:23;;;;:7;;;;;;;;;;:23;;;;18228:6;;:13;;;;;;;;:6;;;;;:11;;:13;;;;;18184:7;;18228:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18228:13:0;18218:7;;:4;;18223:1;;18218:7;;;;;;;;;;;:23;;;;;;;;;;;18254:6;;;;;;;;;;;:57;;;18326:11;18352:1;18368:4;18387:8;18410:15;18254:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18048:396;;;:::o;18450:430::-;18560:16;;;18574:1;18560:16;;;;;;;;;18536:21;;18560:16;;;;;;;;;;-1:-1:-1;18560:16:0;18536:40;;18605:4;18587;18592:1;18587:7;;;;;;;;:23;;;;:7;;;;;;;;;;:23;;;;18631:6;;:13;;;;;;;;:6;;;;;:11;;:13;;;;;18587:7;;18631:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18631:13:0;18621:7;;:4;;18626:1;;18621:7;;;;;;;;;;;:23;;;;;;;;;;;9358:42;18655:4;18660:1;18655:7;;;;;;;;:19;;;;:7;;;;;;;;;;:19;;;;18687:6;;:185;;;;;;;;;;;:6;:185;;;;;;;;;;;;;18846:15;18687:185;;;;;;;;;;;;;;;;;;;;;:6;;;;;:60;;18762:11;;18687:6;;18804:4;;18823:8;;18687:185;;;;;;;;;;;;;;;;:6;:185;;;;;;;;;;;;;;;;17422:289;17504:6;;17645:17;;17504:199;;;;;;17567:4;17504:199;;;;;;;;;;:6;:199;;;;;;;;;;:6;17645:17;;;17504:199;;;;17677:15;17504:199;;;;;;:6;;;;;:22;;17534:9;;17504:199;;;;;;;;;;;;;;;17534:9;17504:6;:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;17422:289:0:o;17719:321::-;17805:6;;17974:17;;17805:227;;;;;;17847:4;17805:227;;;;9358:42;17805:227;;;;;;;;;;;;;;;;:6;:227;;;;;;;;;;;;:6;17974:17;;;17805:227;;;;18006:15;17805:227;;;;;;:6;;;;;:19;;:227;;;;;;;;;;;;;;;;:6;:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:88:1;89:3;85:15;;71:31::o;107:883::-;;188:4;170:16;167:26;164:2;;;196:5;;164:2;237:1;232:3;227;212:27;299:10;261:36;292:3;286:10;261:36;:::i;:::-;258:52;248:2;;314:5;;248:2;348;342:9;406:66;388:16;384:89;381:1;375:4;360:114;503:4;497:11;527:16;562:18;633:2;626:4;618:6;614:17;611:25;606:2;598:6;595:14;592:45;589:2;;;640:5;;;;;;589:2;677:6;671:4;667:17;656:28;;713:3;707:10;693:24;;740:2;732:6;729:14;726:2;;;746:5;;;;;;726:2;;807:16;801:4;797:27;790:4;781:6;776:3;772:16;768:27;765:60;762:2;;;828:5;;;;;762:2;884;872:15;889:66;868:88;859:98;;959:4;855:109;851:2;844:121;863:3;-1:-1:-1;;154:836:1;:::o

Swarm Source

ipfs://d3bf1dbef9d0fbdff8215978209d74d09a236613d6706a59439d28c6dae7cf08
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.