ETH Price: $2,328.72 (+1.74%)

Token

flexUSD (flexUSD)
 

Overview

Max Total Supply

0 flexUSD

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
FlexUSD

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-11-19
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

contract fUSDStorage {
    /** WARNING: NEVER RE-ORDER VARIABLES! 
     *  Always double-check that new variables are added APPEND-ONLY.
     *  Re-ordering variables can permanently BREAK the deployed proxy contract.
     */

    bool public initialized;

    mapping(address => uint256) internal _balances;

    mapping(address => mapping(address => uint256)) internal _allowances;

    mapping(address => bool) public blacklist;

    uint256 internal _totalSupply;

    string public constant name = "flexUSD";
    string public constant symbol = "flexUSD";
    uint256 public multiplier;
    uint8 public constant decimals = 18;
    address public admin;
    uint256 internal constant deci = 1e18;

    bool internal getpause;
}



pragma solidity ^0.6.0;

contract Proxiable {
    // Code position in storage is keccak256("PROXIABLE") = "0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7"

    function updateCodeAddress(address newAddress) internal {
        require(
            bytes32(
                0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7
            ) == Proxiable(newAddress).proxiableUUID(),
            "Not compatible"
        );
        assembly {
            // solium-disable-line
            sstore(
                0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7,
                newAddress
            )
        }
    }

    function proxiableUUID() public pure returns (bytes32) {
        return
            0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7;
    }
}

// File: contracts/fUSD.sol

/**
 *Submitted for verification at Etherscan.io on 2020-10-09
 */



pragma solidity ^0.6.0;



interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor() internal {}

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

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    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;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        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;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract LibraryLock is fUSDStorage {
    // Ensures no one can manipulate the Logic Contract once it is deployed.
    // PARITY WALLET HACK PREVENTION

    modifier delegatedOnly() {
        require(
            initialized == true,
            "The library is locked. No direct 'call' is allowed."
        );
        _;
    }
    function initialize() internal {
        initialized = true;
    }
}

contract FlexUSD is fUSDStorage, Context, IERC20, Proxiable, LibraryLock {
    using SafeMath for uint256;

    event fTokenBlacklist(address indexed account, bool blocked);
    event ChangeMultiplier(uint256 multiplier);
    event AdminChanged(address admin);
    event CodeUpdated(address indexed newCode);

    function initialize(uint256 _totalsupply) public {
        require(!initialized, "The library has already been initialized.");
        LibraryLock.initialize();
        admin = msg.sender;
        multiplier = 1 * deci;
        _totalSupply = _totalsupply;
        _balances[msg.sender] = _totalSupply;
    }

    /// @dev Update the logic contract code
    function updateCode(address newCode) external onlyAdmin delegatedOnly {
        updateCodeAddress(newCode);
        emit CodeUpdated(newCode);
    }

    function setMultiplier(uint256 _multiplier)
        external
        onlyAdmin()
        ispaused()
    {
        require(
            _multiplier > multiplier,
            "the multiplier should be greater than previous multiplier"
        );
        multiplier = _multiplier;
        emit ChangeMultiplier(multiplier);
    }

    function totalSupply() public override view returns (uint256) {
        return _totalSupply.mul(multiplier).div(deci);
    }

    function setTotalSupply(uint256 inputTotalsupply) external onlyAdmin() {
        require(
            inputTotalsupply > totalSupply(),
            "the input total supply is not greater than present total supply"
        );
        multiplier = (inputTotalsupply.mul(deci)).div(_totalSupply);
        emit ChangeMultiplier(multiplier);
    }

    function balanceOf(address account) public override view returns (uint256) {
        uint256 externalAmt;
        externalAmt = _balances[account].mul(multiplier).div(deci);
        return externalAmt;
    }

    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        Notblacklist(msg.sender)
        Notblacklist(recipient)
        ispaused()
        returns (bool)
    {
        uint256 internalAmt;
        uint256 externalAmt = amount;
        internalAmt = (amount.mul(deci)).div(multiplier);

        _transfer(msg.sender, recipient, externalAmt);
        return true;
    }

    function allowance(address owner, address spender)
        public
        virtual
        override
        view
        returns (uint256)
    {
        uint256 internalAmt;
        internalAmt = (_allowances[owner][spender]).mul(multiplier).div(deci);
        return internalAmt;
    }

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        Notblacklist(spender)
        Notblacklist(msg.sender)
        ispaused()
        returns (bool)
    {
        uint256 internalAmt;
        uint256 externalAmt = amount;
        internalAmt = externalAmt.mul(deci).div(multiplier);
        _approve(msg.sender, spender, externalAmt);
        return true;
    }
    
        /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public 
        Notblacklist(spender)
        Notblacklist(msg.sender)
        ispaused()  
        returns (bool) {
         uint256 externalAmt = allowance(_msgSender(),spender) ;
        _approve(_msgSender(), spender, externalAmt.add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public 
        Notblacklist(spender)
        Notblacklist(msg.sender)
        ispaused() 
        returns (bool) {
        uint256 externalAmt = allowance(_msgSender(),spender) ;
        _approve(_msgSender(), spender, externalAmt.sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    )
        public
        virtual
        override
        Notblacklist(sender)
        Notblacklist(msg.sender)
        Notblacklist(recipient)
        ispaused()
        returns (bool)
    {
        uint256 externalAmt = allowance(sender,_msgSender());
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
           externalAmt.sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

    function mint(address mintTo, uint256 amount)
        public
        virtual
        onlyAdmin()
        ispaused()
        returns (bool)
    {
        uint256 externalAmt = amount;
        uint256 internalAmt = externalAmt.mul(deci).div(multiplier);
        _mint(mintTo, internalAmt, externalAmt);
        return true;
    }

    function _mint(
        address account,
        uint256 internalAmt,
        uint256 externalAmt
    ) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(internalAmt);
        _balances[account] = _balances[account].add(internalAmt);
        emit Transfer(address(0), account, externalAmt);
    }

    function burn(address burnFrom, uint256 amount)
        public
        virtual
        onlyAdmin()
        ispaused()
        returns (bool)
    {
        uint256 internalAmt;
        uint256 externalAmt = amount;
        internalAmt = externalAmt.mul(deci).div(multiplier);

        _burn(burnFrom, internalAmt, externalAmt);
        return true;
    }

    function _burn(
        address account,
        uint256 internalAmt,
        uint256 externalAmt
    ) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(
            internalAmt,
            "ERC20: burn internaAmt exceeds balance"
        );
        _totalSupply = _totalSupply.sub(internalAmt);
        emit Transfer(account, address(0), externalAmt);
    }

    function _approve(
        address owner,
        address spender,
        uint256 externalAmt
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        uint256 internalAmt = externalAmt.mul(deci).div(multiplier);
        _allowances[owner][spender] = internalAmt;
        emit Approval(owner, spender,externalAmt);
    }

    function TransferOwnerShip(address account) public onlyAdmin() {
        require(account != address(0), "account cannot be zero address");
        require(msg.sender == admin, "you are not the admin");
        admin = account;
        emit AdminChanged(admin);
    }

    function pause() external onlyAdmin() {
        getpause = true;
    }

    function unpause() external onlyAdmin() {
        getpause = false;
    }

    // pause unpause

    modifier ispaused() {
        require(getpause == false, "the contract is paused");
        _;
    }

    modifier onlyAdmin() {
        require(msg.sender == admin, "you are not the admin");
        _;
    }

    function AddToBlacklist(address account) external onlyAdmin() {
        blacklist[account] = true;
        emit fTokenBlacklist(account, true);
    }

    function RemoveFromBlacklist(address account) external onlyAdmin() {
        blacklist[account] = false;
        emit fTokenBlacklist(account, false);
    }

    modifier Notblacklist(address account) {
        require(!blacklist[account], "account is blacklisted");
        _;
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"AdminChanged","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":false,"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"ChangeMultiplier","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newCode","type":"address"}],"name":"CodeUpdated","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"blocked","type":"bool"}],"name":"fTokenBlacklist","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"RemoveFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"TransferOwnerShip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"burnFrom","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalsupply","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"mintTo","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"multiplier","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_multiplier","type":"uint256"}],"name":"setMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"inputTotalsupply","type":"uint256"}],"name":"setTotalSupply","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":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newCode","type":"address"}],"name":"updateCode","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506138a7806100206000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063641579a6116100f9578063a9059cbb11610097578063f7ea7a3d11610071578063f7ea7a3d1461084d578063f851a4401461087b578063f9f92be4146108af578063fe4b84df14610909576101a9565b8063a9059cbb1461072d578063b1eb346814610791578063dd62ed3e146107d5576101a9565b80638456cb59116100d35780638456cb59146105d857806395d89b41146105e25780639dc29fac14610665578063a457c2d7146106c9576101a9565b8063641579a61461050e5780636b713f4f1461053c57806370a0823114610580576101a9565b8063313ce567116101665780633f4ba83a116101405780633f4ba83a1461043e57806340c10f191461044857806346951954146104ac57806352d1902d146104f0576101a9565b8063313ce5671461037557806339509351146103965780633afada39146103fa576101a9565b806306fdde03146101ae578063095ea7b314610231578063158ef93e1461029557806318160ddd146102b55780631b3ed722146102d357806323b872dd146102f1575b600080fd5b6101b6610937565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101f65780820151818401526020810190506101db565b50505050905090810190601f1680156102235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61027d6004803603604081101561024757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610970565b60405180821515815260200191505060405180910390f35b61029d610bcd565b60405180821515815260200191505060405180910390f35b6102bd610bde565b6040518082815260200191505060405180910390f35b6102db610c16565b6040518082815260200191505060405180910390f35b61035d6004803603606081101561030757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c1c565b60405180821515815260200191505060405180910390f35b61037d610f57565b604051808260ff16815260200191505060405180910390f35b6103e2600480360360408110156103ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f5c565b60405180821515815260200191505060405180910390f35b61043c6004803603602081101561041057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111af565b005b61044661131e565b005b6104946004803603604081101561045e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113fe565b60405180821515815260200191505060405180910390f35b6104ee600480360360208110156104c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061159b565b005b6104f8611717565b6040518082815260200191505060405180910390f35b61053a6004803603602081101561052457600080fd5b8101908080359060200190929190505050611742565b005b61057e6004803603602081101561055257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061192b565b005b6105c26004803603602081101561059657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a9a565b6040518082815260200191505060405180910390f35b6105e0611b16565b005b6105ea611bf6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561062a57808201518184015260208101905061060f565b50505050905090810190601f1680156106575780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106b16004803603604081101561067b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c2f565b60405180821515815260200191505060405180910390f35b610715600480360360408110156106df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611dcb565b60405180821515815260200191505060405180910390f35b6107796004803603604081101561074357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612038565b60405180821515815260200191505060405180910390f35b6107d3600480360360208110156107a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612295565b005b610837600480360360408110156107eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612571565b6040518082815260200191505060405180910390f35b6108796004803603602081101561086357600080fd5b810190808035906020019092919050505061262b565b005b6108836127be565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108f1600480360360208110156108c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127e4565b60405180821515815260200191505060405180910390f35b6109356004803603602081101561091f57600080fd5b8101908080359060200190929190505050612804565b005b6040518060400160405280600781526020017f666c65785553440000000000000000000000000000000000000000000000000081525081565b600082600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b33600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610af4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff16151514610b7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b600080859050610bb2600554610ba4670de0b6b3a76400008461291390919063ffffffff16565b61299990919063ffffffff16565b9150610bbf3388836129e3565b600194505050505092915050565b60008054906101000a900460ff1681565b6000610c11670de0b6b3a7640000610c0360055460045461291390919063ffffffff16565b61299990919063ffffffff16565b905090565b60055481565b600083600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610cdf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b33600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b84600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff16151514610eea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b6000610efd88610ef8612c0e565b612571565b9050610f0a888888612c16565b610f4888610f16612c0e565b610f43896040518060600160405280602881526020016137106028913986612f049092919063ffffffff16565b6129e3565b60019450505050509392505050565b601281565b600082600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561101f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b33600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff16151514611169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b600061117c611176612c0e565b87612571565b90506111a2611189612c0e565b8761119d8885612fc490919063ffffffff16565b6129e3565b6001935050505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611272576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f20fe26e62bba36b5afff8a39e3e59ba2b90f6f0b963037740d55af2d93dd3435600060405180821515815260200191505060405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b6000600660146101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff1615151461154c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b60008290506000611582600554611574670de0b6b3a76400008561291390919063ffffffff16565b61299990919063ffffffff16565b905061158f85828461304c565b60019250505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461165e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b6001151560008054906101000a900460ff161515146116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806137b76033913960400191505060405180910390fd5b6116d18161320a565b8073ffffffffffffffffffffffffffffffffffffffff167f34459cf4c63f38e9b4af4ff8f74035bad6157484e669ffde70188afdf9917c6860405160405180910390a250565b60007fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff1615151461188e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b60055481116118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806137386039913960400191505060405180910390fd5b806005819055507fd1ac89bfc464ce49c894c4e2379f1ca2b062aff1a640e929764ac1157fa13f0f6005546040518082815260200191505060405180910390a150565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f20fe26e62bba36b5afff8a39e3e59ba2b90f6f0b963037740d55af2d93dd3435600160405180821515815260200191505060405180910390a250565b600080611b0b670de0b6b3a7640000611afd600554600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461291390919063ffffffff16565b61299990919063ffffffff16565b905080915050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bd9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b6001600660146101000a81548160ff021916908315150217905550565b6040518060400160405280600781526020017f666c65785553440000000000000000000000000000000000000000000000000081525081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff16151514611d7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b600080839050611db2600554611da4670de0b6b3a76400008461291390919063ffffffff16565b61299990919063ffffffff16565b9150611dbf858383613348565b60019250505092915050565b600082600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b33600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff16151514611fd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b6000611feb611fe5612c0e565b87612571565b905061202b611ff8612c0e565b876120268860405180606001604052806025815260200161384d6025913986612f049092919063ffffffff16565b6129e3565b6001935050505092915050565b600033600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b83600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156121bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff16151514612245576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b60008085905061227a60055461226c670de0b6b3a76400008961291390919063ffffffff16565b61299990919063ffffffff16565b9150612287338883612c16565b600194505050505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612358576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6163636f756e742063616e6e6f74206265207a65726f2061646472657373000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7ce7ec0b50378fb6c0186ffb5f48325f6593fcb4ca4386f21861af3129188f5c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60008061261f670de0b6b3a7640000612611600554600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461291390919063ffffffff16565b61299990919063ffffffff16565b90508091505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b6126f6610bde565b811161274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f81526020018061380e603f913960400191505060405180910390fd5b61277c60045461276e670de0b6b3a76400008461291390919063ffffffff16565b61299990919063ffffffff16565b6005819055507fd1ac89bfc464ce49c894c4e2379f1ca2b062aff1a640e929764ac1157fa13f0f6005546040518082815260200191505060405180910390a150565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915054906101000a900460ff1681565b60008054906101000a900460ff1615612868576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136c66029913960400191505060405180910390fd5b612870613503565b33600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a764000060010260058190555080600481905550600454600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6000808314156129265760009050612993565b600082840290508284828161293757fe5b041461298e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136ef6021913960400191505060405180910390fd5b809150505b92915050565b60006129db83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061351f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806137ea6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061367e6022913960400191505060405180910390fd5b6000612b20600554612b12670de0b6b3a76400008561291390919063ffffffff16565b61299990919063ffffffff16565b905080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a350505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806137926025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806136306023913960400191505060405180910390fd5b6000612d53600554612d45670de0b6b3a76400008561291390919063ffffffff16565b61299990919063ffffffff16565b9050612dc1816040518060600160405280602b8152602001613653602b9139600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f049092919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e5681600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc490919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b6000838311158290612fb1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f76578082015181840152602081019050612f5b565b50505050905090810190601f168015612fa35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015613042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b61310482600454612fc490919063ffffffff16565b60048190555061315c82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc490919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b8073ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d602081101561327a57600080fd5b81019080805190602001909291905050507fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b14613322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420636f6d70617469626c6500000000000000000000000000000000000081525060200191505060405180910390fd5b807fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf75550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806137716021913960400191505060405180910390fd5b61343a826040518060600160405280602681526020016136a060269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f049092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613492826004546135e590919063ffffffff16565b600481905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60016000806101000a81548160ff021916908315150217905550565b600080831182906135cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613590578082015181840152602081019050613575565b50505050905090810190601f1680156135bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816135d757fe5b049050809150509392505050565b600061362783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f04565b90509291505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a207472616e7366657220696e7465726e616c416d7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a206275726e20696e7465726e61416d7420657863656564732062616c616e6365546865206c6962726172792068617320616c7265616479206265656e20696e697469616c697a65642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365746865206d756c7469706c6965722073686f756c642062652067726561746572207468616e2070726576696f7573206d756c7469706c69657245524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373546865206c696272617279206973206c6f636b65642e204e6f20646972656374202763616c6c2720697320616c6c6f7765642e45524332303a20617070726f76652066726f6d20746865207a65726f206164647265737374686520696e70757420746f74616c20737570706c79206973206e6f742067726561746572207468616e2070726573656e7420746f74616c20737570706c7945524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209f3b28ae85541d0b34c70859995d7df28d3e9b857b9d8118438a54e3d7a5bea064736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c8063641579a6116100f9578063a9059cbb11610097578063f7ea7a3d11610071578063f7ea7a3d1461084d578063f851a4401461087b578063f9f92be4146108af578063fe4b84df14610909576101a9565b8063a9059cbb1461072d578063b1eb346814610791578063dd62ed3e146107d5576101a9565b80638456cb59116100d35780638456cb59146105d857806395d89b41146105e25780639dc29fac14610665578063a457c2d7146106c9576101a9565b8063641579a61461050e5780636b713f4f1461053c57806370a0823114610580576101a9565b8063313ce567116101665780633f4ba83a116101405780633f4ba83a1461043e57806340c10f191461044857806346951954146104ac57806352d1902d146104f0576101a9565b8063313ce5671461037557806339509351146103965780633afada39146103fa576101a9565b806306fdde03146101ae578063095ea7b314610231578063158ef93e1461029557806318160ddd146102b55780631b3ed722146102d357806323b872dd146102f1575b600080fd5b6101b6610937565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101f65780820151818401526020810190506101db565b50505050905090810190601f1680156102235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61027d6004803603604081101561024757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610970565b60405180821515815260200191505060405180910390f35b61029d610bcd565b60405180821515815260200191505060405180910390f35b6102bd610bde565b6040518082815260200191505060405180910390f35b6102db610c16565b6040518082815260200191505060405180910390f35b61035d6004803603606081101561030757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c1c565b60405180821515815260200191505060405180910390f35b61037d610f57565b604051808260ff16815260200191505060405180910390f35b6103e2600480360360408110156103ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f5c565b60405180821515815260200191505060405180910390f35b61043c6004803603602081101561041057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111af565b005b61044661131e565b005b6104946004803603604081101561045e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113fe565b60405180821515815260200191505060405180910390f35b6104ee600480360360208110156104c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061159b565b005b6104f8611717565b6040518082815260200191505060405180910390f35b61053a6004803603602081101561052457600080fd5b8101908080359060200190929190505050611742565b005b61057e6004803603602081101561055257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061192b565b005b6105c26004803603602081101561059657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a9a565b6040518082815260200191505060405180910390f35b6105e0611b16565b005b6105ea611bf6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561062a57808201518184015260208101905061060f565b50505050905090810190601f1680156106575780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106b16004803603604081101561067b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c2f565b60405180821515815260200191505060405180910390f35b610715600480360360408110156106df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611dcb565b60405180821515815260200191505060405180910390f35b6107796004803603604081101561074357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612038565b60405180821515815260200191505060405180910390f35b6107d3600480360360208110156107a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612295565b005b610837600480360360408110156107eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612571565b6040518082815260200191505060405180910390f35b6108796004803603602081101561086357600080fd5b810190808035906020019092919050505061262b565b005b6108836127be565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108f1600480360360208110156108c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127e4565b60405180821515815260200191505060405180910390f35b6109356004803603602081101561091f57600080fd5b8101908080359060200190929190505050612804565b005b6040518060400160405280600781526020017f666c65785553440000000000000000000000000000000000000000000000000081525081565b600082600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b33600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610af4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff16151514610b7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b600080859050610bb2600554610ba4670de0b6b3a76400008461291390919063ffffffff16565b61299990919063ffffffff16565b9150610bbf3388836129e3565b600194505050505092915050565b60008054906101000a900460ff1681565b6000610c11670de0b6b3a7640000610c0360055460045461291390919063ffffffff16565b61299990919063ffffffff16565b905090565b60055481565b600083600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610cdf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b33600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b84600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff16151514610eea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b6000610efd88610ef8612c0e565b612571565b9050610f0a888888612c16565b610f4888610f16612c0e565b610f43896040518060600160405280602881526020016137106028913986612f049092919063ffffffff16565b6129e3565b60019450505050509392505050565b601281565b600082600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561101f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b33600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff16151514611169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b600061117c611176612c0e565b87612571565b90506111a2611189612c0e565b8761119d8885612fc490919063ffffffff16565b6129e3565b6001935050505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611272576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f20fe26e62bba36b5afff8a39e3e59ba2b90f6f0b963037740d55af2d93dd3435600060405180821515815260200191505060405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b6000600660146101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff1615151461154c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b60008290506000611582600554611574670de0b6b3a76400008561291390919063ffffffff16565b61299990919063ffffffff16565b905061158f85828461304c565b60019250505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461165e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b6001151560008054906101000a900460ff161515146116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806137b76033913960400191505060405180910390fd5b6116d18161320a565b8073ffffffffffffffffffffffffffffffffffffffff167f34459cf4c63f38e9b4af4ff8f74035bad6157484e669ffde70188afdf9917c6860405160405180910390a250565b60007fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff1615151461188e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b60055481116118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806137386039913960400191505060405180910390fd5b806005819055507fd1ac89bfc464ce49c894c4e2379f1ca2b062aff1a640e929764ac1157fa13f0f6005546040518082815260200191505060405180910390a150565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f20fe26e62bba36b5afff8a39e3e59ba2b90f6f0b963037740d55af2d93dd3435600160405180821515815260200191505060405180910390a250565b600080611b0b670de0b6b3a7640000611afd600554600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461291390919063ffffffff16565b61299990919063ffffffff16565b905080915050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bd9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b6001600660146101000a81548160ff021916908315150217905550565b6040518060400160405280600781526020017f666c65785553440000000000000000000000000000000000000000000000000081525081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff16151514611d7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b600080839050611db2600554611da4670de0b6b3a76400008461291390919063ffffffff16565b61299990919063ffffffff16565b9150611dbf858383613348565b60019250505092915050565b600082600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b33600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff16151514611fd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b6000611feb611fe5612c0e565b87612571565b905061202b611ff8612c0e565b876120268860405180606001604052806025815260200161384d6025913986612f049092919063ffffffff16565b6129e3565b6001935050505092915050565b600033600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b83600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156121bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6163636f756e7420697320626c61636b6c69737465640000000000000000000081525060200191505060405180910390fd5b60001515600660149054906101000a900460ff16151514612245576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f74686520636f6e7472616374206973207061757365640000000000000000000081525060200191505060405180910390fd5b60008085905061227a60055461226c670de0b6b3a76400008961291390919063ffffffff16565b61299990919063ffffffff16565b9150612287338883612c16565b600194505050505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612358576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6163636f756e742063616e6e6f74206265207a65726f2061646472657373000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7ce7ec0b50378fb6c0186ffb5f48325f6593fcb4ca4386f21861af3129188f5c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60008061261f670de0b6b3a7640000612611600554600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461291390919063ffffffff16565b61299990919063ffffffff16565b90508091505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f7520617265206e6f74207468652061646d696e000000000000000000000081525060200191505060405180910390fd5b6126f6610bde565b811161274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f81526020018061380e603f913960400191505060405180910390fd5b61277c60045461276e670de0b6b3a76400008461291390919063ffffffff16565b61299990919063ffffffff16565b6005819055507fd1ac89bfc464ce49c894c4e2379f1ca2b062aff1a640e929764ac1157fa13f0f6005546040518082815260200191505060405180910390a150565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915054906101000a900460ff1681565b60008054906101000a900460ff1615612868576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136c66029913960400191505060405180910390fd5b612870613503565b33600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a764000060010260058190555080600481905550600454600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6000808314156129265760009050612993565b600082840290508284828161293757fe5b041461298e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136ef6021913960400191505060405180910390fd5b809150505b92915050565b60006129db83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061351f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806137ea6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612aef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061367e6022913960400191505060405180910390fd5b6000612b20600554612b12670de0b6b3a76400008561291390919063ffffffff16565b61299990919063ffffffff16565b905080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a350505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806137926025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806136306023913960400191505060405180910390fd5b6000612d53600554612d45670de0b6b3a76400008561291390919063ffffffff16565b61299990919063ffffffff16565b9050612dc1816040518060600160405280602b8152602001613653602b9139600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f049092919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e5681600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc490919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a350505050565b6000838311158290612fb1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f76578082015181840152602081019050612f5b565b50505050905090810190601f168015612fa35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015613042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b61310482600454612fc490919063ffffffff16565b60048190555061315c82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc490919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b8073ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561325057600080fd5b505afa158015613264573d6000803e3d6000fd5b505050506040513d602081101561327a57600080fd5b81019080805190602001909291905050507fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b14613322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420636f6d70617469626c6500000000000000000000000000000000000081525060200191505060405180910390fd5b807fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf75550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806137716021913960400191505060405180910390fd5b61343a826040518060600160405280602681526020016136a060269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f049092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613492826004546135e590919063ffffffff16565b600481905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60016000806101000a81548160ff021916908315150217905550565b600080831182906135cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613590578082015181840152602081019050613575565b50505050905090810190601f1680156135bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816135d757fe5b049050809150509392505050565b600061362783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f04565b90509291505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a207472616e7366657220696e7465726e616c416d7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a206275726e20696e7465726e61416d7420657863656564732062616c616e6365546865206c6962726172792068617320616c7265616479206265656e20696e697469616c697a65642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365746865206d756c7469706c6965722073686f756c642062652067726561746572207468616e2070726576696f7573206d756c7469706c69657245524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373546865206c696272617279206973206c6f636b65642e204e6f20646972656374202763616c6c2720697320616c6c6f7765642e45524332303a20617070726f76652066726f6d20746865207a65726f206164647265737374686520696e70757420746f74616c20737570706c79206973206e6f742067726561746572207468616e2070726573656e7420746f74616c20737570706c7945524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209f3b28ae85541d0b34c70859995d7df28d3e9b857b9d8118438a54e3d7a5bea064736f6c634300060c0033

Deployed Bytecode Sourcemap

10376:9281:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;551:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13027:429;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;299:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11570:126;;;:::i;:::-;;;;;;;;;;;;;;;;;;;645:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15133:652;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;677:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13873:350;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19363:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18872:75;;;:::i;:::-;;16444:338;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11066:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1522:160;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11225:337;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19203:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12061:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18792:72;;;:::i;:::-;;597:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17189:366;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14726:399;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12280:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18513:271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12724:295;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11704:349;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;719:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;463:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10698:315;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;551:39;;;;;;;;;;;;;;;;;;;:::o;13027:429::-;13231:4;13150:7;19589:9;:18;19599:7;19589:18;;;;;;;;;;;;;;;;;;;;;;;;;19588:19;19580:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13181:10:::1;19589:9;:18;19599:7;19589:18;;;;;;;;;;;;;;;;;;;;;;;;;19588:19;19580:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;19030:5:::2;19018:17;;:8;;;;;;;;;;;:17;;;19010:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;13253:19:::3;13283::::0;13305:6:::3;13283:28;;13336:37;13362:10;;13336:21;779:4;13336:11;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;13322:51;;13384:42;13393:10;13405:7;13414:11;13384:8;:42::i;:::-;13444:4;13437:11;;;;19645:1:::1;13027:429:::0;;;;;:::o;299:23::-;;;;;;;;;;;;:::o;11570:126::-;11623:7;11650:38;779:4;11650:28;11667:10;;11650:12;;:16;;:28;;;;:::i;:::-;:32;;:38;;;;:::i;:::-;11643:45;;11570:126;:::o;645:25::-;;;;:::o;15133:652::-;15426:4;15313:6;19589:9;:18;19599:7;19589:18;;;;;;;;;;;;;;;;;;;;;;;;;19588:19;19580:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15343:10:::1;19589:9;:18;19599:7;19589:18;;;;;;;;;;;;;;;;;;;;;;;;;19588:19;19580:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15377:9:::2;19589;:18;19599:7;19589:18;;;;;;;;;;;;;;;;;;;;;;;;;19588:19;19580:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;19030:5:::3;19018:17;;:8;;;;;;;;;;;:17;;;19010:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;15448:19:::4;15470:30;15480:6;15487:12;:10;:12::i;:::-;15470:9;:30::i;:::-;15448:52;;15511:36;15521:6;15529:9;15540:6;15511:9;:36::i;:::-;15558:197;15581:6;15602:12;:10;:12::i;:::-;15628:116;15662:6;15628:116;;;;;;;;;;;;;;;;;:11;:15;;:116;;;;;:::i;:::-;15558:8;:197::i;:::-;15773:4;15766:11;;;19645:1:::2;::::1;15133:652:::0;;;;;;:::o;677:35::-;710:2;677:35;:::o;13873:350::-;14050:4;13967:7;19589:9;:18;19599:7;19589:18;;;;;;;;;;;;;;;;;;;;;;;;;19588:19;19580:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13998:10:::1;19589:9;:18;19599:7;19589:18;;;;;;;;;;;;;;;;;;;;;;;;;19588:19;19580:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;19030:5:::2;19018:17;;:8;;;;;;;;;;;:17;;;19010:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;14068:19:::3;14090:31;14100:12;:10;:12::i;:::-;14113:7;14090:9;:31::i;:::-;14068:53;;14133:60;14142:12;:10;:12::i;:::-;14156:7;14165:27;14181:10;14165:11;:15;;:27;;;;:::i;:::-;14133:8;:60::i;:::-;14211:4;14204:11;;;19645:1:::1;13873:350:::0;;;;;:::o;19363:159::-;19144:5;;;;;;;;;;;19130:19;;:10;:19;;;19122:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19462:5:::1;19441:9;:18;19451:7;19441:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;19499:7;19483:31;;;19508:5;19483:31;;;;;;;;;;;;;;;;;;;;19363:159:::0;:::o;18872:75::-;19144:5;;;;;;;;;;;19130:19;;:10;:19;;;19122:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18934:5:::1;18923:8;;:16;;;;;;;;;;;;;;;;;;18872:75::o:0;16444:338::-;16582:4;19144:5;;;;;;;;;;;19130:19;;:10;:19;;;19122:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19030:5:::1;19018:17;;:8;;;;;;;;;;;:17;;;19010:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;16604:19:::2;16626:6;16604:28;;16643:19;16665:37;16691:10;;16665:21;779:4;16665:11;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;16643:59;;16713:39;16719:6;16727:11;16740;16713:5;:39::i;:::-;16770:4;16763:11;;;;16444:338:::0;;;;:::o;11066:151::-;19144:5;;;;;;;;;;;19130:19;;:10;:19;;;19122:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10192:4:::1;10177:19;;:11;::::0;::::1;;;;;;;;:19;;;10155:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11147:26:::2;11165:7;11147:17;:26::i;:::-;11201:7;11189:20;;;;;;;;;;;;11066:151:::0;:::o;1522:160::-;1568:7;1608:66;1588:86;;;;1522:160;:::o;11225:337::-;19144:5;;;;;;;;;;;19130:19;;:10;:19;;;19122:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19030:5:::1;19018:17;;:8;;;;;;;;;;;:17;;;19010:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;11380:10:::2;;11366:11;:24;11344:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11499:11;11486:10;:24;;;;11526:28;11543:10;;11526:28;;;;;;;;;;;;;;;;;;11225:337:::0;:::o;19203:152::-;19144:5;;;;;;;;;;;19130:19;;:10;:19;;;19122:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19297:4:::1;19276:9;:18;19286:7;19276:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;19333:7;19317:30;;;19342:4;19317:30;;;;;;;;;;;;;;;;;;;;19203:152:::0;:::o;12061:211::-;12127:7;12147:19;12191:44;779:4;12191:34;12214:10;;12191:9;:18;12201:7;12191:18;;;;;;;;;;;;;;;;:22;;:34;;;;:::i;:::-;:38;;:44;;;;:::i;:::-;12177:58;;12253:11;12246:18;;;12061:211;;;:::o;18792:72::-;19144:5;;;;;;;;;;;19130:19;;:10;:19;;;19122:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18852:4:::1;18841:8;;:15;;;;;;;;;;;;;;;;;;18792:72::o:0;597:41::-;;;;;;;;;;;;;;;;;;;:::o;17189:366::-;17329:4;19144:5;;;;;;;;;;;19130:19;;:10;:19;;;19122:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19030:5:::1;19018:17;;:8;;;;;;;;;;;:17;;;19010:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17351:19:::2;17381::::0;17403:6:::2;17381:28;;17434:37;17460:10;;17434:21;779:4;17434:11;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;17420:51;;17484:41;17490:8;17500:11;17513;17484:5;:41::i;:::-;17543:4;17536:11;;;;17189:366:::0;;;;:::o;14726:399::-;14907:4;14825:7;19589:9;:18;19599:7;19589:18;;;;;;;;;;;;;;;;;;;;;;;;;19588:19;19580:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14856:10:::1;19589:9;:18;19599:7;19589:18;;;;;;;;;;;;;;;;;;;;;;;;;19588:19;19580:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;19030:5:::2;19018:17;;:8;;;;;;;;;;;:17;;;19010:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;14924:19:::3;14946:31;14956:12;:10;:12::i;:::-;14969:7;14946:9;:31::i;:::-;14924:53;;14989:106;14998:12;:10;:12::i;:::-;15012:7;15021:73;15037:15;15021:73;;;;;;;;;;;;;;;;;:11;:15;;:73;;;;;:::i;:::-;14989:8;:106::i;:::-;15113:4;15106:11;;;19645:1:::1;14726:399:::0;;;;;:::o;12280:436::-;12489:4;12406:10;19589:9;:18;19599:7;19589:18;;;;;;;;;;;;;;;;;;;;;;;;;19588:19;19580:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12440:9:::1;19589;:18;19599:7;19589:18;;;;;;;;;;;;;;;;;;;;;;;;;19588:19;19580:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;19030:5:::2;19018:17;;:8;;;;;;;;;;;:17;;;19010:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;12511:19:::3;12541::::0;12563:6:::3;12541:28;;12594:34;12617:10;;12595:16;779:4;12595:6;:10;;:16;;;;:::i;:::-;12594:22;;:34;;;;:::i;:::-;12580:48;;12641:45;12651:10;12663:9;12674:11;12641:9;:45::i;:::-;12704:4;12697:11;;;;19645:1:::1;12280:436:::0;;;;;:::o;18513:271::-;19144:5;;;;;;;;;;;19130:19;;:10;:19;;;19122:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18614:1:::1;18595:21;;:7;:21;;;;18587:64;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18684:5;;;;;;;;;;;18670:19;;:10;:19;;;18662:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18734:7;18726:5;;:15;;;;;;;;;;;;;;;;;;18757:19;18770:5;;;;;;;;;;;18757:19;;;;;;;;;;;;;;;;;;;;18513:271:::0;:::o;12724:295::-;12858:7;12883:19;12927:55;779:4;12927:45;12961:10;;12928:11;:18;12940:5;12928:18;;;;;;;;;;;;;;;:27;12947:7;12928:27;;;;;;;;;;;;;;;;12927:33;;:45;;;;:::i;:::-;:49;;:55;;;;:::i;:::-;12913:69;;13000:11;12993:18;;;12724:295;;;;:::o;11704:349::-;19144:5;;;;;;;;;;;19130:19;;:10;:19;;;19122:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11827:13:::1;:11;:13::i;:::-;11808:16;:32;11786:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11955:46;11988:12;;11956:26;779:4;11956:16;:20;;:26;;;;:::i;:::-;11955:32;;:46;;;;:::i;:::-;11942:10;:59;;;;12017:28;12034:10;;12017:28;;;;;;;;;;;;;;;;;;11704:349:::0;:::o;719:20::-;;;;;;;;;;;;;:::o;463:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;10698:315::-;10767:11;;;;;;;;;;10766:12;10758:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10835:24;:22;:24::i;:::-;10878:10;10870:5;;:18;;;;;;;;;;;;;;;;;;779:4;10912:1;:8;10899:10;:21;;;;10946:12;10931;:27;;;;10993:12;;10969:9;:21;10979:10;10969:21;;;;;;;;;;;;;;;:36;;;;10698:315;:::o;6749:471::-;6807:7;7057:1;7052;:6;7048:47;;;7082:1;7075:8;;;;7048:47;7107:9;7123:1;7119;:5;7107:17;;7152:1;7147;7143;:5;;;;;;:10;7135:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7211:1;7204:8;;;6749:471;;;;;:::o;7688:132::-;7746:7;7773:39;7777:1;7780;7773:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7766:46;;7688:132;;;;:::o;18043:462::-;18201:1;18184:19;;:5;:19;;;;18176:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18282:1;18263:21;;:7;:21;;;;18255:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18334:19;18356:37;18382:10;;18356:21;779:4;18356:11;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;18334:59;;18434:11;18404;:18;18416:5;18404:18;;;;;;;;;;;;;;;:27;18423:7;18404:27;;;;;;;;;;;;;;;:41;;;;18477:7;18461:36;;18470:5;18461:36;;;18485:11;18461:36;;;;;;;;;;;;;;;;;;18043:462;;;;:::o;4792:98::-;4837:15;4872:10;4865:17;;4792:98;:::o;15793:643::-;15956:1;15938:20;;:6;:20;;;;15930:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16040:1;16019:23;;:9;:23;;;;16011:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16093:19;16115:37;16141:10;;16115:21;779:4;16115:11;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;16093:59;;16183:118;16219:11;16183:118;;;;;;;;;;;;;;;;;:9;:17;16193:6;16183:17;;;;;;;;;;;;;;;;:21;;:118;;;;;:::i;:::-;16163:9;:17;16173:6;16163:17;;;;;;;;;;;;;;;:138;;;;16335:37;16360:11;16335:9;:20;16345:9;16335:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;16312:9;:20;16322:9;16312:20;;;;;;;;;;;;;;;:60;;;;16405:9;16388:40;;16397:6;16388:40;;;16416:11;16388:40;;;;;;;;;;;;;;;;;;15793:643;;;;:::o;6272:226::-;6392:7;6425:1;6420;:6;;6428:12;6412:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6452:9;6468:1;6464;:5;6452:17;;6489:1;6482:8;;;6272:226;;;;;:::o;5385:181::-;5443:7;5463:9;5479:1;5475;:5;5463:17;;5504:1;5499;:6;;5491:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5557:1;5550:8;;;5385:181;;;;:::o;16790:391::-;16953:1;16934:21;;:7;:21;;;;16926:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17019:29;17036:11;17019:12;;:16;;:29;;;;:::i;:::-;17004:12;:44;;;;17080:35;17103:11;17080:9;:18;17090:7;17080:18;;;;;;;;;;;;;;;;:22;;:35;;;;:::i;:::-;17059:9;:18;17069:7;17059:18;;;;;;;;;;;;;;;:56;;;;17152:7;17131:42;;17148:1;17131:42;;;17161:11;17131:42;;;;;;;;;;;;;;;;;;16790:391;;;:::o;1011:503::-;1221:10;1211:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1126:66;1100:107;;:148;1078:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1471:10;1386:66;1361:135;1310:197;:::o;17563:472::-;17726:1;17707:21;;:7;:21;;;;17699:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17800:114;17837:11;17800:114;;;;;;;;;;;;;;;;;:9;:18;17810:7;17800:18;;;;;;;;;;;;;;;;:22;;:114;;;;;:::i;:::-;17779:9;:18;17789:7;17779:18;;;;;;;;;;;;;;;:135;;;;17940:29;17957:11;17940:12;;:16;;:29;;;;:::i;:::-;17925:12;:44;;;;18011:1;17985:42;;17994:7;17985:42;;;18015:11;17985:42;;;;;;;;;;;;;;;;;;17563:472;;;:::o;10301:68::-;10357:4;10343:11;;:18;;;;;;;;;;;;;;;;;;10301:68::o;8308:379::-;8428:7;8527:1;8523;:5;8530:12;8515:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8554:9;8570:1;8566;:5;;;;;;8554:17;;8678:1;8671:8;;;8308:379;;;;;:::o;5841:136::-;5899:7;5926:43;5930:1;5933;5926:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5919:50;;5841:136;;;;:::o

Swarm Source

ipfs://9f3b28ae85541d0b34c70859995d7df28d3e9b857b9d8118438a54e3d7a5bea0
Loading...
Loading
Loading...
Loading
[ 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.