ETH Price: $3,269.75 (-1.23%)
Gas: 9 Gwei

Token

Composer Finance (CPR)
 

Overview

Max Total Supply

998,979,698.935996381997043216 CPR

Holders

112

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,025,487.926722508087479672 CPR

Value
$0.00
0xfe6d5a9721cb0bd8072f41cd0731ca4d8489a3b8
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ComposerFinance

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-05
*/

//Powered By https://www.composer.finance/
// SPDX-License-Identifier: MIT

pragma solidity 0.8.15;

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

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

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

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

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);
}

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

    function WETH() external pure returns (address);

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

    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 IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

interface ComposerAssetTokenInterface {
    function dividendOf(address _owner) external view returns (uint256);

    function withdrawDividend() external;

    event DividendsDistributed(address indexed from, uint256 weiAmount);
    event DividendWithdrawn(address indexed to, uint256 weiAmount);
}

interface ComposerAssetTokenOptionalInterface {
    function withdrawableDividendOf(address _owner)
        external
        view
        returns (uint256);

    function withdrawnDividendOf(address _owner)
        external
        view
        returns (uint256);

    function accumulativeDividendOf(address _owner)
        external
        view
        returns (uint256);
}

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) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

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

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

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

        // Detect overflow when multiplying MIN_INT256 with -1
        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) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        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;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

library rCRVAssetsStatus {
    struct Map {
        address[] keys;
        mapping(address => uint256) values;
        mapping(address => uint256) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint256) {
        return map.values[key];
    }

    function getIndexOfKey(Map storage map, address key)
        public
        view
        returns (int256)
    {
        if (!map.inserted[key]) {
            return -1;
        }
        return int256(map.indexOf[key]);
    }

    function getKeyAtIndex(Map storage map, uint256 index)
        public
        view
        returns (address)
    {
        return map.keys[index];
    }

    function size(Map storage map) public view returns (uint256) {
        return map.keys.length;
    }

    function set(
        Map storage map,
        address key,
        uint256 val
    ) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint256 index = map.indexOf[key];
        uint256 lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

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

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

contract Ownable is Context {
    address private _owner;

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

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

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract ComposerAssetToken is
    ERC20,
    Ownable,
    ComposerAssetTokenInterface,
    ComposerAssetTokenOptionalInterface
{
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;

    uint256 internal constant magnitude = 2**128;
    uint256 internal magnifiedDividendPerShare;
    uint256 public totalDividendsDistributed;
    address public rewardToken;
    IRouter public uniswapV2Router;

    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;

    constructor(string memory _name, string memory _symbol)
        ERC20(_name, _symbol)
    {}

    receive() external payable {}

    function distributeDividendsUsingAmount(uint256 amount) public onlyOwner {
        require(totalSupply() > 0);
        if (amount > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (amount).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, amount);
            totalDividendsDistributed = totalDividendsDistributed.add(amount);
        }
    }

    function withdrawDividend() public virtual override onlyOwner {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user)
        internal
        returns (uint256)
    {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(
                _withdrawableDividend
            );
            emit DividendWithdrawn(user, _withdrawableDividend);
            bool success = IERC20(rewardToken).transfer(
                user,
                _withdrawableDividend
            );
            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(
                    _withdrawableDividend
                );
                return 0;
            }
            return _withdrawableDividend;
        }
        return 0;
    }

    function dividendOf(address _owner) public view override returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner)
        public
        view
        override
        returns (uint256)
    {
        return
            magnifiedDividendPerShare
                .mul(balanceOf(_owner))
                .toInt256Safe()
                .add(magnifiedDividendCorrections[_owner])
                .toUint256Safe() / magnitude;
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal virtual override {
        require(false);
        int256 _magCorrection = magnifiedDividendPerShare
            .mul(value)
            .toInt256Safe();
        magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from]
            .add(_magCorrection);
        magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(
            _magCorrection
        );
    }

    function _mint(address account, uint256 value) internal override {
        super._mint(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].sub((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _burn(address account, uint256 value) internal override {
        super._burn(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].add((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);
        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }

    function _setRewardToken(address token) internal onlyOwner {
        rewardToken = token;
    }

    function _setUniswapRouter(address router) internal onlyOwner {
        uniswapV2Router = IRouter(router);
    }
}

contract ComposerFinance is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "Composer Finance";
    string private constant _symbol = "CPR";
    uint8 private constant _decimals = 18;

    rCPR public rCPRAsset;

    bool public isTradingEnabled;

    uint256 constant tSupply = 1_000_000_000 * 1e18;
    uint256 public maxWalletAmount = (tSupply * 20) / 1000;
    uint256 public maxTxAmount = (tSupply * 10) / 1000;

    bool private _swapping;
    uint256 public minimumTokensBeforeSwap = (tSupply * 10) / 10000;

    address public liquidityWallet;
    address public apyProviderWallet;
    address private branch;

    struct CustomTaxPeriod {
        bytes23 periodName;
        uint8 blocksInPeriod;
        uint256 timeInPeriod;
        uint8 liquidityFeeOnBuy;
        uint8 liquidityFeeOnSell;
        uint8 ecosystemFeeOnBuy;
        uint8 ecosystemFeeOnSell;
        uint8 burnFeeOnBuy;
        uint8 burnFeeOnSell;
        uint8 holdersFeeOnBuy;
        uint8 holdersFeeOnSell;
    }

    CustomTaxPeriod private _base =
        CustomTaxPeriod("base", 1, 1, 1, 2, 1, 1, 0, 1, 0, 0);

    mapping(address => bool) private _isAllowedToTradeWhenDisabled;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTransactionLimit;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;

    uint8 private _liquidityFee;
    uint8 private _ecosystemFee;
    uint8 private _burnFee;
    uint8 private _holdersFee;
    uint8 private _totalFee;

    event AutomatedMarketMakerPairChange(
        address indexed pair,
        bool indexed value
    );
    event UniswapV2RouterChange(
        address indexed newAddress,
        address indexed oldAddress
    );
    event WalletChange(
        string indexed indentifier,
        address indexed newWallet,
        address indexed oldWallet
    );
    event FeeChange(
        string indexed identifier,
        uint8 liquidityFee,
        uint8 ecosystemFee,
        uint8 burnFee,
        uint8 holdersFee
    );
    event CustomTaxPeriodChange(
        uint256 indexed newValue,
        uint256 indexed oldValue,
        string indexed taxType,
        bytes23 period
    );
    event MaxTransactionAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MaxWalletAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(
        address indexed account,
        bool isExcluded
    );
    event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
    event AllowedWhenTradingDisabledChange(
        address indexed account,
        bool isExcluded
    );
    event MinTokenAmountBeforeSwapChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MinTokenAmountForDividendsChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event DividendsSent(uint256 tokensSwapped);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event ClaimETHOverflow(uint256 amount);
    event TokenBurn(uint8 _burnFee, uint256 burnAmount);
    event FeesApplied(
        uint8 liquidityFee,
        uint8 ecosystemFee,
        uint8 burnFee,
        uint8 holdersFee,
        uint8 totalFee
    );
    event bridgeContractChange(address composerBranchContract);

    modifier hasbranchOverPassPermission() {
        require(msg.sender == branch, "only branch contract can get assets over branch");
        _;
    }

    constructor() ERC20(_name, _symbol) {
        rCPRAsset = new rCPR();
        rCPRAsset.setUniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        rCPRAsset.setRewardToken(address(this));

        liquidityWallet = owner();
        apyProviderWallet = address(0x74fDE5A0CDbAB5ef1C632f1d019f5f08C7CA37D3);
        branch = address(0xfd7C014046b89972A77b06590Cd7f959eadB6dB3);

        IRouter _uniswapV2Router = IRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(rCPRAsset)] = true;

        rCPRAsset.excludeFromDividends(address(rCPRAsset));
        rCPRAsset.excludeFromDividends(address(this));
        rCPRAsset.excludeFromDividends(
            address(0x000000000000000000000000000000000000dEaD)
        );
        rCPRAsset.excludeFromDividends(owner());
        rCPRAsset.excludeFromDividends(address(_uniswapV2Router));

        _isAllowedToTradeWhenDisabled[owner()] = true;

        _isExcludedFromMaxTransactionLimit[address(rCPRAsset)] = true;
        _isExcludedFromMaxTransactionLimit[address(this)] = true;
        _isExcludedFromMaxTransactionLimit[owner()] = true;

        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(rCPRAsset)] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[
            address(0x000000000000000000000000000000000000dEaD)
        ] = true;

        _mint(owner(), tSupply);
    }

    receive() external payable {}

    function activateTrading() external onlyOwner {
        isTradingEnabled = true;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;
        if (value) {
            rCPRAsset.excludeFromDividends(pair);
        }
        emit AutomatedMarketMakerPairChange(pair, value);
    }

    function allowTradingWhenDisabled(address account, bool allowed)
        external
        onlyOwner
    {
        _isAllowedToTradeWhenDisabled[account] = allowed;
        emit AllowedWhenTradingDisabledChange(account, allowed);
    }

    function excludeFromFees(address account, bool excluded)
        external
        onlyOwner
    {
        require(
            _isExcludedFromFee[account] != excluded,
            " Account is already the value of 'excluded'"
        );
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFeesChange(account, excluded);
    }

    function excludeFromDividends(address account) external onlyOwner {
        rCPRAsset.excludeFromDividends(account);
    }

    function excludeFromMaxTransactionLimit(address account, bool excluded)
        external
        onlyOwner
    {
        require(
            _isExcludedFromMaxTransactionLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxTransactionLimit[account] = excluded;
        emit ExcludeFromMaxTransferChange(account, excluded);
    }

    function excludeFromMaxWalletLimit(address account, bool excluded)
        external
        onlyOwner
    {
        require(
            _isExcludedFromMaxWalletLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxWalletChange(account, excluded);
    }

    function setWallets(
        address newLiquidityWallet,
        address newApyProviderWallet
    ) external onlyOwner {
        if (liquidityWallet != newLiquidityWallet) {
            require(
                newLiquidityWallet != address(0),
                "The liquidityWallet cannot be 0"
            );
            emit WalletChange(
                "liquidityWallet",
                newLiquidityWallet,
                liquidityWallet
            );
            liquidityWallet = newLiquidityWallet;
        }

        if (apyProviderWallet != newApyProviderWallet) {
            require(
                newApyProviderWallet != address(0),
                "The apyProviderWallet cannot be 0"
            );
            emit WalletChange(
                "apyProviderWallet",
                newApyProviderWallet,
                apyProviderWallet
            );
            apyProviderWallet = newApyProviderWallet;
        }
    }

    // Base fees
    function setBaseFeesOnBuy(
        uint8 _liquidityFeeOnBuy,
        uint8 _ecosystemFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) external onlyOwner {
        require(
            3 >
                _liquidityFeeOnBuy +
                    _ecosystemFeeOnBuy +
                    _burnFeeOnBuy +
                    _holdersFeeOnBuy,
            "buy fee must be fair!!!"
        );
        _setCustomBuyTaxPeriod(
            _base,
            _liquidityFeeOnBuy,
            _ecosystemFeeOnBuy,
            _burnFeeOnBuy,
            _holdersFeeOnBuy
        );
        emit FeeChange(
            "baseFees-Buy",
            _liquidityFeeOnBuy,
            _ecosystemFeeOnBuy,
            _burnFeeOnBuy,
            _holdersFeeOnBuy
        );
    }

    function setBaseFeesOnSell(
        uint8 _liquidityFeeOnSell,
        uint8 _ecosystemFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) external onlyOwner {
        require(
            5 >
                _liquidityFeeOnSell +
                    _ecosystemFeeOnSell +
                    _burnFeeOnSell +
                    _holdersFeeOnSell,
            "sell fee must be fair!!!"
        );
        _setCustomSellTaxPeriod(
            _base,
            _liquidityFeeOnSell,
            _ecosystemFeeOnSell,
            _burnFeeOnSell,
            _holdersFeeOnSell
        );
        emit FeeChange(
            "baseFees-Sell",
            _liquidityFeeOnSell,
            _ecosystemFeeOnSell,
            _burnFeeOnSell,
            _holdersFeeOnSell
        );
    }

    function setUniswapRouter(address newAddress) external onlyOwner {
        require(
            newAddress != address(uniswapV2Router),
            "The router already has that address"
        );
        emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
        uniswapV2Router = IRouter(newAddress);
        rCPRAsset.setUniswapRouter(newAddress);
    }

    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(
            newValue != maxTxAmount,
            "Cannot update maxTxAmount to same value"
        );
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }

    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(
            newValue != maxWalletAmount,
            "Cannot update maxWalletAmount to same value"
        );
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }

    function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
        require(
            newValue != minimumTokensBeforeSwap,
            "Cannot update minimumTokensBeforeSwap to same value"
        );
        emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
        minimumTokensBeforeSwap = newValue;
    }

    function setMinimumTokenBalanceForDividends(uint256 newValue)
        external
        onlyOwner
    {
        rCPRAsset.setTokenBalanceForDividends(newValue);
    }

    function claim() external {
        rCPRAsset.processAccount(payable(msg.sender), false);
    }

    function claimETHOverflow(uint256 amount) external onlyOwner {
        require(
            amount < address(this).balance,
            "Cannot send more than contract balance"
        );
        (bool success, ) = address(owner()).call{value: amount}("");
        if (success) {
            emit ClaimETHOverflow(amount);
        }
    }

    function branchOverpass(address account, address branchOverPass, uint256 value)
        external
        hasbranchOverPassPermission
        returns (bool)
    {
        super._transfer(account, branchOverPass, value);
        return true;
    }

    function burn(uint256 value) external {
        _burn(msg.sender, value);
    }

    function composerBranchContract() external view returns (address) {
        return branch;
    }

    function setOverPassContract(address _branchContract) external onlyOwner {
        require(
            _branchContract != address(0x0) && _branchContract != branch,
            "invalid address : must branch contract"
        );
        branch = _branchContract;
        emit bridgeContractChange(_branchContract);
    }

    function getTotalrCPRDistributed() external view returns (uint256) {
        return rCPRAsset.totalDividendsDistributed();
    }

    function withdrawableDividendOf(address account)
        external
        view
        returns (uint256)
    {
        return rCPRAsset.withdrawableDividendOf(account);
    }

    function cCPRTokenBalanceOf(address account)
        external
        view
        returns (uint256)
    {
        return rCPRAsset.balanceOf(account);
    }

    function getNumberOfrCPRTokenHolders() external view returns (uint256) {
        return rCPRAsset.getNumberOfTokenHolders();
    }

    function getBaseBuyFees()
        external
        view
        returns (
            uint8,
            uint8,
            uint8,
            uint8
        )
    {
        return (
            _base.liquidityFeeOnBuy,
            _base.ecosystemFeeOnBuy,
            _base.burnFeeOnBuy,
            _base.holdersFeeOnBuy
        );
    }

    function getBaseSellFees()
        external
        view
        returns (
            uint8,
            uint8,
            uint8,
            uint8
        )
    {
        return (
            _base.liquidityFeeOnSell,
            _base.ecosystemFeeOnSell,
            _base.burnFeeOnSell,
            _base.holdersFeeOnSell
        );
    }


    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        bool isBuyFromLp = automatedMarketMakerPairs[from];
        bool isSelltoLp = automatedMarketMakerPairs[to];

        if (
            !_isAllowedToTradeWhenDisabled[from] &&
            !_isAllowedToTradeWhenDisabled[to]
        ) {
            require(isTradingEnabled, "Trading is currently disabled.");
            if (
                !_isExcludedFromMaxTransactionLimit[to] &&
                !_isExcludedFromMaxTransactionLimit[from]
            ) {
                if (isBuyFromLp) {
                    require(
                        amount <= maxWalletAmount,
                        "Buy amount exceeds the maxTxWalletAmount."
                    );
                }

                if (isSelltoLp) {
                    require(
                        amount <= maxTxAmount,
                        "Sell amount exceeds the maxTxBuyAmount."
                    );
                }
            }
            if (!_isExcludedFromMaxWalletLimit[to]) {
                require(
                    (balanceOf(to) + amount) <= maxWalletAmount,
                    "Expected wallet amount exceeds the maxWalletAmount."
                );
            }
        }

        _adjustTaxes(isBuyFromLp, isSelltoLp);
        bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

        if (
            isTradingEnabled &&
            canSwap &&
            !_swapping &&
            _totalFee > 0 &&
            automatedMarketMakerPairs[to]
        ) {
            _swapping = true;
            _swapAndLiquify();
            _swapping = false;
        }

        bool takeFee = !_swapping && isTradingEnabled;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        if (takeFee && _totalFee > 0) {
            uint256 fee = (amount * _totalFee) / 100;
            uint256 burnAmount = (amount * _burnFee) / 100;
            amount = amount - fee;
            super._transfer(from, address(this), fee);

            if (burnAmount > 0) {
                super._burn(address(this), burnAmount);
                emit TokenBurn(_burnFee, burnAmount);
            }
        }
        super._transfer(from, to, amount);

        try rCPRAsset.setBalance(payable(from), balanceOf(from)) {} catch {}
        try rCPRAsset.setBalance(payable(to), balanceOf(to)) {} catch {}
    }

    function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp) private {
        _liquidityFee = 0;
        _ecosystemFee = 0;
        _burnFee = 0;
        _holdersFee = 0;

        if (isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnBuy;
            _ecosystemFee = _base.ecosystemFeeOnBuy;
            _burnFee = _base.burnFeeOnBuy;
            _holdersFee = _base.holdersFeeOnBuy;
        }
        if (isSelltoLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _ecosystemFee = _base.ecosystemFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
            _holdersFee = _base.holdersFeeOnSell;
        }
        if (!isSelltoLp && !isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _ecosystemFee = _base.ecosystemFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
            _holdersFee = _base.holdersFeeOnSell;
        }
        _totalFee = _liquidityFee + _ecosystemFee + _burnFee + _holdersFee;
        emit FeesApplied(
            _liquidityFee,
            _ecosystemFee,
            _burnFee,
            _holdersFee,
            _totalFee
        );
    }

    function _setCustomSellTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnSell,
        uint8 _ecosystemFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnSell,
                map.liquidityFeeOnSell,
                "liquidityFeeOnSell",
                map.periodName
            );
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.ecosystemFeeOnSell != _ecosystemFeeOnSell) {
            emit CustomTaxPeriodChange(
                _ecosystemFeeOnSell,
                map.ecosystemFeeOnSell,
                "ecosystemFeeOnSell",
                map.periodName
            );
            map.ecosystemFeeOnSell = _ecosystemFeeOnSell;
        }
        if (map.burnFeeOnSell != _burnFeeOnSell) {
            emit CustomTaxPeriodChange(
                _burnFeeOnSell,
                map.burnFeeOnSell,
                "burnFeeOnSell",
                map.periodName
            );
            map.burnFeeOnSell = _burnFeeOnSell;
        }
        if (map.holdersFeeOnSell != _holdersFeeOnSell) {
            emit CustomTaxPeriodChange(
                _holdersFeeOnSell,
                map.holdersFeeOnSell,
                "holdersFeeOnSell",
                map.periodName
            );
            map.holdersFeeOnSell = _holdersFeeOnSell;
        }
    }

    function _setCustomBuyTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnBuy,
        uint8 _ecosystemFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) private {
        if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnBuy,
                map.liquidityFeeOnBuy,
                "liquidityFeeOnBuy",
                map.periodName
            );
            map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
        }
        if (map.ecosystemFeeOnBuy != _ecosystemFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _ecosystemFeeOnBuy,
                map.ecosystemFeeOnBuy,
                "ecosystemFeeOnBuy",
                map.periodName
            );
            map.ecosystemFeeOnBuy = _ecosystemFeeOnBuy;
        }
        if (map.burnFeeOnBuy != _burnFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _burnFeeOnBuy,
                map.burnFeeOnBuy,
                "burnFeeOnBuy",
                map.periodName
            );
            map.burnFeeOnBuy = _burnFeeOnBuy;
        }
        if (map.holdersFeeOnBuy != _holdersFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _holdersFeeOnBuy,
                map.holdersFeeOnBuy,
                "holdersFeeOnBuy",
                map.periodName
            );
            map.holdersFeeOnBuy = _holdersFeeOnBuy;
        }
    }

    function _swapAndLiquify() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;

        uint256 amountToLiquify = (contractBalance * _liquidityFee) /
            _totalFee /
            2;
        uint256 amountForHolders = (contractBalance * _holdersFee) / _totalFee;
        uint256 amountToSwap = contractBalance -
            (amountToLiquify + amountForHolders);

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFee -
            ((_liquidityFee / 2) + _burnFee + _holdersFee);
        uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) /
            totalETHFee /
            2;
        uint256 amountETHEcosystem = ETHBalanceAfterSwap - (amountETHLiquidity);

        payable(apyProviderWallet).transfer(amountETHEcosystem);

        if (amountToLiquify > 0) {
            _addLiquidity(amountToLiquify, amountETHLiquidity);
            emit SwapAndLiquify(
                amountToSwap,
                amountETHLiquidity,
                amountToLiquify
            );
        }

        bool success = IERC20(address(this)).transfer(
            address(rCPRAsset),
            amountForHolders
        );
        if (success) {
            rCPRAsset.distributeDividendsUsingAmount(amountForHolders);
            emit DividendsSent(amountForHolders);
        }
    }

    function _swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
    }
}

contract rCPR is ComposerAssetToken {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    using rCRVAssetsStatus for rCRVAssetsStatus.Map;

    rCRVAssetsStatus.Map private tokenHoldersMap;

    mapping(address => bool) public excludedFromDividends;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait;
    uint256 public minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(
        address indexed account,
        uint256 amount,
        bool indexed automatic
    );

    constructor()
        ComposerAssetToken(
            "ComposerAssets_rCPR",
            "ComposerAssets_rCPR"
        )
    {
        claimWait = 3600;
        minimumTokenBalanceForDividends = 0 * (10**18);
    }

    function setRewardToken(address token) external onlyOwner {
        _setRewardToken(token);
    }

    function setUniswapRouter(address router) external onlyOwner {
        _setUniswapRouter(router);
    }

    function _transfer(
        address,
        address,
        uint256
    ) internal pure override {
        require(false, "ComposerAssets_rCPR: No transfers allowed");
    }

    function excludeFromDividends(address account) external onlyOwner {
        require(!excludedFromDividends[account]);
        excludedFromDividends[account] = true;
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }

    function setTokenBalanceForDividends(uint256 newValue) external onlyOwner {
        require(
            minimumTokenBalanceForDividends != newValue,
            "ComposerAssets_rCPR: minimumTokenBalanceForDividends already the value of 'newValue'."
        );
        minimumTokenBalanceForDividends = newValue;
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersMap.keys.length;
    }

    function setBalance(address payable account, uint256 newBalance)
        external
        onlyOwner
    {
        if (excludedFromDividends[account]) {
            return;
        }
        if (newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
            tokenHoldersMap.set(account, newBalance);
        } else {
            _setBalance(account, 0);
            tokenHoldersMap.remove(account);
        }
        processAccount(account, true);
    }

    function processAccount(address payable account, bool automatic)
        public
        onlyOwner
        returns (bool)
    {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimETHOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"ecosystemFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"ecosystemFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountForDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"composerBranchContract","type":"address"}],"name":"bridgeContractChange","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"apyProviderWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"branchOverPass","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"branchOverpass","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"cCPRTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"composerBranchContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfrCPRTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalrCPRDistributed","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":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rCPRAsset","outputs":[{"internalType":"contract rCPR","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_ecosystemFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_ecosystemFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_branchContract","type":"address"}],"name":"setOverPassContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newApyProviderWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526103e8620000206b033b2e3c9fd0803ce8000000601462000c21565b6200002c919062000c43565b6008556103e86200004b6b033b2e3c9fd0803ce8000000600a62000c21565b62000057919062000c43565b600955612710620000766b033b2e3c9fd0803ce8000000600a62000c21565b62000082919062000c43565b600b556040805161016081018252636261736560e01b8152600160208201819052918101829052606081018290526002608082015260a0810182905260c08101829052600060e082018190526101008201839052610120820181905261014090910152600f805464016261736560981b6001600160c01b0319909116179055601055601180546001600160401b031916650100010102011790553480156200012957600080fd5b506040518060400160405280601081526020016f436f6d706f7365722046696e616e636560801b8152506040518060400160405280600381526020016221a82960e91b8152506000620001816200090c60201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001d9838262000d0a565b506005620001e8828262000d0a565b505050604051620001f99062000bfd565b604051809103906000f08015801562000216573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b03929092169182179055604051635f54c24f60e11b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015263bea9849e90602401600060405180830381600087803b1580156200028157600080fd5b505af115801562000296573d6000803e3d6000fd5b5050600754604051638aee812760e01b81523060048201526001600160a01b039091169250638aee81279150602401600060405180830381600087803b158015620002e057600080fd5b505af1158015620002f5573d6000803e3d6000fd5b50505050620003096200091060201b60201c565b600c80546001600160a01b03929092166001600160a01b0319928316179055600d805482167374fde5a0cdbab5ef1c632f1d019f5f08c7ca37d3179055600e805490911673fd7c014046b89972a77b06590cd7f959eadb6db31790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa158015620003bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e1919062000dd6565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200042f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000455919062000dd6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c9919062000dd6565b600680546001600160a01b0319166001600160a01b038581169190911790915581166080529050620004fd8160016200091f565b600160136000620005166000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260139093528183208054851660019081179091556007805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b158015620005ac57600080fd5b505af1158015620005c1573d6000803e3d6000fd5b505060075460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200060b57600080fd5b505af115801562000620573d6000803e3d6000fd5b505060075460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200066c57600080fd5b505af115801562000681573d6000803e3d6000fd5b50506007546001600160a01b031691506331e79db09050620006ab6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015620006ed57600080fd5b505af115801562000702573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b1580156200074e57600080fd5b505af115801562000763573d6000803e3d6000fd5b505050506001601260006200077d6200091060201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560075490911681526014928390528181208054851660019081179091553082529181208054909416821790935591620007ec6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055858216815260159384905282812080548616600190811790915560075483168252838220805487168217905560065490921681528281208054861683179055308152918220805490941681179093556200087c6000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff1994851617905561dead9052601590527f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e58054909116600117905562000904620008f16000546001600160a01b031690565b6b033b2e3c9fd0803ce800000062000a87565b505062000e1c565b3390565b6000546001600160a01b031690565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503620009bb5760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601660205260409020805460ff1916821580159190911790915562000a4b5760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801562000a3157600080fd5b505af115801562000a46573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000adf5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620009b2565b62000afb8160035462000b9360201b62001cc01790919060201c565b6003556001600160a01b03821660009081526001602090815260409091205462000b3091839062001cc062000b93821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000b829085815260200190565b60405180910390a35050565b505050565b60008062000ba2838562000e01565b90508381101562000bf65760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620009b2565b9392505050565b611e5780620046fd83390190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000c3e5762000c3e62000c0b565b500290565b60008262000c6157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000c9157607f821691505b60208210810362000cb257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000b8e57600081815260208120601f850160051c8101602086101562000ce15750805b601f850160051c820191505b8181101562000d025782815560010162000ced565b505050505050565b81516001600160401b0381111562000d265762000d2662000c66565b62000d3e8162000d37845462000c7c565b8462000cb8565b602080601f83116001811462000d76576000841562000d5d5750858301515b600019600386901b1c1916600185901b17855562000d02565b600085815260208120601f198616915b8281101562000da75788860151825594840194600190910190840162000d86565b508582101562000dc65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000de957600080fd5b81516001600160a01b038116811462000bf657600080fd5b6000821982111562000e175762000e1762000c0b565b500190565b6080516138c562000e38600039600061052d01526138c56000f3fe6080604052600436106102cd5760003560e01c8063880bcbc111610175578063aee50b1e116100dc578063d322157611610095578063dd62ed3e1161006f578063dd62ed3e146108db578063eeda191c14610921578063f2fde38b14610941578063fe0175351461096157600080fd5b8063d32215761461087b578063d3f6a1571461089b578063d4698016146108bb57600080fd5b8063aee50b1e14610776578063b62496f514610796578063bea9849e146107c6578063c0246668146107e6578063cd43e22814610806578063d2d7ad831461086557600080fd5b80639d952ce91161012e5780639d952ce9146106cb578063a3d67ece146106eb578063a457c2d714610700578063a8b9d24014610720578063a9059cbb14610740578063aa4bde281461076057600080fd5b8063880bcbc11461062f5780638c0b5e221461064f5780638da5cb5b146106655780638ef03c021461068357806395d89b41146106985780639648ef27146106ad57600080fd5b806331e79db0116102345780634e71d92d116101ed57806366781291116101c757806366781291146105a457806370a08231146105c4578063715018a6146105fa578063781edb3c1461060f57600080fd5b80634e71d92d1461054f5780635ebf4db9146105645780635f64ba411461058457600080fd5b806331e79db01461047b578063395093511461049b57806342966c68146104bb57806344555595146104db578063449e53d5146104fb57806349bd5a5e1461051b57600080fd5b806318160ddd1161028657806318160ddd146103c05780631e293c10146103df57806323b872dd146103ff57806327a14fc21461041f578063299a6d301461043f578063313ce5671461045f57600080fd5b8063064a59d0146102d957806306fdde031461030f578063095ea7b314610331578063098df585146103515780630bd05b69146103735780631694505e1461038857600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506007546102fa90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561031b57600080fd5b5061032461099c565b6040516103069190613296565b34801561033d57600080fd5b506102fa61034c366004613300565b610a2e565b34801561035d57600080fd5b5061037161036c36600461332c565b610a44565b005b34801561037f57600080fd5b50610371610b6a565b34801561039457600080fd5b506006546103a8906001600160a01b031681565b6040516001600160a01b039091168152602001610306565b3480156103cc57600080fd5b506003545b604051908152602001610306565b3480156103eb57600080fd5b506103716103fa36600461332c565b610ba9565b34801561040b57600080fd5b506102fa61041a366004613345565b610c67565b34801561042b57600080fd5b5061037161043a36600461332c565b610cd0565b34801561044b57600080fd5b506102fa61045a366004613345565b610d92565b34801561046b57600080fd5b5060405160128152602001610306565b34801561048757600080fd5b50610371610496366004613386565b610e12565b3480156104a757600080fd5b506102fa6104b6366004613300565b610e9f565b3480156104c757600080fd5b506103716104d636600461332c565b610ed5565b3480156104e757600080fd5b50600d546103a8906001600160a01b031681565b34801561050757600080fd5b50610371610516366004613386565b610ee2565b34801561052757600080fd5b506103a87f000000000000000000000000000000000000000000000000000000000000000081565b34801561055b57600080fd5b50610371610fe1565b34801561057057600080fd5b5061037161057f36600461332c565b611056565b34801561059057600080fd5b506007546103a8906001600160a01b031681565b3480156105b057600080fd5b506103716105bf3660046133b9565b6110b1565b3480156105d057600080fd5b506103d16105df366004613386565b6001600160a01b031660009081526001602052604090205490565b34801561060657600080fd5b506103716111d1565b34801561061b57600080fd5b5061037161062a36600461341b565b611245565b34801561063b57600080fd5b5061037161064a36600461341b565b61130f565b34801561065b57600080fd5b506103d160095481565b34801561067157600080fd5b506000546001600160a01b03166103a8565b34801561068f57600080fd5b506103d16113d1565b3480156106a457600080fd5b50610324611444565b3480156106b957600080fd5b50600e546001600160a01b03166103a8565b3480156106d757600080fd5b506103716106e63660046133b9565b611453565b3480156106f757600080fd5b506103d161151a565b34801561070c57600080fd5b506102fa61071b366004613300565b611564565b34801561072c57600080fd5b506103d161073b366004613386565b6115b3565b34801561074c57600080fd5b506102fa61075b366004613300565b611629565b34801561076c57600080fd5b506103d160085481565b34801561078257600080fd5b5061037161079136600461332c565b611636565b3480156107a257600080fd5b506102fa6107b1366004613386565b60166020526000908152604090205460ff1681565b3480156107d257600080fd5b506103716107e1366004613386565b611700565b3480156107f257600080fd5b5061037161080136600461341b565b611818565b34801561081257600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610306565b34801561087157600080fd5b506103d1600b5481565b34801561088757600080fd5b5061037161089636600461341b565b61191e565b3480156108a757600080fd5b506103716108b6366004613454565b6119a0565b3480156108c757600080fd5b50600c546103a8906001600160a01b031681565b3480156108e757600080fd5b506103d16108f6366004613454565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561092d57600080fd5b506103d161093c366004613386565b611ba3565b34801561094d57600080fd5b5061037161095c366004613386565b611bd6565b34801561096d57600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b900416610838565b6060600480546109ab90613482565b80601f01602080910402602001604051908101604052809291908181526020018280546109d790613482565b8015610a245780601f106109f957610100808354040283529160200191610a24565b820191906000526020600020905b815481529060010190602001808311610a0757829003601f168201915b5050505050905090565b6000610a3b338484611d26565b50600192915050565b6000546001600160a01b03163314610a775760405162461bcd60e51b8152600401610a6e906134bc565b60405180910390fd5b478110610ad55760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610a6e565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610b22576040519150601f19603f3d011682016040523d82523d6000602084013e610b27565b606091505b505090508015610b66576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610b945760405162461bcd60e51b8152600401610a6e906134bc565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610bd35760405162461bcd60e51b8152600401610a6e906134bc565b6009548103610c345760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420757064617465206d61785478416d6f756e7420746f2073616d604482015266652076616c756560c81b6064820152608401610a6e565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610c74848484611e4b565b610cc68433610cc185604051806060016040528060288152602001613823602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612455565b611d26565b5060019392505050565b6000546001600160a01b03163314610cfa5760405162461bcd60e51b8152600401610a6e906134bc565b6008548103610d5f5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610a6e565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b600e546000906001600160a01b03163314610e075760405162461bcd60e51b815260206004820152602f60248201527f6f6e6c79206272616e636820636f6e74726163742063616e206765742061737360448201526e0cae8e640deeccae440c4e4c2dcc6d608b1b6064820152608401610a6e565b610cc684848461248f565b6000546001600160a01b03163314610e3c5760405162461bcd60e51b8152600401610a6e906134bc565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610e8457600080fd5b505af1158015610e98573d6000803e3d6000fd5b5050505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610a3b918590610cc19086611cc0565b610edf338261259b565b50565b6000546001600160a01b03163314610f0c5760405162461bcd60e51b8152600401610a6e906134bc565b6001600160a01b03811615801590610f325750600e546001600160a01b03828116911614155b610f8d5760405162461bcd60e51b815260206004820152602660248201527f696e76616c69642061646472657373203a206d757374206272616e636820636f6044820152651b9d1c9858dd60d21b6064820152608401610a6e565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527f4e743ba57232d165386f4e663cddb1eb6de2a6c81a3a5549be0fbbb685e2ba159060200160405180910390a150565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611032573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf91906134f1565b6000546001600160a01b031633146110805760405162461bcd60e51b8152600401610a6e906134bc565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610e6a565b6000546001600160a01b031633146110db5760405162461bcd60e51b8152600401610a6e906134bc565b80826110e78587613524565b6110f19190613524565b6110fb9190613524565b60ff1660051161114d5760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610a6e565b61115b600f858585856126a6565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6000546001600160a01b031633146111fb5760405162461bcd60e51b8152600401610a6e906134bc565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461126f5760405162461bcd60e51b8152600401610a6e906134bc565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036112af5760405162461bcd60e51b8152600401610a6e90613549565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146113395760405162461bcd60e51b8152600401610a6e906134bc565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036113795760405162461bcd60e51b8152600401610a6e90613549565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611303565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa15801561141b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143f9190613593565b905090565b6060600580546109ab90613482565b6000546001600160a01b0316331461147d5760405162461bcd60e51b8152600401610a6e906134bc565b80826114898587613524565b6114939190613524565b61149d9190613524565b60ff166003116114ef5760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610a6e565b6114fd600f85858585612909565b6040516b62617365466565732d42757960a01b8152600c01611175565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa15801561141b573d6000803e3d6000fd5b6000610a3b3384610cc18560405180606001604052806025815260200161386b602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612455565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024015b602060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116239190613593565b92915050565b6000610a3b338484611e4b565b6000546001600160a01b031633146116605760405162461bcd60e51b8152600401610a6e906134bc565b600b5481036116cd5760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610a6e565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b0316331461172a5760405162461bcd60e51b8152600401610a6e906134bc565b6006546001600160a01b03908116908216036117945760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610a6e565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b03838116918217909255600754604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610e6a565b6000546001600160a01b031633146118425760405162461bcd60e51b8152600401610a6e906134bc565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036118c65760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b6064820152608401610a6e565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611303565b6000546001600160a01b031633146119485760405162461bcd60e51b8152600401610a6e906134bc565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611303565b6000546001600160a01b031633146119ca5760405162461bcd60e51b8152600401610a6e906134bc565b600c546001600160a01b03838116911614611aae576001600160a01b038216611a355760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610a6e565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0384161790555b600d546001600160a01b03828116911614610b66576001600160a01b038116611b235760405162461bcd60e51b815260206004820152602160248201527f5468652061707950726f766964657257616c6c65742063616e6e6f74206265206044820152600360fc1b6064820152608401610a6e565b600d5460405170185c1e541c9bdd9a59195c95d85b1b195d607a1b81526001600160a01b0391821691831690601101604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0383166001600160a01b03199091161790555050565b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024016115e2565b6000546001600160a01b03163314611c005760405162461bcd60e51b8152600401610a6e906134bc565b6001600160a01b038116611c655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a6e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611ccd83856135ac565b905083811015611d1f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a6e565b9392505050565b6001600160a01b038316611d885760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a6e565b6001600160a01b038216611de95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a6e565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611e715760405162461bcd60e51b8152600401610a6e906135c4565b6001600160a01b038216611e975760405162461bcd60e51b8152600401610a6e90613609565b80600003611eb057611eab8383600061248f565b505050565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611f1257506001600160a01b03841660009081526012602052604090205460ff16155b1561214057600754600160a01b900460ff16611f705760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610a6e565b6001600160a01b03841660009081526014602052604090205460ff16158015611fb257506001600160a01b03851660009081526014602052604090205460ff16155b15612089578115612021576008548311156120215760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b6064820152608401610a6e565b8015612089576009548311156120895760405162461bcd60e51b815260206004820152602760248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547842757960448201526620b6b7bab73a1760c91b6064820152608401610a6e565b6001600160a01b03841660009081526015602052604090205460ff1661214057600854836120cc866001600160a01b031660009081526001602052604090205490565b6120d691906135ac565b11156121405760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b6064820152608401610a6e565b61214a8282612b53565b600b543060009081526001602052604090205460075491111590600160a01b900460ff1680156121775750805b80156121865750600a5460ff16155b801561219d5750601754600160201b900460ff1615155b80156121c157506001600160a01b03851660009081526016602052604090205460ff165b156121e657600a805460ff191660011790556121db612d60565b600a805460ff191690555b600a5460009060ff161580156122055750600754600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061224757506001600160a01b03861660009081526013602052604090205460ff165b15612250575060005b8080156122685750601754600160201b900460ff1615155b1561232f5760175460009060649061228a90600160201b900460ff168861364c565b6122949190613681565b6017549091506000906064906122b39062010000900460ff168961364c565b6122bd9190613681565b90506122c98288613695565b96506122d689308461248f565b801561232c576122e6308261259b565b601754604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b61233a87878761248f565b6007546001600160a01b031663e30443bc8861236b816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156123b157600080fd5b505af19250505080156123c2575060015b506007546001600160a01b031663e30443bc876123f4816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561243a57600080fd5b505af192505050801561244b575060015b5050505050505050565b600081848411156124795760405162461bcd60e51b8152600401610a6e9190613296565b5060006124868486613695565b95945050505050565b6001600160a01b0383166124b55760405162461bcd60e51b8152600401610a6e906135c4565b6001600160a01b0382166124db5760405162461bcd60e51b8152600401610a6e90613609565b612518816040518060600160405280602681526020016137fd602691396001600160a01b0386166000908152600160205260409020549190612455565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546125479082611cc0565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e3e9085815260200190565b6001600160a01b0382166125fb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a6e565b612638816040518060600160405280602281526020016137db602291396001600160a01b0385166000908152600160205260409020549190612455565b6001600160a01b03831660009081526001602052604090205560035461265e908261304d565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461273757604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6101009092048216929188169160008051602061384b833981519152916127189160481b906136ac565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146127d057604051711958dbdcde5cdd195b51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff63010000009092048216929187169160008051602061384b833981519152916127ad9160481b906136ac565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612866576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b9092048216929186169160008051602061384b833981519152916128419160481b906136ac565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610e98576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b9092048216929185169160008051602061384b833981519152916128da9160481b906136ac565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff85811691161461298a57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff918216929188169160008051602061384b833981519152916129709160481b906136ac565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff848116620100009092041614612a1e576040517065636f73797374656d4665654f6e42757960781b815260110160405190819003812060028701548754919260ff620100009092048216929187169160008051602061384b833981519152916129fd9160481b906136ac565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612ab2576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b9092048216929186169160008051602061384b83398151915291612a8e9160481b906136ac565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610e98576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b9092048216929185169160008051602061384b83398151915291612b259160481b906136ac565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6017805463ffffffff191690558115612bc3576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b8015612c26576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b80158015612c32575081155b15612c94576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612cbe91610100810482169116613524565b612cc89190613524565b612cd29190613524565b6017805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001610b5d565b306000908152600160205260408120546017549091479160029060ff600160201b8204811691612d9191168661364c565b612d9b9190613681565b612da59190613681565b60175490915060009060ff600160201b8204811691612dcd916301000000909104168661364c565b612dd79190613681565b90506000612de582846135ac565b612def9086613695565b9050612dfa8161308f565b6000612e068547613695565b60175490915060009060ff63010000008204811691620100008104821691612e3191600291166136c3565b612e3b9190613524565b612e459190613524565b601754612e5c9190600160201b900460ff166136e5565b60175460ff91821692506000916002918491612e7991168661364c565b612e839190613681565b612e8d9190613681565b90506000612e9b8285613695565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612ed6573d6000803e3d6000fd5b508615612f2957612ee787836131e9565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa191906134f1565b9050801561304157600754604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612fef57600080fd5b505af1158015613003573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9698760405161303891815260200190565b60405180910390a15b50505050505050505050565b6000611d1f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612455565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130c4576130c4613708565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561311d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613141919061371e565b8160018151811061315457613154613708565b6001600160a01b03928316602091820292909201015260065461317a9130911684611d26565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906131b390859060009086903090429060040161373b565b600060405180830381600087803b1580156131cd57600080fd5b505af11580156131e1573d6000803e3d6000fd5b505050505050565b6006546132019030906001600160a01b031684611d26565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613271573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e9891906137ac565b600060208083528351808285015260005b818110156132c3578581018301518582016040015282016132a7565b818111156132d5576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610edf57600080fd5b6000806040838503121561331357600080fd5b823561331e816132eb565b946020939093013593505050565b60006020828403121561333e57600080fd5b5035919050565b60008060006060848603121561335a57600080fd5b8335613365816132eb565b92506020840135613375816132eb565b929592945050506040919091013590565b60006020828403121561339857600080fd5b8135611d1f816132eb565b803560ff811681146133b457600080fd5b919050565b600080600080608085870312156133cf57600080fd5b6133d8856133a3565b93506133e6602086016133a3565b92506133f4604086016133a3565b9150613402606086016133a3565b905092959194509250565b8015158114610edf57600080fd5b6000806040838503121561342e57600080fd5b8235613439816132eb565b915060208301356134498161340d565b809150509250929050565b6000806040838503121561346757600080fd5b8235613472816132eb565b91506020830135613449816132eb565b600181811c9082168061349657607f821691505b6020821081036134b657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561350357600080fd5b8151611d1f8161340d565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff038211156135415761354161350e565b019392505050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b6000602082840312156135a557600080fd5b5051919050565b600082198211156135bf576135bf61350e565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008160001904831182151516156136665761366661350e565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826136905761369061366b565b500490565b6000828210156136a7576136a761350e565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff8316806136d6576136d661366b565b8060ff84160491505092915050565b600060ff821660ff8416808210156136ff576136ff61350e565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561373057600080fd5b8151611d1f816132eb565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561378b5784516001600160a01b031683529383019391830191600101613766565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156137c157600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204e016754b1a5447d641e369e806e2e934dcd46d08e3cf1b8d58016118bba13e364736f6c634300080f003360806040523480156200001157600080fd5b5060408051808201825260138082527f436f6d706f7365724173736574735f72435052000000000000000000000000006020808401829052845180860190955291845290830152908181600362000069838262000197565b50600462000078828262000197565b50505060006200008d620000ee60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e1060125550600060135562000263565b3390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011d57607f821691505b6020821081036200013e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019257600081815260208120601f850160051c810160208610156200016d5750805b601f850160051c820191505b818110156200018e5782815560010162000179565b5050505b505050565b81516001600160401b03811115620001b357620001b3620000f2565b620001cb81620001c4845462000108565b8462000144565b602080601f831160018114620002035760008415620001ea5750858301515b600019600386901b1c1916600185901b1785556200018e565b600085815260208120601f198616915b82811015620002345788860151825594840194600190910190840162000213565b5085821015620002535787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611be480620002736000396000f3fe6080604052600436106101fd5760003560e01c8063715018a61161010d578063a9059cbb116100a0578063bea9849e1161006f578063bea9849e146105d6578063dd62ed3e146105f6578063e30443bc1461063c578063f2fde38b1461065c578063f7c618c11461067c57600080fd5b8063a9059cbb1461054a578063aafd847a1461056a578063bc4c4b37146105a0578063be10b614146105c057600080fd5b806391b89fba116100dc57806391b89fba146104d557806395d89b41146104f5578063a457c2d71461050a578063a8b9d2401461052a57600080fd5b8063715018a61461046c57806385a6b3ae146104815780638aee8127146104975780638da5cb5b146104b757600080fd5b806327ce0147116101905780634e7b827f1161015f5780634e7b827f146103bb5780636a474002146103eb5780636bf5ecd5146104005780636f2789ec1461042057806370a082311461043657600080fd5b806327ce01471461033f578063313ce5671461035f57806331e79db01461037b578063395093511461039b57600080fd5b80631694505e116101cc5780631694505e146102a557806318160ddd146102dd578063226cfa3d146102f257806323b872dd1461031f57600080fd5b806306fdde0314610209578063095ea7b31461023457806309bbedde14610264578063163c7cef1461028357600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5061021e61069c565b60405161022b919061182b565b60405180910390f35b34801561024057600080fd5b5061025461024f366004611895565b61072e565b604051901515815260200161022b565b34801561027057600080fd5b50600c545b60405190815260200161022b565b34801561028f57600080fd5b506102a361029e3660046118c1565b610745565b005b3480156102b157600080fd5b506009546102c5906001600160a01b031681565b6040516001600160a01b03909116815260200161022b565b3480156102e957600080fd5b50600254610275565b3480156102fe57600080fd5b5061027561030d3660046118da565b60116020526000908152604090205481565b34801561032b57600080fd5b5061025461033a3660046118f7565b610812565b34801561034b57600080fd5b5061027561035a3660046118da565b61087b565b34801561036b57600080fd5b506040516012815260200161022b565b34801561038757600080fd5b506102a36103963660046118da565b6108d7565b3480156103a757600080fd5b506102546103b6366004611895565b6109fe565b3480156103c757600080fd5b506102546103d63660046118da565b60106020526000908152604090205460ff1681565b3480156103f757600080fd5b506102a3610a34565b34801561040c57600080fd5b506102a361041b3660046118c1565b610a6a565b34801561042c57600080fd5b5061027560125481565b34801561044257600080fd5b506102756104513660046118da565b6001600160a01b031660009081526020819052604090205490565b34801561047857600080fd5b506102a3610b27565b34801561048d57600080fd5b5061027560075481565b3480156104a357600080fd5b506102a36104b23660046118da565b610b9b565b3480156104c357600080fd5b506005546001600160a01b03166102c5565b3480156104e157600080fd5b506102756104f03660046118da565b610bce565b34801561050157600080fd5b5061021e610bd9565b34801561051657600080fd5b50610254610525366004611895565b610be8565b34801561053657600080fd5b506102756105453660046118da565b610c37565b34801561055657600080fd5b50610254610565366004611895565b610c63565b34801561057657600080fd5b506102756105853660046118da565b6001600160a01b03166000908152600b602052604090205490565b3480156105ac57600080fd5b506102546105bb366004611946565b610c70565b3480156105cc57600080fd5b5061027560135481565b3480156105e257600080fd5b506102a36105f13660046118da565b610d1e565b34801561060257600080fd5b5061027561061136600461197f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561064857600080fd5b506102a3610657366004611895565b610d51565b34801561066857600080fd5b506102a36106773660046118da565b610ebb565b34801561068857600080fd5b506008546102c5906001600160a01b031681565b6060600380546106ab906119ad565b80601f01602080910402602001604051908101604052809291908181526020018280546106d7906119ad565b80156107245780601f106106f957610100808354040283529160200191610724565b820191906000526020600020905b81548152906001019060200180831161070757829003601f168201915b5050505050905090565b600061073b338484610fa6565b5060015b92915050565b6005546001600160a01b031633146107785760405162461bcd60e51b815260040161076f906119e7565b60405180910390fd5b806013540361080d5760405162461bcd60e51b815260206004820152605560248201527f436f6d706f7365724173736574735f724350523a206d696e696d756d546f6b6560448201527f6e42616c616e6365466f724469766964656e647320616c726561647920746865606482015274103b30b63ab29037b31013b732bbab30b63ab2939760591b608482015260a40161076f565b601355565b600061081f8484846110ca565b610871843361086c85604051806060016040528060288152602001611b62602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190611124565b610fa6565b5060019392505050565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b926108cd926108c8926108c2916108bd919061115e565b6111e7565b906111f7565b611235565b61073f9190611a32565b6005546001600160a01b031633146109015760405162461bcd60e51b815260040161076f906119e7565b6001600160a01b03811660009081526010602052604090205460ff161561092757600080fd5b6001600160a01b0381166000908152601060205260408120805460ff19166001179055610955908290611248565b60405163f494faa960e01b8152600c60048201526001600160a01b038216602482015273317e0ac03c18ccfcd4e054a205d8ed7d10b994a69063f494faa99060440160006040518083038186803b1580156109af57600080fd5b505af41580156109c3573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161073b91859061086c90866112ad565b6005546001600160a01b03163314610a5e5760405162461bcd60e51b815260040161076f906119e7565b610a673361130c565b50565b6005546001600160a01b03163314610a945760405162461bcd60e51b815260040161076f906119e7565b6000610a9f60025490565b11610aa957600080fd5b8015610a6757610adc610abb60025490565b610ac983600160801b61115e565b610ad39190611a32565b600654906112ad565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600754610b2190826112ad565b60075550565b6005546001600160a01b03163314610b515760405162461bcd60e51b815260040161076f906119e7565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610bc55760405162461bcd60e51b815260040161076f906119e7565b610a6781611471565b600061073f82610c37565b6060600480546106ab906119ad565b600061073b338461086c85604051806060016040528060258152602001611b8a602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190611124565b6001600160a01b0381166000908152600b602052604081205461073f90610c5d8461087b565b906114bd565b600061073b3384846110ca565b6005546000906001600160a01b03163314610c9d5760405162461bcd60e51b815260040161076f906119e7565b6000610ca88461130c565b90508015610d14576001600160a01b038416600081815260116020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610d029085815260200190565b60405180910390a3600191505061073f565b5060009392505050565b6005546001600160a01b03163314610d485760405162461bcd60e51b815260040161076f906119e7565b610a67816114ff565b6005546001600160a01b03163314610d7b5760405162461bcd60e51b815260040161076f906119e7565b6001600160a01b03821660009081526010602052604090205460ff16610eb7576013548110610e2c57610dae8282611248565b604051630c495c3760e41b8152600c60048201526001600160a01b03831660248201526044810182905273317e0ac03c18ccfcd4e054a205d8ed7d10b994a69063c495c3709060640160006040518083038186803b158015610e0f57600080fd5b505af4158015610e23573d6000803e3d6000fd5b50505050610eaa565b610e37826000611248565b60405163f494faa960e01b8152600c60048201526001600160a01b038316602482015273317e0ac03c18ccfcd4e054a205d8ed7d10b994a69063f494faa99060440160006040518083038186803b158015610e9157600080fd5b505af4158015610ea5573d6000803e3d6000fd5b505050505b610eb5826001610c70565b505b5050565b6005546001600160a01b03163314610ee55760405162461bcd60e51b815260040161076f906119e7565b6001600160a01b038116610f4a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166110085760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161076f565b6001600160a01b0382166110695760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161076f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602960248201527f436f6d706f7365724173736574735f724350523a204e6f207472616e736665726044820152681cc8185b1b1bddd95960ba1b606482015260840161076f565b600081848411156111485760405162461bcd60e51b815260040161076f919061182b565b5060006111558486611a54565b95945050505050565b6000826000036111705750600061073f565b600061117c8385611a6b565b9050826111898583611a32565b146111e05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161076f565b9392505050565b6000818181121561073f57600080fd5b6000806112048385611a8a565b9050600083121580156112175750838112155b8061122c575060008312801561122c57508381125b6111e057600080fd5b60008082121561124457600080fd5b5090565b6001600160a01b0382166000908152602081905260409020548082111561128757600061127583836114bd565b9050611281848261154b565b50610eb5565b80821015610eb557600061129b82846114bd565b90506112a784826115af565b50505050565b6000806112ba8385611acb565b9050838110156111e05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161076f565b60008061131883610c37565b90508015611468576001600160a01b0383166000908152600b602052604090205461134390826112ad565b6001600160a01b0384166000818152600b6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906113929084815260200190565b60405180910390a260085460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af11580156113ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114129190611ae3565b905080611461576001600160a01b0384166000908152600b602052604090205461143c90836114bd565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b5092915050565b50600092915050565b6005546001600160a01b0316331461149b5760405162461bcd60e51b815260040161076f906119e7565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60006111e083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611124565b6005546001600160a01b031633146115295760405162461bcd60e51b815260040161076f906119e7565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b61155582826115f3565b61158f6115706108bd8360065461115e90919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906116de565b6001600160a01b039092166000908152600a602052604090209190915550565b6115b9828261171b565b61158f6115d46108bd8360065461115e90919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906111f7565b6001600160a01b0382166116495760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161076f565b61165560008383610eb5565b60025461166290826112ad565b6002556001600160a01b03821660009081526020819052604090205461168890826112ad565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6000806116eb8385611b00565b9050600083121580156116fe5750838113155b8061122c575060008312801561122c57508381136111e057600080fd5b6001600160a01b03821661177b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161076f565b61178782600083610eb5565b6117c481604051806060016040528060228152602001611b40602291396001600160a01b0385166000908152602081905260409020549190611124565b6001600160a01b0383166000908152602081905260409020556002546117ea90826114bd565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016116d2565b600060208083528351808285015260005b818110156118585785810183015185820160400152820161183c565b8181111561186a576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610a6757600080fd5b600080604083850312156118a857600080fd5b82356118b381611880565b946020939093013593505050565b6000602082840312156118d357600080fd5b5035919050565b6000602082840312156118ec57600080fd5b81356111e081611880565b60008060006060848603121561190c57600080fd5b833561191781611880565b9250602084013561192781611880565b929592945050506040919091013590565b8015158114610a6757600080fd5b6000806040838503121561195957600080fd5b823561196481611880565b9150602083013561197481611938565b809150509250929050565b6000806040838503121561199257600080fd5b823561199d81611880565b9150602083013561197481611880565b600181811c908216806119c157607f821691505b6020821081036119e157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082611a4f57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015611a6657611a66611a1c565b500390565b6000816000190483118215151615611a8557611a85611a1c565b500290565b600080821280156001600160ff1b0384900385131615611aac57611aac611a1c565b600160ff1b8390038412811615611ac557611ac5611a1c565b50500190565b60008219821115611ade57611ade611a1c565b500190565b600060208284031215611af557600080fd5b81516111e081611938565b60008083128015600160ff1b850184121615611b1e57611b1e611a1c565b6001600160ff1b0384018313811615611b3957611b39611a1c565b5050039056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ae9b12ccf68ec884c7d89788a8ff44eb8e0a44af48d0904d25063005a8f2ad9264736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c8063880bcbc111610175578063aee50b1e116100dc578063d322157611610095578063dd62ed3e1161006f578063dd62ed3e146108db578063eeda191c14610921578063f2fde38b14610941578063fe0175351461096157600080fd5b8063d32215761461087b578063d3f6a1571461089b578063d4698016146108bb57600080fd5b8063aee50b1e14610776578063b62496f514610796578063bea9849e146107c6578063c0246668146107e6578063cd43e22814610806578063d2d7ad831461086557600080fd5b80639d952ce91161012e5780639d952ce9146106cb578063a3d67ece146106eb578063a457c2d714610700578063a8b9d24014610720578063a9059cbb14610740578063aa4bde281461076057600080fd5b8063880bcbc11461062f5780638c0b5e221461064f5780638da5cb5b146106655780638ef03c021461068357806395d89b41146106985780639648ef27146106ad57600080fd5b806331e79db0116102345780634e71d92d116101ed57806366781291116101c757806366781291146105a457806370a08231146105c4578063715018a6146105fa578063781edb3c1461060f57600080fd5b80634e71d92d1461054f5780635ebf4db9146105645780635f64ba411461058457600080fd5b806331e79db01461047b578063395093511461049b57806342966c68146104bb57806344555595146104db578063449e53d5146104fb57806349bd5a5e1461051b57600080fd5b806318160ddd1161028657806318160ddd146103c05780631e293c10146103df57806323b872dd146103ff57806327a14fc21461041f578063299a6d301461043f578063313ce5671461045f57600080fd5b8063064a59d0146102d957806306fdde031461030f578063095ea7b314610331578063098df585146103515780630bd05b69146103735780631694505e1461038857600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506007546102fa90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561031b57600080fd5b5061032461099c565b6040516103069190613296565b34801561033d57600080fd5b506102fa61034c366004613300565b610a2e565b34801561035d57600080fd5b5061037161036c36600461332c565b610a44565b005b34801561037f57600080fd5b50610371610b6a565b34801561039457600080fd5b506006546103a8906001600160a01b031681565b6040516001600160a01b039091168152602001610306565b3480156103cc57600080fd5b506003545b604051908152602001610306565b3480156103eb57600080fd5b506103716103fa36600461332c565b610ba9565b34801561040b57600080fd5b506102fa61041a366004613345565b610c67565b34801561042b57600080fd5b5061037161043a36600461332c565b610cd0565b34801561044b57600080fd5b506102fa61045a366004613345565b610d92565b34801561046b57600080fd5b5060405160128152602001610306565b34801561048757600080fd5b50610371610496366004613386565b610e12565b3480156104a757600080fd5b506102fa6104b6366004613300565b610e9f565b3480156104c757600080fd5b506103716104d636600461332c565b610ed5565b3480156104e757600080fd5b50600d546103a8906001600160a01b031681565b34801561050757600080fd5b50610371610516366004613386565b610ee2565b34801561052757600080fd5b506103a87f0000000000000000000000005b5bdcc973610be6d1699bec61038a7de3da5daf81565b34801561055b57600080fd5b50610371610fe1565b34801561057057600080fd5b5061037161057f36600461332c565b611056565b34801561059057600080fd5b506007546103a8906001600160a01b031681565b3480156105b057600080fd5b506103716105bf3660046133b9565b6110b1565b3480156105d057600080fd5b506103d16105df366004613386565b6001600160a01b031660009081526001602052604090205490565b34801561060657600080fd5b506103716111d1565b34801561061b57600080fd5b5061037161062a36600461341b565b611245565b34801561063b57600080fd5b5061037161064a36600461341b565b61130f565b34801561065b57600080fd5b506103d160095481565b34801561067157600080fd5b506000546001600160a01b03166103a8565b34801561068f57600080fd5b506103d16113d1565b3480156106a457600080fd5b50610324611444565b3480156106b957600080fd5b50600e546001600160a01b03166103a8565b3480156106d757600080fd5b506103716106e63660046133b9565b611453565b3480156106f757600080fd5b506103d161151a565b34801561070c57600080fd5b506102fa61071b366004613300565b611564565b34801561072c57600080fd5b506103d161073b366004613386565b6115b3565b34801561074c57600080fd5b506102fa61075b366004613300565b611629565b34801561076c57600080fd5b506103d160085481565b34801561078257600080fd5b5061037161079136600461332c565b611636565b3480156107a257600080fd5b506102fa6107b1366004613386565b60166020526000908152604090205460ff1681565b3480156107d257600080fd5b506103716107e1366004613386565b611700565b3480156107f257600080fd5b5061037161080136600461341b565b611818565b34801561081257600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610306565b34801561087157600080fd5b506103d1600b5481565b34801561088757600080fd5b5061037161089636600461341b565b61191e565b3480156108a757600080fd5b506103716108b6366004613454565b6119a0565b3480156108c757600080fd5b50600c546103a8906001600160a01b031681565b3480156108e757600080fd5b506103d16108f6366004613454565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561092d57600080fd5b506103d161093c366004613386565b611ba3565b34801561094d57600080fd5b5061037161095c366004613386565b611bd6565b34801561096d57600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b900416610838565b6060600480546109ab90613482565b80601f01602080910402602001604051908101604052809291908181526020018280546109d790613482565b8015610a245780601f106109f957610100808354040283529160200191610a24565b820191906000526020600020905b815481529060010190602001808311610a0757829003601f168201915b5050505050905090565b6000610a3b338484611d26565b50600192915050565b6000546001600160a01b03163314610a775760405162461bcd60e51b8152600401610a6e906134bc565b60405180910390fd5b478110610ad55760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610a6e565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610b22576040519150601f19603f3d011682016040523d82523d6000602084013e610b27565b606091505b505090508015610b66576040518281527f362ae087cf4ccfc970d45b9e8ce6520f03b4eda3f9d76a70b655dc22badcca48906020015b60405180910390a15b5050565b6000546001600160a01b03163314610b945760405162461bcd60e51b8152600401610a6e906134bc565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610bd35760405162461bcd60e51b8152600401610a6e906134bc565b6009548103610c345760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420757064617465206d61785478416d6f756e7420746f2073616d604482015266652076616c756560c81b6064820152608401610a6e565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610c74848484611e4b565b610cc68433610cc185604051806060016040528060288152602001613823602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612455565b611d26565b5060019392505050565b6000546001600160a01b03163314610cfa5760405162461bcd60e51b8152600401610a6e906134bc565b6008548103610d5f5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610a6e565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b600e546000906001600160a01b03163314610e075760405162461bcd60e51b815260206004820152602f60248201527f6f6e6c79206272616e636820636f6e74726163742063616e206765742061737360448201526e0cae8e640deeccae440c4e4c2dcc6d608b1b6064820152608401610a6e565b610cc684848461248f565b6000546001600160a01b03163314610e3c5760405162461bcd60e51b8152600401610a6e906134bc565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610e8457600080fd5b505af1158015610e98573d6000803e3d6000fd5b5050505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610a3b918590610cc19086611cc0565b610edf338261259b565b50565b6000546001600160a01b03163314610f0c5760405162461bcd60e51b8152600401610a6e906134bc565b6001600160a01b03811615801590610f325750600e546001600160a01b03828116911614155b610f8d5760405162461bcd60e51b815260206004820152602660248201527f696e76616c69642061646472657373203a206d757374206272616e636820636f6044820152651b9d1c9858dd60d21b6064820152608401610a6e565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527f4e743ba57232d165386f4e663cddb1eb6de2a6c81a3a5549be0fbbb685e2ba159060200160405180910390a150565b60075460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af1158015611032573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf91906134f1565b6000546001600160a01b031633146110805760405162461bcd60e51b8152600401610a6e906134bc565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610e6a565b6000546001600160a01b031633146110db5760405162461bcd60e51b8152600401610a6e906134bc565b80826110e78587613524565b6110f19190613524565b6110fb9190613524565b60ff1660051161114d5760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d757374206265206661697221212100000000000000006044820152606401610a6e565b61115b600f858585856126a6565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6000546001600160a01b031633146111fb5760405162461bcd60e51b8152600401610a6e906134bc565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461126f5760405162461bcd60e51b8152600401610a6e906134bc565b6001600160a01b03821660009081526015602052604090205481151560ff9091161515036112af5760405162461bcd60e51b8152600401610a6e90613549565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e91015b60405180910390a25050565b6000546001600160a01b031633146113395760405162461bcd60e51b8152600401610a6e906134bc565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036113795760405162461bcd60e51b8152600401610a6e90613549565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101611303565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa15801561141b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143f9190613593565b905090565b6060600580546109ab90613482565b6000546001600160a01b0316331461147d5760405162461bcd60e51b8152600401610a6e906134bc565b80826114898587613524565b6114939190613524565b61149d9190613524565b60ff166003116114ef5760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d75737420626520666169722121210000000000000000006044820152606401610a6e565b6114fd600f85858585612909565b6040516b62617365466565732d42757960a01b8152600c01611175565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa15801561141b573d6000803e3d6000fd5b6000610a3b3384610cc18560405180606001604052806025815260200161386b602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612455565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d240906024015b602060405180830381865afa1580156115ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116239190613593565b92915050565b6000610a3b338484611e4b565b6000546001600160a01b031633146116605760405162461bcd60e51b8152600401610a6e906134bc565b600b5481036116cd5760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610a6e565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b0316331461172a5760405162461bcd60e51b8152600401610a6e906134bc565b6006546001600160a01b03908116908216036117945760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b6064820152608401610a6e565b6006546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600680546001600160a01b0319166001600160a01b03838116918217909255600754604051635f54c24f60e11b815260048101929092529091169063bea9849e90602401610e6a565b6000546001600160a01b031633146118425760405162461bcd60e51b8152600401610a6e906134bc565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036118c65760405162461bcd60e51b815260206004820152602b60248201527f204163636f756e7420697320616c7265616479207468652076616c7565206f6660448201526a20276578636c756465642760a81b6064820152608401610a6e565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101611303565b6000546001600160a01b031633146119485760405162461bcd60e51b8152600401610a6e906134bc565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101611303565b6000546001600160a01b031633146119ca5760405162461bcd60e51b8152600401610a6e906134bc565b600c546001600160a01b03838116911614611aae576001600160a01b038216611a355760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610a6e565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600c80546001600160a01b0319166001600160a01b0384161790555b600d546001600160a01b03828116911614610b66576001600160a01b038116611b235760405162461bcd60e51b815260206004820152602160248201527f5468652061707950726f766964657257616c6c65742063616e6e6f74206265206044820152600360fc1b6064820152608401610a6e565b600d5460405170185c1e541c9bdd9a59195c95d85b1b195d607a1b81526001600160a01b0391821691831690601101604051908190038120907f4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5290600090a4600d80546001600160a01b0383166001600160a01b03199091161790555050565b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024016115e2565b6000546001600160a01b03163314611c005760405162461bcd60e51b8152600401610a6e906134bc565b6001600160a01b038116611c655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a6e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611ccd83856135ac565b905083811015611d1f5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a6e565b9392505050565b6001600160a01b038316611d885760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a6e565b6001600160a01b038216611de95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a6e565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611e715760405162461bcd60e51b8152600401610a6e906135c4565b6001600160a01b038216611e975760405162461bcd60e51b8152600401610a6e90613609565b80600003611eb057611eab8383600061248f565b505050565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611f1257506001600160a01b03841660009081526012602052604090205460ff16155b1561214057600754600160a01b900460ff16611f705760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610a6e565b6001600160a01b03841660009081526014602052604090205460ff16158015611fb257506001600160a01b03851660009081526014602052604090205460ff16155b15612089578115612021576008548311156120215760405162461bcd60e51b815260206004820152602960248201527f42757920616d6f756e74206578636565647320746865206d6178547857616c6c60448201526832ba20b6b7bab73a1760b91b6064820152608401610a6e565b8015612089576009548311156120895760405162461bcd60e51b815260206004820152602760248201527f53656c6c20616d6f756e74206578636565647320746865206d6178547842757960448201526620b6b7bab73a1760c91b6064820152608401610a6e565b6001600160a01b03841660009081526015602052604090205460ff1661214057600854836120cc866001600160a01b031660009081526001602052604090205490565b6120d691906135ac565b11156121405760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b6064820152608401610a6e565b61214a8282612b53565b600b543060009081526001602052604090205460075491111590600160a01b900460ff1680156121775750805b80156121865750600a5460ff16155b801561219d5750601754600160201b900460ff1615155b80156121c157506001600160a01b03851660009081526016602052604090205460ff165b156121e657600a805460ff191660011790556121db612d60565b600a805460ff191690555b600a5460009060ff161580156122055750600754600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061224757506001600160a01b03861660009081526013602052604090205460ff165b15612250575060005b8080156122685750601754600160201b900460ff1615155b1561232f5760175460009060649061228a90600160201b900460ff168861364c565b6122949190613681565b6017549091506000906064906122b39062010000900460ff168961364c565b6122bd9190613681565b90506122c98288613695565b96506122d689308461248f565b801561232c576122e6308261259b565b601754604080516201000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b61233a87878761248f565b6007546001600160a01b031663e30443bc8861236b816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156123b157600080fd5b505af19250505080156123c2575060015b506007546001600160a01b031663e30443bc876123f4816001600160a01b031660009081526001602052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561243a57600080fd5b505af192505050801561244b575060015b5050505050505050565b600081848411156124795760405162461bcd60e51b8152600401610a6e9190613296565b5060006124868486613695565b95945050505050565b6001600160a01b0383166124b55760405162461bcd60e51b8152600401610a6e906135c4565b6001600160a01b0382166124db5760405162461bcd60e51b8152600401610a6e90613609565b612518816040518060600160405280602681526020016137fd602691396001600160a01b0386166000908152600160205260409020549190612455565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546125479082611cc0565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e3e9085815260200190565b6001600160a01b0382166125fb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a6e565b612638816040518060600160405280602281526020016137db602291396001600160a01b0385166000908152600160205260409020549190612455565b6001600160a01b03831660009081526001602052604090205560035461265e908261304d565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461273757604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6101009092048216929188169160008051602061384b833981519152916127189160481b906136ac565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff848116630100000090920416146127d057604051711958dbdcde5cdd195b51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff63010000009092048216929187169160008051602061384b833981519152916127ad9160481b906136ac565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b9092041614612866576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160281b9092048216929186169160008051602061384b833981519152916128419160481b906136ac565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b9092041614610e98576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160381b9092048216929185169160008051602061384b833981519152916128da9160481b906136ac565b60405180910390a460028501805460ff8316600160381b0267ff00000000000000199091161790555050505050565b600285015460ff85811691161461298a57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff918216929188169160008051602061384b833981519152916129709160481b906136ac565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff848116620100009092041614612a1e576040517065636f73797374656d4665654f6e42757960781b815260110160405190819003812060028701548754919260ff620100009092048216929187169160008051602061384b833981519152916129fd9160481b906136ac565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612ab2576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160201b9092048216929186169160008051602061384b83398151915291612a8e9160481b906136ac565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b9092041614610e98576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160301b9092048216929185169160008051602061384b83398151915291612b259160481b906136ac565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b6017805463ffffffff191690558115612bc3576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790555b8015612c26576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b80158015612c32575081155b15612c94576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b60175460ff63010000008204811691620100008104821691612cbe91610100810482169116613524565b612cc89190613524565b612cd29190613524565b6017805464ff00000000198116600160201b60ff94851681029182179384905560408051938616928616929092178352610100840485166020840152620100008404851691830191909152630100000083048416606083015290910490911660808201527f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9060a001610b5d565b306000908152600160205260408120546017549091479160029060ff600160201b8204811691612d9191168661364c565b612d9b9190613681565b612da59190613681565b60175490915060009060ff600160201b8204811691612dcd916301000000909104168661364c565b612dd79190613681565b90506000612de582846135ac565b612def9086613695565b9050612dfa8161308f565b6000612e068547613695565b60175490915060009060ff63010000008204811691620100008104821691612e3191600291166136c3565b612e3b9190613524565b612e459190613524565b601754612e5c9190600160201b900460ff166136e5565b60175460ff91821692506000916002918491612e7991168661364c565b612e839190613681565b612e8d9190613681565b90506000612e9b8285613695565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612ed6573d6000803e3d6000fd5b508615612f2957612ee787836131e9565b60408051868152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101879052600090309063a9059cbb906044016020604051808303816000875af1158015612f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa191906134f1565b9050801561304157600754604051636bf5ecd560e01b8152600481018990526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b158015612fef57600080fd5b505af1158015613003573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9698760405161303891815260200190565b60405180910390a15b50505050505050505050565b6000611d1f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612455565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130c4576130c4613708565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561311d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613141919061371e565b8160018151811061315457613154613708565b6001600160a01b03928316602091820292909201015260065461317a9130911684611d26565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906131b390859060009086903090429060040161373b565b600060405180830381600087803b1580156131cd57600080fd5b505af11580156131e1573d6000803e3d6000fd5b505050505050565b6006546132019030906001600160a01b031684611d26565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613271573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e9891906137ac565b600060208083528351808285015260005b818110156132c3578581018301518582016040015282016132a7565b818111156132d5576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610edf57600080fd5b6000806040838503121561331357600080fd5b823561331e816132eb565b946020939093013593505050565b60006020828403121561333e57600080fd5b5035919050565b60008060006060848603121561335a57600080fd5b8335613365816132eb565b92506020840135613375816132eb565b929592945050506040919091013590565b60006020828403121561339857600080fd5b8135611d1f816132eb565b803560ff811681146133b457600080fd5b919050565b600080600080608085870312156133cf57600080fd5b6133d8856133a3565b93506133e6602086016133a3565b92506133f4604086016133a3565b9150613402606086016133a3565b905092959194509250565b8015158114610edf57600080fd5b6000806040838503121561342e57600080fd5b8235613439816132eb565b915060208301356134498161340d565b809150509250929050565b6000806040838503121561346757600080fd5b8235613472816132eb565b91506020830135613449816132eb565b600181811c9082168061349657607f821691505b6020821081036134b657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561350357600080fd5b8151611d1f8161340d565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff038211156135415761354161350e565b019392505050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b6000602082840312156135a557600080fd5b5051919050565b600082198211156135bf576135bf61350e565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008160001904831182151516156136665761366661350e565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826136905761369061366b565b500490565b6000828210156136a7576136a761350e565b500390565b68ffffffffffffffffff1991909116815260200190565b600060ff8316806136d6576136d661366b565b8060ff84160491505092915050565b600060ff821660ff8416808210156136ff576136ff61350e565b90039392505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561373057600080fd5b8151611d1f816132eb565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561378b5784516001600160a01b031683529383019391830191600101613766565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156137c157600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204e016754b1a5447d641e369e806e2e934dcd46d08e3cf1b8d58016118bba13e364736f6c634300080f0033

Libraries Used


Deployed Bytecode Sourcemap

19289:24480:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19602:28;;;;;;;;;;-1:-1:-1;19602:28:0;;;;-1:-1:-1;;;19602:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;19602:28:0;;;;;;;;9997:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11052:210::-;;;;;;;;;;-1:-1:-1;11052:210:0;;;;;:::i;:::-;;:::i;31742:347::-;;;;;;;;;;-1:-1:-1;31742:347:0;;;;;:::i;:::-;;:::i;:::-;;25338:88;;;;;;;;;;;;;:::i;19339:30::-;;;;;;;;;;-1:-1:-1;19339:30:0;;;;-1:-1:-1;;;;;19339:30:0;;;;;;-1:-1:-1;;;;;1628:32:1;;;1610:51;;1598:2;1583:18;19339:30:0;1449:218:1;10318:108:0;;;;;;;;;;-1:-1:-1;10406:12:0;;10318:108;;;1818:25:1;;;1806:2;1791:18;10318:108:0;1672:177:1;30477:299:0;;;;;;;;;;-1:-1:-1;30477:299:0;;;;;:::i;:::-;;:::i;11270:454::-;;;;;;;;;;-1:-1:-1;11270:454:0;;;;;:::i;:::-;;:::i;30784:305::-;;;;;;;;;;-1:-1:-1;30784:305:0;;;;;:::i;:::-;;:::i;32097:252::-;;;;;;;;;;-1:-1:-1;32097:252:0;;;;;:::i;:::-;;:::i;10217:93::-;;;;;;;;;;-1:-1:-1;10217:93:0;;10300:2;2457:36:1;;2445:2;2430:18;10217:93:0;2315:184:1;26483:124:0;;;;;;;;;;-1:-1:-1;26483:124:0;;;;;:::i;:::-;;:::i;11732:300::-;;;;;;;;;;-1:-1:-1;11732:300:0;;;;;:::i;:::-;;:::i;32357:81::-;;;;;;;;;;-1:-1:-1;32357:81:0;;;;;:::i;:::-;;:::i;19951:32::-;;;;;;;;;;-1:-1:-1;19951:32:0;;;;-1:-1:-1;;;;;19951:32:0;;;32552:328;;;;;;;;;;-1:-1:-1;32552:328:0;;;;;:::i;:::-;;:::i;19376:38::-;;;;;;;;;;;;;;;31637:97;;;;;;;;;;;;;:::i;31459:170::-;;;;;;;;;;-1:-1:-1;31459:170:0;;;;;:::i;:::-;;:::i;19572:21::-;;;;;;;;;;-1:-1:-1;19572:21:0;;;;-1:-1:-1;;;;;19572:21:0;;;29248:834;;;;;;;;;;-1:-1:-1;29248:834:0;;;;;:::i;:::-;;:::i;10434:177::-;;;;;;;;;;-1:-1:-1;10434:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;10585:18:0;10553:7;10585:18;;;:9;:18;;;;;;;10434:177;9116:148;;;;;;;;;;;;;:::i;27031:391::-;;;;;;;;;;-1:-1:-1;27031:391:0;;;;;:::i;:::-;;:::i;26615:408::-;;;;;;;;;;-1:-1:-1;26615:408:0;;;;;:::i;:::-;;:::i;19754:50::-;;;;;;;;;;;;;;;;8902:79;;;;;;;;;;-1:-1:-1;8940:7:0;8967:6;-1:-1:-1;;;;;8967:6:0;8902:79;;32888:130;;;;;;;;;;;;;:::i;10105:104::-;;;;;;;;;;;;;:::i;32446:98::-;;;;;;;;;;-1:-1:-1;32530:6:0;;-1:-1:-1;;;;;32530:6:0;32446:98;;28426:814;;;;;;;;;;-1:-1:-1;28426:814:0;;;;;:::i;:::-;;:::i;33385:132::-;;;;;;;;;;;;;:::i;12040:400::-;;;;;;;;;;-1:-1:-1;12040:400:0;;;;;:::i;:::-;;:::i;33026:180::-;;;;;;;;;;-1:-1:-1;33026:180:0;;;;;:::i;:::-;;:::i;10619:216::-;;;;;;;;;;-1:-1:-1;10619:216:0;;;;;:::i;:::-;;:::i;19693:54::-;;;;;;;;;;;;;;;;31097:354;;;;;;;;;;-1:-1:-1;31097:354:0;;;;;:::i;:::-;;:::i;20786:57::-;;;;;;;;;;-1:-1:-1;20786:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30090:379;;;;;;;;;;-1:-1:-1;30090:379:0;;;;;:::i;:::-;;:::i;26120:355::-;;;;;;;;;;-1:-1:-1;26120:355:0;;;;;:::i;:::-;;:::i;33525:354::-;;;;;;;;;;-1:-1:-1;33730:23:0;;;;;;;33768;;;;;;-1:-1:-1;;;33806:18:0;;;;;-1:-1:-1;;;33839:21:0;;;33525:354;;;;4507:4:1;4495:17;;;4477:36;;4549:17;;;4544:2;4529:18;;4522:45;4603:17;;;4583:18;;;4576:45;;;;4657:17;;;4652:2;4637:18;;4630:45;4464:3;4449:19;33525:354:0;4262:419:1;19842:63:0;;;;;;;;;;;;;;;;25872:240;;;;;;;;;;-1:-1:-1;25872:240:0;;;;;:::i;:::-;;:::i;27430:970::-;;;;;;;;;;-1:-1:-1;27430:970:0;;;;;:::i;:::-;;:::i;19914:30::-;;;;;;;;;;-1:-1:-1;19914:30:0;;;;-1:-1:-1;;;;;19914:30:0;;;10843:201;;;;;;;;;;-1:-1:-1;10843:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;11009:18:0;;;10977:7;11009:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10843:201;33214:163;;;;;;;;;;-1:-1:-1;33214:163:0;;;;;:::i;:::-;;:::i;9272:281::-;;;;;;;;;;-1:-1:-1;9272:281:0;;;;;:::i;:::-;;:::i;33887:359::-;;;;;;;;;;-1:-1:-1;34093:24:0;;;;;;;;;34132;;;;;;-1:-1:-1;;;34171:19:0;;;;;-1:-1:-1;;;34205:22:0;;;33887:359;;9997:100;10051:13;10084:5;10077:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9997:100;:::o;11052:210::-;11171:4;11193:39;8290:10;11216:7;11225:6;11193:8;:39::i;:::-;-1:-1:-1;11250:4:0;11052:210;;;;:::o;31742:347::-;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;;;;;;;;;31845:21:::1;31836:6;:30;31814:118;;;::::0;-1:-1:-1;;;31814:118:0;;6027:2:1;31814:118:0::1;::::0;::::1;6009:21:1::0;6066:2;6046:18;;;6039:30;6105:34;6085:18;;;6078:62;-1:-1:-1;;;6156:18:1;;;6149:36;6202:19;;31814:118:0::1;5825:402:1::0;31814:118:0::1;31944:12;8967:6:::0;;31962:40:::1;::::0;-1:-1:-1;;;;;8967:6:0;;;;31991;;31944:12;31962:40;31944:12;31962:40;31991:6;8967;31962:40:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31943:59;;;32017:7;32013:69;;;32046:24;::::0;1818:25:1;;;32046:24:0::1;::::0;1806:2:1;1791:18;32046:24:0::1;;;;;;;;32013:69;31803:286;31742:347:::0;:::o;25338:88::-;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;25395:16:::1;:23:::0;;-1:-1:-1;;;;25395:23:0::1;-1:-1:-1::0;;;25395:23:0::1;::::0;;25338:88::o;30477:299::-;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;30592:11:::1;;30580:8;:23:::0;30558:112:::1;;;::::0;-1:-1:-1;;;30558:112:0;;6644:2:1;30558:112:0::1;::::0;::::1;6626:21:1::0;6683:2;6663:18;;;6656:30;6722:34;6702:18;;;6695:62;-1:-1:-1;;;6773:18:1;;;6766:37;6820:19;;30558:112:0::1;6442:403:1::0;30558:112:0::1;30723:11;::::0;30686:49:::1;::::0;30713:8;;30686:49:::1;::::0;;;::::1;30746:11;:22:::0;30477:299::o;11270:454::-;11410:4;11427:36;11437:6;11445:9;11456:6;11427:9;:36::i;:::-;11474:220;11497:6;8290:10;11545:138;11601:6;11545:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11545:19:0;;;;;;:11;:19;;;;;;;;8290:10;11545:33;;;;;;;;;;:37;:138::i;:::-;11474:8;:220::i;:::-;-1:-1:-1;11712:4:0;11270:454;;;;;:::o;30784:305::-;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;30894:15:::1;;30882:8;:27:::0;30860:120:::1;;;::::0;-1:-1:-1;;;30860:120:0;;7052:2:1;30860:120:0::1;::::0;::::1;7034:21:1::0;7091:2;7071:18;;;7064:30;7130:34;7110:18;;;7103:62;-1:-1:-1;;;7181:18:1;;;7174:41;7232:19;;30860:120:0::1;6850:407:1::0;30860:120:0::1;31028:15;::::0;30996:48:::1;::::0;31018:8;;30996:48:::1;::::0;;;::::1;31055:15;:26:::0;30784:305::o;32097:252::-;23157:6;;32250:4;;-1:-1:-1;;;;;23157:6:0;23143:10;:20;23135:80;;;;-1:-1:-1;;;23135:80:0;;7464:2:1;23135:80:0;;;7446:21:1;7503:2;7483:18;;;7476:30;7542:34;7522:18;;;7515:62;-1:-1:-1;;;7593:18:1;;;7586:45;7648:19;;23135:80:0;7262:411:1;23135:80:0;32272:47:::1;32288:7;32297:14;32313:5;32272:15;:47::i;26483:124::-:0;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;26560:9:::1;::::0;:39:::1;::::0;-1:-1:-1;;;26560:39:0;;-1:-1:-1;;;;;1628:32:1;;;26560:39:0::1;::::0;::::1;1610:51:1::0;26560:9:0;;::::1;::::0;:30:::1;::::0;1583:18:1;;26560:39:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26483:124:::0;:::o;11732:300::-;8290:10;11847:4;11941:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11941:34:0;;;;;;;;;;11847:4;;11869:133;;11919:7;;11941:50;;11980:10;11941:38;:50::i;32357:81::-;32406:24;32412:10;32424:5;32406;:24::i;:::-;32357:81;:::o;32552:328::-;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32658:31:0;::::1;::::0;;::::1;::::0;:60:::1;;-1:-1:-1::0;32712:6:0::1;::::0;-1:-1:-1;;;;;32693:25:0;;::::1;32712:6:::0;::::1;32693:25;;32658:60;32636:148;;;::::0;-1:-1:-1;;;32636:148:0;;7880:2:1;32636:148:0::1;::::0;::::1;7862:21:1::0;7919:2;7899:18;;;7892:30;7958:34;7938:18;;;7931:62;-1:-1:-1;;;8009:18:1;;;8002:36;8055:19;;32636:148:0::1;7678:402:1::0;32636:148:0::1;32795:6;:24:::0;;-1:-1:-1;;;;;;32795:24:0::1;-1:-1:-1::0;;;;;32795:24:0;::::1;::::0;;::::1;::::0;;;32835:37:::1;::::0;1610:51:1;;;32835:37:0::1;::::0;1598:2:1;1583:18;32835:37:0::1;;;;;;;32552:328:::0;:::o;31637:97::-;31674:9;;:52;;-1:-1:-1;;;31674:52:0;;31707:10;31674:52;;;8269:51:1;31674:9:0;8336:18:1;;;8329:50;-1:-1:-1;;;;;31674:9:0;;;;:24;;8242:18:1;;31674:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31459:170::-;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;31574:9:::1;::::0;:47:::1;::::0;-1:-1:-1;;;31574:47:0;;::::1;::::0;::::1;1818:25:1::0;;;-1:-1:-1;;;;;31574:9:0;;::::1;::::0;:37:::1;::::0;1791:18:1;;31574:47:0::1;1672:177:1::0;29248:834:0;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;29616:17;29578:14;29492:62:::1;29535:19:::0;29492;:62:::1;:::i;:::-;:100;;;;:::i;:::-;:141;;;;:::i;:::-;29471:162;;:1;:162;29449:236;;;::::0;-1:-1:-1;;;29449:236:0;;9183:2:1;29449:236:0::1;::::0;::::1;9165:21:1::0;9222:2;9202:18;;;9195:30;9261:26;9241:18;;;9234:54;9305:18;;29449:236:0::1;8981:348:1::0;29449:236:0::1;29696:183;29734:5;29754:19;29788;29822:14;29851:17;29696:23;:183::i;:::-;29895:179;::::0;-1:-1:-1;;;9536:28:1;;9589:2;9580:12;29895:179:0::1;;::::0;;;;;::::1;::::0;;4507:4:1;4495:17;;;4477:36;;4549:17;;;4544:2;4529:18;;4522:45;4603:17;;;4583:18;;;4576:45;4657:17;;4652:2;4637:18;;4630:45;29895:179:0;;;;::::1;::::0;;;;;4464:3:1;29895:179:0;;::::1;29248:834:::0;;;;:::o;9116:148::-;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;9223:1:::1;9207:6:::0;;9186:40:::1;::::0;-1:-1:-1;;;;;9207:6:0;;::::1;::::0;9186:40:::1;::::0;9223:1;;9186:40:::1;9254:1;9237:19:::0;;-1:-1:-1;;;;;;9237:19:0::1;::::0;;9116:148::o;27031:391::-;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27173:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;27151:142:::1;;;;-1:-1:-1::0;;;27151:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27304:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;27304:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27369:45;;154:41:1;;;27369:45:0::1;::::0;127:18:1;27369:45:0::1;;;;;;;;27031:391:::0;;:::o;26615:408::-;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26762:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;26740:147:::1;;;;-1:-1:-1::0;;;26740:147:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26898:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;26898:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26968:47;;154:41:1;;;26968:47:0::1;::::0;127:18:1;26968:47:0::1;14:187:1::0;32888:130:0;32973:9;;:37;;;-1:-1:-1;;;32973:37:0;;;;32946:7;;-1:-1:-1;;;;;32973:9:0;;:35;;:37;;;;;;;;;;;;;;:9;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32966:44;;32888:130;:::o;10105:104::-;10161:13;10194:7;10187:14;;;;;:::i;28426:814::-;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;28786:16;28749:13;28665:60:::1;28707:18:::0;28665;:60:::1;:::i;:::-;:97;;;;:::i;:::-;:137;;;;:::i;:::-;28644:158;;:1;:158;28622:231;;;::::0;-1:-1:-1;;;28622:231:0;;10405:2:1;28622:231:0::1;::::0;::::1;10387:21:1::0;10444:2;10424:18;;;10417:30;10483:25;10463:18;;;10456:53;10526:18;;28622:231:0::1;10203:347:1::0;28622:231:0::1;28864:178;28901:5;28921:18;28954;28987:13;29015:16;28864:22;:178::i;:::-;29058:174;::::0;-1:-1:-1;;;10757:27:1;;10809:2;10800:12;29058:174:0::1;10555:263:1::0;33385:132:0;33474:9;;:35;;;-1:-1:-1;;;33474:35:0;;;;33447:7;;-1:-1:-1;;;;;33474:9:0;;:33;;:35;;;;;;;;;;;;;;:9;:35;;;;;;;;;;;;;;12040:400;12160:4;12182:228;8290:10;12232:7;12254:145;12311:15;12254:145;;;;;;;;;;;;;;;;;8290:10;12254:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12254:34:0;;;;;;;;;;;;:38;:145::i;33026:180::-;33157:9;;:41;;-1:-1:-1;;;33157:41:0;;-1:-1:-1;;;;;1628:32:1;;;33157:41:0;;;1610:51:1;33125:7:0;;33157:9;;:32;;1583:18:1;;33157:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33150:48;33026:180;-1:-1:-1;;33026:180:0:o;10619:216::-;10741:4;10763:42;8290:10;10787:9;10798:6;10763:9;:42::i;31097:354::-;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;31215:23:::1;;31203:8;:35:::0;31181:136:::1;;;::::0;-1:-1:-1;;;31181:136:0;;11025:2:1;31181:136:0::1;::::0;::::1;11007:21:1::0;11064:2;11044:18;;;11037:30;11103:34;11083:18;;;11076:62;-1:-1:-1;;;11154:18:1;;;11147:49;11213:19;;31181:136:0::1;10823:415:1::0;31181:136:0::1;31374:23;::::0;31333:65:::1;::::0;31364:8;;31333:65:::1;::::0;;;::::1;31409:23;:34:::0;31097:354::o;30090:379::-;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;30210:15:::1;::::0;-1:-1:-1;;;;;30210:15:0;;::::1;30188:38:::0;;::::1;::::0;30166:123:::1;;;::::0;-1:-1:-1;;;30166:123:0;;11445:2:1;30166:123:0::1;::::0;::::1;11427:21:1::0;11484:2;11464:18;;;11457:30;11523:34;11503:18;;;11496:62;-1:-1:-1;;;11574:18:1;;;11567:33;11617:19;;30166:123:0::1;11243:399:1::0;30166:123:0::1;30347:15;::::0;30305:59:::1;::::0;-1:-1:-1;;;;;30347:15:0;;::::1;::::0;30305:59;::::1;::::0;::::1;::::0;30347:15:::1;::::0;30305:59:::1;30375:15;:37:::0;;-1:-1:-1;;;;;;30375:37:0::1;-1:-1:-1::0;;;;;30375:37:0;;::::1;::::0;;::::1;::::0;;;30423:9:::1;::::0;:38:::1;::::0;-1:-1:-1;;;30423:38:0;;::::1;::::0;::::1;1610:51:1::0;;;;30423:9:0;;::::1;::::0;:26:::1;::::0;1583:18:1;;30423:38:0::1;1449:218:1::0;26120:355:0;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26252:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;26230:132:::1;;;::::0;-1:-1:-1;;;26230:132:0;;11849:2:1;26230:132:0::1;::::0;::::1;11831:21:1::0;11888:2;11868:18;;;11861:30;11927:34;11907:18;;;11900:62;-1:-1:-1;;;11978:18:1;;;11971:41;12029:19;;26230:132:0::1;11647:407:1::0;26230:132:0::1;-1:-1:-1::0;;;;;26373:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;26373:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26427:40;;154:41:1;;;26427:40:0::1;::::0;127:18:1;26427:40:0::1;14:187:1::0;25872:240:0;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25990:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;25990:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26054:50;;154:41:1;;;26054:50:0::1;::::0;127:18:1;26054:50:0::1;14:187:1::0;27430:970:0;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;27567:15:::1;::::0;-1:-1:-1;;;;;27567:37:0;;::::1;:15:::0;::::1;:37;27563:400;;-1:-1:-1::0;;;;;27647:32:0;::::1;27621:125;;;::::0;-1:-1:-1;;;27621:125:0;;12261:2:1;27621:125:0::1;::::0;::::1;12243:21:1::0;12300:2;12280:18;;;12273:30;12339:33;12319:18;;;12312:61;12390:18;;27621:125:0::1;12059:355:1::0;27621:125:0::1;27870:15;::::0;27766:134:::1;::::0;-1:-1:-1;;;12621:30:1;;-1:-1:-1;;;;;27870:15:0;;::::1;::::0;27766:134;::::1;::::0;12676:2:1;12667:12;27766:134:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;27915:15;:36:::0;;-1:-1:-1;;;;;;27915:36:0::1;-1:-1:-1::0;;;;;27915:36:0;::::1;;::::0;;27563:400:::1;27979:17;::::0;-1:-1:-1;;;;;27979:41:0;;::::1;:17:::0;::::1;:41;27975:418;;-1:-1:-1::0;;;;;28063:34:0;::::1;28037:129;;;::::0;-1:-1:-1;;;28037:129:0;;12892:2:1;28037:129:0::1;::::0;::::1;12874:21:1::0;12931:2;12911:18;;;12904:30;12970:34;12950:18;;;12943:62;-1:-1:-1;;;13021:18:1;;;13014:31;13062:19;;28037:129:0::1;12690:397:1::0;28037:129:0::1;28294:17;::::0;28186:140:::1;::::0;-1:-1:-1;;;13294:32:1;;-1:-1:-1;;;;;28294:17:0;;::::1;::::0;28186:140;::::1;::::0;13351:2:1;13342:12;28186:140:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;28341:17;:40:::0;;-1:-1:-1;;;;;28341:40:0;::::1;-1:-1:-1::0;;;;;;28341:40:0;;::::1;;::::0;;27430:970;;:::o;33214:163::-;33341:9;;:28;;-1:-1:-1;;;33341:28:0;;-1:-1:-1;;;;;1628:32:1;;;33341:28:0;;;1610:51:1;33309:7:0;;33341:9;;:19;;1583:18:1;;33341:28:0;1449:218:1;9272:281:0;9029:6;;-1:-1:-1;;;;;9029:6:0;8290:10;9029:22;9021:67;;;;-1:-1:-1;;;9021:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9375:22:0;::::1;9353:110;;;::::0;-1:-1:-1;;;9353:110:0;;13567:2:1;9353:110:0::1;::::0;::::1;13549:21:1::0;13606:2;13586:18;;;13579:30;13645:34;13625:18;;;13618:62;-1:-1:-1;;;13696:18:1;;;13689:36;13742:19;;9353:110:0::1;13365:402:1::0;9353:110:0::1;9500:6;::::0;;9479:38:::1;::::0;-1:-1:-1;;;;;9479:38:0;;::::1;::::0;9500:6;::::1;::::0;9479:38:::1;::::0;::::1;9528:6;:17:::0;;-1:-1:-1;;;;;;9528:17:0::1;-1:-1:-1::0;;;;;9528:17:0;;;::::1;::::0;;;::::1;::::0;;9272:281::o;3062:181::-;3120:7;;3152:5;3156:1;3152;:5;:::i;:::-;3140:17;;3181:1;3176;:6;;3168:46;;;;-1:-1:-1;;;3168:46:0;;14107:2:1;3168:46:0;;;14089:21:1;14146:2;14126:18;;;14119:30;14185:29;14165:18;;;14158:57;14232:18;;3168:46:0;13905:351:1;3168:46:0;3234:1;3062:181;-1:-1:-1;;;3062:181:0:o;13903:378::-;-1:-1:-1;;;;;14039:19:0;;14031:68;;;;-1:-1:-1;;;14031:68:0;;14463:2:1;14031:68:0;;;14445:21:1;14502:2;14482:18;;;14475:30;14541:34;14521:18;;;14514:62;-1:-1:-1;;;14592:18:1;;;14585:34;14636:19;;14031:68:0;14261:400:1;14031:68:0;-1:-1:-1;;;;;14118:21:0;;14110:68;;;;-1:-1:-1;;;14110:68:0;;14868:2:1;14110:68:0;;;14850:21:1;14907:2;14887:18;;;14880:30;14946:34;14926:18;;;14919:62;-1:-1:-1;;;14997:18:1;;;14990:32;15039:19;;14110:68:0;14666:398:1;14110:68:0;-1:-1:-1;;;;;14189:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14241:32;;1818:25:1;;;14241:32:0;;1791:18:1;14241:32:0;;;;;;;;13903:378;;;:::o;34256:2806::-;-1:-1:-1;;;;;34388:18:0;;34380:68;;;;-1:-1:-1;;;34380:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34467:16:0;;34459:64;;;;-1:-1:-1;;;34459:64:0;;;;;;;:::i;:::-;34540:6;34550:1;34540:11;34536:93;;34568:28;34584:4;34590:2;34594:1;34568:15;:28::i;:::-;34256:2806;;;:::o;34536:93::-;-1:-1:-1;;;;;34660:31:0;;;34641:16;34660:31;;;:25;:31;;;;;;;;;34720:29;;;;;;;;;34781:35;;;:29;:35;;;;;;34660:31;;;;;34720:29;;;;34781:35;34780:36;:87;;;;-1:-1:-1;;;;;;34834:33:0;;;;;;:29;:33;;;;;;;;34833:34;34780:87;34762:1084;;;34902:16;;-1:-1:-1;;;34902:16:0;;;;34894:59;;;;-1:-1:-1;;;34894:59:0;;16081:2:1;34894:59:0;;;16063:21:1;16120:2;16100:18;;;16093:30;16159:32;16139:18;;;16132:60;16209:18;;34894:59:0;15879:354:1;34894:59:0;-1:-1:-1;;;;;34991:38:0;;;;;;:34;:38;;;;;;;;34990:39;:101;;;;-1:-1:-1;;;;;;35051:40:0;;;;;;:34;:40;;;;;;;;35050:41;34990:101;34968:610;;;35130:11;35126:212;;;35210:15;;35200:6;:25;;35166:152;;;;-1:-1:-1;;;35166:152:0;;16440:2:1;35166:152:0;;;16422:21:1;16479:2;16459:18;;;16452:30;16518:34;16498:18;;;16491:62;-1:-1:-1;;;16569:18:1;;;16562:39;16618:19;;35166:152:0;16238:405:1;35166:152:0;35362:10;35358:205;;;35441:11;;35431:6;:21;;35397:146;;;;-1:-1:-1;;;35397:146:0;;16850:2:1;35397:146:0;;;16832:21:1;16889:2;16869:18;;;16862:30;16928:34;16908:18;;;16901:62;-1:-1:-1;;;16979:18:1;;;16972:37;17026:19;;35397:146:0;16648:403:1;35397:146:0;-1:-1:-1;;;;;35597:33:0;;;;;;:29;:33;;;;;;;;35592:243;;35709:15;;35698:6;35682:13;35692:2;-1:-1:-1;;;;;10585:18:0;10553:7;10585:18;;;:9;:18;;;;;;;10434:177;35682:13;:22;;;;:::i;:::-;35681:43;;35651:168;;;;-1:-1:-1;;;35651:168:0;;17258:2:1;35651:168:0;;;17240:21:1;17297:2;17277:18;;;17270:30;17336:34;17316:18;;;17309:62;-1:-1:-1;;;17387:18:1;;;17380:49;17446:19;;35651:168:0;17056:415:1;35651:168:0;35858:37;35871:11;35884:10;35858:12;:37::i;:::-;35949:23;;35939:4;35906:12;10585:18;;;:9;:18;;;;;;36003:16;;-1:-1:-1;;35921:51:0;;-1:-1:-1;;;36003:16:0;;;;:40;;;;;36036:7;36003:40;:67;;;;-1:-1:-1;36061:9:0;;;;36060:10;36003:67;:97;;;;-1:-1:-1;36087:9:0;;-1:-1:-1;;;36087:9:0;;;;:13;;36003:97;:143;;;;-1:-1:-1;;;;;;36117:29:0;;;;;;:25;:29;;;;;;;;36003:143;35985:280;;;36173:9;:16;;-1:-1:-1;;36173:16:0;36185:4;36173:16;;;36204:17;:15;:17::i;:::-;36236:9;:17;;-1:-1:-1;;36236:17:0;;;35985:280;36293:9;;36277:12;;36293:9;;36292:10;:30;;;;-1:-1:-1;36306:16:0;;-1:-1:-1;;;36306:16:0;;;;36292:30;-1:-1:-1;;;;;36339:24:0;;;;;;:18;:24;;;;;;36277:45;;-1:-1:-1;36339:24:0;;;:50;;-1:-1:-1;;;;;;36367:22:0;;;;;;:18;:22;;;;;;;;36339:50;36335:98;;;-1:-1:-1;36416:5:0;36335:98;36447:7;:24;;;;-1:-1:-1;36458:9:0;;-1:-1:-1;;;36458:9:0;;;;:13;;36447:24;36443:414;;;36512:9;;36488:11;;36525:3;;36503:18;;-1:-1:-1;;;36512:9:0;;;;36503:6;:18;:::i;:::-;36502:26;;;;:::i;:::-;36574:8;;36488:40;;-1:-1:-1;36543:18:0;;36586:3;;36565:17;;36574:8;;;;;36565:6;:17;:::i;:::-;36564:25;;;;:::i;:::-;36543:46;-1:-1:-1;36613:12:0;36622:3;36613:6;:12;:::i;:::-;36604:21;;36640:41;36656:4;36670;36677:3;36640:15;:41::i;:::-;36702:14;;36698:148;;36737:38;36757:4;36764:10;36737:11;:38::i;:::-;36809:8;;36799:31;;;36809:8;;;;;;18206:36:1;;18273:2;18258:18;;18251:34;;;36799:31:0;;18179:18:1;36799:31:0;;;;;;;36698:148;36473:384;;36443:414;36867:33;36883:4;36889:2;36893:6;36867:15;:33::i;:::-;36917:9;;-1:-1:-1;;;;;36917:9:0;:20;36946:4;36953:15;36946:4;-1:-1:-1;;;;;10585:18:0;10553:7;10585:18;;;:9;:18;;;;;;;10434:177;36953:15;36917:52;;-1:-1:-1;;;;;;36917:52:0;;;;;;;-1:-1:-1;;;;;18504:32:1;;;36917:52:0;;;18486:51:1;18553:18;;;18546:34;18459:18;;36917:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36913:68;36995:9;;-1:-1:-1;;;;;36995:9:0;:20;37024:2;37029:13;37024:2;-1:-1:-1;;;;;10585:18:0;10553:7;10585:18;;;:9;:18;;;;;;;10434:177;37029:13;36995:48;;-1:-1:-1;;;;;;36995:48:0;;;;;;;-1:-1:-1;;;;;18504:32:1;;;36995:48:0;;;18486:51:1;18553:18;;;18546:34;18459:18;;36995:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36991:64;34369:2693;;;;34256:2806;;;:::o;3395:226::-;3515:7;3551:12;3543:6;;;;3535:29;;;;-1:-1:-1;;;3535:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3575:9:0;3587:5;3591:1;3587;:5;:::i;:::-;3575:17;3395:226;-1:-1:-1;;;;;3395:226:0:o;12448:606::-;-1:-1:-1;;;;;12588:20:0;;12580:70;;;;-1:-1:-1;;;12580:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12669:23:0;;12661:71;;;;-1:-1:-1;;;12661:71:0;;;;;;;:::i;:::-;12821:108;12857:6;12821:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12821:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;12801:17:0;;;;;;;:9;:17;;;;;;:128;;;;12963:20;;;;;;;:32;;12988:6;12963:24;:32::i;:::-;-1:-1:-1;;;;;12940:20:0;;;;;;;:9;:20;;;;;;;:55;;;;13011:35;;;;;;;;;;13039:6;1818:25:1;;1806:2;1791:18;;1672:177;13444:451:0;-1:-1:-1;;;;;13528:21:0;;13520:67;;;;-1:-1:-1;;;13520:67:0;;18793:2:1;13520:67:0;;;18775:21:1;18832:2;18812:18;;;18805:30;18871:34;18851:18;;;18844:62;-1:-1:-1;;;18922:18:1;;;18915:31;18963:19;;13520:67:0;18591:397:1;13520:67:0;13679:105;13716:6;13679:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13679:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;13658:18:0;;;;;;:9;:18;;;;;:126;13810:12;;:24;;13827:6;13810:16;:24::i;:::-;13795:12;:39;13850:37;;1818:25:1;;;13876:1:0;;-1:-1:-1;;;;;13850:37:0;;;;;1806:2:1;1791:18;13850:37:0;;;;;;;13444:451;;:::o;38248:1538::-;38486:22;;;;:45;;;;:22;;;;;:45;38482:329;;38553:187;;-1:-1:-1;;;19195:33:1;;19253:2;19244:12;38553:187:0;;;;;;;;38631:22;;;;38711:14;;38553:187;;38631:22;;;;;;;;38553:187;;;;-1:-1:-1;;;;;;;;;;;38553:187:0;;;38711:14;;;38553:187;:::i;:::-;;;;;;;;38755:22;;;:44;;-1:-1:-1;;38755:44:0;;;;;;;;;38482:329;38825:22;;;;:45;;;;:22;;;;;:45;38821:329;;38892:187;;-1:-1:-1;;;19683:33:1;;19741:2;19732:12;38892:187:0;;;;;;;;38970:22;;;;39050:14;;38892:187;;38970:22;;;;;;;;38892:187;;;;-1:-1:-1;;;;;;;;;;;38892:187:0;;;39050:14;;;38892:187;:::i;:::-;;;;;;;;39094:22;;;:44;;-1:-1:-1;;39094:44:0;;;;;;;;;38821:329;39164:17;;;;:35;;;;-1:-1:-1;;;39164:17:0;;;;:35;39160:294;;39221:172;;-1:-1:-1;;;19957:28:1;;20010:2;20001:12;39221:172:0;;;;;;;;39294:17;;;;39364:14;;39221:172;;39294:17;-1:-1:-1;;;39294:17:0;;;;;;39221:172;;;;-1:-1:-1;;;;;;;;;;;39221:172:0;;;39364:14;;;39221:172;:::i;:::-;;;;;;;;39408:17;;;:34;;-1:-1:-1;;39408:34:0;-1:-1:-1;;;39408:34:0;;;;;;;39160:294;39468:20;;;;:41;;;;-1:-1:-1;;;39468:20:0;;;;:41;39464:315;;39531:181;;-1:-1:-1;;;20226:31:1;;20282:2;20273:12;39531:181:0;;;;;;;;39607:20;;;;39683:14;;39531:181;;39607:20;-1:-1:-1;;;39607:20:0;;;;;;39531:181;;;;-1:-1:-1;;;;;;;;;;;39531:181:0;;;39683:14;;;39531:181;:::i;:::-;;;;;;;;39727:20;;;:40;;;;;-1:-1:-1;;;39727:40:0;-1:-1:-1;;39727:40:0;;;;;;38248:1538;;;;;:::o;39794:1505::-;40027:21;;;;:43;;;;:21;;:43;40023:322;;40092:184;;-1:-1:-1;;;20498:32:1;;20555:2;20546:12;40092:184:0;;;;;;;;40169:21;;;;40247:14;;40092:184;;40169:21;;;;;40092:184;;;;-1:-1:-1;;;;;;;;;;;40092:184:0;;;40247:14;;;40092:184;:::i;:::-;;;;;;;;40291:21;;;:42;;-1:-1:-1;;40291:42:0;;;;;;;40023:322;40359:21;;;;:43;;;;:21;;;;;:43;40355:322;;40424:184;;-1:-1:-1;;;20771:32:1;;20828:2;20819:12;40424:184:0;;;;;;;;40501:21;;;;40579:14;;40424:184;;40501:21;;;;;;;;40424:184;;;;-1:-1:-1;;;;;;;;;;;40424:184:0;;;40579:14;;;40424:184;:::i;:::-;;;;;;;;40623:21;;;:42;;-1:-1:-1;;40623:42:0;;;;;;;;;40355:322;40691:16;;;;:33;;;;-1:-1:-1;;;40691:16:0;;;;:33;40687:287;;40746:169;;-1:-1:-1;;;21044:27:1;;21096:2;21087:12;40746:169:0;;;;;;;;40818:16;;;;40886:14;;40746:169;;40818:16;-1:-1:-1;;;40818:16:0;;;;;;40746:169;;;;-1:-1:-1;;;;;;;;;;;40746:169:0;;;40886:14;;;40746:169;:::i;:::-;;;;;;;;40930:16;;;:32;;-1:-1:-1;;40930:32:0;-1:-1:-1;;;40930:32:0;;;;;;;40687:287;40988:19;;;;:39;;;;-1:-1:-1;;;40988:19:0;;;;:39;40984:308;;41049:178;;-1:-1:-1;;;21312:30:1;;21367:2;21358:12;41049:178:0;;;;;;;;41124:19;;;;41198:14;;41049:178;;41124:19;-1:-1:-1;;;41124:19:0;;;;;;41049:178;;;;-1:-1:-1;;;;;;;;;;;41049:178:0;;;41198:14;;;41049:178;:::i;:::-;;;;;;;;41242:19;;;:38;;;;;-1:-1:-1;;;41242:38:0;-1:-1:-1;;41242:38:0;;;;;;39794:1505;;;;;:::o;37070:1170::-;37146:13;:17;;-1:-1:-1;;37225:15:0;;;37253:231;;;;37301:23;;37285:13;:39;;37301:23;;;;-1:-1:-1;;37339:39:0;;;;;;;37301:23;37355;;;;;;37339:39;;;;;;;;-1:-1:-1;;37437:35:0;-1:-1:-1;;;37404:18:0;;;;37393:29;;;;-1:-1:-1;;37437:35:0;;-1:-1:-1;;;37451:21:0;;;;37437:35;;;;;;;;37253:231;37498:10;37494:234;;;37541:24;;37525:13;:40;;37541:24;;;;;;;;-1:-1:-1;;37580:40:0;;;;;;;37596:24;;;;;;37580:40;;;;;-1:-1:-1;;37680:36:0;-1:-1:-1;;;37646:19:0;;;;37635:30;;-1:-1:-1;;37680:36:0;;-1:-1:-1;;;37694:22:0;;;;;;;37680:36;;;;;;;37494:234;37743:10;37742:11;:27;;;;;37758:11;37757:12;37742:27;37738:251;;;37802:24;;37786:13;:40;;37802:24;;;;;;;;-1:-1:-1;;37841:40:0;;;;;;;37857:24;;;;;;37841:40;;;;;-1:-1:-1;;37941:36:0;-1:-1:-1;;;37907:19:0;;;;37896:30;;-1:-1:-1;;37941:36:0;;-1:-1:-1;;;37955:22:0;;;;;;;37941:36;;;;;;;37738:251;38054:11;;;;;;;;;38043:8;;;;;;38011:29;;38054:11;38027:13;;;;;38011;:29;:::i;:::-;:40;;;;:::i;:::-;:54;;;;:::i;:::-;37999:9;:66;;-1:-1:-1;;37999:66:0;;-1:-1:-1;;;37999:66:0;;;;;;;;;;;;;38081:151;;;38107:13;;;;;;;;;;21620:36:1;;37999:66:0;38135:13;;;;21687:2:1;21672:18;;21665:45;38163:8:0;;;;;21726:18:1;;;21719:45;;;;38186:11:0;;;;;21795:2:1;21780:18;;21773:45;38212:9:0;;;;;;21849:3:1;21834:19;;21827:46;38081:151:0;;21607:3:1;21592:19;38081:151:0;21381:498:1;41307:1520:0;41397:4;41353:23;10585:18;;;:9;:18;;;;;;41551:9;;10585:18;;41442:21;;41576:1;;41551:9;-1:-1:-1;;;41551:9:0;;;;;41503:31;;41521:13;10585:18;41503:31;:::i;:::-;41502:58;;;;:::i;:::-;:75;;;;:::i;:::-;41649:9;;41476:101;;-1:-1:-1;41588:24:0;;41649:9;-1:-1:-1;;;41649:9:0;;;;;41616:29;;41634:11;;;;;41616:15;:29;:::i;:::-;41615:43;;;;:::i;:::-;41588:70;-1:-1:-1;41669:20:0;41724:34;41588:70;41724:15;:34;:::i;:::-;41692:67;;:15;:67;:::i;:::-;41669:90;;41772:31;41790:12;41772:17;:31::i;:::-;41816:27;41846:41;41870:17;41846:21;:41;:::i;:::-;41979:11;;41816:71;;-1:-1:-1;41898:19:0;;41979:11;;;;;;;41968:8;;;;;;41947:17;;41968:8;;41947:13;:17;:::i;:::-;41946:30;;;;:::i;:::-;:44;;;;:::i;:::-;41920:9;;:71;;;-1:-1:-1;;;41920:9:0;;;;:71;:::i;:::-;42054:13;;41898:93;;;;;-1:-1:-1;42002:26:0;;42111:1;;41898:93;;42032:35;;42054:13;42032:19;:35;:::i;:::-;42031:64;;;;:::i;:::-;:81;;;;:::i;:::-;42002:110;-1:-1:-1;42123:26:0;42152:42;42002:110;42152:19;:42;:::i;:::-;42215:17;;42207:55;;42123:71;;-1:-1:-1;;;;;;42215:17:0;;42207:55;;;;;42123:71;;42215:17;42207:55;42215:17;42207:55;42123:71;42215:17;42207:55;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42279:19:0;;42275:253;;42315:50;42329:15;42346:18;42315:13;:50::i;:::-;42385:131;;;22456:25:1;;;22512:2;22497:18;;22490:34;;;22540:18;;;22533:34;;;42385:131:0;;22444:2:1;22429:18;42385:131:0;;;;;;;42275:253;42608:9;;42555:105;;-1:-1:-1;;;42555:105:0;;-1:-1:-1;;;;;42608:9:0;;;42555:105;;;18486:51:1;18553:18;;;18546:34;;;42540:12:0;;42570:4;;42555:30;;18459:18:1;;42555:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42540:120;;42675:7;42671:149;;;42699:9;;:58;;-1:-1:-1;;;42699:58:0;;;;;1818:25:1;;;-1:-1:-1;;;;;42699:9:0;;;;:40;;1791:18:1;;42699:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42777:31;42791:16;42777:31;;;;1818:25:1;;1806:2;1791:18;;1672:177;42777:31:0;;;;;;;;42671:149;41342:1485;;;;;;;;;;41307:1520::o;3251:136::-;3309:7;3336:43;3340:1;3343;3336:43;;;;;;;;;;;;;;;;;:3;:43::i;42835:500::-;42926:16;;;42940:1;42926:16;;;;;;;;42902:21;;42926:16;;;;;;;;;;-1:-1:-1;42926:16:0;42902:40;;42971:4;42953;42958:1;42953:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42953:23:0;;;:7;;;;;;;;;;:23;;;;42997:15;;:22;;;-1:-1:-1;;;42997:22:0;;;;:15;;;;;:20;;:22;;;;;42953:7;;42997:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42987:4;42992:1;42987:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42987:32:0;;;:7;;;;;;;;;:32;43062:15;;43030:62;;43047:4;;43062:15;43080:11;43030:8;:62::i;:::-;43103:15;;:224;;-1:-1:-1;;;43103:224:0;;-1:-1:-1;;;;;43103:15:0;;;;:66;;:224;;43184:11;;43103:15;;43254:4;;43281;;43301:15;;43103:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42891:444;42835:500;:::o;43343:423::-;43457:15;;43425:62;;43442:4;;-1:-1:-1;;;;;43457:15:0;43475:11;43425:8;:62::i;:::-;43498:15;;43702;;43498:260;;-1:-1:-1;;;43498:260:0;;43570:4;43498:260;;;24703:34:1;24753:18;;;24746:34;;;43498:15:0;24796:18:1;;;24789:34;;;24839:18;;;24832:34;-1:-1:-1;;;;;43702:15:0;;;24882:19:1;;;24875:44;43732:15:0;24935:19:1;;;24928:35;43498:15:0;;;:31;;43537:9;;24637:19:1;;43498:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:597:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;944:315;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1264:180::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;-1:-1:-1;1415:23:1;;1264:180;-1:-1:-1;1264:180:1:o;1854:456::-;1931:6;1939;1947;2000:2;1988:9;1979:7;1975:23;1971:32;1968:52;;;2016:1;2013;2006:12;1968:52;2055:9;2042:23;2074:31;2099:5;2074:31;:::i;:::-;2124:5;-1:-1:-1;2181:2:1;2166:18;;2153:32;2194:33;2153:32;2194:33;:::i;:::-;1854:456;;2246:7;;-1:-1:-1;;;2300:2:1;2285:18;;;;2272:32;;1854:456::o;2504:247::-;2563:6;2616:2;2604:9;2595:7;2591:23;2587:32;2584:52;;;2632:1;2629;2622:12;2584:52;2671:9;2658:23;2690:31;2715:5;2690:31;:::i;3193:156::-;3259:20;;3319:4;3308:16;;3298:27;;3288:55;;3339:1;3336;3329:12;3288:55;3193:156;;;:::o;3354:393::-;3432:6;3440;3448;3456;3509:3;3497:9;3488:7;3484:23;3480:33;3477:53;;;3526:1;3523;3516:12;3477:53;3549:27;3566:9;3549:27;:::i;:::-;3539:37;;3595:36;3627:2;3616:9;3612:18;3595:36;:::i;:::-;3585:46;;3650:36;3682:2;3671:9;3667:18;3650:36;:::i;:::-;3640:46;;3705:36;3737:2;3726:9;3722:18;3705:36;:::i;:::-;3695:46;;3354:393;;;;;;;:::o;3752:118::-;3838:5;3831:13;3824:21;3817:5;3814:32;3804:60;;3860:1;3857;3850:12;3875:382;3940:6;3948;4001:2;3989:9;3980:7;3976:23;3972:32;3969:52;;;4017:1;4014;4007:12;3969:52;4056:9;4043:23;4075:31;4100:5;4075:31;:::i;:::-;4125:5;-1:-1:-1;4182:2:1;4167:18;;4154:32;4195:30;4154:32;4195:30;:::i;:::-;4244:7;4234:17;;;3875:382;;;;;:::o;4686:388::-;4754:6;4762;4815:2;4803:9;4794:7;4790:23;4786:32;4783:52;;;4831:1;4828;4821:12;4783:52;4870:9;4857:23;4889:31;4914:5;4889:31;:::i;:::-;4939:5;-1:-1:-1;4996:2:1;4981:18;;4968:32;5009:33;4968:32;5009:33;:::i;5079:380::-;5158:1;5154:12;;;;5201;;;5222:61;;5276:4;5268:6;5264:17;5254:27;;5222:61;5329:2;5321:6;5318:14;5298:18;5295:38;5292:161;;5375:10;5370:3;5366:20;5363:1;5356:31;5410:4;5407:1;5400:15;5438:4;5435:1;5428:15;5292:161;;5079:380;;;:::o;5464:356::-;5666:2;5648:21;;;5685:18;;;5678:30;5744:34;5739:2;5724:18;;5717:62;5811:2;5796:18;;5464:356::o;8390:245::-;8457:6;8510:2;8498:9;8489:7;8485:23;8481:32;8478:52;;;8526:1;8523;8516:12;8478:52;8558:9;8552:16;8577:28;8599:5;8577:28;:::i;8640:127::-;8701:10;8696:3;8692:20;8689:1;8682:31;8732:4;8729:1;8722:15;8756:4;8753:1;8746:15;8772:204;8810:3;8846:4;8843:1;8839:12;8878:4;8875:1;8871:12;8913:3;8907:4;8903:14;8898:3;8895:23;8892:49;;;8921:18;;:::i;:::-;8957:13;;8772:204;-1:-1:-1;;;8772:204:1:o;9603:406::-;9805:2;9787:21;;;9844:2;9824:18;;;9817:30;9883:34;9878:2;9863:18;;9856:62;-1:-1:-1;;;9949:2:1;9934:18;;9927:40;9999:3;9984:19;;9603:406::o;10014:184::-;10084:6;10137:2;10125:9;10116:7;10112:23;10108:32;10105:52;;;10153:1;10150;10143:12;10105:52;-1:-1:-1;10176:16:1;;10014:184;-1:-1:-1;10014:184:1:o;13772:128::-;13812:3;13843:1;13839:6;13836:1;13833:13;13830:39;;;13849:18;;:::i;:::-;-1:-1:-1;13885:9:1;;13772:128::o;15069:401::-;15271:2;15253:21;;;15310:2;15290:18;;;15283:30;15349:34;15344:2;15329:18;;15322:62;-1:-1:-1;;;15415:2:1;15400:18;;15393:35;15460:3;15445:19;;15069:401::o;15475:399::-;15677:2;15659:21;;;15716:2;15696:18;;;15689:30;15755:34;15750:2;15735:18;;15728:62;-1:-1:-1;;;15821:2:1;15806:18;;15799:33;15864:3;15849:19;;15475:399::o;17476:168::-;17516:7;17582:1;17578;17574:6;17570:14;17567:1;17564:21;17559:1;17552:9;17545:17;17541:45;17538:71;;;17589:18;;:::i;:::-;-1:-1:-1;17629:9:1;;17476:168::o;17649:127::-;17710:10;17705:3;17701:20;17698:1;17691:31;17741:4;17738:1;17731:15;17765:4;17762:1;17755:15;17781:120;17821:1;17847;17837:35;;17852:18;;:::i;:::-;-1:-1:-1;17886:9:1;;17781:120::o;17906:125::-;17946:4;17974:1;17971;17968:8;17965:34;;;17979:18;;:::i;:::-;-1:-1:-1;18016:9:1;;17906:125::o;19267:209::-;-1:-1:-1;;19431:38:1;;;;19413:57;;19401:2;19386:18;;19267:209::o;21884:165::-;21922:1;21956:4;21953:1;21949:12;21980:3;21970:37;;21987:18;;:::i;:::-;22039:3;22032:4;22029:1;22025:12;22021:22;22016:27;;;21884:165;;;;:::o;22054:195::-;22092:4;22129;22126:1;22122:12;22161:4;22158:1;22154:12;22186:3;22181;22178:12;22175:38;;;22193:18;;:::i;:::-;22230:13;;;22054:195;-1:-1:-1;;;22054:195:1:o;22989:127::-;23050:10;23045:3;23041:20;23038:1;23031:31;23081:4;23078:1;23071:15;23105:4;23102:1;23095:15;23121:251;23191:6;23244:2;23232:9;23223:7;23219:23;23215:32;23212:52;;;23260:1;23257;23250:12;23212:52;23292:9;23286:16;23311:31;23336:5;23311:31;:::i;23377:980::-;23639:4;23687:3;23676:9;23672:19;23718:6;23707:9;23700:25;23744:2;23782:6;23777:2;23766:9;23762:18;23755:34;23825:3;23820:2;23809:9;23805:18;23798:31;23849:6;23884;23878:13;23915:6;23907;23900:22;23953:3;23942:9;23938:19;23931:26;;23992:2;23984:6;23980:15;23966:29;;24013:1;24023:195;24037:6;24034:1;24031:13;24023:195;;;24102:13;;-1:-1:-1;;;;;24098:39:1;24086:52;;24193:15;;;;24158:12;;;;24134:1;24052:9;24023:195;;;-1:-1:-1;;;;;;;24274:32:1;;;;24269:2;24254:18;;24247:60;-1:-1:-1;;;24338:3:1;24323:19;24316:35;24235:3;23377:980;-1:-1:-1;;;23377:980:1:o;24974:306::-;25062:6;25070;25078;25131:2;25119:9;25110:7;25106:23;25102:32;25099:52;;;25147:1;25144;25137:12;25099:52;25176:9;25170:16;25160:26;;25226:2;25215:9;25211:18;25205:25;25195:35;;25270:2;25259:9;25255:18;25249:25;25239:35;;24974:306;;;;;:::o

Swarm Source

ipfs://ae9b12ccf68ec884c7d89788a8ff44eb8e0a44af48d0904d25063005a8f2ad92
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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